diff --git a/src/lib/api/treeherder.test.ts b/src/lib/api/treeherder.test.ts index dfbe37c..4a26006 100644 --- a/src/lib/api/treeherder.test.ts +++ b/src/lib/api/treeherder.test.ts @@ -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', @@ -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', () => { diff --git a/src/lib/api/treeherder.ts b/src/lib/api/treeherder.ts index 45f10b0..e5729c1 100644 --- a/src/lib/api/treeherder.ts +++ b/src/lib/api/treeherder.ts @@ -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) { diff --git a/src/lib/browsers.test.ts b/src/lib/browsers.test.ts index dc2b00b..6781945 100644 --- a/src/lib/browsers.test.ts +++ b/src/lib/browsers.test.ts @@ -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', () => { diff --git a/src/lib/browsers.ts b/src/lib/browsers.ts index fe81738..49cfadb 100644 --- a/src/lib/browsers.ts +++ b/src/lib/browsers.ts @@ -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 diff --git a/src/lib/speedometer/config.ts b/src/lib/speedometer/config.ts index 658133f..b7500ee 100644 --- a/src/lib/speedometer/config.ts +++ b/src/lib/speedometer/config.ts @@ -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' }