Skip to content

Commit f5e474e

Browse files
runspiredgitKrystan
authored andcommitted
feat: new perf scenario for complex records (#9745)
1 parent 64c5e18 commit f5e474e

29 files changed

+1359
-12
lines changed

.github/workflows/perf-check.yml

+10
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,16 @@ jobs:
7272
"experiment": "http://localhost:4201/basic-record-materialization",
7373
"markers": "start-data-generation,start-push-payload,start-peek-records,start-record-materialization,end-record-materialization"
7474
},
75+
"complex-record-materialization": {
76+
"control": "http://localhost:4200/complex-record-materialization",
77+
"experiment": "http://localhost:4201/complex-record-materialization",
78+
"markers": "start-data-generation,start-push-payload,start-peek-records,start-record-materialization,end-record-materialization"
79+
},
80+
"complex-record-materialization-with-relationship-materialization": {
81+
"control": "http://localhost:4200/complex-record-materialization-with-relationship-materialization",
82+
"experiment": "http://localhost:4201/complex-record-materialization-with-relationship-materialization",
83+
"markers": "start-data-generation,start-push-payload,start-peek-records,start-record-materialization,start-field-access,start-relationship-access,end-relationship-access"
84+
},
7585
"relationship-materialization-simple": {
7686
"control": "http://localhost:4200/relationship-materialization-simple",
7787
"experiment": "http://localhost:4201/relationship-materialization-simple",

.github/workflows/perf-over-release.yml

+10
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,16 @@ jobs:
7171
"experiment": "http://localhost:4201/basic-record-materialization",
7272
"markers": "start-data-generation,start-push-payload,start-peek-records,start-record-materialization,end-record-materialization"
7373
},
74+
"complex-record-materialization": {
75+
"control": "http://localhost:4200/complex-record-materialization",
76+
"experiment": "http://localhost:4201/complex-record-materialization",
77+
"markers": "start-data-generation,start-push-payload,start-peek-records,start-record-materialization,end-record-materialization"
78+
},
79+
"complex-record-materialization-with-relationship-materialization": {
80+
"control": "http://localhost:4200/complex-record-materialization-with-relationship-materialization",
81+
"experiment": "http://localhost:4201/complex-record-materialization-with-relationship-materialization",
82+
"markers": "start-data-generation,start-push-payload,start-peek-records,start-record-materialization,start-field-access,start-relationship-access,end-relationship-access"
83+
},
7484
"relationship-materialization-simple": {
7585
"control": "http://localhost:4200/relationship-materialization-simple",
7686
"experiment": "http://localhost:4201/relationship-materialization-simple",
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
Relationships (mixins and model variants follow the same pattern):
2+
3+
A hasOne B (1:1)
4+
A hasOne C (1:many)
5+
A hasOne D (1:none)
6+
7+
B hasOne A (1:1)
8+
B hasMany C (many:many)
9+
B hasMany D (many:none)
10+
11+
C hasMany A (many:1)
12+
C hasMany B (many:many)
13+
C hasMany D (many:none)
14+
15+
D hasNone A
16+
D hasNone B
17+
D hasMany C (many:none)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// eslint-disable-next-line no-restricted-imports
2+
import Mixin from '@ember/object/mixin';
3+
4+
import { attr, belongsTo } from '@ember-data/model';
5+
6+
export default Mixin.create({
7+
prop_trait_a_1: attr(),
8+
prop_trait_a_2: attr(),
9+
prop_trait_a_3: attr(),
10+
prop_trait_a_4: attr(),
11+
prop_trait_a_5: attr(),
12+
prop_trait_a_6: attr(),
13+
prop_trait_a_7: attr(),
14+
prop_trait_a_8: attr(),
15+
prop_trait_a_9: attr(),
16+
prop_trait_a_10: attr(),
17+
18+
belongsTo_trait_a_b: belongsTo('record-mixin-b', {
19+
async: false,
20+
inverse: 'belongsTo_trait_b_a',
21+
polymorphic: true,
22+
as: 'record-mixin-a',
23+
}),
24+
belongsTo_trait_a_c: belongsTo('record-mixin-c', {
25+
async: false,
26+
inverse: 'belongsTo_trait_c_a',
27+
polymorphic: true,
28+
as: 'record-mixin-a',
29+
}),
30+
belongsTo_trait_a_d: belongsTo('record-mixin-d', {
31+
async: false,
32+
inverse: null,
33+
polymorphic: true,
34+
}),
35+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// eslint-disable-next-line no-restricted-imports
2+
import Mixin from '@ember/object/mixin';
3+
4+
import { attr, belongsTo, hasMany } from '@ember-data/model';
5+
6+
export default Mixin.create({
7+
prop_trait_b_1: attr(),
8+
prop_trait_b_2: attr(),
9+
prop_trait_b_3: attr(),
10+
prop_trait_b_4: attr(),
11+
prop_trait_b_5: attr(),
12+
prop_trait_b_6: attr(),
13+
prop_trait_b_7: attr(),
14+
prop_trait_b_8: attr(),
15+
prop_trait_b_9: attr(),
16+
prop_trait_b_10: attr(),
17+
18+
belongsTo_trait_b_a: belongsTo('record-mixin-a', {
19+
async: false,
20+
inverse: 'belongsTo_trait_a_b',
21+
polymorphic: true,
22+
as: 'record-mixin-b',
23+
}),
24+
hasMany_trait_b_c: hasMany('record-mixin-c', {
25+
async: false,
26+
inverse: 'hasMany_trait_c_b',
27+
polymorphic: true,
28+
as: 'record-mixin-b',
29+
}),
30+
hasMany_trait_b_d: hasMany('record-mixin-d', {
31+
async: false,
32+
inverse: null,
33+
polymorphic: true,
34+
}),
35+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// eslint-disable-next-line no-restricted-imports
2+
import Mixin from '@ember/object/mixin';
3+
4+
import { attr, hasMany } from '@ember-data/model';
5+
6+
export default Mixin.create({
7+
prop_trait_c_1: attr(),
8+
prop_trait_c_2: attr(),
9+
prop_trait_c_3: attr(),
10+
prop_trait_c_4: attr(),
11+
prop_trait_c_5: attr(),
12+
prop_trait_c_6: attr(),
13+
prop_trait_c_7: attr(),
14+
prop_trait_c_8: attr(),
15+
prop_trait_c_9: attr(),
16+
prop_trait_c_10: attr(),
17+
18+
hasManyTo_trait_c_a: hasMany('record-mixin-a', {
19+
async: false,
20+
inverse: 'belongsTo_trait_a_c',
21+
polymorphic: true,
22+
as: 'record-mixin-c',
23+
}),
24+
hasMany_trait_c_b: hasMany('record-mixin-b', {
25+
async: false,
26+
inverse: 'hasMany_trait_b_c',
27+
polymorphic: true,
28+
as: 'record-mixin-c',
29+
}),
30+
hasMany_trait_c_d: hasMany('record-mixin-d', {
31+
async: false,
32+
inverse: null,
33+
polymorphic: true,
34+
}),
35+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// eslint-disable-next-line no-restricted-imports
2+
import Mixin from '@ember/object/mixin';
3+
4+
import { attr, hasMany } from '@ember-data/model';
5+
6+
export default Mixin.create({
7+
prop_trait_d_1: attr(),
8+
prop_trait_d_2: attr(),
9+
prop_trait_d_3: attr(),
10+
prop_trait_d_4: attr(),
11+
prop_trait_d_5: attr(),
12+
prop_trait_d_6: attr(),
13+
prop_trait_d_7: attr(),
14+
prop_trait_d_8: attr(),
15+
prop_trait_d_9: attr(),
16+
prop_trait_d_10: attr(),
17+
18+
hasMany_trait_d_c: hasMany('record-mixin-c', {
19+
async: false,
20+
inverse: null,
21+
polymorphic: true,
22+
}),
23+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// eslint-disable-next-line no-restricted-imports
2+
import Mixin from '@ember/object/mixin';
3+
4+
import { attr } from '@ember-data/model';
5+
6+
export default Mixin.create({
7+
prop_trait_e_1: attr(),
8+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// eslint-disable-next-line no-restricted-imports
2+
import Mixin from '@ember/object/mixin';
3+
4+
import { attr } from '@ember-data/model';
5+
6+
export default Mixin.create({
7+
prop_trait_f_1: attr(),
8+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// eslint-disable-next-line no-restricted-imports
2+
import Mixin from '@ember/object/mixin';
3+
4+
import { attr } from '@ember-data/model';
5+
6+
export default Mixin.create({
7+
prop_trait_g_1: attr(),
8+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// eslint-disable-next-line no-restricted-imports
2+
import Mixin from '@ember/object/mixin';
3+
4+
import { attr } from '@ember-data/model';
5+
6+
export default Mixin.create({
7+
prop_trait_h_1: attr(),
8+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// eslint-disable-next-line no-restricted-imports
2+
import Mixin from '@ember/object/mixin';
3+
4+
import { attr } from '@ember-data/model';
5+
6+
export default Mixin.create({
7+
prop_trait_i_1: attr(),
8+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// eslint-disable-next-line no-restricted-imports
2+
import Mixin from '@ember/object/mixin';
3+
4+
import { attr } from '@ember-data/model';
5+
6+
export default Mixin.create({
7+
prop_trait_j_1: attr(),
8+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import recordMixinA from 'app/mixins/record-mixin-a';
2+
import recordMixinB from 'app/mixins/record-mixin-b';
3+
import recordMixinC from 'app/mixins/record-mixin-c';
4+
import recordMixinD from 'app/mixins/record-mixin-d';
5+
import recordMixinE from 'app/mixins/record-mixin-e';
6+
import recordMixinF from 'app/mixins/record-mixin-f';
7+
import recordMixinG from 'app/mixins/record-mixin-g';
8+
import recordMixinH from 'app/mixins/record-mixin-h';
9+
import recordMixinI from 'app/mixins/record-mixin-i';
10+
import recordMixinJ from 'app/mixins/record-mixin-j';
11+
12+
import Model, { attr, belongsTo } from '@ember-data/model';
13+
14+
export default class ComplexRecordA extends Model.extend(
15+
recordMixinA,
16+
recordMixinB,
17+
recordMixinC,
18+
recordMixinD,
19+
recordMixinE,
20+
recordMixinF,
21+
recordMixinG,
22+
recordMixinH,
23+
recordMixinI,
24+
recordMixinJ
25+
) {
26+
@attr prop_resource_a_1;
27+
@attr prop_resource_a_2;
28+
@attr prop_resource_a_3;
29+
@attr prop_resource_a_4;
30+
@attr prop_resource_a_5;
31+
@attr prop_resource_a_6;
32+
@attr prop_resource_a_7;
33+
@attr prop_resource_a_8;
34+
@attr prop_resource_a_9;
35+
@attr prop_resource_a_10;
36+
37+
@belongsTo('complex-record-b', { async: false, inverse: 'belongsTo_resource_b_a' })
38+
belongsTo_resource_a_b;
39+
@belongsTo('complex-record-c', { async: false, inverse: 'hasMany_resource_c_a' })
40+
belongsTo_resource_a_c;
41+
@belongsTo('complex-record-d', { async: false, inverse: null })
42+
belongsTo_resource_a_d;
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import recordMixinA from 'app/mixins/record-mixin-a';
2+
import recordMixinB from 'app/mixins/record-mixin-b';
3+
import recordMixinC from 'app/mixins/record-mixin-c';
4+
import recordMixinD from 'app/mixins/record-mixin-d';
5+
import recordMixinE from 'app/mixins/record-mixin-e';
6+
import recordMixinF from 'app/mixins/record-mixin-f';
7+
import recordMixinG from 'app/mixins/record-mixin-g';
8+
import recordMixinH from 'app/mixins/record-mixin-h';
9+
import recordMixinI from 'app/mixins/record-mixin-i';
10+
import recordMixinJ from 'app/mixins/record-mixin-j';
11+
12+
import Model, { attr, belongsTo, hasMany } from '@ember-data/model';
13+
14+
export default class ComplexRecordB extends Model.extend(
15+
recordMixinB,
16+
recordMixinC,
17+
recordMixinD,
18+
recordMixinE,
19+
recordMixinF,
20+
recordMixinG,
21+
recordMixinH,
22+
recordMixinI,
23+
recordMixinJ,
24+
recordMixinA
25+
) {
26+
@attr prop_resource_b_1;
27+
@attr prop_resource_b_2;
28+
@attr prop_resource_b_3;
29+
@attr prop_resource_b_4;
30+
@attr prop_resource_b_5;
31+
@attr prop_resource_b_6;
32+
@attr prop_resource_b_7;
33+
@attr prop_resource_b_8;
34+
@attr prop_resource_b_9;
35+
@attr prop_resource_b_10;
36+
37+
@belongsTo('complex-record-a', { async: false, inverse: 'belongsTo_resource_a_b' })
38+
belongsTo_resource_b_a;
39+
@hasMany('complex-record-c', { async: false, inverse: 'hasMany_resource_c_b' })
40+
hasMany_resource_b_c;
41+
@hasMany('complex-record-d', { async: false, inverse: null })
42+
hasMany_resource_b_d;
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import recordMixinA from 'app/mixins/record-mixin-a';
2+
import recordMixinB from 'app/mixins/record-mixin-b';
3+
import recordMixinC from 'app/mixins/record-mixin-c';
4+
import recordMixinD from 'app/mixins/record-mixin-d';
5+
import recordMixinE from 'app/mixins/record-mixin-e';
6+
import recordMixinF from 'app/mixins/record-mixin-f';
7+
import recordMixinG from 'app/mixins/record-mixin-g';
8+
import recordMixinH from 'app/mixins/record-mixin-h';
9+
import recordMixinI from 'app/mixins/record-mixin-i';
10+
import recordMixinJ from 'app/mixins/record-mixin-j';
11+
12+
import Model, { attr, hasMany } from '@ember-data/model';
13+
14+
export default class ComplexRecordC extends Model.extend(
15+
recordMixinC,
16+
recordMixinD,
17+
recordMixinE,
18+
recordMixinF,
19+
recordMixinG,
20+
recordMixinH,
21+
recordMixinI,
22+
recordMixinJ,
23+
recordMixinA,
24+
recordMixinB
25+
) {
26+
@attr prop_resource_c_1;
27+
@attr prop_resource_c_2;
28+
@attr prop_resource_c_3;
29+
@attr prop_resource_c_4;
30+
@attr prop_resource_c_5;
31+
@attr prop_resource_c_6;
32+
@attr prop_resource_c_7;
33+
@attr prop_resource_c_8;
34+
@attr prop_resource_c_9;
35+
@attr prop_resource_c_10;
36+
37+
@hasMany('complex-record-a', { async: false, inverse: 'belongsTo_resource_a_c' })
38+
hasMany_resource_c_a;
39+
@hasMany('complex-record-b', { async: false, inverse: 'hasMany_resource_b_c' })
40+
hasMany_resource_c_b;
41+
@hasMany('complex-record-d', { async: false, inverse: null })
42+
hasMany_resource_c_d;
43+
}

0 commit comments

Comments
 (0)