From 30363a5346e8d6b227651f224dd4d411289a9971 Mon Sep 17 00:00:00 2001 From: Harvey Zhao Date: Mon, 14 Sep 2026 21:13:03 +0800 Subject: [PATCH] test(danmuku): [PKG-DANMUKU-08] verify fullscreen lifetimes and old-core loads --- .../artplayer-plugin-danmuku/ARCHITECTURE.md | 20 +- .../danmuku-fullscreen-validation.json | 12305 ++++++++++++++++ .../danmuku-old-core-load-validation.json | 2615 ++++ ...-14-PKG-DANMUKU-08-fullscreen-lifetimes.md | 79 + refactor/plan.md | 2 +- refactor/progress.md | 19 + refactor/tasks.json | 5 +- test/browser/README.md | 11 +- test/browser/danmuku-fullscreen.spec.js | 167 + test/browser/danmuku-stability.spec.js | 332 +- 10 files changed, 15385 insertions(+), 170 deletions(-) create mode 100644 refactor/baselines/danmuku-fullscreen-validation.json create mode 100644 refactor/baselines/danmuku-old-core-load-validation.json create mode 100644 refactor/changes/2026-09-14-PKG-DANMUKU-08-fullscreen-lifetimes.md create mode 100644 test/browser/danmuku-fullscreen.spec.js diff --git a/packages/artplayer-plugin-danmuku/ARCHITECTURE.md b/packages/artplayer-plugin-danmuku/ARCHITECTURE.md index 5df042aa6..ea7272cb2 100644 --- a/packages/artplayer-plugin-danmuku/ARCHITECTURE.md +++ b/packages/artplayer-plugin-danmuku/ARCHITECTURE.md @@ -12,8 +12,24 @@ the corresponding built formats; both loaded hashes appear in each attachment. The actual Mask/model combination in `danmuku-mask-native.spec.js` now compiles both plugins from source by default. `ARTPLAYER_MASK_ARTIFACT` and `ARTPLAYER_DANMUKU_ARTIFACT` override them independently and fail on missing files. -Do not substitute a stale dist file for source checks. Full old-plugin/core, -OS fullscreen, installation, performance and device acceptance remain task 08/09. +Do not substitute a stale dist file for source checks. Installation, remaining +old-plugin combinations, combined-load performance and devices remain task 08/09. + +`danmuku-fullscreen.spec.js` tests all old/current core and plugin pairs in real +document and CSS web fullscreen, with three fresh player lifetimes per case. +Each lifetime must show a timestamp-delivered row, restore layout and release its +Worker and DOM; the candidate also has no pending scheduler frame or operation. +The published renderer has a hidden measurement node with the same text: locate +the visible node, rather than assuming text uniquely identifies a render node. +Wait for the native exit event before destroying the player; fullscreenElement +can clear before the event is dispatched. Instance-local event records expose +the frozen core's known BASE-LIFE-18 listeners after destroy, without attributing +their events to a new player. The candidate must receive no later events. + +`danmuku-stability.spec.js` now includes both core versions. Use its core-prefixed +test titles to select a matrix subset and retain the core field in observations. +The three 14-second cycles and per-row assertions remain the same; this does not +turn the bounded load test into a full-screen/model/PiP performance benchmark. The compatibility reference is the actual npm 5.3.0 package. Its archive, historical declarations, earlier exports and failure evidence are indexed in diff --git a/refactor/baselines/danmuku-fullscreen-validation.json b/refactor/baselines/danmuku-fullscreen-validation.json new file mode 100644 index 000000000..840223f39 --- /dev/null +++ b/refactor/baselines/danmuku-fullscreen-validation.json @@ -0,0 +1,12305 @@ +{ + "schemaVersion": 1, + "task": "PKG-DANMUKU-08", + "status": "partial", + "capturedAt": "2026-09-14T13:06:02.581Z", + "scope": "Three fresh player lifetimes per old/current core/plugin pair in real CSS web and document fullscreen. Source includes frozen npm plugin; main/legacy select candidate plugin only.", + "reports": [ + { + "file": "refactor/.cache/danmuku08-fullscreen-first-report/report.json", + "sha256": "ca6cd7d93c7c455587a4b234ca7f3e3ccb5cda3783165ae0b1bf654f71b6e5a1", + "stats": { + "startTime": "2026-09-14T12:54:23.935Z", + "duration": 20482.958, + "expected": 3, + "skipped": 0, + "unexpected": 5, + "flaky": 0 + }, + "result": { + "scope": "source", + "exitCode": 1, + "signal": null, + "args": [ + "test", + "--config=playwright.source.config.js", + "test/browser/danmuku-fullscreen.spec.js", + "--project=chromium", + "--workers=2" + ] + }, + "cases": [ + { + "title": "published core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "failed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [ + "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByText('Fullscreen row 0', { exact: true })\nExpected: visible\nError: strict mode violation: getByText('Fullscreen row 0', { exact: true }) resolved to 2 elements:\n 1)
Fullscreen row 0
aka getByText('Fullscreen row').first()\n 2)
Fullscreen row 0
aka getByText('Fullscreen row').nth(1)\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" getByText('Fullscreen row 0', { exact: true }) with timeout 7000ms\u001b[22m\n\u001b[2m - waiting for getByText('Fullscreen row 0', { exact: true })\u001b[22m\n\n\n 88 | }, text)\n 89 | await expect.poll(() => page.evaluate(text => window.fullscreenRows.some(row => row.text === text), text)).toBe(true)\n> 90 | await expect(page.getByText(text, { exact: true })).toBeVisible()\n | ^\n 91 | const entered = await page.evaluate(() => ({\n 92 | width: window.art.template.$player.clientWidth,\n 93 | layerWidth: window.art.template.$danmuku.clientWidth,\n at D:\\github\\ArtPlayer\\test\\browser\\danmuku-fullscreen.spec.js:90:65" + ], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [], + "outcome": "incomplete" + } + }, + { + "title": "published core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "failed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [ + "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByText('Fullscreen row 0', { exact: true })\nExpected: visible\nError: strict mode violation: getByText('Fullscreen row 0', { exact: true }) resolved to 2 elements:\n 1)
Fullscreen row 0
aka getByText('Fullscreen row').first()\n 2)
Fullscreen row 0
aka getByText('Fullscreen row').nth(1)\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" getByText('Fullscreen row 0', { exact: true }) with timeout 7000ms\u001b[22m\n\u001b[2m - waiting for getByText('Fullscreen row 0', { exact: true })\u001b[22m\n\n\n 88 | }, text)\n 89 | await expect.poll(() => page.evaluate(text => window.fullscreenRows.some(row => row.text === text), text)).toBe(true)\n> 90 | await expect(page.getByText(text, { exact: true })).toBeVisible()\n | ^\n 91 | const entered = await page.evaluate(() => ({\n 92 | width: window.art.template.$player.clientWidth,\n 93 | layerWidth: window.art.template.$danmuku.clientWidth,\n at D:\\github\\ArtPlayer\\test\\browser\\danmuku-fullscreen.spec.js:90:65" + ], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [], + "outcome": "incomplete" + } + }, + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.302287 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.308623 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.300285 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed" + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "failed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [ + "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoEqual\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // deep equality\u001b[22m\n\n\u001b[32m- Expected - 0\u001b[39m\n\u001b[31m+ Received + 2\u001b[39m\n\n\u001b[2m Array [\u001b[22m\n\u001b[2m true,\u001b[22m\n\u001b[31m+ true,\u001b[39m\n\u001b[31m+ false,\u001b[39m\n\u001b[2m false,\u001b[22m\n\u001b[2m ]\u001b[22m\n\n 129 | expect(after.styles).toBe(1)\n 130 | expect(after.errors).toEqual([])\n> 131 | expect(after.modes).toEqual([true, false])\n | ^\n 132 | expect(after.workers).toHaveLength(cycle + 1)\n 133 | for (const worker of after.workers) {\n 134 | expect(worker.replies).toBeGreaterThan(0)\n at D:\\github\\ArtPlayer\\test\\browser\\danmuku-fullscreen.spec.js:131:33" + ], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.42319 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.424272 + }, + "after": { + "modes": [ + true, + true, + false, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "incomplete" + } + }, + { + "title": "candidate core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "failed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [ + "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByText('Fullscreen row 0', { exact: true })\nExpected: visible\nError: strict mode violation: getByText('Fullscreen row 0', { exact: true }) resolved to 2 elements:\n 1)
Fullscreen row 0
aka getByText('Fullscreen row').first()\n 2)
Fullscreen row 0
aka getByText('Fullscreen row').nth(1)\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" getByText('Fullscreen row 0', { exact: true }) with timeout 7000ms\u001b[22m\n\u001b[2m - waiting for getByText('Fullscreen row 0', { exact: true })\u001b[22m\n\n\n 88 | }, text)\n 89 | await expect.poll(() => page.evaluate(text => window.fullscreenRows.some(row => row.text === text), text)).toBe(true)\n> 90 | await expect(page.getByText(text, { exact: true })).toBeVisible()\n | ^\n 91 | const entered = await page.evaluate(() => ({\n 92 | width: window.art.template.$player.clientWidth,\n 93 | layerWidth: window.art.template.$danmuku.clientWidth,\n at D:\\github\\ArtPlayer\\test\\browser\\danmuku-fullscreen.spec.js:90:65" + ], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [], + "outcome": "incomplete" + } + }, + { + "title": "candidate core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "failed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [ + "Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).\u001b[22mtoBeVisible\u001b[2m(\u001b[22m\u001b[2m)\u001b[22m failed\n\nLocator: getByText('Fullscreen row 0', { exact: true })\nExpected: visible\nError: strict mode violation: getByText('Fullscreen row 0', { exact: true }) resolved to 2 elements:\n 1)
Fullscreen row 0
aka getByText('Fullscreen row').first()\n 2)
Fullscreen row 0
aka getByText('Fullscreen row').nth(1)\n\nCall log:\n\u001b[2m - Expect \"toBeVisible\" getByText('Fullscreen row 0', { exact: true }) with timeout 7000ms\u001b[22m\n\u001b[2m - waiting for getByText('Fullscreen row 0', { exact: true })\u001b[22m\n\n\n 88 | }, text)\n 89 | await expect.poll(() => page.evaluate(text => window.fullscreenRows.some(row => row.text === text), text)).toBe(true)\n> 90 | await expect(page.getByText(text, { exact: true })).toBeVisible()\n | ^\n 91 | const entered = await page.evaluate(() => ({\n 92 | width: window.art.template.$player.clientWidth,\n 93 | layerWidth: window.art.template.$danmuku.clientWidth,\n at D:\\github\\ArtPlayer\\test\\browser\\danmuku-fullscreen.spec.js:90:65" + ], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [], + "outcome": "incomplete" + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.295599 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.285728 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.305937 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed" + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.420091 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.40066 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.421755 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed" + } + } + ] + }, + { + "file": "refactor/.cache/danmuku08-fullscreen-exit-first-report/report.json", + "sha256": "5927ab0e768672181e9bb4f8178697f0e68d187f7b641a169fbdf0bfea91f30c", + "stats": { + "startTime": "2026-09-14T12:59:57.971Z", + "duration": 80872.709, + "expected": 20, + "skipped": 0, + "unexpected": 4, + "flaky": 0 + }, + "result": { + "scope": "source", + "exitCode": 1, + "signal": null, + "args": [ + "test", + "--config=playwright.source.config.js", + "test/browser/danmuku-fullscreen.spec.js", + "--workers=2" + ] + }, + "cases": [ + { + "title": "published core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.305587 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.302409 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.292386 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.818216 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.80352 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.786962 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.394856 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.3803 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.417738 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.90935 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.903625 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.91707 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.303321 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.285748 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.324368 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.808347 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.790806 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.818202 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.3975 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.393407 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.391375 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.92484 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.889227 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.888514 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.287732 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.304802 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.306601 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.804428 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.805052 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.820109 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.421158 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.407455 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.404603 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.920465 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.906354 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.906628 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.293472 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.312246 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.287302 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.805568 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.823699 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.805252 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.42429 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.400802 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.394154 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.93993 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.906686 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.905918 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.197675 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.151079 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.376561 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.70956 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.625697 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.875997 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 0.917785 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.127668 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.418264 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.87473 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.601132 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.876731 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.375693 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.375387 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.376667 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.877128 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.875062 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.876148 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.418203 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.14767 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.376448 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.876055 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.619397 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.884482 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.164867 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.162877 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.38304 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.666878 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.63526 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.885454 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.418523 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.155952 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 0.874467 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.876216 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.629133 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.874467 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.126851 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.406531 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.168395 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.626185 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.874941 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.631091 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.395735 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.421872 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.168301 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.870158 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.8868 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.628731 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4189168 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.463021 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4471668 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.8705625 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.9387501 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.8884167 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "webkit", + "status": "failed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [ + "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoEqual\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // deep equality\u001b[22m\n\n\u001b[32m- Expected - 1\u001b[39m\n\u001b[31m+ Received + 0\u001b[39m\n\n\u001b[2m Array [\u001b[22m\n\u001b[2m true,\u001b[22m\n\u001b[32m- false,\u001b[39m\n\u001b[2m ]\u001b[22m\n\n 133 | expect(after.styles).toBe(1)\n 134 | expect(after.errors).toEqual([])\n> 135 | expect(after.modes).toEqual([true, false])\n | ^\n 136 | expect(after.workers).toHaveLength(cycle + 1)\n 137 | for (const worker of after.workers) {\n 138 | expect(worker.replies).toBeGreaterThan(0)\n at D:\\github\\ArtPlayer\\test\\browser\\danmuku-fullscreen.spec.js:135:33" + ], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.6261877 + }, + "after": { + "modes": [ + true + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "incomplete" + } + }, + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.6495627 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4110001 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4964793 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 1.1040418 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.8834584 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.9641043 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "webkit", + "status": "failed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [ + "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoEqual\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // deep equality\u001b[22m\n\n\u001b[32m- Expected - 1\u001b[39m\n\u001b[31m+ Received + 0\u001b[39m\n\n\u001b[2m Array [\u001b[22m\n\u001b[2m true,\u001b[22m\n\u001b[32m- false,\u001b[39m\n\u001b[2m ]\u001b[22m\n\n 133 | expect(after.styles).toBe(1)\n 134 | expect(after.errors).toEqual([])\n> 135 | expect(after.modes).toEqual([true, false])\n | ^\n 136 | expect(after.workers).toHaveLength(cycle + 1)\n 137 | for (const worker of after.workers) {\n 138 | expect(worker.replies).toBeGreaterThan(0)\n at D:\\github\\ArtPlayer\\test\\browser\\danmuku-fullscreen.spec.js:135:33" + ], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.491271 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.3739377 + }, + "after": { + "modes": [ + true + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "incomplete" + } + }, + { + "title": "candidate core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4675002 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4633543 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.3901877 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.9397917 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.9360209 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.9301251 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "webkit", + "status": "failed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [ + "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoEqual\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // deep equality\u001b[22m\n\n\u001b[32m- Expected - 1\u001b[39m\n\u001b[31m+ Received + 0\u001b[39m\n\n\u001b[2m Array [\u001b[22m\n\u001b[2m true,\u001b[22m\n\u001b[32m- false,\u001b[39m\n\u001b[2m ]\u001b[22m\n\n 133 | expect(after.styles).toBe(1)\n 134 | expect(after.errors).toEqual([])\n> 135 | expect(after.modes).toEqual([true, false])\n | ^\n 136 | expect(after.workers).toHaveLength(cycle + 1)\n 137 | for (const worker of after.workers) {\n 138 | expect(worker.replies).toBeGreaterThan(0)\n at D:\\github\\ArtPlayer\\test\\browser\\danmuku-fullscreen.spec.js:135:33" + ], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.6771877 + }, + "after": { + "modes": [ + true + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "incomplete" + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.6823752 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.3943335 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.508021 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 1.1490834 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.869875 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.9733543 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "webkit", + "status": "failed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [ + "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoEqual\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // deep equality\u001b[22m\n\n\u001b[32m- Expected - 1\u001b[39m\n\u001b[31m+ Received + 0\u001b[39m\n\n\u001b[2m Array [\u001b[22m\n\u001b[2m true,\u001b[22m\n\u001b[32m- false,\u001b[39m\n\u001b[2m ]\u001b[22m\n\n 133 | expect(after.styles).toBe(1)\n 134 | expect(after.errors).toEqual([])\n> 135 | expect(after.modes).toEqual([true, false])\n | ^\n 136 | expect(after.workers).toHaveLength(cycle + 1)\n 137 | for (const worker of after.workers) {\n 138 | expect(worker.replies).toBeGreaterThan(0)\n at D:\\github\\ArtPlayer\\test\\browser\\danmuku-fullscreen.spec.js:135:33" + ], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.3409584 + }, + "after": { + "modes": [ + true + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "incomplete" + } + } + ] + }, + { + "file": "refactor/.cache/danmuku08-fullscreen-source-report/report.json", + "sha256": "65390cb14d155e35036311b2ff6cf97f35c60feb154ebe578b7af699ad81a666", + "stats": { + "startTime": "2026-09-14T13:01:54.048Z", + "duration": 86398.68000000001, + "expected": 24, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "result": { + "scope": "source", + "exitCode": 0, + "signal": null, + "args": [ + "test", + "--config=playwright.source.config.js", + "test/browser/danmuku-fullscreen.spec.js", + "--workers=2" + ] + }, + "cases": [ + { + "title": "published core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.311276 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.301213 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.336758 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.821775 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.809219 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.83148 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.355981 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.417251 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.405935 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.858451 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.922198 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.905579 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.313195 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.296546 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.287347 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.808599 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.806425 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.788396 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.40039 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.396518 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.383932 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.923523 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.904751 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.905907 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.306942 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.30023 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.320403 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.816921 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.805887 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.831516 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.356246 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.417083 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.312277 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.858305 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.922136 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.806533 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.300938 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.289118 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.297129 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.816116 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.807087 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.806969 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.41399 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.406802 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.402889 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.905785 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.905718 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.907086 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 0.74827 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.367701 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.12653 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.74827 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.876225 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.637462 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.398977 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.418425 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.234932 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.87358 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.91799 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.66854 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.37692 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.388092 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.376764 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.876016 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.863569 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.876484 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.377106 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.153697 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.376948 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.876065 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.625014 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.876241 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.391081 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.144986 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.377002 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.906146 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.618796 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.885956 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.126219 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.122477 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.40245 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.633298 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.632438 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.917654 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.168018 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.123495 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 0.674975 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.632239 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.634477 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.634459 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 0.945494 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.376773 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.396479 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.905076 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.881391 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.870989 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4825627 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.3670001 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4962918 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.9549168 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.8691459 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.9698126 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.0135209 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5129377 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4340418 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.9572709 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 1.0519168 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.9011251 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 0.9459376 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.6052085 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.1644376 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.8739167 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 1.0550418 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 1.0907293 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.7458961 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5142293 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 0.9927917 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 1.2001668 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.9600418 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.9221459 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / published Danmuku: web fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "web", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5274377 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4827293 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5256252 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.9411876 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.9295417 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 1.0027709 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / published Danmuku: native fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "published", + "mode": "native", + "input": "npm 5.3.0", + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.448771 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5601252 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.0914793 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + }, + { + "replies": 2, + "terminated": 1 + } + ] + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.9175 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 1.0274584 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 1.0234167 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.374396 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.6021877 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.532896 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.8267084 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 1.0507084 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.9721876 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "source UMD", + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.426896 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.0215626 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4615001 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.8908751 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.9617501 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 1.0014168 + } + ], + "errors": [] + } + ] + } + } + ] + }, + { + "file": "refactor/.cache/danmuku08-fullscreen-main-report/report.json", + "sha256": "dbcd90f381efdb1fdf623fc4418852816100a41c8091523d7f00df497e59810b", + "stats": { + "startTime": "2026-09-14T13:03:37.668Z", + "duration": 46458.390999999996, + "expected": 12, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "result": { + "scope": "source", + "exitCode": 0, + "signal": null, + "args": [ + "test", + "--config=playwright.source.config.js", + "test/browser/danmuku-fullscreen.spec.js", + "--grep", + "candidate Danmuku", + "--workers=2" + ] + }, + "cases": [ + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.js", + "sha256": "133b7412e1a468b34f4f7ab3779958259f13899e037833029931f02b0833d088", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.309074 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.303309 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.3082 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.818812 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.800969 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.80323 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.js", + "sha256": "133b7412e1a468b34f4f7ab3779958259f13899e037833029931f02b0833d088", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.397958 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.415633 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.429601 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.907535 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.921587 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.938983 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.js", + "sha256": "133b7412e1a468b34f4f7ab3779958259f13899e037833029931f02b0833d088", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.331649 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.300204 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.317929 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.81943 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.819931 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.82126 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.js", + "sha256": "133b7412e1a468b34f4f7ab3779958259f13899e037833029931f02b0833d088", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.427215 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.412034 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.315379 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.923654 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.905837 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.805649 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.js", + "sha256": "133b7412e1a468b34f4f7ab3779958259f13899e037833029931f02b0833d088", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 0.785552 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.41373 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 0.594322 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.745308 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.884084 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.594322 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.js", + "sha256": "133b7412e1a468b34f4f7ab3779958259f13899e037833029931f02b0833d088", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 0.918053 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.409679 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.126685 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.874856 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.878721 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.636405 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.js", + "sha256": "133b7412e1a468b34f4f7ab3779958259f13899e037833029931f02b0833d088", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.199823 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.168249 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.376669 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.669024 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.628843 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.876063 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.js", + "sha256": "133b7412e1a468b34f4f7ab3779958259f13899e037833029931f02b0833d088", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.376868 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.122723 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.146674 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.876328 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.623445 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.62141 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.js", + "sha256": "133b7412e1a468b34f4f7ab3779958259f13899e037833029931f02b0833d088", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4654377 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5799377 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5899585 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.9305626 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 1.0253542 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 1.0634376 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.js", + "sha256": "133b7412e1a468b34f4f7ab3779958259f13899e037833029931f02b0833d088", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4849168 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4642502 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.3802085 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.9524793 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.9569168 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.9214375 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.js", + "sha256": "133b7412e1a468b34f4f7ab3779958259f13899e037833029931f02b0833d088", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5095835 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.1336251 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5649168 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.9874792 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 1.0082918 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 1.0269167 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.js", + "sha256": "133b7412e1a468b34f4f7ab3779958259f13899e037833029931f02b0833d088", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4530418 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.6259794 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4052501 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.9226875 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 1.0997918 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.8838542 + } + ], + "errors": [] + } + ] + } + } + ] + }, + { + "file": "refactor/.cache/danmuku08-fullscreen-legacy-report/report.json", + "sha256": "944b406d192958bb72c45cf70950546b1adfd01e784ea2c37337b578181a0eab", + "stats": { + "startTime": "2026-09-14T13:04:53.022Z", + "duration": 46433.519, + "expected": 12, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "result": { + "scope": "source", + "exitCode": 0, + "signal": null, + "args": [ + "test", + "--config=playwright.source.config.js", + "test/browser/danmuku-fullscreen.spec.js", + "--grep", + "candidate Danmuku", + "--workers=2" + ] + }, + "cases": [ + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.legacy.js", + "sha256": "9f0cb9969419a7d0c02d54790c423353b83f775acd95fbdbaeeb29a7fc42c816", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.333472 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.314354 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.301615 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.834443 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.820397 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.805118 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.legacy.js", + "sha256": "9f0cb9969419a7d0c02d54790c423353b83f775acd95fbdbaeeb29a7fc42c816", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.42261 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.399858 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.400165 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.906674 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.901131 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.906125 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.legacy.js", + "sha256": "9f0cb9969419a7d0c02d54790c423353b83f775acd95fbdbaeeb29a7fc42c816", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.334278 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.299512 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.301948 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.819864 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.803623 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.805099 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "chromium", + "status": "passed", + "browser": "153.0.8010.12", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.legacy.js", + "sha256": "9f0cb9969419a7d0c02d54790c423353b83f775acd95fbdbaeeb29a7fc42c816", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.405045 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.416388 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.402219 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.921059 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.905255 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.90534 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.legacy.js", + "sha256": "9f0cb9969419a7d0c02d54790c423353b83f775acd95fbdbaeeb29a7fc42c816", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 0.749553 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.494256 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.167937 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.709227 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.918139 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.628059 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.legacy.js", + "sha256": "9f0cb9969419a7d0c02d54790c423353b83f775acd95fbdbaeeb29a7fc42c816", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.376912 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.151558 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 0.62616 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.874997 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.625716 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.62616 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.legacy.js", + "sha256": "9f0cb9969419a7d0c02d54790c423353b83f775acd95fbdbaeeb29a7fc42c816", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 0.661996 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.371261 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.126594 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.661996 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.875236 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.625761 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "firefox", + "status": "passed", + "browser": "155.0", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.legacy.js", + "sha256": "9f0cb9969419a7d0c02d54790c423353b83f775acd95fbdbaeeb29a7fc42c816", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.418162 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.39553 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1366, + "layerWidth": 1366, + "settings": 1, + "heatmaps": 1, + "time": 1.122454 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.917699 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.871302 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.624493 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "web", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.legacy.js", + "sha256": "9f0cb9969419a7d0c02d54790c423353b83f775acd95fbdbaeeb29a7fc42c816", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 0.9875834 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5314585 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5489793 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.92175 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.9166459 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 1.0160209 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "published core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "errors": [], + "fullscreen": { + "core": "published", + "plugin": "candidate", + "mode": "native", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.legacy.js", + "sha256": "9f0cb9969419a7d0c02d54790c423353b83f775acd95fbdbaeeb29a7fc42c816", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4504376 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.3974168 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.6227502 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false, + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.9038542 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false, + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.8856876 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 1.0803751 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: web fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "web", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.legacy.js", + "sha256": "9f0cb9969419a7d0c02d54790c423353b83f775acd95fbdbaeeb29a7fc42c816", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4887085 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.6131043 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.4870835 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.9386042 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 1.0483543 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 0.9615834 + } + ], + "errors": [] + } + ] + } + }, + { + "title": "candidate core / candidate Danmuku: native fullscreen across three player lifetimes", + "engine": "webkit", + "status": "passed", + "browser": "26.6", + "platform": "win32", + "coreInput": { + "source": { + "kind": "workspace-build", + "entry": "packages\\artplayer\\src\\index.ts" + }, + "sha256": "5139cabd5abf9b92684ee2dcdaa620c4db7f67c0cb1aa3f654435d739468bf9d", + "bytes": 378931 + }, + "errors": [], + "fullscreen": { + "core": "candidate", + "plugin": "candidate", + "mode": "native", + "input": "D:\\github\\ArtPlayer\\packages\\artplayer-plugin-danmuku\\dist\\artplayer-plugin-danmuku.legacy.js", + "sha256": "9f0cb9969419a7d0c02d54790c423353b83f775acd95fbdbaeeb29a7fc42c816", + "cycles": [ + { + "cycle": 0, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 0.9312292 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 1, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5265002 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + }, + { + "cycle": 2, + "entered": { + "width": 1280, + "layerWidth": 1280, + "settings": 1, + "heatmaps": 1, + "time": 1.5664585 + }, + "after": { + "modes": [ + true, + false + ], + "errors": [], + "roots": 0, + "settings": 0, + "heatmaps": 0, + "styles": 1, + "workers": [ + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + }, + { + "replies": 1, + "terminated": 1 + } + ], + "frame": null, + "operation": null + } + } + ], + "outcome": "three-lifetimes-fullscreen-playback-cleanup-passed", + "lifetimes": [ + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 0", + "time": 0.8616875 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 1", + "time": 0.9857501 + } + ], + "errors": [] + }, + { + "modes": [ + true, + false + ], + "rows": [ + { + "text": "Fullscreen row 2", + "time": 1.0397709 + } + ], + "errors": [] + } + ] + } + } + ] + } + ], + "limitations": [ + "Frozen core BASE-LIFE-18 listener callbacks after destroy are observed separately from candidate cleanup.", + "Finite lifecycle checks do not prove unbounded heap stability or physical-device support.", + "Direct main/legacy bytes are not isolated installed-package distribution acceptance.", + "Mask/PiP combined-load performance and remaining old-plugin combinations remain open." + ] +} diff --git a/refactor/baselines/danmuku-old-core-load-validation.json b/refactor/baselines/danmuku-old-core-load-validation.json new file mode 100644 index 000000000..e89fc77df --- /dev/null +++ b/refactor/baselines/danmuku-old-core-load-validation.json @@ -0,0 +1,2615 @@ +{ + "schemaVersion": 1, + "task": "PKG-DANMUKU-08", + "status": "partial", + "capturedAt": "2026-09-14T13:11:13.694Z", + "report": { + "file": "refactor/.cache/danmuku08-old-core-load-report/report.json", + "sha256": "8b7a112b40e198a3b07cb019360103f496a19a0bba4574ac45ec02ecef4aaa5a", + "stats": { + "startTime": "2026-09-14T13:06:23.381Z", + "duration": 277648.803, + "expected": 12, + "skipped": 0, + "unexpected": 0, + "flaky": 0 + }, + "terminal": { + "scope": "source", + "exitCode": 0, + "signal": null, + "args": [ + "test", + "--config=playwright.source.config.js", + "test/browser/danmuku-stability.spec.js", + "--grep", + "published core /", + "--workers=2" + ] + } + }, + "priorCandidateCore": { + "file": "refactor/baselines/danmuku-stability-validation.json", + "sha256": "ad5d47e29a9c56f225daa3642e045f15bbd51799b46d01776825de7c18ba3e44", + "capturedAt": "2026-09-13T15:15:04.455Z", + "report": { + "file": "refactor/.cache/danmuku07-stability-final.json", + "sha256": "474aa2aa3b0fa8f5700307db9a05d2253e15ab3d90f7cd2a1434c1b5ff131bc8" + } + }, + "loads": [ + { + "engine": "chromium", + "browser": "153.0.8010.12", + "core": "published", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "implementation": "published", + "rowsPerSecond": 2, + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "base": 0.396066, + "startWall": 674.8999999761581, + "endWall": 14824.599999964237, + "time": 14.49932, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 24, + "states": { + "wait": 24, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 4, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 24, + "validStateMembers": true, + "heap": { + "used": 10000000, + "total": 10000000 + }, + "scheduledRows": 24, + "framesWallMs": { + "count": 845, + "median": 16.699999999999818, + "p95": 16.700000000000728, + "max": 16.80000000000109, + "over50ms": 0 + } + }, + { + "cycle": 1, + "base": 14.49932, + "startWall": 14834.899999976158, + "endWall": 29034.899999976158, + "time": 28.647302, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 48, + "states": { + "wait": 48, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 5, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 48, + "validStateMembers": true, + "heap": { + "used": 10000000, + "total": 10000000 + }, + "scheduledRows": 24, + "framesWallMs": { + "count": 848, + "median": 16.69999999999891, + "p95": 16.700000000000728, + "max": 16.80000000000291, + "over50ms": 0 + } + }, + { + "cycle": 2, + "base": 28.647302, + "startWall": 29043.299999952316, + "endWall": 43221.299999952316, + "time": 42.780747, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 72, + "states": { + "wait": 72, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 6, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 72, + "validStateMembers": true, + "heap": { + "used": 10000000, + "total": 10000000 + }, + "scheduledRows": 24, + "framesWallMs": { + "count": 846, + "median": 16.69999999999709, + "p95": 16.700000000004366, + "max": 16.80000000000291, + "over50ms": 0 + } + } + ], + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2541, + "median": 16.69999999999709, + "p95": 16.700000000004366, + "max": 83.39999999999964, + "over50ms": 2 + } + }, + "workers": [ + { + "posts": 75, + "replies": 75, + "terminated": 1, + "errors": [] + } + ], + "allocations": 6, + "reuses": 69, + "visibleCount": 72, + "recycledCount": 72, + "destroyed": true, + "retainedPlayerRoots": 0, + "priorCandidateCore": { + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2538, + "p50": 16.69999999999709, + "p95": 16.700000000004366, + "max": 66.70000000000073 + }, + "framesMediaSeconds": { + "count": 2538, + "p50": 0.016670000000004848, + "p95": 0.018145000000000522, + "max": 0.05940100000000115 + }, + "samplingWallMs": { + "count": 2607, + "p50": 16.69999998807907, + "p95": 17.80000001192093, + "max": 83.90000003576279 + }, + "samplingMediaSeconds": { + "count": 2607, + "p50": 0.016633999999999816, + "p95": 0.018132999999999733, + "max": 0.0597139999999996 + } + }, + "cycles": [ + { + "cycle": 0, + "visibleCount": 24, + "nodes": 4, + "framesWallMs": { + "count": 846, + "p50": 16.699999999999818, + "p95": 16.799999999999272, + "max": 16.80000000000109 + } + }, + { + "cycle": 1, + "visibleCount": 24, + "nodes": 5, + "framesWallMs": { + "count": 846, + "p50": 16.69999999999891, + "p95": 16.700000000000728, + "max": 16.80000000000291 + } + }, + { + "cycle": 2, + "visibleCount": 24, + "nodes": 6, + "framesWallMs": { + "count": 846, + "p50": 16.69999999999709, + "p95": 16.799999999995634, + "max": 16.80000000000291 + } + } + ] + } + }, + { + "engine": "chromium", + "browser": "153.0.8010.12", + "core": "published", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "implementation": "published", + "rowsPerSecond": 20, + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "base": 0.387278, + "startWall": 611.6999999880791, + "endWall": 14795.399999976158, + "time": 14.5286, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 240, + "states": { + "wait": 240, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 22, + "pooled": 21, + "uniquePool": 21, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 240, + "validStateMembers": true, + "heap": { + "used": 10000000, + "total": 10000000 + }, + "scheduledRows": 240, + "framesWallMs": { + "count": 847, + "median": 16.699999999999818, + "p95": 16.799999999999272, + "max": 16.80000000000109, + "over50ms": 0 + } + }, + { + "cycle": 1, + "base": 14.5286, + "startWall": 14814.099999964237, + "endWall": 28977.099999964237, + "time": 28.654217, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 480, + "states": { + "wait": 480, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 23, + "pooled": 21, + "uniquePool": 21, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 480, + "validStateMembers": true, + "heap": { + "used": 10000000, + "total": 10000000 + }, + "scheduledRows": 240, + "framesWallMs": { + "count": 846, + "median": 16.69999999999891, + "p95": 16.700000000000728, + "max": 16.80000000000291, + "over50ms": 0 + } + }, + { + "cycle": 2, + "base": 28.654217, + "startWall": 28993.899999976158, + "endWall": 43130.30000001192, + "time": 42.746851, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 720, + "states": { + "wait": 720, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 24, + "pooled": 21, + "uniquePool": 21, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 720, + "validStateMembers": true, + "heap": { + "used": 10000000, + "total": 10000000 + }, + "scheduledRows": 240, + "framesWallMs": { + "count": 844, + "median": 16.69999999999709, + "p95": 16.799999999995634, + "max": 16.80000000000291, + "over50ms": 0 + } + } + ], + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2539, + "median": 16.69999999999709, + "p95": 16.799999999995634, + "max": 83.29999999999927, + "over50ms": 2 + } + }, + "workers": [ + { + "posts": 723, + "replies": 723, + "terminated": 1, + "errors": [] + } + ], + "allocations": 24, + "reuses": 699, + "visibleCount": 720, + "recycledCount": 720, + "destroyed": true, + "retainedPlayerRoots": 0, + "priorCandidateCore": { + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2536, + "p50": 16.69999999999709, + "p95": 16.700000000004366, + "max": 83.40000000000146 + }, + "framesMediaSeconds": { + "count": 2536, + "p50": 0.016664000000002233, + "p95": 0.018217999999997403, + "max": 0.07596999999999987 + }, + "samplingWallMs": { + "count": 2603, + "p50": 16.600000023841858, + "p95": 17.80000001192093, + "max": 99.30000001192093 + }, + "samplingMediaSeconds": { + "count": 2603, + "p50": 0.016636000000005424, + "p95": 0.018202999999999747, + "max": 0.07654499999999942 + } + }, + "cycles": [ + { + "cycle": 0, + "visibleCount": 240, + "nodes": 22, + "framesWallMs": { + "count": 845, + "p50": 16.699999999999818, + "p95": 16.700000000000728, + "max": 16.80000000000109 + } + }, + { + "cycle": 1, + "visibleCount": 240, + "nodes": 23, + "framesWallMs": { + "count": 846, + "p50": 16.69999999999891, + "p95": 16.799999999999272, + "max": 16.80000000000291 + } + }, + { + "cycle": 2, + "visibleCount": 240, + "nodes": 24, + "framesWallMs": { + "count": 845, + "p50": 16.69999999999709, + "p95": 16.700000000004366, + "max": 16.80000000000291 + } + } + ] + } + }, + { + "engine": "chromium", + "browser": "153.0.8010.12", + "core": "published", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "implementation": "candidate", + "rowsPerSecond": 2, + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "base": 0.383037, + "startWall": 669.0999999642372, + "endWall": 14869.899999976158, + "time": 14.549167, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 24, + "states": { + "wait": 24, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 3, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 24, + "validStateMembers": true, + "heap": { + "used": 10000000, + "total": 10000000 + }, + "scheduledRows": 24, + "framesWallMs": { + "count": 848, + "median": 16.699999999999818, + "p95": 16.799999999999272, + "max": 16.80000000000109, + "over50ms": 0 + } + }, + { + "cycle": 1, + "base": 14.549167, + "startWall": 14883.199999988079, + "endWall": 29032.5, + "time": 28.658288, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 48, + "states": { + "wait": 48, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 3, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 48, + "validStateMembers": true, + "heap": { + "used": 10000000, + "total": 10000000 + }, + "scheduledRows": 24, + "framesWallMs": { + "count": 845, + "median": 16.69999999999891, + "p95": 16.799999999999272, + "max": 16.80000000000291, + "over50ms": 0 + } + }, + { + "cycle": 2, + "base": 28.658288, + "startWall": 29043.099999964237, + "endWall": 43219.5, + "time": 42.780468, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 72, + "states": { + "wait": 72, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 3, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 72, + "validStateMembers": true, + "heap": { + "used": 10000000, + "total": 10000000 + }, + "scheduledRows": 24, + "framesWallMs": { + "count": 846, + "median": 16.69999999999709, + "p95": 16.700000000004366, + "max": 16.80000000000291, + "over50ms": 0 + } + } + ], + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2541, + "median": 16.69999999999709, + "p95": 16.700000000004366, + "max": 83.30000000000109, + "over50ms": 2 + } + }, + "workers": [ + { + "posts": 72, + "replies": 72, + "terminated": 1, + "errors": [] + } + ], + "allocations": 3, + "reuses": 69, + "visibleCount": 72, + "recycledCount": 72, + "destroyed": true, + "retainedPlayerRoots": 0, + "priorCandidateCore": { + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2539, + "p50": 16.69999999999709, + "p95": 16.700000000004366, + "max": 66.70000000000073 + }, + "framesMediaSeconds": { + "count": 2539, + "p50": 0.016674000000001854, + "p95": 0.018076000000000647, + "max": 0.061954999999999316 + }, + "samplingWallMs": { + "count": 2536, + "p50": 16.69999998807907, + "p95": 17.899999976158142, + "max": 83.09999996423721 + }, + "samplingMediaSeconds": { + "count": 2536, + "p50": 0.016676000000000357, + "p95": 0.018077999999995598, + "max": 0.0623389999999997 + } + }, + "cycles": [ + { + "cycle": 0, + "visibleCount": 24, + "nodes": 3, + "framesWallMs": { + "count": 847, + "p50": 16.699999999999818, + "p95": 16.700000000000728, + "max": 16.80000000000109 + } + }, + { + "cycle": 1, + "visibleCount": 24, + "nodes": 3, + "framesWallMs": { + "count": 845, + "p50": 16.69999999999891, + "p95": 16.799999999999272, + "max": 16.80000000000291 + } + }, + { + "cycle": 2, + "visibleCount": 24, + "nodes": 3, + "framesWallMs": { + "count": 847, + "p50": 16.69999999999709, + "p95": 16.700000000004366, + "max": 16.80000000000291 + } + } + ] + } + }, + { + "engine": "chromium", + "browser": "153.0.8010.12", + "core": "published", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "implementation": "candidate", + "rowsPerSecond": 20, + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "base": 0.386325, + "startWall": 612.1000000238419, + "endWall": 14774.900000035763, + "time": 14.510204, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 240, + "states": { + "wait": 240, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 21, + "pooled": 21, + "uniquePool": 21, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 240, + "validStateMembers": true, + "heap": { + "used": 10000000, + "total": 10000000 + }, + "scheduledRows": 240, + "framesWallMs": { + "count": 846, + "median": 16.699999999999818, + "p95": 16.700000000000728, + "max": 16.80000000000109, + "over50ms": 0 + } + }, + { + "cycle": 1, + "base": 14.510204, + "startWall": 14793.100000023842, + "endWall": 28963.200000047684, + "time": 28.635695, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 480, + "states": { + "wait": 480, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 21, + "pooled": 21, + "uniquePool": 21, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 480, + "validStateMembers": true, + "heap": { + "used": 10000000, + "total": 10000000 + }, + "scheduledRows": 240, + "framesWallMs": { + "count": 846, + "median": 16.69999999999891, + "p95": 16.700000000000728, + "max": 16.80000000000291, + "over50ms": 0 + } + }, + { + "cycle": 2, + "base": 28.635695, + "startWall": 28980.100000023842, + "endWall": 43133.40000003576, + "time": 42.744427, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 720, + "states": { + "wait": 720, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 21, + "pooled": 21, + "uniquePool": 21, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 720, + "validStateMembers": true, + "heap": { + "used": 10000000, + "total": 10000000 + }, + "scheduledRows": 240, + "framesWallMs": { + "count": 845, + "median": 16.69999999999709, + "p95": 16.799999999995634, + "max": 16.80000000000291, + "over50ms": 0 + } + } + ], + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2539, + "median": 16.69999999999709, + "p95": 16.799999999995634, + "max": 83.39999999999964, + "over50ms": 2 + } + }, + "workers": [ + { + "posts": 720, + "replies": 720, + "terminated": 1, + "errors": [] + } + ], + "allocations": 21, + "reuses": 699, + "visibleCount": 720, + "recycledCount": 720, + "destroyed": true, + "retainedPlayerRoots": 0, + "priorCandidateCore": { + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2540, + "p50": 16.69999999999709, + "p95": 16.700000000004366, + "max": 83.40000000000146 + }, + "framesMediaSeconds": { + "count": 2540, + "p50": 0.01668199999999942, + "p95": 0.0182399999999987, + "max": 0.06178000000000239 + }, + "samplingWallMs": { + "count": 2537, + "p50": 16.69999998807907, + "p95": 17.80000001192093, + "max": 100.40000003576279 + }, + "samplingMediaSeconds": { + "count": 2537, + "p50": 0.016683999999997923, + "p95": 0.0182399999999987, + "max": 0.06213999999999942 + } + }, + "cycles": [ + { + "cycle": 0, + "visibleCount": 240, + "nodes": 21, + "framesWallMs": { + "count": 847, + "p50": 16.699999999999818, + "p95": 16.700000000000728, + "max": 16.80000000000109 + } + }, + { + "cycle": 1, + "visibleCount": 240, + "nodes": 21, + "framesWallMs": { + "count": 847, + "p50": 16.69999999999891, + "p95": 16.700000000000728, + "max": 16.80000000000291 + } + }, + { + "cycle": 2, + "visibleCount": 240, + "nodes": 21, + "framesWallMs": { + "count": 846, + "p50": 16.69999999999709, + "p95": 16.799999999995634, + "max": 16.80000000000291 + } + } + ] + } + }, + { + "engine": "firefox", + "browser": "155.0", + "core": "published", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "implementation": "published", + "rowsPerSecond": 2, + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "base": 0.174442, + "startWall": 867, + "endWall": 15272, + "time": 14.415827, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 24, + "states": { + "wait": 24, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 4, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 24, + "validStateMembers": true, + "heap": null, + "scheduledRows": 24, + "framesWallMs": { + "count": 853, + "median": 16.659999999999854, + "p95": 16.68000000000029, + "max": 18.82000000000062, + "over50ms": 0 + } + }, + { + "cycle": 1, + "base": 14.415827, + "startWall": 15285, + "endWall": 29519, + "time": 28.603541, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 48, + "states": { + "wait": 48, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 5, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 48, + "validStateMembers": true, + "heap": null, + "scheduledRows": 24, + "framesWallMs": { + "count": 848, + "median": 16.659999999999854, + "p95": 16.68000000000029, + "max": 21.31999999999971, + "over50ms": 0 + } + }, + { + "cycle": 2, + "base": 28.603541, + "startWall": 29530, + "endWall": 43743, + "time": 42.735574, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 72, + "states": { + "wait": 72, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 6, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 72, + "validStateMembers": true, + "heap": null, + "scheduledRows": 24, + "framesWallMs": { + "count": 847, + "median": 16.660000000003492, + "p95": 16.68000000000029, + "max": 23.760000000002037, + "over50ms": 0 + } + } + ], + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2550, + "median": 16.659999999999854, + "p95": 16.68000000000029, + "max": 102, + "over50ms": 2 + } + }, + "workers": [ + { + "posts": 75, + "replies": 75, + "terminated": 1, + "errors": [] + } + ], + "allocations": 6, + "reuses": 69, + "visibleCount": 72, + "recycledCount": 72, + "destroyed": true, + "retainedPlayerRoots": 0, + "priorCandidateCore": { + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2551, + "p50": 16.659999999999854, + "p95": 16.68000000000029, + "max": 100 + }, + "framesMediaSeconds": { + "count": 2551, + "p50": 0, + "p95": 0.041733000000000686, + "max": 0.04536300000000182 + }, + "samplingWallMs": { + "count": 2624, + "p50": 17, + "p95": 18, + "max": 101 + }, + "samplingMediaSeconds": { + "count": 2624, + "p50": 0, + "p95": 0.041701999999999906, + "max": 0.04536300000000182 + } + }, + "cycles": [ + { + "cycle": 0, + "visibleCount": 24, + "nodes": 4, + "framesWallMs": { + "count": 848, + "p50": 16.659999999999854, + "p95": 16.68000000000029, + "max": 21.579999999999927 + } + }, + { + "cycle": 1, + "visibleCount": 24, + "nodes": 5, + "framesWallMs": { + "count": 852, + "p50": 16.659999999999854, + "p95": 16.68000000000029, + "max": 20.720000000001164 + } + }, + { + "cycle": 2, + "visibleCount": 24, + "nodes": 6, + "framesWallMs": { + "count": 851, + "p50": 16.660000000003492, + "p95": 16.68000000000029, + "max": 19.81999999999971 + } + } + ] + } + }, + { + "engine": "firefox", + "browser": "155.0", + "core": "published", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "implementation": "published", + "rowsPerSecond": 20, + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "base": 0.42283, + "startWall": 758, + "endWall": 15141, + "time": 14.734858, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 240, + "states": { + "wait": 240, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 23, + "pooled": 22, + "uniquePool": 22, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 240, + "validStateMembers": true, + "heap": null, + "scheduledRows": 240, + "framesWallMs": { + "count": 857, + "median": 16.659999999999854, + "p95": 16.68000000000029, + "max": 29.240000000000236, + "over50ms": 0 + } + }, + { + "cycle": 1, + "base": 14.734858, + "startWall": 15160, + "endWall": 29380, + "time": 28.881762, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 480, + "states": { + "wait": 480, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 24, + "pooled": 22, + "uniquePool": 22, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 480, + "validStateMembers": true, + "heap": null, + "scheduledRows": 240, + "framesWallMs": { + "count": 846, + "median": 16.659999999999854, + "p95": 16.68000000000029, + "max": 28.460000000002765, + "over50ms": 0 + } + }, + { + "cycle": 2, + "base": 28.881762, + "startWall": 29397, + "endWall": 43624, + "time": 43.024992, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 720, + "states": { + "wait": 720, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 25, + "pooled": 22, + "uniquePool": 22, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 720, + "validStateMembers": true, + "heap": null, + "scheduledRows": 240, + "framesWallMs": { + "count": 848, + "median": 16.660000000003492, + "p95": 16.68000000000029, + "max": 21.959999999999127, + "over50ms": 0 + } + } + ], + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2553, + "median": 16.659999999999854, + "p95": 16.68000000000029, + "max": 116.68000000000029, + "over50ms": 2 + } + }, + "workers": [ + { + "posts": 723, + "replies": 723, + "terminated": 1, + "errors": [] + } + ], + "allocations": 25, + "reuses": 698, + "visibleCount": 720, + "recycledCount": 720, + "destroyed": true, + "retainedPlayerRoots": 0, + "priorCandidateCore": { + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2557, + "p50": 16.659999999999854, + "p95": 16.68000000000029, + "max": 116.67999999999665 + }, + "framesMediaSeconds": { + "count": 2557, + "p50": 0, + "p95": 0.04180399999999995, + "max": 0.04524600000000012 + }, + "samplingWallMs": { + "count": 2631, + "p50": 17, + "p95": 18, + "max": 116 + }, + "samplingMediaSeconds": { + "count": 2631, + "p50": 0, + "p95": 0.04177699999999618, + "max": 0.04524600000000012 + } + }, + "cycles": [ + { + "cycle": 0, + "visibleCount": 240, + "nodes": 23, + "framesWallMs": { + "count": 856, + "p50": 16.659999999999854, + "p95": 16.68000000000029, + "max": 20.699999999999818 + } + }, + { + "cycle": 1, + "visibleCount": 240, + "nodes": 24, + "framesWallMs": { + "count": 850, + "p50": 16.659999999999854, + "p95": 16.68000000000029, + "max": 20.979999999999563 + } + }, + { + "cycle": 2, + "visibleCount": 240, + "nodes": 24, + "framesWallMs": { + "count": 851, + "p50": 16.660000000003492, + "p95": 16.68000000000029, + "max": 18.860000000000582 + } + } + ] + } + }, + { + "engine": "firefox", + "browser": "155.0", + "core": "published", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "implementation": "candidate", + "rowsPerSecond": 2, + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "base": 0.178512, + "startWall": 884, + "endWall": 15150, + "time": 14.329136, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 24, + "states": { + "wait": 24, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 3, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 24, + "validStateMembers": true, + "heap": null, + "scheduledRows": 24, + "framesWallMs": { + "count": 848, + "median": 16.659999999999854, + "p95": 16.68000000000029, + "max": 19, + "over50ms": 0 + } + }, + { + "cycle": 1, + "base": 14.329136, + "startWall": 15165, + "endWall": 29428, + "time": 28.519722, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 48, + "states": { + "wait": 48, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 3, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 48, + "validStateMembers": true, + "heap": null, + "scheduledRows": 24, + "framesWallMs": { + "count": 850, + "median": 16.659999999999854, + "p95": 16.68000000000029, + "max": 20.68000000000029, + "over50ms": 0 + } + }, + { + "cycle": 2, + "base": 28.519722, + "startWall": 29441, + "endWall": 43676, + "time": 42.669225, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 72, + "states": { + "wait": 72, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 3, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 72, + "validStateMembers": true, + "heap": null, + "scheduledRows": 24, + "framesWallMs": { + "count": 848, + "median": 16.660000000003492, + "p95": 16.68000000000029, + "max": 24.239999999997963, + "over50ms": 0 + } + } + ], + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2548, + "median": 16.659999999999854, + "p95": 16.68000000000029, + "max": 100, + "over50ms": 2 + } + }, + "workers": [ + { + "posts": 72, + "replies": 72, + "terminated": 1, + "errors": [] + } + ], + "allocations": 3, + "reuses": 69, + "visibleCount": 72, + "recycledCount": 72, + "destroyed": true, + "retainedPlayerRoots": 0, + "priorCandidateCore": { + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2548, + "p50": 16.659999999999854, + "p95": 16.68000000000029, + "max": 100 + }, + "framesMediaSeconds": { + "count": 2548, + "p50": 0, + "p95": 0.041519000000000084, + "max": 0.04606899999999925 + }, + "samplingWallMs": { + "count": 2548, + "p50": 17, + "p95": 18, + "max": 99 + }, + "samplingMediaSeconds": { + "count": 2548, + "p50": 0, + "p95": 0.041519000000000084, + "max": 0.04606899999999925 + } + }, + "cycles": [ + { + "cycle": 0, + "visibleCount": 24, + "nodes": 3, + "framesWallMs": { + "count": 850, + "p50": 16.659999999999854, + "p95": 16.68000000000029, + "max": 21.699999999999818 + } + }, + { + "cycle": 1, + "visibleCount": 24, + "nodes": 3, + "framesWallMs": { + "count": 850, + "p50": 16.659999999999854, + "p95": 16.68000000000029, + "max": 21.260000000002037 + } + }, + { + "cycle": 2, + "visibleCount": 24, + "nodes": 3, + "framesWallMs": { + "count": 848, + "p50": 16.660000000003492, + "p95": 16.68000000000029, + "max": 18.720000000001164 + } + } + ] + } + }, + { + "engine": "firefox", + "browser": "155.0", + "core": "published", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "implementation": "candidate", + "rowsPerSecond": 20, + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "base": 0.41955, + "startWall": 745, + "endWall": 15104, + "time": 14.753634, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 240, + "states": { + "wait": 240, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 22, + "pooled": 22, + "uniquePool": 22, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 240, + "validStateMembers": true, + "heap": null, + "scheduledRows": 240, + "framesWallMs": { + "count": 856, + "median": 16.659999999999854, + "p95": 16.68000000000029, + "max": 18.76000000000022, + "over50ms": 0 + } + }, + { + "cycle": 1, + "base": 14.753634, + "startWall": 15127, + "endWall": 29334, + "time": 28.86254, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 480, + "states": { + "wait": 480, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 22, + "pooled": 22, + "uniquePool": 22, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 480, + "validStateMembers": true, + "heap": null, + "scheduledRows": 240, + "framesWallMs": { + "count": 847, + "median": 16.659999999999854, + "p95": 16.68000000000029, + "max": 25.360000000000582, + "over50ms": 0 + } + }, + { + "cycle": 2, + "base": 28.86254, + "startWall": 29355, + "endWall": 43597, + "time": 43.057862, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 720, + "states": { + "wait": 720, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 22, + "pooled": 22, + "uniquePool": 22, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 720, + "validStateMembers": true, + "heap": null, + "scheduledRows": 240, + "framesWallMs": { + "count": 849, + "median": 16.660000000003492, + "p95": 16.68000000000029, + "max": 20.68000000000029, + "over50ms": 0 + } + } + ], + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2554, + "median": 16.659999999999854, + "p95": 16.68000000000029, + "max": 100, + "over50ms": 2 + } + }, + "workers": [ + { + "posts": 720, + "replies": 720, + "terminated": 1, + "errors": [] + } + ], + "allocations": 22, + "reuses": 698, + "visibleCount": 720, + "recycledCount": 720, + "destroyed": true, + "retainedPlayerRoots": 0, + "priorCandidateCore": { + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 2550, + "p50": 16.659999999999854, + "p95": 16.68000000000029, + "max": 116.66000000000167 + }, + "framesMediaSeconds": { + "count": 2550, + "p50": 0, + "p95": 0.04198500000000038, + "max": 0.04544299999999879 + }, + "samplingWallMs": { + "count": 2550, + "p50": 17, + "p95": 18, + "max": 117 + }, + "samplingMediaSeconds": { + "count": 2550, + "p50": 0, + "p95": 0.04198500000000038, + "max": 0.04544299999999879 + } + }, + "cycles": [ + { + "cycle": 0, + "visibleCount": 240, + "nodes": 21, + "framesWallMs": { + "count": 851, + "p50": 16.659999999999854, + "p95": 16.68000000000029, + "max": 21.0600000000004 + } + }, + { + "cycle": 1, + "visibleCount": 240, + "nodes": 22, + "framesWallMs": { + "count": 850, + "p50": 16.659999999999854, + "p95": 16.68000000000029, + "max": 20.92000000000189 + } + }, + { + "cycle": 2, + "visibleCount": 240, + "nodes": 22, + "framesWallMs": { + "count": 849, + "p50": 16.660000000003492, + "p95": 16.68000000000029, + "max": 19 + } + } + ] + } + }, + { + "engine": "webkit", + "browser": "26.6", + "core": "published", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "implementation": "published", + "rowsPerSecond": 2, + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "base": 0.3188125, + "startWall": 1290, + "endWall": 16171, + "time": 15.0222915, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 24, + "states": { + "wait": 24, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 4, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 24, + "validStateMembers": true, + "heap": null, + "scheduledRows": 24, + "framesWallMs": { + "count": 367, + "median": 43, + "p95": 61, + "max": 101, + "over50ms": 32 + } + }, + { + "cycle": 1, + "base": 15.0222915, + "startWall": 16211, + "endWall": 31136, + "time": 29.589458, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 48, + "states": { + "wait": 48, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 5, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 48, + "validStateMembers": true, + "heap": null, + "scheduledRows": 24, + "framesWallMs": { + "count": 362, + "median": 44, + "p95": 61, + "max": 79, + "over50ms": 33 + } + }, + { + "cycle": 2, + "base": 29.589458, + "startWall": 31152, + "endWall": 46190, + "time": 44.2458628, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 72, + "states": { + "wait": 72, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 6, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 72, + "validStateMembers": true, + "heap": null, + "scheduledRows": 24, + "framesWallMs": { + "count": 344, + "median": 45, + "p95": 62, + "max": 77, + "over50ms": 46 + } + } + ], + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 1075, + "median": 45, + "p95": 62, + "max": 512, + "over50ms": 113 + } + }, + "workers": [ + { + "posts": 75, + "replies": 75, + "terminated": 1, + "errors": [] + } + ], + "allocations": 6, + "reuses": 69, + "visibleCount": 72, + "recycledCount": 72, + "destroyed": true, + "retainedPlayerRoots": 0, + "priorCandidateCore": { + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 1091, + "p50": 45, + "p95": 61, + "max": 365 + }, + "framesMediaSeconds": { + "count": 1091, + "p50": 0.045083300000001714, + "p95": 0.060958299999999355, + "max": 0.07760420000000323 + }, + "samplingWallMs": { + "count": 1120, + "p50": 45, + "p95": 61, + "max": 365 + }, + "samplingMediaSeconds": { + "count": 1120, + "p50": 0.04497920000000022, + "p95": 0.06087510000000007, + "max": 0.07762500000000472 + } + }, + "cycles": [ + { + "cycle": 0, + "visibleCount": 24, + "nodes": 4, + "framesWallMs": { + "count": 358, + "p50": 45, + "p95": 61, + "max": 64 + } + }, + { + "cycle": 1, + "visibleCount": 24, + "nodes": 5, + "framesWallMs": { + "count": 363, + "p50": 45, + "p95": 61, + "max": 76 + } + }, + { + "cycle": 2, + "visibleCount": 24, + "nodes": 6, + "framesWallMs": { + "count": 370, + "p50": 45, + "p95": 49, + "max": 78 + } + } + ] + } + }, + { + "engine": "webkit", + "browser": "26.6", + "core": "published", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "implementation": "published", + "rowsPerSecond": 20, + "sha256": "7c8749288711ef97e80b6f9f00981170aa73f62a8ae25d6d663749a4aef62a8f", + "cycles": [ + { + "cycle": 0, + "base": 0.3808125, + "startWall": 1202, + "endWall": 16169, + "time": 15.082104, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 240, + "states": { + "wait": 240, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 23, + "pooled": 22, + "uniquePool": 22, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 240, + "validStateMembers": true, + "heap": null, + "scheduledRows": 240, + "framesWallMs": { + "count": 219, + "median": 76, + "p95": 79, + "max": 94, + "over50ms": 172 + } + }, + { + "cycle": 1, + "base": 15.082104, + "startWall": 16189, + "endWall": 31084, + "time": 29.659708, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 480, + "states": { + "wait": 480, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 24, + "pooled": 22, + "uniquePool": 22, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 480, + "validStateMembers": true, + "heap": null, + "scheduledRows": 240, + "framesWallMs": { + "count": 224, + "median": 76, + "p95": 79, + "max": 93, + "over50ms": 167 + } + }, + { + "cycle": 2, + "base": 29.659708, + "startWall": 31128, + "endWall": 46171, + "time": 44.351842, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 720, + "states": { + "wait": 720, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 25, + "pooled": 22, + "uniquePool": 22, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 720, + "validStateMembers": true, + "heap": null, + "scheduledRows": 240, + "framesWallMs": { + "count": 221, + "median": 76, + "p95": 79, + "max": 109, + "over50ms": 169 + } + } + ], + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 666, + "median": 76, + "p95": 79, + "max": 411, + "over50ms": 510 + } + }, + "workers": [ + { + "posts": 723, + "replies": 723, + "terminated": 1, + "errors": [] + } + ], + "allocations": 25, + "reuses": 698, + "visibleCount": 720, + "recycledCount": 720, + "destroyed": true, + "retainedPlayerRoots": 0, + "priorCandidateCore": { + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 659, + "p50": 77, + "p95": 79, + "max": 414 + }, + "framesMediaSeconds": { + "count": 659, + "p50": 0.07675000000000054, + "p95": 0.07889580000000151, + "max": 0.09408340000000237 + }, + "samplingWallMs": { + "count": 689, + "p50": 77, + "p95": 79, + "max": 414 + }, + "samplingMediaSeconds": { + "count": 689, + "p50": 0.07662499999999994, + "p95": 0.0788542000000021, + "max": 0.0940833000000012 + } + }, + "cycles": [ + { + "cycle": 0, + "visibleCount": 240, + "nodes": 23, + "framesWallMs": { + "count": 220, + "p50": 77, + "p95": 79, + "max": 93 + } + }, + { + "cycle": 1, + "visibleCount": 240, + "nodes": 24, + "framesWallMs": { + "count": 219, + "p50": 77, + "p95": 79, + "max": 93 + } + }, + { + "cycle": 2, + "visibleCount": 240, + "nodes": 25, + "framesWallMs": { + "count": 220, + "p50": 77, + "p95": 79, + "max": 94 + } + } + ] + } + }, + { + "engine": "webkit", + "browser": "26.6", + "core": "published", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "implementation": "candidate", + "rowsPerSecond": 2, + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "base": 0.259125, + "startWall": 1199, + "endWall": 16157, + "time": 15.0650207, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 24, + "states": { + "wait": 24, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 3, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 24, + "validStateMembers": true, + "heap": null, + "scheduledRows": 24, + "framesWallMs": { + "count": 372, + "median": 32, + "p95": 61, + "max": 108, + "over50ms": 26 + } + }, + { + "cycle": 1, + "base": 15.0650207, + "startWall": 16213, + "endWall": 31202, + "time": 29.8125205, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 48, + "states": { + "wait": 48, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 3, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 48, + "validStateMembers": true, + "heap": null, + "scheduledRows": 24, + "framesWallMs": { + "count": 368, + "median": 45, + "p95": 61, + "max": 76, + "over50ms": 29 + } + }, + { + "cycle": 2, + "base": 29.8125205, + "startWall": 31244, + "endWall": 46118, + "time": 44.3341962, + "decodedWidth": 640, + "visibleCount": 24, + "uniqueVisible": 24, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 72, + "states": { + "wait": 72, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 3, + "pooled": 3, + "uniquePool": 3, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 72, + "validStateMembers": true, + "heap": null, + "scheduledRows": 24, + "framesWallMs": { + "count": 349, + "median": 45, + "p95": 61, + "max": 93, + "over50ms": 40 + } + } + ], + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 1091, + "median": 45, + "p95": 61, + "max": 420, + "over50ms": 97 + } + }, + "workers": [ + { + "posts": 72, + "replies": 72, + "terminated": 1, + "errors": [] + } + ], + "allocations": 3, + "reuses": 69, + "visibleCount": 72, + "recycledCount": 72, + "destroyed": true, + "retainedPlayerRoots": 0, + "priorCandidateCore": { + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 1089, + "p50": 45, + "p95": 61, + "max": 337 + }, + "framesMediaSeconds": { + "count": 1089, + "p50": 0.045125000000000526, + "p95": 0.06106250000000024, + "max": 0.06364589999999737 + }, + "samplingWallMs": { + "count": 1089, + "p50": 45, + "p95": 61, + "max": 338 + }, + "samplingMediaSeconds": { + "count": 1089, + "p50": 0.045125000000000526, + "p95": 0.061062499999998465, + "max": 0.06362500000000182 + } + }, + "cycles": [ + { + "cycle": 0, + "visibleCount": 24, + "nodes": 3, + "framesWallMs": { + "count": 363, + "p50": 45, + "p95": 61, + "max": 64 + } + }, + { + "cycle": 1, + "visibleCount": 24, + "nodes": 3, + "framesWallMs": { + "count": 361, + "p50": 45, + "p95": 61, + "max": 64 + } + }, + { + "cycle": 2, + "visibleCount": 24, + "nodes": 3, + "framesWallMs": { + "count": 365, + "p50": 45, + "p95": 61, + "max": 63 + } + } + ] + } + }, + { + "engine": "webkit", + "browser": "26.6", + "core": "published", + "coreInput": { + "source": { + "kind": "npm-release", + "version": "5.4.0", + "integrity": "sha512-2B+plbx8N2yNsjK4nJU3+EOG8TULm1LRZk/QPkWRAMEX2Ee/MSnZG/WJYz8kcoZxZuLKcQ3uXifqLuPxZOH29A==", + "member": "package/dist/artplayer.js" + }, + "sha256": "f1db1fa3406aa6d41baa7c554749429a8e79f99d56a794bde23345eb9c07573f", + "bytes": 134037 + }, + "implementation": "candidate", + "rowsPerSecond": 20, + "sha256": "e8193aa8fae3329b3a8e435fc450726d9305e258dddea043ff3114f058516a66", + "cycles": [ + { + "cycle": 0, + "base": 0.2365624, + "startWall": 1158, + "endWall": 16085, + "time": 15.0097915, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 240, + "states": { + "wait": 240, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 22, + "pooled": 22, + "uniquePool": 22, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 240, + "validStateMembers": true, + "heap": null, + "scheduledRows": 240, + "framesWallMs": { + "count": 222, + "median": 76, + "p95": 79, + "max": 92, + "over50ms": 171 + } + }, + { + "cycle": 1, + "base": 15.0097915, + "startWall": 16149, + "endWall": 31157, + "time": 29.6823539, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 480, + "states": { + "wait": 480, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 22, + "pooled": 22, + "uniquePool": 22, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 480, + "validStateMembers": true, + "heap": null, + "scheduledRows": 240, + "framesWallMs": { + "count": 226, + "median": 76, + "p95": 79, + "max": 92, + "over50ms": 168 + } + }, + { + "cycle": 2, + "base": 29.6823539, + "startWall": 31214, + "endWall": 46211, + "time": 44.3654045, + "decodedWidth": 640, + "visibleCount": 240, + "uniqueVisible": 240, + "missedSampling": [], + "sampledNotVisible": [], + "queue": 720, + "states": { + "wait": 720, + "ready": 0, + "emit": 0, + "stop": 0 + }, + "nodes": 22, + "pooled": 22, + "uniquePool": 22, + "referenced": 0, + "distinctReferences": 0, + "uniqueStateMembers": 720, + "validStateMembers": true, + "heap": null, + "scheduledRows": 240, + "framesWallMs": { + "count": 219, + "median": 76, + "p95": 78, + "max": 92, + "over50ms": 172 + } + } + ], + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 669, + "median": 76, + "p95": 79, + "max": 442, + "over50ms": 513 + } + }, + "workers": [ + { + "posts": 720, + "replies": 720, + "terminated": 1, + "errors": [] + } + ], + "allocations": 22, + "reuses": 698, + "visibleCount": 720, + "recycledCount": 720, + "destroyed": true, + "retainedPlayerRoots": 0, + "priorCandidateCore": { + "sampleGapsIncludingLifecyclePauses": { + "framesWallMs": { + "count": 656, + "p50": 77, + "p95": 80, + "max": 428 + }, + "framesMediaSeconds": { + "count": 656, + "p50": 0.07679170000000024, + "p95": 0.07935409999999621, + "max": 0.10902089999999998 + }, + "samplingWallMs": { + "count": 656, + "p50": 77, + "p95": 80, + "max": 429 + }, + "samplingMediaSeconds": { + "count": 656, + "p50": 0.07679170000000024, + "p95": 0.07958329999999947, + "max": 0.10904169999999969 + } + }, + "cycles": [ + { + "cycle": 0, + "visibleCount": 240, + "nodes": 22, + "framesWallMs": { + "count": 217, + "p50": 77, + "p95": 80, + "max": 109 + } + }, + { + "cycle": 1, + "visibleCount": 240, + "nodes": 22, + "framesWallMs": { + "count": 220, + "p50": 77, + "p95": 79, + "max": 93 + } + }, + { + "cycle": 2, + "visibleCount": 240, + "nodes": 22, + "framesWallMs": { + "count": 219, + "p50": 77, + "p95": 79, + "max": 95 + } + } + ] + } + } + ], + "limitations": [ + "These are bounded normal-player loads on frozen core 5.4.0, not full Mask/PiP/fullscreen concurrent-load evidence.", + "Prior candidate-core runs use identical plugin bytes but were not simultaneous or randomized; frame intervals are observations rather than a causal performance claim.", + "Optional unforced heap readings are not a leak proof." + ] +} diff --git a/refactor/changes/2026-09-14-PKG-DANMUKU-08-fullscreen-lifetimes.md b/refactor/changes/2026-09-14-PKG-DANMUKU-08-fullscreen-lifetimes.md new file mode 100644 index 000000000..44889544d --- /dev/null +++ b/refactor/changes/2026-09-14-PKG-DANMUKU-08-fullscreen-lifetimes.md @@ -0,0 +1,79 @@ +# PKG-DANMUKU-08 全屏生命周期与旧核心负载检查点 + +状态:仍 doing。起点 b54a890832ccfec82715129c319befa5d26ef942;本批只补充实际 +浏览器验证和维护文档,没有修改生产运行时、声明、依赖或分发文件。 + +## 覆盖与测试设计 + +新增 `test/browser/danmuku-fullscreen.spec.js`:冻结 npm 核心 5.4.0/当前源码核心, +冻结 npm 弹幕 5.3.0/当前源码插件,CSS 网页全屏/真实 document 全屏,三个引擎。 +每项连续创建三个独立播放器;每个播放器使用真实视频与原生 Worker,按媒体时间 +加载可见弹幕,检查全屏图层宽度、设置/热力图单例、退出后的宽度恢复,以及销毁后 +Worker 恰好终止一次、DOM 无残留。候选还检查 scheduler.frame/operation 清空。 +文件/包哈希和每轮快照写入附件;不能把三个生命周期称作三小时耐久测试。 + +45 秒单项上限为新增三轮播放/全屏操作预留,没有增大旧用例的超时,也没有重试、 +强制点击、伪造媒体事件、替换全屏 API 或跳过某个浏览器。兼容覆盖 API-04/05/07/08。 + +`danmuku-stability.spec.js` 的原有三轮 14 秒、每秒 2/20 条负载现在增加核心版本轴, +附件增加 core 字段,原候选逐条采样/显示/回收、状态池、节点复用和 Worker 断言不变。 +本轮只运行新增旧核心子集;既有候选核心证据仍标明其实际运行日期与源码哈希。 + +## 首轮失败与修正依据 + +1. Chromium 首轮 3 通过、5 失败:旧插件保留同名隐藏测量节点,纯文本定位违反 + 唯一性;改为精确文本与可见节点交集,仍要求实际可见。旧核心销毁后留下的全屏 + 监听器通过测试的 window 全局数组写入下一实例记录;改为实例局部数组,并保留 + 每个旧实例后续收到的事件。BASE-LIFE-18 已在 CORE-16 复现和修复;冻结旧核心的 + 三个实例分别观察三轮/两轮/一轮事件,新核心的每个实例只能收到自己的一轮。 +2. 三引擎首轮 20 通过、4 失败:WebKit 原生退出时 fullscreenElement 和布局先恢复, + change 事件稍后投递;测试提前 destroy 抑制了候选的后续通知。现在在销毁之前 + 使用原有 7 秒 expect 上限等待真实 [true,false] 事件序列,并继续精确断言次数。 + 这不是在缺少事件时跳过检查,也不是对生产代码增加延时。 + +两份失败报告、trace 和错误断言均保留。后续报告不覆盖它们,见机器证据中的路径及哈希。 + +## 已验证结果 + +固定 Node 24.21.0、Yarn 1.22.22;Windows Chromium 153.0.8010.12、Firefox 155.0、 +WebKit 26.6。以下原生全屏均实际进入 document 全屏,未按 API 不可用计作通过。 + +| 输入与范围 | 实际结果 | +| --- | --- | +| 全屏源码,新旧核心/新旧插件/两个模式/三引擎 | 24 通过,87.07 秒 Yarn 总耗时 | +| 全屏 main,新旧核心/候选插件/两个模式/三引擎 | 12 通过,47.09 秒 | +| 全屏 legacy,同上 | 12 通过,47.13 秒 | +| 旧核心,旧/新插件,每秒 2/20 条,三引擎 | 12 通过,278.37 秒 | +| 两个测试文件的只读 ESLint | 通过 | + +源码 72 次、main/legacy 各 36 次播放器生命周期;每个格式重新创建样本,不能 +把累计次数当作一个播放器的长期稳定性证明。main/legacy 使用实际工作区分发字节, +不是仓库外安装验证;证据脚本核对加载 SHA 与对应 dist 文件完全一致。 + +完整快照见 [全屏证据](../baselines/danmuku-fullscreen-validation.json)和 +[旧核心负载证据](../baselines/danmuku-old-core-load-validation.json)。本轮候选普通 +负载三轮完整显示/回收 72 条,分配 3 节点、复用 69 次;密集负载完整处理 720 条, +分配 21–22 节点、复用 698–699 次。全部 Worker 正常终止,销毁后播放器根节点为零。 + +对照07的候选核心报告,先核验原报告哈希以及新旧报告加载的插件字节完全一致。 +候选插件的 RAF 帧间隔 P95:Chromium 本轮 16.7/16.8ms,原报告 16.7/16.7ms; +Firefox 两档均约16.68ms;WebKit 本轮61/79ms,原报告61/80ms。WebKit在这台 +Windows测试环境中本来就没有60fps,旧插件本轮62/79ms;不能把该差异隐去或声称 +所有引擎流畅60fps。原始周期级帧间隔也保留,跨周期总体统计明确包含暂停间隙。 +这些是不同时间运行的有限样本,没有随机化/同时运行对照,不能宣称因果性能提升。 +也未用未强制GC的heap读数证明不存在泄漏。 + +## 重跑与后续 + +- 源码:`yarn test:browser:source test/browser/danmuku-fullscreen.spec.js --workers=2`。 +- main/legacy:显式设置 `ARTPLAYER_DANMUKU_ARTIFACT`,同一入口加 + `--grep 'candidate Danmuku'`。依次运行并在每次前归档前一报告。 +- 旧核心负载:`yarn test:browser:source test/browser/danmuku-stability.spec.js + --grep 'published core /' --workers=2`。Playwright 匹配含项目和文件名的完整标题, + 不使用 `^published core`;本轮第一次错误选择导致的 No tests found 已独立保留, + 不能计作任何测试通过。 + +08 的完整旧插件组合与 Mask/PiP 组合负载仍待继续;09 承担最终仓库外安装、示例、 +分发与声明收口。设备和远端 CI 也没有被本批桌面结果替代。不标任务完成或 npm 可发布。 +回退本批提交即可撤销测试/文档覆盖,生产运行时无需回退。独立本地检查点提交后运行 +提交审计,再继续下一批;没有 push、部署或发布。 diff --git a/refactor/plan.md b/refactor/plan.md index a1cffdfbb..32783fa05 100644 --- a/refactor/plan.md +++ b/refactor/plan.md @@ -611,7 +611,7 @@ - PKG-DANMUKU-05: [记录](changes/2026-09-13-PKG-DANMUKU-05-resources.md) [记录](baselines/danmuku-resources-validation.json) - PKG-DANMUKU-06: [记录](changes/2026-09-13-PKG-DANMUKU-06-types.md) [记录](baselines/danmuku-types-validation.json) - PKG-DANMUKU-07: [记录](changes/2026-09-13-PKG-DANMUKU-07-stability.md) [记录](baselines/danmuku-stability-validation.json) [记录](danmuku-stability.md) -- PKG-DANMUKU-08: [记录](changes/2026-09-14-PKG-DANMUKU-08-native-combinations.md) [记录](baselines/danmuku-combination-checkpoint.json) +- PKG-DANMUKU-08: [记录](changes/2026-09-14-PKG-DANMUKU-08-native-combinations.md) [记录](baselines/danmuku-combination-checkpoint.json) [记录](changes/2026-09-14-PKG-DANMUKU-08-fullscreen-lifetimes.md) [记录](baselines/danmuku-fullscreen-validation.json) [记录](baselines/danmuku-old-core-load-validation.json) - PKG-CANVAS-01: [记录](changes/2026-09-12-PKG-CANVAS-01-contract.md) [记录](baselines/canvas-contract.md) [记录](baselines/canvas-release.json) [记录](canvas-validation.md) [记录](baselines/canvas-contract-validation.json) - PKG-CANVAS-02: [记录](changes/2026-09-12-PKG-CANVAS-02-tests.md) [记录](baselines/canvas-behavior-validation.json) [记录](canvas-validation.md) - PKG-CANVAS-03: [记录](changes/2026-09-12-PKG-CANVAS-03-lifecycle.md) [记录](baselines/canvas-lifecycle-validation.json) [记录](canvas-validation.md) diff --git a/refactor/progress.md b/refactor/progress.md index 74da16291..86c0a4c71 100644 --- a/refactor/progress.md +++ b/refactor/progress.md @@ -1,5 +1,24 @@ # 进度与证据 +## PKG-DANMUKU-08 全屏生命周期与旧核心负载检查点(仍 doing) + +三引擎/新旧核心/新旧弹幕的网页及原生document全屏源码24项通过,候选main与 +legacy各12项通过。每项三个完整播放器生命周期,按媒体时间显示行,核验宽度 +恢复、设置/热力图、Worker终止及候选scheduler清空。冻结旧核心销毁后监听器 +残留按已有BASE-LIFE-18独立记录,新核心不接受这项历史差异。 + +首轮3/5与三引擎首轮20/4失败均保留:分别修正隐藏同名测量节点的测试定位、 +跨实例全局事件记录污染,以及WebKit退出事件晚于fullscreenElement清空的等待。 +没有修改生产运行时/声明、扩大旧超时或重试。新增旧核心持续负载12项通过; +候选完整处理72/720行、分配3/21–22节点,Worker及DOM清理通过。同插件哈希下 +与07候选核心帧间隔P95接近;不是Mask/PiP组合负载或物理设备性能证明。 + +见[变更](changes/2026-09-14-PKG-DANMUKU-08-fullscreen-lifetimes.md)、 +[全屏证据](baselines/danmuku-fullscreen-validation.json)和 +[旧核心负载](baselines/danmuku-old-core-load-validation.json)。261项仍192 done、 +21 doing、48 todo;08接续完整旧插件组合及组合负载,09最终安装分发。 +本检查点独立本地提交,随后核验提交审计;没有push/部署/发布。 + ## PKG-DANMUKU-08 原生画中画与真实 Mask 组合检查点(仍 doing) 新增新旧核心中的两次原生Document PiP开窗,按媒体时间显示弹幕,检查图层/热力图 diff --git a/refactor/tasks.json b/refactor/tasks.json index fd94ccb56..1b107cb01 100644 --- a/refactor/tasks.json +++ b/refactor/tasks.json @@ -3562,7 +3562,10 @@ "acceptance": "性能无未解释退化,反复装卸无累计资源", "evidence": [ "changes/2026-09-14-PKG-DANMUKU-08-native-combinations.md", - "baselines/danmuku-combination-checkpoint.json" + "baselines/danmuku-combination-checkpoint.json", + "changes/2026-09-14-PKG-DANMUKU-08-fullscreen-lifetimes.md", + "baselines/danmuku-fullscreen-validation.json", + "baselines/danmuku-old-core-load-validation.json" ] }, { diff --git a/test/browser/README.md b/test/browser/README.md index 37c0bc793..30422e28f 100644 --- a/test/browser/README.md +++ b/test/browser/README.md @@ -219,7 +219,16 @@ row. CPU-block observations remain diagnostic, not no-loss acceptance. Both it a `danmuku-lifetime.spec.js` accept the same artifact override. The latter verifies the full visible lifetime after a controlled delay to an actual Worker request. -`danmuku-stability.spec.js` runs three native 14-second media cycles at 2 or 20 +`danmuku-fullscreen.spec.js` covers old/current core and plugin combinations in +native document and CSS web fullscreen, with three fresh player lifetimes each. +It checks timestamp-delivered visible text, layout restoration, Worker/DOM cleanup +and instance-local event sequences. Frozen-core post-destroy listeners are an +explicit historical observation, never a waiver for the candidate. Native exit +must deliver its event before teardown; hidden measurement nodes are not visible +rows. `ARTPLAYER_DANMUKU_ARTIFACT` selects a real candidate main/legacy input. + +`danmuku-stability.spec.js` covers old/current core and plugin combinations and +runs three native 14-second media cycles at 2 or 20 rows per second, appending through the public load(rows) contract. The candidate must deliver and recycle every row once, preserve state membership and reuse actual node identities. Its 90-second per-case deadline budgets the 42 seconds diff --git a/test/browser/danmuku-fullscreen.spec.js b/test/browser/danmuku-fullscreen.spec.js new file mode 100644 index 000000000..f976a42bc --- /dev/null +++ b/test/browser/danmuku-fullscreen.spec.js @@ -0,0 +1,167 @@ +import assert from 'node:assert/strict' +import fs from 'node:fs' +import process from 'node:process' +import { ensureArchive, hash, readMember } from '../../refactor/scripts/releases.mjs' +import { compilePackage } from '../helpers/load.js' +import { expect, test } from './fixtures.js' + +const implementations = new Map() +test.beforeAll(async () => { + const release = JSON.parse(fs.readFileSync('refactor/baselines/danmuku-release.json', 'utf8')).release + const member = 'package/dist/artplayer-plugin-danmuku.js' + const published = readMember(await ensureArchive(release), member) + assert.equal(hash(published), release.files[member]) + implementations.set('published', { input: `npm ${release.version}`, code: published.toString() }) + implementations.set('candidate', { input: process.env.ARTPLAYER_DANMUKU_ARTIFACT || 'source UMD', code: process.env.ARTPLAYER_DANMUKU_ARTIFACT ? fs.readFileSync(process.env.ARTPLAYER_DANMUKU_ARTIFACT, 'utf8') : await compilePackage('artplayer-plugin-danmuku', 'umd') }) +}) + +for (const core of ['published', 'candidate']) { + for (const plugin of ['published', 'candidate']) { + for (const mode of ['web', 'native']) { + test(`${core} core / ${plugin} Danmuku: ${mode} fullscreen across three player lifetimes`, async ({ page }, testInfo) => { + test.setTimeout(45000) // Three independent players, native entry/exit and timestamp-delivered rows. + await page.goto(`/test/player.html?core=${core}`) + const input = implementations.get(plugin) + const evidence = { core, plugin, mode, input: input.input, sha256: hash(input.code), cycles: [], outcome: 'incomplete' } + await page.evaluate(() => { + window.fullscreenWorkers = [] + window.fullscreenLifetimes = [] + const NativeWorker = window.Worker + window.Worker = class extends NativeWorker { + constructor(...args) { + super(...args) + this.record = { replies: 0, terminated: 0 } + window.fullscreenWorkers.push(this.record) + this.addEventListener('message', () => this.record.replies++) + } + + terminate() { + this.record.terminated++ + return super.terminate() + } + } + }) + await page.addScriptTag({ content: input.code }) + try { + for (let cycle = 0; cycle < 3; cycle++) { + await page.evaluate(({ cycle, mode }) => { + window.fullscreenRows = [] + window.fullscreenErrors = [] + window.fullscreenModes = [] + window.art = new window.Artplayer({ + container: '.player', + url: '/assets/sample/video.mp4', + muted: true, + fullscreen: true, + fullscreenWeb: true, + plugins: [window.artplayerPluginDanmuku({ danmuku: [], heatmap: true, emitter: true, speed: 5 })], + }) + window.fullscreenPlugin = window.art.plugins.artplayerPluginDanmuku + window.fullscreenOwner = window.fullscreenPlugin.config({}) + const { art, fullscreenModes: modes, fullscreenRows: rows, fullscreenErrors: errors } = window + window.fullscreenLifetimes.push({ modes, rows, errors }) + art.on(mode === 'native' ? 'fullscreen' : 'fullscreenWeb', active => modes.push(active)) + art.on('artplayerPluginDanmuku:visible', row => rows.push({ text: row.text, time: art.currentTime })) + art.on('artplayerPluginDanmuku:error', error => errors.push(String(error))) + const toggle = document.createElement('button') + toggle.id = 'danmuku-fullscreen-toggle' + toggle.textContent = `Fullscreen ${cycle}` + toggle.style.cssText = 'position:absolute;top:10px;left:10px;z-index:9999' + toggle.onclick = () => { + if (mode === 'native') + window.art.fullscreen = !window.art.fullscreen + else + window.art.fullscreenWeb = !window.art.fullscreenWeb + } + window.art.template.$player.append(toggle) + document.querySelector('#play').onclick = () => window.art.play() + }, { cycle, mode }) + await expect.poll(() => page.evaluate(() => window.art.isReady)).toBe(true) + await page.click('#play') + await expect.poll(() => page.evaluate(() => window.art.currentTime)).toBeGreaterThan(0.1) + const width = await page.evaluate(() => window.art.template.$player.clientWidth) + await page.click('#danmuku-fullscreen-toggle') + if (mode === 'native') + await expect.poll(() => page.evaluate(() => (document.fullscreenElement || document.webkitFullscreenElement) === window.art.template.$player)).toBe(true) + else + await expect.poll(() => page.evaluate(() => window.art.fullscreenWeb)).toBe(true) + const text = `Fullscreen row ${cycle}` + await page.evaluate(async (text) => { + await window.fullscreenPlugin.load([{ text, time: window.art.currentTime + 0.5, mode: 1 }]) + }, text) + await expect.poll(() => page.evaluate(text => window.fullscreenRows.some(row => row.text === text), text)).toBe(true) + // The published renderer retains a hidden measurement node with the same text. + await expect(page.getByText(text, { exact: true }).and(page.locator(':visible'))).toBeVisible() + const entered = await page.evaluate(() => ({ + width: window.art.template.$player.clientWidth, + layerWidth: window.art.template.$danmuku.clientWidth, + settings: document.querySelectorAll('.artplayer-plugin-danmuku').length, + heatmaps: document.querySelectorAll('.art-control-heatmap').length, + time: window.art.currentTime, + })) + expect(entered.width).toBeGreaterThan(width) + expect(entered.layerWidth).toBe(entered.width) + expect(entered.settings).toBe(1) + expect(entered.heatmaps).toBe(1) + await page.evaluate(() => window.art.pause()) + await expect.poll(() => page.evaluate(() => window.art.video.paused)).toBe(true) + await page.click('#danmuku-fullscreen-toggle') + if (mode === 'native') + await expect.poll(() => page.evaluate(() => Boolean(document.fullscreenElement || document.webkitFullscreenElement))).toBe(false) + else + await expect.poll(() => page.evaluate(() => window.art.fullscreenWeb)).toBe(false) + await expect.poll(() => page.evaluate(() => window.art.template.$player.clientWidth)).toBe(width) + // Native exit can clear fullscreenElement before its change event is delivered. + await expect.poll(() => page.evaluate(() => window.fullscreenModes)).toEqual([true, false]) + const after = await page.evaluate(() => { + const art = window.art + const owner = window.fullscreenOwner + const modes = [...window.fullscreenModes] + art.destroy() + return { + modes, + errors: window.fullscreenErrors, + roots: document.querySelectorAll('.art-video-player').length, + settings: document.querySelectorAll('.artplayer-plugin-danmuku').length, + heatmaps: document.querySelectorAll('.art-control-heatmap').length, + styles: document.querySelectorAll('style#artplayer-plugin-danmuku').length, + workers: window.fullscreenWorkers.map(worker => ({ ...worker })), + frame: owner.scheduler?.frame, + operation: owner.scheduler?.operation, + } + }) + evidence.cycles.push({ cycle, entered, after }) + expect(after.roots + after.settings + after.heatmaps).toBe(0) + expect(after.styles).toBe(1) + expect(after.errors).toEqual([]) + expect(after.modes).toEqual([true, false]) + expect(after.workers).toHaveLength(cycle + 1) + for (const worker of after.workers) { + expect(worker.replies).toBeGreaterThan(0) + expect(worker.terminated).toBe(1) + } + if (plugin === 'candidate') { + expect(after.frame).toBeNull() + expect(after.operation).toBeNull() + } + } + evidence.lifetimes = await page.evaluate(() => window.fullscreenLifetimes) + for (const [index, lifetime] of evidence.lifetimes.entries()) { + // BASE-LIFE-18: the frozen core keeps native listeners after destroy. + const changes = core === 'published' && mode === 'native' ? 3 - index : 1 + expect(lifetime.modes).toEqual(Array.from({ length: changes }, () => [true, false]).flat()) + expect(lifetime.errors).toEqual([]) + } + evidence.outcome = 'three-lifetimes-fullscreen-playback-cleanup-passed' + } + finally { + await page.evaluate(() => { + if (window.art && !window.art.isDestroy) + window.art.destroy() + }) + await testInfo.attach('danmuku-fullscreen', { contentType: 'application/json', body: JSON.stringify(evidence) }) + } + }) + } + } +} diff --git a/test/browser/danmuku-stability.spec.js b/test/browser/danmuku-stability.spec.js index dd45ecfcf..44ea50be7 100644 --- a/test/browser/danmuku-stability.spec.js +++ b/test/browser/danmuku-stability.spec.js @@ -17,178 +17,180 @@ test.beforeAll(async () => { : await compilePackage('artplayer-plugin-danmuku', 'umd')) }) -for (const implementation of ['published', 'candidate']) { - for (const rate of [2, 20]) { - test(`${implementation}: ${rate} rows per second across three native playback cycles`, async ({ page }, testInfo) => { - // Three 14-second media cycles plus setup/teardown; this is a bounded soak, - // not the ordinary short browser test deadline or a synthetic clock jump. - test.setTimeout(90000) - await page.goto('/test/player.html?core=candidate') - const code = implementations.get(implementation) - await page.addScriptTag({ content: code }) - await page.evaluate(() => window.createPlayer('/assets/sample/video.mp4')) - await page.click('#play') - await expect.poll(() => page.evaluate(() => window.art.currentTime)).toBeGreaterThan(0.1) - await page.click('#pause') - await page.evaluate(() => { - const art = window.art - const evidence = window.stabilityEvidence = { workers: [], frames: [], samples: [], visible: [], recycled: [], callbacks: [], cycles: [], errors: [], allocations: 0, reuses: 0, bypassedPool: 0 } - const NativeWorker = window.Worker - window.Worker = class extends NativeWorker { - constructor(...args) { - super(...args) - this.record = { posts: 0, replies: 0, terminated: 0, errors: [] } - evidence.workers.push(this.record) - this.addEventListener('message', () => this.record.replies++) - this.addEventListener('error', event => this.record.errors.push(event.message)) - } +for (const core of ['published', 'candidate']) { + for (const implementation of ['published', 'candidate']) { + for (const rate of [2, 20]) { + test(`${core} core / ${implementation}: ${rate} rows per second across three native playback cycles`, async ({ page }, testInfo) => { + // Three 14-second media cycles plus setup/teardown; this is a bounded soak, + // not the ordinary short browser test deadline or a synthetic clock jump. + test.setTimeout(90000) + await page.goto(`/test/player.html?core=${core}`) + const code = implementations.get(implementation) + await page.addScriptTag({ content: code }) + await page.evaluate(() => window.createPlayer('/assets/sample/video.mp4')) + await page.click('#play') + await expect.poll(() => page.evaluate(() => window.art.currentTime)).toBeGreaterThan(0.1) + await page.click('#pause') + await page.evaluate(() => { + const art = window.art + const evidence = window.stabilityEvidence = { workers: [], frames: [], samples: [], visible: [], recycled: [], callbacks: [], cycles: [], errors: [], allocations: 0, reuses: 0, bypassedPool: 0 } + const NativeWorker = window.Worker + window.Worker = class extends NativeWorker { + constructor(...args) { + super(...args) + this.record = { posts: 0, replies: 0, terminated: 0, errors: [] } + evidence.workers.push(this.record) + this.addEventListener('message', () => this.record.replies++) + this.addEventListener('error', event => this.record.errors.push(event.message)) + } - postMessage(...args) { - this.record.posts++ - return super.postMessage(...args) - } + postMessage(...args) { + this.record.posts++ + return super.postMessage(...args) + } - terminate() { - this.record.terminated++ - return super.terminate() + terminate() { + this.record.terminated++ + return super.terminate() + } + } + art.on('artplayerPluginDanmuku:error', error => evidence.errors.push(String(error))) + art.on('artplayerPluginDanmuku:visible', row => evidence.visible.push({ id: row.id, time: art.currentTime, wall: performance.now() })) + art.plugins.add(window.artplayerPluginDanmuku({ + danmuku: [], + heatmap: false, + emitter: false, + speed: 1, + antiOverlap: false, + beforeVisible(row) { + evidence.callbacks.push({ id: row.id, time: art.currentTime }) + return true + }, + })) + const owner = window.stabilityOwner = art.plugins.artplayerPluginDanmuku.config({}) + const acquire = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(owner), '$ref').get + const acquired = new WeakSet() + Object.defineProperty(owner, '$ref', { configurable: true, get() { + const available = new Set(this.$refs) + const ref = acquire.call(this) + if (available.size && !available.has(ref)) + evidence.bypassedPool++ + if (acquired.has(ref)) + evidence.reuses++ + else evidence.allocations++ + acquired.add(ref) + return ref + } }) + const getter = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(owner), 'readys').get + Object.defineProperty(owner, 'readys', { configurable: true, get() { + const rows = getter.call(this) + evidence.samples.push({ time: art.currentTime, wall: performance.now(), ids: rows.map(row => row.id) }) + return rows + } }) + const makeWait = owner.makeWait.bind(owner) + owner.makeWait = (row) => { + if (row.$state === 'emit') + evidence.recycled.push({ id: row.id, time: art.currentTime }) + return makeWait(row) + } + const frame = (wall) => { + if (art.playing) + evidence.frames.push({ wall, time: art.currentTime }) + window.stabilityFrame = requestAnimationFrame(frame) } - } - art.on('artplayerPluginDanmuku:error', error => evidence.errors.push(String(error))) - art.on('artplayerPluginDanmuku:visible', row => evidence.visible.push({ id: row.id, time: art.currentTime, wall: performance.now() })) - art.plugins.add(window.artplayerPluginDanmuku({ - danmuku: [], - heatmap: false, - emitter: false, - speed: 1, - antiOverlap: false, - beforeVisible(row) { - evidence.callbacks.push({ id: row.id, time: art.currentTime }) - return true - }, - })) - const owner = window.stabilityOwner = art.plugins.artplayerPluginDanmuku.config({}) - const acquire = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(owner), '$ref').get - const acquired = new WeakSet() - Object.defineProperty(owner, '$ref', { configurable: true, get() { - const available = new Set(this.$refs) - const ref = acquire.call(this) - if (available.size && !available.has(ref)) - evidence.bypassedPool++ - if (acquired.has(ref)) - evidence.reuses++ - else evidence.allocations++ - acquired.add(ref) - return ref - } }) - const getter = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(owner), 'readys').get - Object.defineProperty(owner, 'readys', { configurable: true, get() { - const rows = getter.call(this) - evidence.samples.push({ time: art.currentTime, wall: performance.now(), ids: rows.map(row => row.id) }) - return rows - } }) - const makeWait = owner.makeWait.bind(owner) - owner.makeWait = (row) => { - if (row.$state === 'emit') - evidence.recycled.push({ id: row.id, time: art.currentTime }) - return makeWait(row) - } - const frame = (wall) => { - if (art.playing) - evidence.frames.push({ wall, time: art.currentTime }) window.stabilityFrame = requestAnimationFrame(frame) - } - window.stabilityFrame = requestAnimationFrame(frame) - }) - try { - for (let cycle = 0; cycle < 3; cycle++) { - await page.evaluate(async ({ cycle, rate }) => { - const art = window.art - const base = art.currentTime - const rows = Array.from({ length: 12 * rate }, (_, index) => ({ id: `${cycle}-${index}`, text: `Row ${index}`, time: base + 0.5 + index / rate, mode: index % 3 })) - await art.plugins.artplayerPluginDanmuku.load(rows) - window.stabilityEnd = base + 14 - window.stabilityEvidence.cycles.push({ cycle, base, rows: rows.map(row => ({ id: row.id, time: row.time })), startWall: performance.now() }) - }, { cycle, rate }) - await page.click('#play') - await expect.poll(() => page.evaluate(() => window.art.currentTime >= window.stabilityEnd), { timeout: 22000 }).toBe(true) - await page.click('#pause') - const snapshot = await page.evaluate(() => { - const owner = window.stabilityOwner - const record = window.stabilityEvidence.cycles.at(-1) - const ids = new Set(record.rows.map(row => row.id)) - const visible = window.stabilityEvidence.visible.filter(row => ids.has(row.id)) - const sampled = new Set(window.stabilityEvidence.samples.flatMap(sample => sample.ids).filter(id => ids.has(id))) - const shown = new Set(visible.map(row => row.id)) - const refs = owner.queue.map(row => row.$ref).filter(Boolean) - const queue = new Set(owner.queue) - const members = Object.values(owner.states).flat() - const memory = performance.memory - Object.assign(record, { - endWall: performance.now(), - time: window.art.currentTime, - decodedWidth: window.art.video.videoWidth, - visibleCount: visible.length, - uniqueVisible: shown.size, - missedSampling: record.rows.filter(row => !sampled.has(row.id)).map(row => row.id), - sampledNotVisible: record.rows.filter(row => sampled.has(row.id) && !shown.has(row.id)).map(row => row.id), - queue: owner.queue.length, - states: Object.fromEntries(Object.entries(owner.states).map(([state, rows]) => [state, rows.length])), - nodes: owner.$danmuku.children.length, - pooled: owner.$refs.length, - uniquePool: new Set(owner.$refs).size, - referenced: refs.length, - distinctReferences: new Set(refs).size, - uniqueStateMembers: new Set(members).size, - validStateMembers: Object.entries(owner.states).every(([state, rows]) => rows.every(row => queue.has(row) && row.$state === state)), - heap: memory ? { used: memory.usedJSHeapSize, total: memory.totalJSHeapSize } : null, + }) + try { + for (let cycle = 0; cycle < 3; cycle++) { + await page.evaluate(async ({ cycle, rate }) => { + const art = window.art + const base = art.currentTime + const rows = Array.from({ length: 12 * rate }, (_, index) => ({ id: `${cycle}-${index}`, text: `Row ${index}`, time: base + 0.5 + index / rate, mode: index % 3 })) + await art.plugins.artplayerPluginDanmuku.load(rows) + window.stabilityEnd = base + 14 + window.stabilityEvidence.cycles.push({ cycle, base, rows: rows.map(row => ({ id: row.id, time: row.time })), startWall: performance.now() }) + }, { cycle, rate }) + await page.click('#play') + await expect.poll(() => page.evaluate(() => window.art.currentTime >= window.stabilityEnd), { timeout: 22000 }).toBe(true) + await page.click('#pause') + const snapshot = await page.evaluate(() => { + const owner = window.stabilityOwner + const record = window.stabilityEvidence.cycles.at(-1) + const ids = new Set(record.rows.map(row => row.id)) + const visible = window.stabilityEvidence.visible.filter(row => ids.has(row.id)) + const sampled = new Set(window.stabilityEvidence.samples.flatMap(sample => sample.ids).filter(id => ids.has(id))) + const shown = new Set(visible.map(row => row.id)) + const refs = owner.queue.map(row => row.$ref).filter(Boolean) + const queue = new Set(owner.queue) + const members = Object.values(owner.states).flat() + const memory = performance.memory + Object.assign(record, { + endWall: performance.now(), + time: window.art.currentTime, + decodedWidth: window.art.video.videoWidth, + visibleCount: visible.length, + uniqueVisible: shown.size, + missedSampling: record.rows.filter(row => !sampled.has(row.id)).map(row => row.id), + sampledNotVisible: record.rows.filter(row => sampled.has(row.id) && !shown.has(row.id)).map(row => row.id), + queue: owner.queue.length, + states: Object.fromEntries(Object.entries(owner.states).map(([state, rows]) => [state, rows.length])), + nodes: owner.$danmuku.children.length, + pooled: owner.$refs.length, + uniquePool: new Set(owner.$refs).size, + referenced: refs.length, + distinctReferences: new Set(refs).size, + uniqueStateMembers: new Set(members).size, + validStateMembers: Object.entries(owner.states).every(([state, rows]) => rows.every(row => queue.has(row) && row.$state === state)), + heap: memory ? { used: memory.usedJSHeapSize, total: memory.totalJSHeapSize } : null, + }) + return record }) - return record - }) - expect(snapshot.decodedWidth).toBeGreaterThan(0) - expect(snapshot.time - snapshot.base).toBeGreaterThanOrEqual(14) - // load(rows) appends by public contract; old rows stay in the queue. - expect(snapshot.queue).toBe((cycle + 1) * 12 * rate) - expect(Object.values(snapshot.states).reduce((sum, count) => sum + count, 0)).toBe(snapshot.queue) - if (implementation === 'candidate') { - expect(snapshot.missedSampling).toEqual([]) - expect(snapshot.sampledNotVisible).toEqual([]) - expect(snapshot.visibleCount).toBe(12 * rate) - expect(snapshot.uniqueVisible).toBe(12 * rate) - expect(snapshot.referenced).toBe(0) - expect(snapshot.uniquePool).toBe(snapshot.pooled) - expect(snapshot.nodes).toBe(snapshot.pooled) - expect(snapshot.uniqueStateMembers).toBe(snapshot.queue) - expect(snapshot.validStateMembers).toBe(true) + expect(snapshot.decodedWidth).toBeGreaterThan(0) + expect(snapshot.time - snapshot.base).toBeGreaterThanOrEqual(14) + // load(rows) appends by public contract; old rows stay in the queue. + expect(snapshot.queue).toBe((cycle + 1) * 12 * rate) + expect(Object.values(snapshot.states).reduce((sum, count) => sum + count, 0)).toBe(snapshot.queue) + if (implementation === 'candidate') { + expect(snapshot.missedSampling).toEqual([]) + expect(snapshot.sampledNotVisible).toEqual([]) + expect(snapshot.visibleCount).toBe(12 * rate) + expect(snapshot.uniqueVisible).toBe(12 * rate) + expect(snapshot.referenced).toBe(0) + expect(snapshot.uniquePool).toBe(snapshot.pooled) + expect(snapshot.nodes).toBe(snapshot.pooled) + expect(snapshot.uniqueStateMembers).toBe(snapshot.queue) + expect(snapshot.validStateMembers).toBe(true) + } } } - } - finally { - const evidence = await page.evaluate(() => { - cancelAnimationFrame(window.stabilityFrame) - window.art.destroy() - return { ...window.stabilityEvidence, destroyed: window.art.isDestroy, retainedPlayerRoots: document.querySelectorAll('.art-video-player').length } - }) - await testInfo.attach('danmuku-stability-observation', { contentType: 'application/json', body: JSON.stringify({ implementation, rate, sha256: hash(code), evidence, scope: 'Three bounded real media cycles; published defects are observed, candidate delivery and resource ownership are asserted. Optional unforced heap readings are not leak proof or comparable across engines.' }) }) - expect(evidence.destroyed).toBe(true) - expect(evidence.retainedPlayerRoots).toBe(0) - expect(evidence.errors).toEqual([]) - expect(evidence.workers).toHaveLength(1) - if (implementation === 'candidate' && evidence.cycles.length === 3) { - const expected = evidence.cycles.flatMap(cycle => cycle.rows.map(row => row.id)).sort() - expect(evidence.visible.map(row => row.id).sort()).toEqual(expected) - expect(evidence.recycled.map(row => row.id).sort()).toEqual(expected) - expect(evidence.bypassedPool).toBe(0) - expect(evidence.reuses).toBeGreaterThan(0) - expect(evidence.allocations + evidence.reuses).toBe(expected.length) - expect(evidence.cycles.at(-1).nodes).toBe(evidence.allocations) + finally { + const evidence = await page.evaluate(() => { + cancelAnimationFrame(window.stabilityFrame) + window.art.destroy() + return { ...window.stabilityEvidence, destroyed: window.art.isDestroy, retainedPlayerRoots: document.querySelectorAll('.art-video-player').length } + }) + await testInfo.attach('danmuku-stability-observation', { contentType: 'application/json', body: JSON.stringify({ core, implementation, rate, sha256: hash(code), evidence, scope: 'Three bounded real media cycles; published defects are observed, candidate delivery and resource ownership are asserted. Optional unforced heap readings are not leak proof or comparable across engines.' }) }) + expect(evidence.destroyed).toBe(true) + expect(evidence.retainedPlayerRoots).toBe(0) + expect(evidence.errors).toEqual([]) + expect(evidence.workers).toHaveLength(1) + if (implementation === 'candidate' && evidence.cycles.length === 3) { + const expected = evidence.cycles.flatMap(cycle => cycle.rows.map(row => row.id)).sort() + expect(evidence.visible.map(row => row.id).sort()).toEqual(expected) + expect(evidence.recycled.map(row => row.id).sort()).toEqual(expected) + expect(evidence.bypassedPool).toBe(0) + expect(evidence.reuses).toBeGreaterThan(0) + expect(evidence.allocations + evidence.reuses).toBe(expected.length) + expect(evidence.cycles.at(-1).nodes).toBe(evidence.allocations) + } + for (const worker of evidence.workers) { + expect(worker.terminated).toBe(1) + expect(worker.errors).toEqual([]) + if (implementation === 'candidate') + expect(worker.posts).toBe(worker.replies) + } } - for (const worker of evidence.workers) { - expect(worker.terminated).toBe(1) - expect(worker.errors).toEqual([]) - if (implementation === 'candidate') - expect(worker.posts).toBe(worker.replies) - } - } - }) + }) + } } }