Skip to content

Commit

Permalink
perf(core): use multiple directives in host bindings micro benchmark (#…
Browse files Browse the repository at this point in the history
…35736)

This commit updates the host bindings micro benchmark to run tests with mutliple directives (where each directive contains host bindings). The number of directives is configurable as a constant in the micro benchmark file. This change is needed to have an ability to measure/compare perf in different scenarios.

PR Close #35736
  • Loading branch information
AndrewKushnir authored and atscott committed Feb 28, 2020
1 parent ef75875 commit 5bc39f8
Showing 1 changed file with 28 additions and 18 deletions.
46 changes: 28 additions & 18 deletions packages/core/test/render3/perf/host_binding/index.ts
Expand Up @@ -11,7 +11,12 @@ import {TAttributes} from '../../../../src/render3/interfaces/node';
import {createBenchmark} from '../micro_bench';
import {setupTestHarness} from '../setup';

`
// Number of Directives with Host Binding and Host Listener
// that should be generated for one element in a template.
const HOST_BINDING_DIRS_COUNT = 100;

function generateHostBindingDirDef() {
`
@Directive({
selector: '[hostBindingDir]'
})
Expand All @@ -25,24 +30,26 @@ import {setupTestHarness} from '../setup';
onClick(event: any): void {}
}
`;
class HostBindingDir {
static ɵfac() { return new HostBindingDir(); }
static ɵdir = ɵɵdefineDirective({
type: HostBindingDir,
selectors: [['', 'hostBindingDir', '']],
hostVars: 2,
hostBindings: function(rf: RenderFlags, ctx: any) {
if (rf & 1) {
ɵɵlistener('click', function() { return ctx.onClick(); });
}
if (rf & 2) {
ɵɵhostProperty('data-a', ctx.exp);
class HostBindingDir {
static ɵfac() { return new HostBindingDir(); }
static ɵdir = ɵɵdefineDirective({
type: HostBindingDir,
selectors: [['', 'hostBindingDir', '']],
hostVars: 2,
hostBindings: function(rf: RenderFlags, ctx: any) {
if (rf & 1) {
ɵɵlistener('click', function() { return ctx.onClick(); });
}
if (rf & 2) {
ɵɵhostProperty('data-a', ctx.exp);
}
}
}
});
});

exp = 'string-exp';
onClick() {}
exp = 'string-exp';
onClick() {}
}
return HostBindingDir.ɵdir;
}

`
Expand All @@ -56,7 +63,10 @@ function componentTemplateFn(rf: RenderFlags, ctx: any) {

const context: any = {};
const consts: TAttributes[] = [['hostBindingDir', '']];
const directives: DirectiveDefList = [HostBindingDir.ɵdir];
const directives: DirectiveDefList = [];
for (let i = 0; i < HOST_BINDING_DIRS_COUNT; i++) {
directives.push(generateHostBindingDirDef());
}
const harness = setupTestHarness(componentTemplateFn, 1, 0, 1000, context, consts, directives);

// Benchmark host bindings execution in *creation* mode
Expand Down

0 comments on commit 5bc39f8

Please sign in to comment.