Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: new perf scenario for complex records #9745

Merged
merged 1 commit into from
Mar 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/workflows/perf-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@ jobs:
"experiment": "http://localhost:4201/basic-record-materialization",
"markers": "start-data-generation,start-push-payload,start-peek-records,start-record-materialization,end-record-materialization"
},
"complex-record-materialization": {
"control": "http://localhost:4200/complex-record-materialization",
"experiment": "http://localhost:4201/complex-record-materialization",
"markers": "start-data-generation,start-push-payload,start-peek-records,start-record-materialization,end-record-materialization"
},
"complex-record-materialization-with-relationship-materialization": {
"control": "http://localhost:4200/complex-record-materialization-with-relationship-materialization",
"experiment": "http://localhost:4201/complex-record-materialization-with-relationship-materialization",
"markers": "start-data-generation,start-push-payload,start-peek-records,start-record-materialization,start-field-access,start-relationship-access,end-relationship-access"
},
"relationship-materialization-simple": {
"control": "http://localhost:4200/relationship-materialization-simple",
"experiment": "http://localhost:4201/relationship-materialization-simple",
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/perf-over-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,16 @@ jobs:
"experiment": "http://localhost:4201/basic-record-materialization",
"markers": "start-data-generation,start-push-payload,start-peek-records,start-record-materialization,end-record-materialization"
},
"complex-record-materialization": {
"control": "http://localhost:4200/complex-record-materialization",
"experiment": "http://localhost:4201/complex-record-materialization",
"markers": "start-data-generation,start-push-payload,start-peek-records,start-record-materialization,end-record-materialization"
},
"complex-record-materialization-with-relationship-materialization": {
"control": "http://localhost:4200/complex-record-materialization-with-relationship-materialization",
"experiment": "http://localhost:4201/complex-record-materialization-with-relationship-materialization",
"markers": "start-data-generation,start-push-payload,start-peek-records,start-record-materialization,start-field-access,start-relationship-access,end-relationship-access"
},
"relationship-materialization-simple": {
"control": "http://localhost:4200/relationship-materialization-simple",
"experiment": "http://localhost:4201/relationship-materialization-simple",
Expand Down
17 changes: 17 additions & 0 deletions tests/performance/app/mixins/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Relationships (mixins and model variants follow the same pattern):

A hasOne B (1:1)
A hasOne C (1:many)
A hasOne D (1:none)

B hasOne A (1:1)
B hasMany C (many:many)
B hasMany D (many:none)

C hasMany A (many:1)
C hasMany B (many:many)
C hasMany D (many:none)

D hasNone A
D hasNone B
D hasMany C (many:none)
35 changes: 35 additions & 0 deletions tests/performance/app/mixins/record-mixin-a.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// eslint-disable-next-line no-restricted-imports
import Mixin from '@ember/object/mixin';

import { attr, belongsTo } from '@ember-data/model';

export default Mixin.create({
prop_trait_a_1: attr(),
prop_trait_a_2: attr(),
prop_trait_a_3: attr(),
prop_trait_a_4: attr(),
prop_trait_a_5: attr(),
prop_trait_a_6: attr(),
prop_trait_a_7: attr(),
prop_trait_a_8: attr(),
prop_trait_a_9: attr(),
prop_trait_a_10: attr(),

belongsTo_trait_a_b: belongsTo('record-mixin-b', {
async: false,
inverse: 'belongsTo_trait_b_a',
polymorphic: true,
as: 'record-mixin-a',
}),
belongsTo_trait_a_c: belongsTo('record-mixin-c', {
async: false,
inverse: 'belongsTo_trait_c_a',
polymorphic: true,
as: 'record-mixin-a',
}),
belongsTo_trait_a_d: belongsTo('record-mixin-d', {
async: false,
inverse: null,
polymorphic: true,
}),
});
35 changes: 35 additions & 0 deletions tests/performance/app/mixins/record-mixin-b.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// eslint-disable-next-line no-restricted-imports
import Mixin from '@ember/object/mixin';

import { attr, belongsTo, hasMany } from '@ember-data/model';

export default Mixin.create({
prop_trait_b_1: attr(),
prop_trait_b_2: attr(),
prop_trait_b_3: attr(),
prop_trait_b_4: attr(),
prop_trait_b_5: attr(),
prop_trait_b_6: attr(),
prop_trait_b_7: attr(),
prop_trait_b_8: attr(),
prop_trait_b_9: attr(),
prop_trait_b_10: attr(),

belongsTo_trait_b_a: belongsTo('record-mixin-a', {
async: false,
inverse: 'belongsTo_trait_a_b',
polymorphic: true,
as: 'record-mixin-b',
}),
hasMany_trait_b_c: hasMany('record-mixin-c', {
async: false,
inverse: 'hasMany_trait_c_b',
polymorphic: true,
as: 'record-mixin-b',
}),
hasMany_trait_b_d: hasMany('record-mixin-d', {
async: false,
inverse: null,
polymorphic: true,
}),
});
35 changes: 35 additions & 0 deletions tests/performance/app/mixins/record-mixin-c.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// eslint-disable-next-line no-restricted-imports
import Mixin from '@ember/object/mixin';

import { attr, hasMany } from '@ember-data/model';

export default Mixin.create({
prop_trait_c_1: attr(),
prop_trait_c_2: attr(),
prop_trait_c_3: attr(),
prop_trait_c_4: attr(),
prop_trait_c_5: attr(),
prop_trait_c_6: attr(),
prop_trait_c_7: attr(),
prop_trait_c_8: attr(),
prop_trait_c_9: attr(),
prop_trait_c_10: attr(),

hasManyTo_trait_c_a: hasMany('record-mixin-a', {
async: false,
inverse: 'belongsTo_trait_a_c',
polymorphic: true,
as: 'record-mixin-c',
}),
hasMany_trait_c_b: hasMany('record-mixin-b', {
async: false,
inverse: 'hasMany_trait_b_c',
polymorphic: true,
as: 'record-mixin-c',
}),
hasMany_trait_c_d: hasMany('record-mixin-d', {
async: false,
inverse: null,
polymorphic: true,
}),
});
23 changes: 23 additions & 0 deletions tests/performance/app/mixins/record-mixin-d.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// eslint-disable-next-line no-restricted-imports
import Mixin from '@ember/object/mixin';

import { attr, hasMany } from '@ember-data/model';

export default Mixin.create({
prop_trait_d_1: attr(),
prop_trait_d_2: attr(),
prop_trait_d_3: attr(),
prop_trait_d_4: attr(),
prop_trait_d_5: attr(),
prop_trait_d_6: attr(),
prop_trait_d_7: attr(),
prop_trait_d_8: attr(),
prop_trait_d_9: attr(),
prop_trait_d_10: attr(),

hasMany_trait_d_c: hasMany('record-mixin-c', {
async: false,
inverse: null,
polymorphic: true,
}),
});
8 changes: 8 additions & 0 deletions tests/performance/app/mixins/record-mixin-e.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// eslint-disable-next-line no-restricted-imports
import Mixin from '@ember/object/mixin';

import { attr } from '@ember-data/model';

export default Mixin.create({
prop_trait_e_1: attr(),
});
8 changes: 8 additions & 0 deletions tests/performance/app/mixins/record-mixin-f.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// eslint-disable-next-line no-restricted-imports
import Mixin from '@ember/object/mixin';

import { attr } from '@ember-data/model';

export default Mixin.create({
prop_trait_f_1: attr(),
});
8 changes: 8 additions & 0 deletions tests/performance/app/mixins/record-mixin-g.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// eslint-disable-next-line no-restricted-imports
import Mixin from '@ember/object/mixin';

import { attr } from '@ember-data/model';

export default Mixin.create({
prop_trait_g_1: attr(),
});
8 changes: 8 additions & 0 deletions tests/performance/app/mixins/record-mixin-h.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// eslint-disable-next-line no-restricted-imports
import Mixin from '@ember/object/mixin';

import { attr } from '@ember-data/model';

export default Mixin.create({
prop_trait_h_1: attr(),
});
8 changes: 8 additions & 0 deletions tests/performance/app/mixins/record-mixin-i.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// eslint-disable-next-line no-restricted-imports
import Mixin from '@ember/object/mixin';

import { attr } from '@ember-data/model';

export default Mixin.create({
prop_trait_i_1: attr(),
});
8 changes: 8 additions & 0 deletions tests/performance/app/mixins/record-mixin-j.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// eslint-disable-next-line no-restricted-imports
import Mixin from '@ember/object/mixin';

import { attr } from '@ember-data/model';

export default Mixin.create({
prop_trait_j_1: attr(),
});
43 changes: 43 additions & 0 deletions tests/performance/app/models/complex-record-a.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import recordMixinA from 'app/mixins/record-mixin-a';
import recordMixinB from 'app/mixins/record-mixin-b';
import recordMixinC from 'app/mixins/record-mixin-c';
import recordMixinD from 'app/mixins/record-mixin-d';
import recordMixinE from 'app/mixins/record-mixin-e';
import recordMixinF from 'app/mixins/record-mixin-f';
import recordMixinG from 'app/mixins/record-mixin-g';
import recordMixinH from 'app/mixins/record-mixin-h';
import recordMixinI from 'app/mixins/record-mixin-i';
import recordMixinJ from 'app/mixins/record-mixin-j';

import Model, { attr, belongsTo } from '@ember-data/model';

export default class ComplexRecordA extends Model.extend(
recordMixinA,
recordMixinB,
recordMixinC,
recordMixinD,
recordMixinE,
recordMixinF,
recordMixinG,
recordMixinH,
recordMixinI,
recordMixinJ
) {
@attr prop_resource_a_1;
@attr prop_resource_a_2;
@attr prop_resource_a_3;
@attr prop_resource_a_4;
@attr prop_resource_a_5;
@attr prop_resource_a_6;
@attr prop_resource_a_7;
@attr prop_resource_a_8;
@attr prop_resource_a_9;
@attr prop_resource_a_10;

@belongsTo('complex-record-b', { async: false, inverse: 'belongsTo_resource_b_a' })
belongsTo_resource_a_b;
@belongsTo('complex-record-c', { async: false, inverse: 'hasMany_resource_c_a' })
belongsTo_resource_a_c;
@belongsTo('complex-record-d', { async: false, inverse: null })
belongsTo_resource_a_d;
}
43 changes: 43 additions & 0 deletions tests/performance/app/models/complex-record-b.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import recordMixinA from 'app/mixins/record-mixin-a';
import recordMixinB from 'app/mixins/record-mixin-b';
import recordMixinC from 'app/mixins/record-mixin-c';
import recordMixinD from 'app/mixins/record-mixin-d';
import recordMixinE from 'app/mixins/record-mixin-e';
import recordMixinF from 'app/mixins/record-mixin-f';
import recordMixinG from 'app/mixins/record-mixin-g';
import recordMixinH from 'app/mixins/record-mixin-h';
import recordMixinI from 'app/mixins/record-mixin-i';
import recordMixinJ from 'app/mixins/record-mixin-j';

import Model, { attr, belongsTo, hasMany } from '@ember-data/model';

export default class ComplexRecordB extends Model.extend(
recordMixinB,
recordMixinC,
recordMixinD,
recordMixinE,
recordMixinF,
recordMixinG,
recordMixinH,
recordMixinI,
recordMixinJ,
recordMixinA
) {
@attr prop_resource_b_1;
@attr prop_resource_b_2;
@attr prop_resource_b_3;
@attr prop_resource_b_4;
@attr prop_resource_b_5;
@attr prop_resource_b_6;
@attr prop_resource_b_7;
@attr prop_resource_b_8;
@attr prop_resource_b_9;
@attr prop_resource_b_10;

@belongsTo('complex-record-a', { async: false, inverse: 'belongsTo_resource_a_b' })
belongsTo_resource_b_a;
@hasMany('complex-record-c', { async: false, inverse: 'hasMany_resource_c_b' })
hasMany_resource_b_c;
@hasMany('complex-record-d', { async: false, inverse: null })
hasMany_resource_b_d;
}
43 changes: 43 additions & 0 deletions tests/performance/app/models/complex-record-c.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import recordMixinA from 'app/mixins/record-mixin-a';
import recordMixinB from 'app/mixins/record-mixin-b';
import recordMixinC from 'app/mixins/record-mixin-c';
import recordMixinD from 'app/mixins/record-mixin-d';
import recordMixinE from 'app/mixins/record-mixin-e';
import recordMixinF from 'app/mixins/record-mixin-f';
import recordMixinG from 'app/mixins/record-mixin-g';
import recordMixinH from 'app/mixins/record-mixin-h';
import recordMixinI from 'app/mixins/record-mixin-i';
import recordMixinJ from 'app/mixins/record-mixin-j';

import Model, { attr, hasMany } from '@ember-data/model';

export default class ComplexRecordC extends Model.extend(
recordMixinC,
recordMixinD,
recordMixinE,
recordMixinF,
recordMixinG,
recordMixinH,
recordMixinI,
recordMixinJ,
recordMixinA,
recordMixinB
) {
@attr prop_resource_c_1;
@attr prop_resource_c_2;
@attr prop_resource_c_3;
@attr prop_resource_c_4;
@attr prop_resource_c_5;
@attr prop_resource_c_6;
@attr prop_resource_c_7;
@attr prop_resource_c_8;
@attr prop_resource_c_9;
@attr prop_resource_c_10;

@hasMany('complex-record-a', { async: false, inverse: 'belongsTo_resource_a_c' })
hasMany_resource_c_a;
@hasMany('complex-record-b', { async: false, inverse: 'hasMany_resource_b_c' })
hasMany_resource_c_b;
@hasMany('complex-record-d', { async: false, inverse: null })
hasMany_resource_c_d;
}
Loading
Loading