mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-12 23:36:15 -08:00
test(BASE-06): capture performance and teardown resource baselines
This commit is contained in:
1 parent
c7a375e146
commit
e01f39ffa0
14 files changed
+3036
-18
No files matched your search
@@ -0,0 +1,60 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import test from 'node:test'
|
||||
import { comparePerformance, summarizePerformance, validatePerformance } from './performance.mjs'
|
||||
import { publishedSizes, validateSizes } from './sizes.mjs'
|
||||
import { refactorDir } from './releases.mjs'
|
||||
|
||||
const baseline = () => JSON.parse(fs.readFileSync(path.join(refactorDir, 'baselines/performance.json'), 'utf8'))
|
||||
|
||||
test('Performance evidence rejects background, fake playback and broken teardown', () => {
|
||||
const frozen = baseline()
|
||||
for (const report of frozen.runs) validatePerformance(report)
|
||||
for (const mutate of [
|
||||
report => report.visibilityChanges.push('hidden'),
|
||||
report => report.samples[2].mediaProgress = 0,
|
||||
report => report.samples[2].afterDestroy.instances = 1,
|
||||
report => report.resources[0].after.framesAfterDestroy = 1,
|
||||
report => report.resources[0].after.observedMs = 20,
|
||||
report => report.resources[0].after.proxyCalls = 2,
|
||||
report => report.samples.pop(),
|
||||
]) {
|
||||
const changed = structuredClone(frozen.runs[0])
|
||||
mutate(changed)
|
||||
assert.throws(() => validatePerformance(changed))
|
||||
}
|
||||
})
|
||||
|
||||
test('Performance comparison excludes warm-up, detects large regression and allows documented resource fixes', () => {
|
||||
const report = baseline().runs[0]
|
||||
const warmup = structuredClone(report)
|
||||
warmup.samples[0].constructorMs = 1000
|
||||
assert.deepEqual(summarizePerformance(warmup), summarizePerformance(report))
|
||||
const slower = structuredClone(report)
|
||||
for (const sample of slower.samples) {
|
||||
sample.constructorMs += 10
|
||||
sample.readyMs += 10
|
||||
}
|
||||
assert(comparePerformance(report, slower).reviewSignals.some(signal => signal.metric === 'constructorMs'))
|
||||
const fixed = structuredClone(report)
|
||||
for (const resource of fixed.resources) {
|
||||
resource.after.timers = []
|
||||
resource.after.lateCallbacks = []
|
||||
resource.after.lateResizeEvents = 0
|
||||
}
|
||||
validatePerformance(fixed)
|
||||
assert.equal(comparePerformance(report, fixed).resourceProfileChanged, true)
|
||||
const otherDevice = structuredClone(report)
|
||||
otherDevice.environment.hardwareConcurrency++
|
||||
assert.throws(() => comparePerformance(report, otherDevice))
|
||||
})
|
||||
|
||||
test('Published compression sizes are reproducible and inventory cannot omit a library', async () => {
|
||||
const report = JSON.parse(fs.readFileSync(path.join(refactorDir, 'baselines/sizes.json'), 'utf8'))
|
||||
validateSizes(report)
|
||||
assert.deepEqual(await publishedSizes(), report.published)
|
||||
const missing = structuredClone(report)
|
||||
missing.workspaceObserved = missing.workspaceObserved.filter(item => item.name !== 'artplayer-plugin-chapter')
|
||||
assert.throws(() => validateSizes(missing))
|
||||
})
|
||||
Reference in new issue
Block a user