Skip to content
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
15 changes: 10 additions & 5 deletions src/lib/api/treeherder.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,7 @@ describe('selectCanonicalSignatures', () => {
expect(selectCanonicalSignatures([older, newer])).toEqual([newer]);
});

// On Android the base job is the one *without* 'fission', which the
// fewest-options rule yields for free. That property is the reason the rule
// is expressed this way rather than as a blocklist, so it is worth pinning.
it('yields the non-fission Android job without naming fission', () => {
it('prefers the Fission Android job over the non-Fission one', () => {
const nonFission = signature({
id: 1,
application: 'fenix',
Expand All @@ -74,7 +71,15 @@ describe('selectCanonicalSignatures', () => {
extra_options: ['fission']
});

expect(selectCanonicalSignatures([fission, nonFission])).toEqual([nonFission]);
expect(selectCanonicalSignatures([fission, nonFission])).toEqual([fission]);
expect(selectCanonicalSignatures([nonFission, fission])).toEqual([fission]);
});

it('prefers the fewest extra_options among Fission jobs', () => {
const base = signature({ id: 1, extra_options: ['fission', 'webrender'] });
const profiled = signature({ id: 2, extra_options: ['fission', 'simpleperf', 'webrender'] });

expect(selectCanonicalSignatures([profiled, base])).toEqual([base]);
});

it('returns nothing for no input', () => {
Expand Down
11 changes: 11 additions & 0 deletions src/lib/api/treeherder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,22 @@ export interface Measurement {
extraOptions: string[];
}

/**
* One signature per application/platform/suite/test: the Fission run if there
* is one, then the fewest extra_options (so not a profiled or other variant).
* Desktop always runs with Fission; Android also has a non-Fission job, which
* is not the one to chart.
*/
export function selectCanonicalSignatures(signatures: PerfSignature[]): PerfSignature[] {
const canonicalKey = (sig: PerfSignature) =>
[sig.application, sig.machine_platform, sig.suite, sig.test].join('|');

const hasFission = (sig: PerfSignature) => (sig.extra_options ?? []).includes('fission');

const isMoreCanonical = (candidate: PerfSignature, current: PerfSignature) => {
if (hasFission(candidate) !== hasFission(current)) {
return hasFission(candidate);
}
const candidateOptions = (candidate.extra_options ?? []).length;
const currentOptions = (current.extra_options ?? []).length;
if (candidateOptions !== currentOptions) {
Expand Down
8 changes: 4 additions & 4 deletions src/lib/browsers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ describe('classify', () => {
).toBeUndefined();
});

it('excludes fission variants from fenix', () => {
expect(
classify(measurement({ application: 'fenix', extraOptions: ['fission'] }))
).toBeUndefined();
it('keeps fenix with a fission option', () => {
expect(classify(measurement({ application: 'fenix', extraOptions: ['fission'] }))?.key).toBe(
'firefox'
);
});

it('keeps desktop Firefox with a fission option', () => {
Expand Down
4 changes: 1 addition & 3 deletions src/lib/browsers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,7 @@ const isFirefoxFamily = (m: Measurement) =>
m.application === 'firefox' || m.application === 'fenix';

/** Instrumented or otherwise non-comparable variants of the base Firefox job. */
const isVariant = (m: Measurement) =>
m.extraOptions.includes('nova') ||
(m.application === 'fenix' && m.extraOptions.includes('fission'));
const isVariant = (m: Measurement) => m.extraOptions.includes('nova');

/**
* Safari and Safari TP. On Mac they run on a different machine pool from
Expand Down
15 changes: 12 additions & 3 deletions src/lib/speedometer/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,21 +84,30 @@ export const PLATFORMS: readonly PlatformConfig[] = [
{
key: 'android-s24',
label: 'Android (S24)',
platforms: ['android-hw-s24-14-0-aarch64-shippable'],
platforms: [
'android-hw-s24-14-0-aarch64-nightlyasrelease',
'android-hw-s24-14-0-aarch64-shippable'
],
supportsSafari: false,
group: 'mobile'
},
{
key: 'android-a55',
label: 'Android (A55)',
platforms: ['android-hw-a55-14-0-aarch64-shippable'],
platforms: [
'android-hw-a55-14-0-aarch64-nightlyasrelease',
'android-hw-a55-14-0-aarch64-shippable'
],
supportsSafari: false,
group: 'mobile'
},
{
key: 'android-p6',
label: 'Android (P6)',
platforms: ['android-hw-p6-13-0-aarch64-shippable'],
platforms: [
'android-hw-p6-13-0-aarch64-nightlyasrelease',
'android-hw-p6-13-0-aarch64-shippable'
],
supportsSafari: false,
group: 'mobile'
}
Expand Down
Loading