diff --git a/packages/core/test/render3/perf/BUILD.bazel b/packages/core/test/render3/perf/BUILD.bazel index dbf6a9d52b..1dd489364b 100644 --- a/packages/core/test/render3/perf/BUILD.bazel +++ b/packages/core/test/render3/perf/BUILD.bazel @@ -12,6 +12,14 @@ ts_library( ], ) +ng_rollup_bundle( + name = "element_text_create", + entry_point = ":element_text_create/index.ts", + deps = [ + ":perf_lib", + ], +) + ng_rollup_bundle( name = "interpolation", entry_point = ":interpolation/index.ts", diff --git a/packages/core/test/render3/perf/element_text_create/index.ts b/packages/core/test/render3/perf/element_text_create/index.ts new file mode 100644 index 0000000000..ce0fc11136 --- /dev/null +++ b/packages/core/test/render3/perf/element_text_create/index.ts @@ -0,0 +1,76 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import {ɵɵelementEnd, ɵɵelementStart} from '../../../../src/render3/instructions/element'; +import {createTNode, createTView} from '../../../../src/render3/instructions/shared'; +import {ɵɵtext} from '../../../../src/render3/instructions/text'; +import {RenderFlags} from '../../../../src/render3/interfaces/definition'; +import {TNodeType, TViewNode} from '../../../../src/render3/interfaces/node'; +import {createAndRenderLView} from '../setup'; + +`
+ + + + + + + + + + +
+`; +function testTemplate(rf: RenderFlags, ctx: any) { + if (rf & 1) { + ɵɵelementStart(0, 'div'); + ɵɵelementStart(1, 'button'); + ɵɵtext(2, '0'); + ɵɵelementEnd(); + ɵɵelementStart(3, 'button'); + ɵɵtext(4, '1'); + ɵɵelementEnd(); + ɵɵelementStart(5, 'button'); + ɵɵtext(6, '2'); + ɵɵelementEnd(); + ɵɵelementStart(7, 'button'); + ɵɵtext(8, '3'); + ɵɵelementEnd(); + ɵɵelementStart(9, 'button'); + ɵɵtext(10, '4'); + ɵɵelementEnd(); + ɵɵelementStart(11, 'button'); + ɵɵtext(12, '5'); + ɵɵelementEnd(); + ɵɵelementStart(13, 'button'); + ɵɵtext(14, '6'); + ɵɵelementEnd(); + ɵɵelementStart(15, 'button'); + ɵɵtext(16, '7'); + ɵɵelementEnd(); + ɵɵelementStart(17, 'button'); + ɵɵtext(18, '8'); + ɵɵelementEnd(); + ɵɵelementStart(19, 'button'); + ɵɵtext(20, '9'); + ɵɵelementEnd(); + ɵɵelementEnd(); + } +} + +const viewTNode = createTNode(null !, null, TNodeType.View, -1, null, null) as TViewNode; +const embeddedTView = createTView(-1, testTemplate, 21, 0, null, null, null, null); + +// create view once so we don't profile first template pass +createAndRenderLView(null, embeddedTView, viewTNode); + +// profile create views (run templates in creation mode) +console.profile('create'); +for (let i = 0; i < 500000; i++) { + createAndRenderLView(null, embeddedTView, viewTNode); +} +console.profileEnd(); \ No newline at end of file diff --git a/packages/core/test/render3/perf/setup.ts b/packages/core/test/render3/perf/setup.ts index 116922db39..341502c23f 100644 --- a/packages/core/test/render3/perf/setup.ts +++ b/packages/core/test/render3/perf/setup.ts @@ -9,11 +9,19 @@ import {addToViewTree, createLContainer, createLView, createTNode, createTView, import {ComponentTemplate} from '../../../src/render3/interfaces/definition'; import {TNodeType, TViewNode} from '../../../src/render3/interfaces/node'; import {RComment} from '../../../src/render3/interfaces/renderer'; -import {LView, LViewFlags} from '../../../src/render3/interfaces/view'; +import {LView, LViewFlags, TView} from '../../../src/render3/interfaces/view'; import {insertView} from '../../../src/render3/node_manipulation'; import {NoopRenderer, NoopRendererFactory, WebWorkerRenderNode} from './noop_renderer'; +export function createAndRenderLView( + parentLView: LView | null, tView: TView, hostTNode: TViewNode) { + const embeddedLView = createLView( + parentLView, tView, {}, LViewFlags.CheckAlways, null, hostTNode, new NoopRendererFactory(), + new NoopRenderer()); + renderView(embeddedLView, tView, null); +} + export function setupRootViewWithEmbeddedViews( templateFn: ComponentTemplate| null, consts: number, vars: number, noOfViews: number): LView {