{ "task": "PKG-JASSUB-10", "status": "validated", "baselineCommit": "04060aa8b6b5cf070bac0c6a9d50eb329fab9719", "unitRed": { "log": "refactor/.cache/jassub-render-red.log", "passed": 12, "failed": 4 }, "browserRed": { "log": "refactor/.cache/jassub-render-browser-red-final.log", "passed": 0, "failed": 3 }, "limitations": [ "Native fault injection, not proof of spontaneous bitmap corruption.", "Firefox offscreen stall remains open." ], "date": "2026-09-14T07:27:35.052Z", "environment": { "node": "24.21.0", "yarn": "1.22.22", "platform": "win32", "engines": [ "Chromium 153.0.8010.12", "Firefox 155.0", "Windows WebKit 26.6" ] }, "artifactOrigin": "Normal yarn build artplayer-plugin-jassub; no manual output edits", "artifacts": [ { "path": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995", "docs": { "path": "docs/compiled/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995" } }, { "path": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae", "docs": { "path": "docs/compiled/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae" } }, { "path": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.mjs", "sha256": "09dd8391827beafce39daa5ceb0bf098c69236c5abee4d2dbf6350354ea94098", "docs": { "path": "docs/compiled/artplayer-plugin-jassub.mjs", "sha256": "09dd8391827beafce39daa5ceb0bf098c69236c5abee4d2dbf6350354ea94098" } } ], "baselineArtifact": { "path": "refactor/.cache/jassub-render-prechange.js", "sha256": "fb8cd8b7b6fb57a7866f929cfe20f7f582c86af96101f23c572dd79b4912dc9f" }, "inputs": [ { "path": "packages/artplayer-plugin-jassub/src/jassub.es.js", "sha256": "ebabca473edfbe7f9768dba25b2c2403f2c9c5dec64292fa008d8eb758e32696" }, { "path": "packages/artplayer-plugin-jassub/ARCHITECTURE.md", "sha256": "b61040dc0d9cad6ec01c3cdc25115f025173a91871d8a3a17cf479523beaf1e4" }, { "path": "test/jassub-offscreen.test.js", "sha256": "e0708d5049cb4d209f185de21aee2326e8b8d956c9b4d3c764f416bb1f5ef24c" }, { "path": "test/browser/jassub-render-failure.spec.js", "sha256": "3eabcdaf2c76bfca3fa7bd64873dcb2f8bd491204e6d7859c4011f5a29389f40" }, { "path": "test/browser/jassub-native.spec.js", "sha256": "3198fb4314a8ac3d379beb027aed79103905f23ab615d7e54a368c7a6763e105" }, { "path": "refactor/scripts/jassub-vendor-patch.test.mjs", "sha256": "212ee2b2d61cd9a72ae90389e0439f98119d1a761105be86592d8a0b01c2e1cd" }, { "path": "docs/assets/jassub/jassub-worker.js", "sha256": "0fb9a83f96fc39426e733a94f3e7fe4e37099324c08328450ba032b653e85707" }, { "path": "docs/assets/jassub/jassub-worker.wasm", "sha256": "73880d99ba9260ac39fc4476491cf254ca784c76f3af2fb03f3f9be8065ad3c0" }, { "path": "docs/assets/jassub/jassub-worker-modern.wasm", "sha256": "8a8b37463713d1f2ddbc1fbb8a35889d9565e5a6670851758b46b2216d8e513c" }, { "path": "docs/assets/jassub/default.woff2", "sha256": "886929903707c5bb28b07cd2eed69921b3d5ef5c49c73a0dd1e187ebf6546a4c" } ], "validation": [ { "command": "yarn test:jassub", "passed": 201, "failed": 0, "log": { "path": "refactor/.cache/jassub-render-suite-final.log", "sha256": "5cc052851610a75450d3b91998c800f20654ba68c53a3fb68b89911616c0b025" } }, { "command": "ARTPLAYER_JASSUB_ARTIFACT=; node --test test/jassub-runtime.test.js test/jassub-vendor-lifecycle.test.js test/jassub-frame-polyfill.test.js test/jassub-offscreen.test.js", "passedPerFormat": 69, "failed": 0, "logs": [ { "path": "refactor/.cache/jassub-render-main-unit.log", "sha256": "0216eb4309c06934cf648b1087c2b1eb4de4a24c388976c750f40711454c2a09" }, { "path": "refactor/.cache/jassub-render-legacy-unit.log", "sha256": "0c41fcf0046d1f0f5d50ef1a2ed54f2771271064ee7107695958b217412a922d" } ] }, { "command": "Final offscreen tests against exact Git prechange main", "passed": 12, "failed": 4, "expectedFailure": true, "log": { "path": "refactor/.cache/jassub-render-red-exact.log", "sha256": "b36df034d7bb1862551d420b559e4433208e4866106498569e067e8c59a1248b" } }, { "command": "Strict package tsc", "exitCode": 0, "log": { "path": "refactor/.cache/jassub-render-types.log", "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } }, { "command": "Targeted read-only eslint", "exitCode": 0, "log": { "path": "refactor/.cache/jassub-render-lint-clean.log", "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } }, { "command": "yarn check:toolchain --strict", "exitCode": 0, "log": { "path": "refactor/.cache/jassub-render-toolchain.log", "sha256": "73998cb4a2395aa495dd689a7f3677c253f077f6f381d94f13555fc3c059b4b6" } }, { "command": "yarn check:types", "files": 37, "changed": 0, "log": { "path": "refactor/.cache/jassub-render-declarations.log", "sha256": "d10a5cd2101a35bd5383f1e1df591578405b14341e5cac786edd54436c8b1e73" } }, { "command": "Final formatted source node --test test/jassub-offscreen.test.js", "passed": 16, "failed": 0, "log": { "path": "refactor/.cache/jassub-render-source-final.log", "sha256": "7334355be083a5c0324df8aa50bbfbe5590187cd533a93bd71a74b94033c966f" } }, { "command": "node --test refactor/scripts/risk-register.test.mjs refactor/scripts/jassub-vendor-patch.test.mjs", "passed": 3, "failed": 0, "log": { "path": "refactor/.cache/jassub-render-register-checks.log", "sha256": "c36d095d2cefbed227f9ea465f27abf4389eddb6736367ed98f221b4cf4b7df6" } } ], "browserCommands": { "fault": "ARTPLAYER_JASSUB_ARTIFACT=; yarn test:browser test/browser/jassub-render-failure.spec.js --workers=1", "normal": "ARTPLAYER_JASSUB_ARTIFACT=; yarn test:browser test/browser/jassub-native.spec.js --workers=1", "legacy": "ARTPLAYER_JASSUB_ARTIFACT=; yarn test:browser test/browser/jassub-render-failure.spec.js test/browser/jassub-native.spec.js --workers=1", "options": "Default diagnostics unset; native regression explicit main-thread, asyncRender enabled. No retries or timeout increases." }, "runs": [ { "path": "refactor/.cache/jassub-render-harness-browser/report.json", "sha256": "ab2a5bdceaa0a59273024bf471a49875b466b68a194d6c8de5086d33abde42e7", "classification": "Invalid initial harness, not production defect evidence", "cases": [ { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "chromium", "status": "failed", "retry": 0, "errors": [ { "location": { "file": "eval at evaluate (:311:30), ", "column": 16, "line": 23 }, "message": "Error: page.evaluate: TypeError: Cannot read properties of undefined (reading 'addEventListener')\n at eval (eval at evaluate (:311:30), :23:16)\n at UtilityScript.evaluate (:313:16)\n at UtilityScript. (:1:44)\n at eval (eval at evaluate (:311:30), :23:16)\n at UtilityScript.evaluate (:313:16)\n at UtilityScript. (:1:44)\n at D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js:26:16" } ], "attachments": { "browser-evidence": { "browser": "153.0.8010.12", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } } ] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "firefox", "status": "failed", "retry": 0, "errors": [ { "location": { "file": "@debugger eval code line 311 > eval", "column": 7, "line": 23 }, "message": "Error: page.evaluate: can't access property \"addEventListener\", instance is undefined\n@debugger eval code line 311 > eval:23:7\nevaluate@debugger eval code:313:16\n@debugger eval code:1:44\n@debugger eval code:1:62\n\n at @debugger eval code line 311 > eval:23:7\n at evaluate@debugger eval code:313:16\n at @debugger eval code:1:44\n at @debugger eval code:1:62\n at D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js:26:16" } ], "attachments": { "browser-evidence": { "browser": "155.0", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "webkit", "status": "failed", "retry": 0, "errors": [ { "location": { "file": "D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js", "column": 16, "line": 26 }, "message": "Error: page.evaluate: TypeError: undefined is not an object (evaluating 'instance.addEventListener')\n\n 24 | await page.locator('#play').click()\n 25 | try {\n> 26 | await page.evaluate((subtitle) => {\n | ^\n 27 | const register = window.artplayerPluginJassub.default || window.artplayerPluginJassub\n 28 | const { instance } = window.art.plugins.add(register({\n 29 | offscreenRender: false,\n at D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js:26:16" } ], "attachments": { "browser-evidence": { "browser": "26.6", "platform": "win32", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "resourceType": "xhr", "failure": { "errorText": "Load request cancelled" } } ] } } } ] }, { "path": "refactor/.cache/jassub-render-red-browser/report.json", "sha256": "c11c2fc67a03467f261a04d97ae9d8479b109d4e52780fc8bbe9fb570a44c82a", "classification": "Old main: native failure leaves the remaining bitmaps open", "cases": [ { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "chromium", "status": "failed", "retry": 0, "errors": [ { "location": { "file": "D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js", "column": 28, "line": 77 }, "message": "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 - 2\u001b[39m\n\u001b[31m+ Received + 2\u001b[39m\n\n\u001b[2m Array [\u001b[22m\n\u001b[2m 0,\u001b[22m\n\u001b[32m- 0,\u001b[39m\n\u001b[32m- 0,\u001b[39m\n\u001b[31m+ 434,\u001b[39m\n\u001b[31m+ 434,\u001b[39m\n\u001b[2m ]\u001b[22m\n\n 75 | expect(evidence.asyncRender).toBe(true)\n 76 | expect(evidence.failure?.name).toBe('InvalidStateError')\n> 77 | expect(evidence.after).toEqual([0, 0, 0])\n | ^\n 78 | await expect.poll(() => page.evaluate(() => {\n 79 | const { instance } = window.bitmapFailureProbe\n 80 | const pixels = instance._ctx.getImageData(0, 0, instance._canvas.width, instance._canvas.height).data\n at D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js:77:28" } ], "attachments": { "bitmap-failure": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "fb8cd8b7b6fb57a7866f929cfe20f7f582c86af96101f23c572dd79b4912dc9f", "evidence": { "before": [ 434, 434, 434 ], "after": [ 0, 434, 434 ], "failure": { "name": "InvalidStateError", "message": "Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image source is detached" }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "153.0.8010.12", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } } ] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "firefox", "status": "failed", "retry": 0, "errors": [ { "location": { "file": "D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js", "column": 28, "line": 77 }, "message": "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 - 2\u001b[39m\n\u001b[31m+ Received + 2\u001b[39m\n\n\u001b[2m Array [\u001b[22m\n\u001b[2m 0,\u001b[22m\n\u001b[32m- 0,\u001b[39m\n\u001b[32m- 0,\u001b[39m\n\u001b[31m+ 434,\u001b[39m\n\u001b[31m+ 434,\u001b[39m\n\u001b[2m ]\u001b[22m\n\n 75 | expect(evidence.asyncRender).toBe(true)\n 76 | expect(evidence.failure?.name).toBe('InvalidStateError')\n> 77 | expect(evidence.after).toEqual([0, 0, 0])\n | ^\n 78 | await expect.poll(() => page.evaluate(() => {\n 79 | const { instance } = window.bitmapFailureProbe\n 80 | const pixels = instance._ctx.getImageData(0, 0, instance._canvas.width, instance._canvas.height).data\n at D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js:77:28" } ], "attachments": { "bitmap-failure": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "fb8cd8b7b6fb57a7866f929cfe20f7f582c86af96101f23c572dd79b4912dc9f", "evidence": { "before": [ 434, 434, 434 ], "after": [ 0, 434, 434 ], "failure": { "name": "InvalidStateError", "message": "CanvasRenderingContext2D.drawImage: Passed-in ImageBitmap is closed" }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "155.0", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "webkit", "status": "failed", "retry": 0, "errors": [ { "location": { "file": "D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js", "column": 28, "line": 77 }, "message": "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 - 2\u001b[39m\n\u001b[31m+ Received + 2\u001b[39m\n\n\u001b[2m Array [\u001b[22m\n\u001b[2m 0,\u001b[22m\n\u001b[32m- 0,\u001b[39m\n\u001b[32m- 0,\u001b[39m\n\u001b[31m+ 868,\u001b[39m\n\u001b[31m+ 868,\u001b[39m\n\u001b[2m ]\u001b[22m\n\n 75 | expect(evidence.asyncRender).toBe(true)\n 76 | expect(evidence.failure?.name).toBe('InvalidStateError')\n> 77 | expect(evidence.after).toEqual([0, 0, 0])\n | ^\n 78 | await expect.poll(() => page.evaluate(() => {\n 79 | const { instance } = window.bitmapFailureProbe\n 80 | const pixels = instance._ctx.getImageData(0, 0, instance._canvas.width, instance._canvas.height).data\n at D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js:77:28" } ], "attachments": { "bitmap-failure": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "fb8cd8b7b6fb57a7866f929cfe20f7f582c86af96101f23c572dd79b4912dc9f", "evidence": { "before": [ 868, 868, 868 ], "after": [ 0, 868, 868 ], "failure": { "name": "InvalidStateError", "message": "The object is in an invalid state." }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "26.6", "platform": "win32", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", "errors": [], "consoleErrors": [], "failedRequests": [] } } } ] }, { "path": "refactor/.cache/jassub-render-force-busy-browser/report.json", "sha256": "a1bfd4cb307e7cfe7f101aa90b6a8a328d2a089440038980145d530e359d7eb3", "classification": "Intermediate candidate: all batch releases pass; two recovery failures from force while busy", "cases": [ { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "chromium", "status": "failed", "retry": 0, "errors": [ { "location": { "file": "D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js", "column": 9, "line": 93 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeGreaterThan\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected: > \u001b[32m100\u001b[39m\nReceived: \u001b[31m0\u001b[39m\n\nCall Log:\n- Timeout 7000ms exceeded while waiting on the predicate\n\n 91 | }\n 92 | return green\n> 93 | })).toBeGreaterThan(100)\n | ^\n 94 | expect(await page.evaluate(() => window.bitmapFailureProbe.errors)).toEqual([])\n 95 | }\n 96 | finally {\n at D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js:93:9" } ], "attachments": { "bitmap-failure": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995", "evidence": { "before": [ 434, 434, 434 ], "after": [ 0, 0, 0 ], "failure": { "name": "InvalidStateError", "message": "Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image source is detached" }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "153.0.8010.12", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } } ] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "firefox", "status": "passed", "retry": 0, "errors": [], "attachments": { "bitmap-failure": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995", "evidence": { "before": [ 434, 434, 434 ], "after": [ 0, 0, 0 ], "failure": { "name": "InvalidStateError", "message": "CanvasRenderingContext2D.drawImage: Passed-in ImageBitmap is closed" }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "155.0", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "webkit", "status": "failed", "retry": 0, "errors": [ { "location": { "file": "D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js", "column": 9, "line": 93 }, "message": "Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeGreaterThan\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\nExpected: > \u001b[32m100\u001b[39m\nReceived: \u001b[31m0\u001b[39m\n\nCall Log:\n- Timeout 7000ms exceeded while waiting on the predicate\n\n 91 | }\n 92 | return green\n> 93 | })).toBeGreaterThan(100)\n | ^\n 94 | expect(await page.evaluate(() => window.bitmapFailureProbe.errors)).toEqual([])\n 95 | }\n 96 | finally {\n at D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js:93:9" } ], "attachments": { "bitmap-failure": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995", "evidence": { "before": [ 868, 868, 868 ], "after": [ 0, 0, 0 ], "failure": { "name": "InvalidStateError", "message": "The object is in an invalid state." }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "26.6", "platform": "win32", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", "errors": [], "consoleErrors": [], "failedRequests": [] } } } ] }, { "path": "refactor/.cache/jassub-render-main-browser/report.json", "sha256": "0c94bf1d7effb1c8d9f694a90045d6ccd03616baa887be8d777bd756bf6384c8", "classification": "Final main fault injection and recovery", "cases": [ { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "chromium", "status": "passed", "retry": 0, "errors": [], "attachments": { "bitmap-failure": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995", "evidence": { "before": [ 434, 434, 434 ], "after": [ 0, 0, 0 ], "failure": { "name": "InvalidStateError", "message": "Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image source is detached" }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "153.0.8010.12", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } } ] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "firefox", "status": "passed", "retry": 0, "errors": [], "attachments": { "bitmap-failure": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995", "evidence": { "before": [ 434, 434, 434 ], "after": [ 0, 0, 0 ], "failure": { "name": "InvalidStateError", "message": "CanvasRenderingContext2D.drawImage: Passed-in ImageBitmap is closed" }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "155.0", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "webkit", "status": "passed", "retry": 0, "errors": [], "attachments": { "bitmap-failure": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995", "evidence": { "before": [ 868, 868, 868 ], "after": [ 0, 0, 0 ], "failure": { "name": "InvalidStateError", "message": "The object is in an invalid state." }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "26.6", "platform": "win32", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", "errors": [], "consoleErrors": [], "failedRequests": [] } } } ] }, { "path": "refactor/.cache/jassub-render-main-native-browser/report.json", "sha256": "55534ea4a5754d78b8368d2445c3a8907b366361afaeacb65c25d16d2b48e3fe", "classification": "Final main: native main-thread playback across three cores", "cases": [ { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with candidate core, customCanvas=false, defaultOffscreen=false", "project": "chromium", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "candidate", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 17, "receivedCount": 16 } ], "snapshots": [ { "phase": "before-seek", "visible": 2676, "signature": 1690974404, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.50815, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 16, "droppedFrames": 0, "decodedFrames": 16 }, "onDemand": true }, { "phase": "after-seek", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.016988, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 142, "droppedFrames": 0, "decodedFrames": 142 }, "onDemand": true }, { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.111681, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 145, "droppedFrames": 0, "decodedFrames": 145 }, "onDemand": true } ], "errors": [], "frames": { "before": "function", "registered": 13, "delivered": 12, "after": "function", "lastMetadata": { "expectedDisplayTime": 1333.8, "height": 720, "mediaTime": 10.2, "presentationTime": 1317.7, "presentedFrames": 20, "processingDuration": 0.1064, "width": 1280 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": true, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.111681, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 145, "droppedFrames": 0, "decodedFrames": 145 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "153.0.8010.12", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } } ] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with published core, customCanvas=false, defaultOffscreen=false", "project": "chromium", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "published", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 17, "receivedCount": 16 } ], "snapshots": [ { "phase": "before-seek", "visible": 2676, "signature": 1690974404, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.506226, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 16, "droppedFrames": 0, "decodedFrames": 16 }, "onDemand": true }, { "phase": "after-seek", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.014403, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 142, "droppedFrames": 0, "decodedFrames": 142 }, "onDemand": true }, { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.119913, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 145, "droppedFrames": 0, "decodedFrames": 145 }, "onDemand": true } ], "errors": [], "frames": { "before": "function", "registered": 13, "delivered": 12, "after": "function", "lastMetadata": { "expectedDisplayTime": 1300.6, "height": 720, "mediaTime": 10.2, "presentationTime": 1284.6, "presentedFrames": 20, "processingDuration": 0.103, "width": 1280 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": true, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.119913, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 145, "droppedFrames": 0, "decodedFrames": 145 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "153.0.8010.12", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } } ] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with published-5.3.1-beta.1 core, customCanvas=false, defaultOffscreen=false", "project": "chromium", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "published-5.3.1-beta.1", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 18, "receivedCount": 17 } ], "snapshots": [ { "phase": "before-seek", "visible": 2676, "signature": 1690974404, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.507059, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 16, "droppedFrames": 0, "decodedFrames": 16 }, "onDemand": true }, { "phase": "after-seek", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.0167, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 142, "droppedFrames": 0, "decodedFrames": 142 }, "onDemand": true }, { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.121131, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 146, "droppedFrames": 0, "decodedFrames": 146 }, "onDemand": true } ], "errors": [], "frames": { "before": "function", "registered": 14, "delivered": 13, "after": "function", "lastMetadata": { "expectedDisplayTime": 1319.5, "height": 720, "mediaTime": 10.24, "presentationTime": 1303, "presentedFrames": 21, "processingDuration": 0.132, "width": 1280 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": true, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.121131, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 146, "droppedFrames": 0, "decodedFrames": 146 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "153.0.8010.12", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } } ] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with candidate core, customCanvas=false, defaultOffscreen=false", "project": "firefox", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "candidate", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 15, "receivedCount": 14 } ], "snapshots": [ { "phase": "before-seek", "visible": 2676, "signature": 1690974404, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.572448, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 13, "droppedFrames": 0, "mozPresentedFrames": 13 }, "onDemand": true }, { "phase": "after-seek", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.000021, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 15, "droppedFrames": 0, "mozPresentedFrames": 15 }, "onDemand": true }, { "phase": "fullscreen", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.040492, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 16, "droppedFrames": 0, "mozPresentedFrames": 16 }, "onDemand": true } ], "errors": [], "frames": { "before": "function", "registered": 11, "delivered": 10, "after": "function", "lastMetadata": { "expectedDisplayTime": 1843.26, "height": 720, "mediaTime": 10.12, "presentationTime": 1843.26, "presentedFrames": 45, "width": 1280 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": true, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.040492, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 16, "droppedFrames": 0, "mozPresentedFrames": 16 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "155.0", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with published core, customCanvas=false, defaultOffscreen=false", "project": "firefox", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "published", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 14, "receivedCount": 13 } ], "snapshots": [ { "phase": "before-seek", "visible": 2676, "signature": 1690974404, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.577102, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 13, "droppedFrames": 0, "mozPresentedFrames": 13 }, "onDemand": true }, { "phase": "after-seek", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.000021, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 15, "droppedFrames": 0, "mozPresentedFrames": 15 }, "onDemand": true }, { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.040457, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 16, "droppedFrames": 0, "mozPresentedFrames": 16 }, "onDemand": true } ], "errors": [], "frames": { "before": "function", "registered": 10, "delivered": 9, "after": "function", "lastMetadata": { "expectedDisplayTime": 1568.46, "height": 720, "mediaTime": 10.12, "presentationTime": 1568.46, "presentedFrames": 45, "width": 1280 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": true, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.040457, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 16, "droppedFrames": 0, "mozPresentedFrames": 16 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "155.0", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "NS_ERROR_PARSED_DATA_CACHED" } } ] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with published-5.3.1-beta.1 core, customCanvas=false, defaultOffscreen=false", "project": "firefox", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "published-5.3.1-beta.1", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 14, "receivedCount": 13 } ], "snapshots": [ { "phase": "before-seek", "visible": 2676, "signature": 1690974404, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.331069, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 7, "droppedFrames": 0, "mozPresentedFrames": 7 }, "onDemand": true }, { "phase": "after-seek", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.000021, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 8, "droppedFrames": 0, "mozPresentedFrames": 8 }, "onDemand": true }, { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.040195, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 9, "droppedFrames": 0, "mozPresentedFrames": 9 }, "onDemand": true } ], "errors": [], "frames": { "before": "function", "registered": 10, "delivered": 9, "after": "function", "lastMetadata": { "expectedDisplayTime": 1246, "height": 720, "mediaTime": 10.08, "presentationTime": 1246, "presentedFrames": 32, "width": 1280 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": true, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.040195, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 9, "droppedFrames": 0, "mozPresentedFrames": 9 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "155.0", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "NS_ERROR_PARSED_DATA_CACHED" } } ] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with candidate core, customCanvas=false, defaultOffscreen=false", "project": "webkit", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "candidate", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 19, "receivedCount": 17 } ], "snapshots": [ { "phase": "before-seek", "visible": 13152, "signature": 1263898348, "width": 1280, "height": 720, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.5820834, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, { "phase": "after-seek", "visible": 30818, "signature": 827736580, "width": 1280, "height": 720, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.0713125, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, { "phase": "fullscreen", "visible": 119170, "signature": 1826006850, "width": 2560, "height": 1440, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.3293542, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true } ], "errors": [], "frames": { "before": "undefined", "registered": 15, "delivered": 14, "after": "function", "lastMetadata": { "presentationTime": 3210, "expectedDisplayTime": 3552, "width": 640, "height": 360, "mediaTime": 10.6897709, "presentedFrames": 0, "processingDuration": 0 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": false, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 119170, "signature": 1826006850, "width": 2560, "height": 1440, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.3293542, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "26.6", "platform": "win32", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with published core, customCanvas=false, defaultOffscreen=false", "project": "webkit", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "published", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 22, "receivedCount": 20 } ], "snapshots": [ { "phase": "before-seek", "visible": 13152, "signature": 1263898348, "width": 1280, "height": 720, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.6690626, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, { "phase": "after-seek", "visible": 30818, "signature": 827736580, "width": 1280, "height": 720, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.1203959, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, { "phase": "fullscreen", "visible": 119170, "signature": 1826006850, "width": 2560, "height": 1440, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.4891459, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true } ], "errors": [], "frames": { "before": "undefined", "registered": 18, "delivered": 17, "after": "function", "lastMetadata": { "presentationTime": 3568, "expectedDisplayTime": 3940, "width": 640, "height": 360, "mediaTime": 10.8824377, "presentedFrames": 0, "processingDuration": 0 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": false, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 119170, "signature": 1826006850, "width": 2560, "height": 1440, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.4891459, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "26.6", "platform": "win32", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with published-5.3.1-beta.1 core, customCanvas=false, defaultOffscreen=false", "project": "webkit", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "published-5.3.1-beta.1", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js", "sha256": "6dc1e7a9e2172c4983c99b2e16c969a974039e6fe9a48b94817dd0a7a30fa995" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 19, "receivedCount": 18 } ], "snapshots": [ { "phase": "before-seek", "visible": 13152, "signature": 1263898348, "width": 1280, "height": 720, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.5862292, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, { "phase": "after-seek", "visible": 30818, "signature": 827736580, "width": 1280, "height": 720, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.1024583, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, { "phase": "fullscreen", "visible": 119170, "signature": 1826006850, "width": 2560, "height": 1440, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.3547709, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true } ], "errors": [], "frames": { "before": "undefined", "registered": 15, "delivered": 14, "after": "function", "lastMetadata": { "presentationTime": 3428, "expectedDisplayTime": 3787, "width": 640, "height": 360, "mediaTime": 10.7305418, "presentedFrames": 0, "processingDuration": 0 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": false, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 119170, "signature": 1826006850, "width": 2560, "height": 1440, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.3547709, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "26.6", "platform": "win32", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", "errors": [], "consoleErrors": [], "failedRequests": [] } } } ] }, { "path": "refactor/.cache/jassub-render-legacy-browser/report.json", "sha256": "cc96b5249214b750293d5db4953d6bcec5eba7c28c19722458d54058ebbb5e6d", "classification": "Final legacy: native failure/recovery and main-thread playback", "cases": [ { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with candidate core, customCanvas=false, defaultOffscreen=false", "project": "chromium", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "candidate", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 15, "receivedCount": 14 } ], "snapshots": [ { "phase": "before-seek", "visible": 2676, "signature": 1690974404, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.504158, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 16, "droppedFrames": 0, "decodedFrames": 16 }, "onDemand": true }, { "phase": "after-seek", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.02, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 142, "droppedFrames": 0, "decodedFrames": 142 }, "onDemand": true }, { "phase": "fullscreen", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.02, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 142, "droppedFrames": 0, "decodedFrames": 142 }, "onDemand": true } ], "errors": [], "frames": { "before": "function", "registered": 11, "delivered": 10, "after": "function", "lastMetadata": { "expectedDisplayTime": 1242.8, "height": 720, "mediaTime": 10.12, "presentationTime": 1226.3, "presentedFrames": 18, "processingDuration": 0.001, "width": 1280 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": true, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.02, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 142, "droppedFrames": 0, "decodedFrames": 142 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "153.0.8010.12", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } } ] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with published core, customCanvas=false, defaultOffscreen=false", "project": "chromium", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "published", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 17, "receivedCount": 16 } ], "snapshots": [ { "phase": "before-seek", "visible": 2676, "signature": 1690974404, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.507876, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 16, "droppedFrames": 0, "decodedFrames": 16 }, "onDemand": true }, { "phase": "after-seek", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.011122, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 142, "droppedFrames": 0, "decodedFrames": 142 }, "onDemand": true }, { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.113968, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 145, "droppedFrames": 0, "decodedFrames": 145 }, "onDemand": true } ], "errors": [], "frames": { "before": "function", "registered": 13, "delivered": 12, "after": "function", "lastMetadata": { "expectedDisplayTime": 1284.7, "height": 720, "mediaTime": 10.2, "presentationTime": 1268.7, "presentedFrames": 20, "processingDuration": 0.1041, "width": 1280 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": true, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.113968, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 145, "droppedFrames": 0, "decodedFrames": 145 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "153.0.8010.12", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } } ] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with published-5.3.1-beta.1 core, customCanvas=false, defaultOffscreen=false", "project": "chromium", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "published-5.3.1-beta.1", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 18, "receivedCount": 17 } ], "snapshots": [ { "phase": "before-seek", "visible": 2676, "signature": 1690974404, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.50656, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 16, "droppedFrames": 0, "decodedFrames": 16 }, "onDemand": true }, { "phase": "after-seek", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.016375, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 142, "droppedFrames": 0, "decodedFrames": 142 }, "onDemand": true }, { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.118281, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 145, "droppedFrames": 0, "decodedFrames": 145 }, "onDemand": true } ], "errors": [], "frames": { "before": "function", "registered": 14, "delivered": 13, "after": "function", "lastMetadata": { "expectedDisplayTime": 1307, "height": 720, "mediaTime": 10.24, "presentationTime": 1291.2, "presentedFrames": 21, "processingDuration": 0.1267, "width": 1280 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": true, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.118281, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 145, "droppedFrames": 0, "decodedFrames": 145 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "153.0.8010.12", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } } ] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with candidate core, customCanvas=false, defaultOffscreen=false", "project": "firefox", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "candidate", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 19, "receivedCount": 18 } ], "snapshots": [ { "phase": "before-seek", "visible": 2676, "signature": 1690974404, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.557524, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 13, "droppedFrames": 0, "mozPresentedFrames": 13 }, "onDemand": true }, { "phase": "after-seek", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.000022, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 15, "droppedFrames": 0, "mozPresentedFrames": 15 }, "onDemand": true }, { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.161224, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 19, "droppedFrames": 0, "mozPresentedFrames": 19 }, "onDemand": true } ], "errors": [], "frames": { "before": "function", "registered": 15, "delivered": 14, "after": "function", "lastMetadata": { "expectedDisplayTime": 1915.22, "height": 720, "mediaTime": 10.2, "presentationTime": 1915.22, "presentedFrames": 48, "width": 1280 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": true, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.161224, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 19, "droppedFrames": 0, "mozPresentedFrames": 19 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "155.0", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with published core, customCanvas=false, defaultOffscreen=false", "project": "firefox", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "published", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 16, "receivedCount": 15 } ], "snapshots": [ { "phase": "before-seek", "visible": 2676, "signature": 1690974404, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.564941, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 13, "droppedFrames": 0, "mozPresentedFrames": 13 }, "onDemand": true }, { "phase": "after-seek", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.000021, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 14, "droppedFrames": 0, "mozPresentedFrames": 14 }, "onDemand": true }, { "phase": "fullscreen", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.040466, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 15, "droppedFrames": 0, "mozPresentedFrames": 15 }, "onDemand": true } ], "errors": [], "frames": { "before": "function", "registered": 12, "delivered": 11, "after": "function", "lastMetadata": { "expectedDisplayTime": 1570.66, "height": 720, "mediaTime": 10.12, "presentationTime": 1570.66, "presentedFrames": 44, "width": 1280 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": true, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.040466, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 15, "droppedFrames": 0, "mozPresentedFrames": 15 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "155.0", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with published-5.3.1-beta.1 core, customCanvas=false, defaultOffscreen=false", "project": "firefox", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "published-5.3.1-beta.1", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 15, "receivedCount": 14 } ], "snapshots": [ { "phase": "before-seek", "visible": 2676, "signature": 1690974404, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.333505, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 7, "droppedFrames": 0, "mozPresentedFrames": 7 }, "onDemand": true }, { "phase": "after-seek", "visible": 6216, "signature": 3526987101, "width": 640, "height": 360, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.000021, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 9, "droppedFrames": 0, "mozPresentedFrames": 9 }, "onDemand": true }, { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.040411, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 10, "droppedFrames": 0, "mozPresentedFrames": 10 }, "onDemand": true } ], "errors": [], "frames": { "before": "function", "registered": 11, "delivered": 10, "after": "function", "lastMetadata": { "expectedDisplayTime": 1332.88, "height": 720, "mediaTime": 10.12, "presentationTime": 1332.88, "presentedFrames": 34, "width": 1280 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": true, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 22298, "signature": 2781790832, "width": 1280, "height": 720, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.040411, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 10, "droppedFrames": 0, "mozPresentedFrames": 10 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "155.0", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "NS_ERROR_PARSED_DATA_CACHED" } } ] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with candidate core, customCanvas=false, defaultOffscreen=false", "project": "webkit", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "candidate", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 21, "receivedCount": 20 } ], "snapshots": [ { "phase": "before-seek", "visible": 13152, "signature": 1263898348, "width": 1280, "height": 720, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.6290835, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, { "phase": "after-seek", "visible": 30818, "signature": 827736580, "width": 1280, "height": 720, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.1345834, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, { "phase": "fullscreen", "visible": 119170, "signature": 1826006850, "width": 2560, "height": 1440, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.5196876, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true } ], "errors": [], "frames": { "before": "undefined", "registered": 17, "delivered": 16, "after": "function", "lastMetadata": { "presentationTime": 3722, "expectedDisplayTime": 4097, "width": 640, "height": 360, "mediaTime": 10.9120002, "presentedFrames": 0, "processingDuration": 0 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": false, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 119170, "signature": 1826006850, "width": 2560, "height": 1440, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.5196876, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "26.6", "platform": "win32", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with published core, customCanvas=false, defaultOffscreen=false", "project": "webkit", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "published", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 20, "receivedCount": 19 } ], "snapshots": [ { "phase": "before-seek", "visible": 13152, "signature": 1263898348, "width": 1280, "height": 720, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.5798542, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, { "phase": "after-seek", "visible": 30818, "signature": 827736580, "width": 1280, "height": 720, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.0724167, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, { "phase": "fullscreen", "visible": 119170, "signature": 1826006850, "width": 2560, "height": 1440, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.3716459, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true } ], "errors": [], "frames": { "before": "undefined", "registered": 16, "delivered": 15, "after": "function", "lastMetadata": { "presentationTime": 3375, "expectedDisplayTime": 3765, "width": 640, "height": 360, "mediaTime": 10.6888543, "presentedFrames": 0, "processingDuration": 0 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": false, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 119170, "signature": 1826006850, "width": 2560, "height": 1440, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.3716459, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "26.6", "platform": "win32", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB candidate artifact renders actual WASM subtitles through seek and layout with published-5.3.1-beta.1 core, customCanvas=false, defaultOffscreen=false", "project": "webkit", "status": "passed", "retry": 0, "errors": [], "attachments": { "actual-jassub-evidence": { "core": "published-5.3.1-beta.1", "onDemandRender": true, "customCanvas": false, "defaultOffscreen": false, "source": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae" }, "subtitleSha256": "12994d1b6a07c45fd9776cb8709afc37725a8003bd90e4e829b7cc44fbadc0ec", "resources": [ { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker.js", "status": 200, "contentType": "text/javascript" }, { "url": "http://127.0.0.1:8084/assets/jassub/jassub-worker-modern.wasm", "status": 200, "contentType": "application/wasm" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" }, { "url": "http://127.0.0.1:8084/assets/jassub/default.woff2", "status": 200, "contentType": "font/woff2" } ], "external": [], "state": { "workers": [ { "url": "/assets/jassub/jassub-worker.js", "terminated": 1, "sentCount": 19, "receivedCount": 17 } ], "snapshots": [ { "phase": "before-seek", "visible": 13152, "signature": 1263898348, "width": 1280, "height": 720, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 0.5524376, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, { "phase": "after-seek", "visible": 30818, "signature": 827736580, "width": 1280, "height": 720, "cssWidth": 640, "cssHeight": 360, "clip": { "x": 8, "y": 8, "width": 640, "height": 360 }, "time": 10.1231875, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, { "phase": "fullscreen", "visible": 119170, "signature": 1826006850, "width": 2560, "height": 1440, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.3799167, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true } ], "errors": [], "frames": { "before": "undefined", "registered": 15, "delivered": 14, "after": "function", "lastMetadata": { "presentationTime": 3484, "expectedDisplayTime": 3842, "width": 640, "height": 360, "mediaTime": 10.7383334, "presentedFrames": 0, "processingDuration": 0 } }, "renderCalls": [ { "context": true, "images": 0 }, { "context": true, "images": 0 }, { "context": true, "images": 2 }, { "context": true, "images": 2 }, { "context": true, "images": 2 } ], "offscreen": { "available": false, "selected": false }, "lastPixel": { "phase": "fullscreen", "visible": 119170, "signature": 1826006850, "width": 2560, "height": 1440, "cssWidth": 1280, "cssHeight": 720, "clip": { "x": 0, "y": 0, "width": 1280, "height": 720 }, "time": 10.3799167, "connected": true, "media": { "paused": false, "readyState": 4, "totalFrames": 0, "droppedFrames": 0, "decodedFrames": 0 }, "onDemand": true }, "readbackFrame": false, "synchronousRender": false, "screenshotReadback": false }, "limitation": "Actual worker, WASM and local font; offscreen option explicitly false. Canvas pixels are read from a separate canvas copying the native display bitmap. No full failure recovery, sustained GPU/memory or physical-device acceptance; candidate adds direct-then-host destruction." }, "browser-evidence": { "browser": "26.6", "platform": "win32", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "chromium", "status": "passed", "retry": 0, "errors": [], "attachments": { "bitmap-failure": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae", "evidence": { "before": [ 434, 434, 434 ], "after": [ 0, 0, 0 ], "failure": { "name": "InvalidStateError", "message": "Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image source is detached" }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "153.0.8010.12", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } } ] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "firefox", "status": "passed", "retry": 0, "errors": [], "attachments": { "bitmap-failure": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae", "evidence": { "before": [ 434, 434, 434 ], "after": [ 0, 0, 0 ], "failure": { "name": "InvalidStateError", "message": "CanvasRenderingContext2D.drawImage: Passed-in ImageBitmap is closed" }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "155.0", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "NS_ERROR_PARSED_DATA_CACHED" } } ] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "webkit", "status": "passed", "retry": 0, "errors": [], "attachments": { "bitmap-failure": { "artifact": "packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js", "sha256": "373682081158e2f94a64b5917efcedfef3e65c8103c07554a3a482c81d911aae", "evidence": { "before": [ 868, 868, 868 ], "after": [ 0, 0, 0 ], "failure": { "name": "InvalidStateError", "message": "The object is in an invalid state." }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "26.6", "platform": "win32", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", "errors": [], "consoleErrors": [], "failedRequests": [] } } } ] }, { "path": "refactor/.cache/jassub-render-red-exact-browser/report.json", "sha256": "d234a22017bf8f362d680465c539f980fddc07d839e0385be30f8060580661f6", "classification": "Final identical fault regression against exact prechange main", "cases": [ { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "chromium", "status": "failed", "retry": 0, "errors": [ { "location": { "file": "D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js", "column": 28, "line": 83 }, "message": "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 - 2\u001b[39m\n\u001b[31m+ Received + 2\u001b[39m\n\n\u001b[2m Array [\u001b[22m\n\u001b[2m 0,\u001b[22m\n\u001b[32m- 0,\u001b[39m\n\u001b[32m- 0,\u001b[39m\n\u001b[31m+ 434,\u001b[39m\n\u001b[31m+ 434,\u001b[39m\n\u001b[2m ]\u001b[22m\n\n 81 | expect(evidence.asyncRender).toBe(true)\n 82 | expect(evidence.failure?.name).toBe('InvalidStateError')\n> 83 | expect(evidence.after).toEqual([0, 0, 0])\n | ^\n 84 | // A busy renderer intentionally ignores resize(force); let its pending demand finish first.\n 85 | await expect.poll(() => page.evaluate(() => window.bitmapFailureProbe.instance.busy)).toBe(false)\n 86 | await page.evaluate(() => window.bitmapFailureProbe.instance.resize(0, 0, 0, 0, true))\n at D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js:83:28" } ], "attachments": { "bitmap-failure": { "artifact": "refactor/.cache/jassub-render-prechange.js", "sha256": "fb8cd8b7b6fb57a7866f929cfe20f7f582c86af96101f23c572dd79b4912dc9f", "evidence": { "before": [ 434, 434, 434 ], "after": [ 0, 434, 434 ], "failure": { "name": "InvalidStateError", "message": "Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image source is detached" }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "153.0.8010.12", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.8010.12 Safari/537.36", "errors": [], "consoleErrors": [], "failedRequests": [ { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } }, { "url": "http://127.0.0.1:8084/assets/sample/steve-jobs.mp4", "resourceType": "media", "failure": { "errorText": "net::ERR_ABORTED" } } ] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "firefox", "status": "failed", "retry": 0, "errors": [ { "location": { "file": "D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js", "column": 28, "line": 83 }, "message": "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 - 2\u001b[39m\n\u001b[31m+ Received + 2\u001b[39m\n\n\u001b[2m Array [\u001b[22m\n\u001b[2m 0,\u001b[22m\n\u001b[32m- 0,\u001b[39m\n\u001b[32m- 0,\u001b[39m\n\u001b[31m+ 434,\u001b[39m\n\u001b[31m+ 434,\u001b[39m\n\u001b[2m ]\u001b[22m\n\n 81 | expect(evidence.asyncRender).toBe(true)\n 82 | expect(evidence.failure?.name).toBe('InvalidStateError')\n> 83 | expect(evidence.after).toEqual([0, 0, 0])\n | ^\n 84 | // A busy renderer intentionally ignores resize(force); let its pending demand finish first.\n 85 | await expect.poll(() => page.evaluate(() => window.bitmapFailureProbe.instance.busy)).toBe(false)\n 86 | await page.evaluate(() => window.bitmapFailureProbe.instance.resize(0, 0, 0, 0, true))\n at D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js:83:28" } ], "attachments": { "bitmap-failure": { "artifact": "refactor/.cache/jassub-render-prechange.js", "sha256": "fb8cd8b7b6fb57a7866f929cfe20f7f582c86af96101f23c572dd79b4912dc9f", "evidence": { "before": [ 434, 434, 434 ], "after": [ 0, 434, 434 ], "failure": { "name": "InvalidStateError", "message": "CanvasRenderingContext2D.drawImage: Passed-in ImageBitmap is closed" }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "155.0", "platform": "win32", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:155.0) Gecko/20100101 Firefox/155.0", "errors": [], "consoleErrors": [], "failedRequests": [] } } }, { "title": "JASSUB closes the entire bitmap batch after a native draw failure and renders the next frame", "project": "webkit", "status": "failed", "retry": 0, "errors": [ { "location": { "file": "D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js", "column": 28, "line": 83 }, "message": "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 - 2\u001b[39m\n\u001b[31m+ Received + 2\u001b[39m\n\n\u001b[2m Array [\u001b[22m\n\u001b[2m 0,\u001b[22m\n\u001b[32m- 0,\u001b[39m\n\u001b[32m- 0,\u001b[39m\n\u001b[31m+ 868,\u001b[39m\n\u001b[31m+ 868,\u001b[39m\n\u001b[2m ]\u001b[22m\n\n 81 | expect(evidence.asyncRender).toBe(true)\n 82 | expect(evidence.failure?.name).toBe('InvalidStateError')\n> 83 | expect(evidence.after).toEqual([0, 0, 0])\n | ^\n 84 | // A busy renderer intentionally ignores resize(force); let its pending demand finish first.\n 85 | await expect.poll(() => page.evaluate(() => window.bitmapFailureProbe.instance.busy)).toBe(false)\n 86 | await page.evaluate(() => window.bitmapFailureProbe.instance.resize(0, 0, 0, 0, true))\n at D:\\github\\ArtPlayer\\test\\browser\\jassub-render-failure.spec.js:83:28" } ], "attachments": { "bitmap-failure": { "artifact": "refactor/.cache/jassub-render-prechange.js", "sha256": "fb8cd8b7b6fb57a7866f929cfe20f7f582c86af96101f23c572dd79b4912dc9f", "evidence": { "before": [ 868, 868, 868 ], "after": [ 0, 868, 868 ], "failure": { "name": "InvalidStateError", "message": "The object is in an invalid state." }, "asyncRender": true }, "limitation": "Actual JASSUB Worker/WASM bitmap, plus two native bitmap copies. Deliberately closing the first bitmap injects a native draw error; this does not claim spontaneous Worker corruption or Firefox offscreen recovery." }, "browser-evidence": { "browser": "26.6", "platform": "win32", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.6 Safari/605.1.15", "errors": [], "consoleErrors": [], "failedRequests": [] } } } ] } ], "notes": [ "Full suite and exact old-main red sequence precede a formatting-only if brace; the final formatted source offscreen group was re-run and passes all 16 tests. Browser test content was unchanged after final native/red-exact runs.", "The two new bitmap copies are native resources; the fault is deliberate closure of the original Worker bitmap, not observed spontaneous corruption.", "No public types, package version, Worker protocol, dependencies or default options changed.", "Main/legacy each have 12 final native cases; ESM is built but not separately browser-executed.", "JASSUB-09/05 and Firefox offscreen risk remain open. No package-wide release acceptance, remote CI, physical devices or publication is claimed." ] }