From 1748aeb9c8278198f38af2cec7b3165712556af6 Mon Sep 17 00:00:00 2001 From: Pawel Kozlowski Date: Mon, 16 Sep 2019 16:46:10 +0200 Subject: [PATCH] perf(ivy): convert all node-based benchmark to use a testing harness (#32699) PR Close #32699 --- .../core/test/render3/perf/interpolation/index.ts | 12 ++++++++++-- .../map_based_style_and_class_bindings/index.ts | 12 ++++++++++-- .../render3/perf/noop_change_detection/index.ts | 14 +++++++++++--- .../test/render3/perf/property_binding/index.ts | 12 ++++++++++-- .../render3/perf/style_and_class_bindings/index.ts | 12 ++++++++++-- .../core/test/render3/perf/style_binding/index.ts | 12 ++++++++++-- 6 files changed, 61 insertions(+), 13 deletions(-) diff --git a/packages/core/test/render3/perf/interpolation/index.ts b/packages/core/test/render3/perf/interpolation/index.ts index c454b18052..dea2c4f17d 100644 --- a/packages/core/test/render3/perf/interpolation/index.ts +++ b/packages/core/test/render3/perf/interpolation/index.ts @@ -12,6 +12,7 @@ import {ɵɵtext} from '../../../../src/render3/instructions/text'; import {ɵɵtextInterpolate} from '../../../../src/render3/instructions/text_interpolation'; import {RenderFlags} from '../../../../src/render3/interfaces/definition'; import {TVIEW} from '../../../../src/render3/interfaces/view'; +import {createBenchmark} from '../micro_bench'; import {setupRootViewWithEmbeddedViews} from '../setup'; `
@@ -91,9 +92,16 @@ const rootLView = setupRootViewWithEmbeddedViews(TestInterpolationComponent_ng_template_0_Template, 21, 10, 1000); const rootTView = rootLView[TVIEW]; +// scenario to benchmark +const interpolationRefresh = createBenchmark('interpolation refresh'); +const refreshTime = interpolationRefresh('refresh'); + // run change detection in the update mode -console.profile('update'); -for (let i = 0; i < 5000; i++) { +console.profile('interpolation_refresh'); +while (refreshTime()) { refreshView(rootLView, rootTView, null, null); } console.profileEnd(); + +// report results +interpolationRefresh.report(); diff --git a/packages/core/test/render3/perf/map_based_style_and_class_bindings/index.ts b/packages/core/test/render3/perf/map_based_style_and_class_bindings/index.ts index a268540c2d..a6ad65dbe4 100644 --- a/packages/core/test/render3/perf/map_based_style_and_class_bindings/index.ts +++ b/packages/core/test/render3/perf/map_based_style_and_class_bindings/index.ts @@ -11,6 +11,7 @@ import {refreshView} from '../../../../src/render3/instructions/shared'; import {RenderFlags} from '../../../../src/render3/interfaces/definition'; import {TVIEW} from '../../../../src/render3/interfaces/view'; import {ɵɵclassMap, ɵɵstyleMap, ɵɵstyling, ɵɵstylingApply} from '../../../../src/render3/styling_next/instructions'; +import {createBenchmark} from '../micro_bench'; import {setupRootViewWithEmbeddedViews} from '../setup'; ` @@ -110,9 +111,16 @@ function testTemplate(rf: RenderFlags, ctx: any) { const rootLView = setupRootViewWithEmbeddedViews(testTemplate, 11, 10, 1000); const rootTView = rootLView[TVIEW]; +// scenario to benchmark +const styleAndClassBindingMapBenchmark = createBenchmark('style and class map binding'); +const refreshTime = styleAndClassBindingMapBenchmark('refresh'); + // run change detection in the update mode -console.profile('update'); -for (let i = 0; i < 5000; i++) { +console.profile('style_and_class_map_binding_refresh'); +while (refreshTime()) { refreshView(rootLView, rootTView, null, null); } console.profileEnd(); + +// report results +styleAndClassBindingMapBenchmark.report(); diff --git a/packages/core/test/render3/perf/noop_change_detection/index.ts b/packages/core/test/render3/perf/noop_change_detection/index.ts index df3264dc33..7f454d01c4 100644 --- a/packages/core/test/render3/perf/noop_change_detection/index.ts +++ b/packages/core/test/render3/perf/noop_change_detection/index.ts @@ -7,14 +7,22 @@ */ import {refreshView} from '../../../../src/render3/instructions/shared'; import {TVIEW} from '../../../../src/render3/interfaces/view'; +import {createBenchmark} from '../micro_bench'; import {setupRootViewWithEmbeddedViews} from '../setup'; const rootLView = setupRootViewWithEmbeddedViews(null, 0, 0, 1000); const rootTView = rootLView[TVIEW]; +// scenario to benchmark +const noopChangeDetection = createBenchmark('noop change detection'); +const refreshTime = noopChangeDetection('refresh'); + // run change detection in the update mode -console.profile('update'); -for (let i = 0; i < 20000; i++) { +console.profile('noop_refresh'); +while (refreshTime()) { refreshView(rootLView, rootTView, null, null); } -console.profileEnd(); \ No newline at end of file +console.profileEnd(); + +// report results +noopChangeDetection.report(); \ No newline at end of file diff --git a/packages/core/test/render3/perf/property_binding/index.ts b/packages/core/test/render3/perf/property_binding/index.ts index d6b70db7be..fe403ecedb 100644 --- a/packages/core/test/render3/perf/property_binding/index.ts +++ b/packages/core/test/render3/perf/property_binding/index.ts @@ -11,6 +11,7 @@ import {ɵɵproperty} from '../../../../src/render3/instructions/property'; import {refreshView} from '../../../../src/render3/instructions/shared'; import {RenderFlags} from '../../../../src/render3/interfaces/definition'; import {TVIEW} from '../../../../src/render3/interfaces/view'; +import {createBenchmark} from '../micro_bench'; import {setupRootViewWithEmbeddedViews} from '../setup'; `
@@ -70,9 +71,16 @@ const rootLView = setupRootViewWithEmbeddedViews(TestInterpolationComponent_ng_template_0_Template, 11, 10, 1000); const rootTView = rootLView[TVIEW]; +// scenario to benchmark +const propertyBindingRefresh = createBenchmark('property binding refresh'); +const refreshTime = propertyBindingRefresh('refresh'); + // run change detection in the update mode -console.profile('update'); -for (let i = 0; i < 5000; i++) { +console.profile('property_binding_refresh'); +while (refreshTime()) { refreshView(rootLView, rootTView, null, null); } console.profileEnd(); + +// report results +propertyBindingRefresh.report(); \ No newline at end of file diff --git a/packages/core/test/render3/perf/style_and_class_bindings/index.ts b/packages/core/test/render3/perf/style_and_class_bindings/index.ts index 73b89f4e8a..2f01d6498d 100644 --- a/packages/core/test/render3/perf/style_and_class_bindings/index.ts +++ b/packages/core/test/render3/perf/style_and_class_bindings/index.ts @@ -12,6 +12,7 @@ import {RenderFlags} from '../../../../src/render3/interfaces/definition'; import {AttributeMarker} from '../../../../src/render3/interfaces/node'; import {TVIEW} from '../../../../src/render3/interfaces/view'; import {ɵɵclassProp, ɵɵstyleProp, ɵɵstyling, ɵɵstylingApply} from '../../../../src/render3/styling_next/instructions'; +import {createBenchmark} from '../micro_bench'; import {setupRootViewWithEmbeddedViews} from '../setup'; ` @@ -121,9 +122,16 @@ function testTemplate(rf: RenderFlags, ctx: any) { const rootLView = setupRootViewWithEmbeddedViews(testTemplate, 11, 10, 1000); const rootTView = rootLView[TVIEW]; +// scenario to benchmark +const styleAndClassBindingBenchmark = createBenchmark('style and class binding'); +const refreshTime = styleAndClassBindingBenchmark('refresh'); + // run change detection in the update mode -console.profile('update'); -for (let i = 0; i < 5000; i++) { +console.profile('style_and_class_binding_refresh'); +while (refreshTime()) { refreshView(rootLView, rootTView, null, null); } console.profileEnd(); + +// report results +styleAndClassBindingBenchmark.report(); \ No newline at end of file diff --git a/packages/core/test/render3/perf/style_binding/index.ts b/packages/core/test/render3/perf/style_binding/index.ts index 795753ab7e..2105e3c7ed 100644 --- a/packages/core/test/render3/perf/style_binding/index.ts +++ b/packages/core/test/render3/perf/style_binding/index.ts @@ -11,6 +11,7 @@ import {refreshView} from '../../../../src/render3/instructions/shared'; import {RenderFlags} from '../../../../src/render3/interfaces/definition'; import {TVIEW} from '../../../../src/render3/interfaces/view'; import {ɵɵstyleProp, ɵɵstyling, ɵɵstylingApply} from '../../../../src/render3/styling_next/instructions'; +import {createBenchmark} from '../micro_bench'; import {setupRootViewWithEmbeddedViews} from '../setup'; ` @@ -100,9 +101,16 @@ function testTemplate(rf: RenderFlags, ctx: any) { const rootLView = setupRootViewWithEmbeddedViews(testTemplate, 11, 10, 1000); const rootTView = rootLView[TVIEW]; +// scenario to benchmark +const styleBindingBenchmark = createBenchmark('style binding'); +const refreshTime = styleBindingBenchmark('refresh'); + // run change detection in the update mode -console.profile('update'); -for (let i = 0; i < 5000; i++) { +console.profile('style_binding_refresh'); +while (refreshTime()) { refreshView(rootLView, rootTView, null, null); } console.profileEnd(); + +// report results +styleBindingBenchmark.report();