Skip to content

Commit 1006eab

Browse files
karaalxhub
authored andcommitted
fix(ivy): update largetable benchmark to use ngFor (angular#26604)
PR Close angular#26604
1 parent a9f2952 commit 1006eab

File tree

8 files changed

+52
-92
lines changed

8 files changed

+52
-92
lines changed

modules/benchmarks/e2e_test/largetable_perf.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,6 @@ describe('largetable benchmark perf', () => {
5656
}).then(done, done.fail);
5757
});
5858

59-
it('should run for render3', done => {
60-
runTableBenchmark({
61-
id: `largeTable.render3.${worker.id}`,
62-
url: 'all/benchmarks/src/largetable/render3/index.html',
63-
ignoreBrowserSynchronization: true,
64-
worker: worker
65-
}).then(done, done.fail);
66-
});
67-
6859
it('should run for iv', done => {
6960
runTableBenchmark({
7061
id: `largeTable.iv.${worker.id}`,

modules/benchmarks/e2e_test/largetable_spec.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,6 @@ describe('largetable benchmark spec', () => {
2525
});
2626
});
2727

28-
it('should work for render3', () => {
29-
testTableBenchmark({
30-
url: 'all/benchmarks/src/largetable/render3/index.html',
31-
ignoreBrowserSynchronization: true,
32-
});
33-
});
34-
3528
it('should work for iv', () => {
3629
testTableBenchmark({
3730
url: 'all/benchmarks/src/largetable/iv/index.html',

modules/benchmarks/src/largetable/largetable_perf.spec.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import {$} from 'protractor';
1010

11+
import {openBrowser} from '../../../e2e_util/e2e_util';
1112
import {runBenchmark, verifyNoBrowserErrors} from '../../../e2e_util/perf_util';
1213

1314
interface Worker {
@@ -39,9 +40,23 @@ describe('largetable benchmark perf', () => {
3940

4041
afterEach(verifyNoBrowserErrors);
4142

43+
it('should render the table for render3', () => {
44+
openBrowser({
45+
url: '',
46+
ignoreBrowserSynchronization: true,
47+
params: [{name: 'cols', value: 5}, {name: 'rows', value: 5}],
48+
});
49+
$('#createDom').click();
50+
expect($('#root').getText()).toContain('0/0');
51+
$('#createDom').click();
52+
expect($('#root').getText()).toContain('A/A');
53+
$('#destroyDom').click();
54+
expect($('#root').getText() as any).toEqual('');
55+
});
56+
4257
[CreateOnlyWorker, CreateAndDestroyWorker, UpdateWorker].forEach((worker) => {
4358
describe(worker.id, () => {
44-
it('should run for render3', done => {
59+
it('should run benchmark for render3', done => {
4560
runTableBenchmark({
4661
id: `largeTable.render3.${worker.id}`,
4762
url: 'index.html',

modules/benchmarks/src/largetable/render3/BUILD.bazel

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,31 @@
11
package(default_visibility = ["//visibility:public"])
22

3-
load("//tools:defaults.bzl", "ng_rollup_bundle", "ts_library")
3+
load("//tools:defaults.bzl", "ng_module", "ng_rollup_bundle")
44
load("//packages/bazel:index.bzl", "protractor_web_test")
55
load("@build_bazel_rules_typescript//:defs.bzl", "ts_devserver")
66

7-
ts_library(
7+
ng_module(
88
name = "largetable_lib",
99
srcs = glob(
1010
[
1111
"**/*.ts",
1212
],
1313
exclude = ["protractor.on-prepare.ts"],
1414
),
15+
tags = ["ivy-only"],
1516
deps = [
1617
"//modules/benchmarks/src:util_lib",
1718
"//modules/benchmarks/src/largetable:util_lib",
1819
"//packages:types",
20+
"//packages/common",
1921
"//packages/core",
20-
"@rxjs",
2122
],
2223
)
2324

2425
ng_rollup_bundle(
2526
name = "bundle",
2627
entry_point = "modules/benchmarks/src/largetable/render3/index.js",
28+
tags = ["ivy-only"],
2729
deps = [
2830
":largetable_lib",
2931
],
@@ -44,6 +46,7 @@ ts_devserver(
4446
"index.html",
4547
":favicon",
4648
],
49+
tags = ["ivy-only"],
4750
)
4851

4952
protractor_web_test(
@@ -59,7 +62,7 @@ protractor_web_test(
5962
],
6063
on_prepare = ":protractor.on-prepare.js",
6164
server = ":devserver",
62-
tags = ["manual"],
65+
tags = ["ivy-only"],
6366
deps = [
6467
"//modules/benchmarks/src/largetable:perf_lib",
6568
],

modules/benchmarks/src/largetable/render3/index.html

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,9 @@ <h2>Render3 Largetable Benchmark</h2>
2828
<script>
2929
// TODO(mlaval): remove once we have a proper solution
3030
ngDevMode = false;
31-
var isBazel = location.pathname.indexOf('/all/') !== 0;
32-
// isBazel needed while 'scripts/ci/test-e2e.sh test.e2e.protractor-e2e' is run
33-
// on Travis
34-
// TODO: port remaining protractor e2e tests to bazel protractor_web_test_suite rule
3531
var bazelBundle = document.location.search.endsWith('debug') ? 'bundle.min_debug.js' : 'bundle.min.js';
36-
var mainUrl = window.location.search.split(/[?&]main=([^&]+)/)[1]
37-
|| '../../bootstrap_ng2.js';
38-
document.write('<script src="' + (isBazel ? bazelBundle : mainUrl) + '">\u003c/script>');
32+
document.write('<script src="' + bazelBundle + '">\u003c/script>');
3933
</script>
4034
</body>
4135

42-
</html>
36+
</html>

modules/benchmarks/src/largetable/render3/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* Use of this source code is governed by an MIT-style license that can be
66
* found in the LICENSE file at https://angular.io/license
77
*/
8-
8+
import 'reflect-metadata';
99
import {ɵrenderComponent as renderComponent} from '@angular/core';
1010

1111
import {bindAction, profile} from '../../util';

modules/benchmarks/src/largetable/render3/table.ts

Lines changed: 25 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -6,76 +6,39 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {ɵRenderFlags, ɵbind, ɵcontainer, ɵcontainerRefreshEnd, ɵcontainerRefreshStart, ɵdefineComponent, ɵdetectChanges, ɵelementEnd, ɵelementStart, ɵelementStyleProp, ɵelementStyling, ɵembeddedViewEnd, ɵembeddedViewStart, ɵtext, ɵtextBinding as ɵtextBinding} from '@angular/core';
10-
import {ComponentDef} from '@angular/core/src/render3/interfaces/definition';
9+
import {CommonModule} from '@angular/common';
10+
import {Component, Input, NgModule, ɵdetectChanges} from '@angular/core';
1111

1212
import {TableCell, buildTable, emptyTable} from '../util';
1313

14-
const c0 = ['background-color'];
14+
@Component({
15+
selector: 'largetable',
16+
template: `
17+
<table>
18+
<tbody>
19+
<tr *ngFor="let row of data; trackBy: trackByIndex">
20+
<td *ngFor="let cell of row; trackBy: trackByIndex" [style.background-color]="getColor(cell.row)">
21+
{{cell.value}}
22+
</td>
23+
</tr>
24+
</tbody>
25+
</table>
26+
`,
27+
})
1528
export class LargeTableComponent {
29+
@Input()
1630
data: TableCell[][] = emptyTable;
1731

18-
/** @nocollapse */
19-
static ngComponentDef: ComponentDef<LargeTableComponent> = ɵdefineComponent({
20-
type: LargeTableComponent,
21-
selectors: [['largetable']],
22-
consts: 3,
23-
vars: 0,
24-
template: function(rf: ɵRenderFlags, ctx: LargeTableComponent) {
25-
if (rf & ɵRenderFlags.Create) {
26-
ɵelementStart(0, 'table');
27-
{
28-
ɵelementStart(1, 'tbody');
29-
{ ɵcontainer(2); }
30-
ɵelementEnd();
31-
}
32-
ɵelementEnd();
33-
}
34-
if (rf & ɵRenderFlags.Update) {
35-
ɵcontainerRefreshStart(2);
36-
{
37-
for (let row of ctx.data) {
38-
let rf1 = ɵembeddedViewStart(1, 2, 0);
39-
{
40-
if (rf1 & ɵRenderFlags.Create) {
41-
ɵelementStart(0, 'tr');
42-
ɵcontainer(1);
43-
ɵelementEnd();
44-
}
45-
if (rf1 & ɵRenderFlags.Update) {
46-
ɵcontainerRefreshStart(1);
47-
{
48-
for (let cell of row) {
49-
let rf2 = ɵembeddedViewStart(2, 2, 1);
50-
{
51-
if (rf2 & ɵRenderFlags.Create) {
52-
ɵelementStart(0, 'td');
53-
ɵelementStyling(null, c0);
54-
{ ɵtext(1); }
55-
ɵelementEnd();
56-
}
57-
if (rf2 & ɵRenderFlags.Update) {
58-
ɵelementStyleProp(0, 0, null, cell.row % 2 ? '' : 'grey');
59-
ɵtextBinding(1, ɵbind(cell.value));
60-
}
61-
}
62-
ɵembeddedViewEnd();
63-
}
64-
}
65-
ɵcontainerRefreshEnd();
66-
}
67-
}
68-
ɵembeddedViewEnd();
69-
}
70-
}
71-
ɵcontainerRefreshEnd();
72-
}
73-
},
74-
factory: () => new LargeTableComponent(),
75-
inputs: {data: 'data'}
76-
});
32+
trackByIndex(index: number, item: any) { return index; }
33+
34+
getColor(row: number) { return row % 2 ? '' : 'grey'; }
35+
}
36+
37+
@NgModule({declarations: [LargeTableComponent], imports: [CommonModule]})
38+
class TableModule {
7739
}
7840

41+
7942
export function destroyDom(component: LargeTableComponent) {
8043
component.data = emptyTable;
8144
ɵdetectChanges(component);

modules/e2e_util/perf_util.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export function runBenchmark(config: {
4040
if (config.setup) {
4141
config.setup();
4242
}
43+
if (!cmdArgs) readCommandLine();
4344
const description: {[key: string]: any} = {'bundles': cmdArgs.bundles};
4445
config.params.forEach((param) => { description[param.name] = param.value; });
4546
return runner.sample({

0 commit comments

Comments
 (0)