Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: f3e34dde7c9d3ed83bca6c9445800cb499bd8b5d
https://github.com/WebKit/WebKit/commit/f3e34dde7c9d3ed83bca6c9445800cb499bd8b5d
Author: Devin Rousso <[email protected]>
Date: 2026-07-31 (Fri, 31 Jul 2026)
Changed paths:
A LayoutTests/inspector/canvas/create-context-webgpu-expected.txt
A LayoutTests/inspector/canvas/create-context-webgpu.html
A LayoutTests/inspector/canvas/requestClientNodes-webgpu-expected.txt
A LayoutTests/inspector/canvas/requestClientNodes-webgpu.html
A LayoutTests/inspector/canvas/resolveContext-webgpu-expected.txt
A LayoutTests/inspector/canvas/resolveContext-webgpu.html
A LayoutTests/inspector/canvas/resources/webgpu-worker.js
A LayoutTests/inspector/canvas/worker-webgpu-expected.txt
A LayoutTests/inspector/canvas/worker-webgpu.html
M LayoutTests/platform/glib/TestExpectations
M LayoutTests/platform/win/TestExpectations
M Source/JavaScriptCore/inspector/protocol/Canvas.json
M Source/WebCore/Modules/WebGPU/GPUDevice.cpp
M Source/WebCore/Modules/WebGPU/GPUDevice.h
M Source/WebCore/SaferCPPExpectations/UncountedCallArgsCheckerExpectations
M Source/WebCore/html/canvas/GPUCanvasContext.h
M Source/WebCore/html/canvas/GPUCanvasContextCocoa.h
M Source/WebCore/html/canvas/GPUCanvasContextCocoa.mm
M Source/WebCore/inspector/InspectorCanvas.cpp
M Source/WebCore/inspector/InspectorCanvas.h
M Source/WebCore/inspector/InspectorInstrumentation.cpp
M Source/WebCore/inspector/InspectorInstrumentation.h
M Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp
M Source/WebCore/inspector/agents/InspectorCanvasAgent.h
M Source/WebCore/inspector/agents/page/PageCanvasAgent.cpp
M Source/WebCore/inspector/agents/page/PageCanvasAgent.h
M Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js
M Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js
M Source/WebInspectorUI/UserInterface/Models/Canvas.js
M Source/WebInspectorUI/UserInterface/Views/CanvasDetailsSidebarPanel.js
Log Message:
-----------
Web Inspector: Canvas: instrument WebGPU devices
https://bugs.webkit.org/show_bug.cgi?id=320694
Reviewed by Mike Wyrzykowski.
* Source/WebCore/Modules/WebGPU/GPUDevice.h:
(WebCore::GPUDevice::create):
(WebCore::GPUDevice::instances): Added.
(WebCore::GPUDevice::instancesLock): Added.
(WebCore::GPUDevice::isContextThread const): Added.
(WebCore::GPUDevice::contextDestroyed): Added.
(WebCore::GPUDevice::scriptExecutionContext const):
* Source/WebCore/Modules/WebGPU/GPUDevice.cpp:
(WebCore::GPUDevice::instances): Added.
(WebCore::GPUDevice::instancesLock): Added.
(WebCore::GPUDevice::create):
(WebCore::GPUDevice::GPUDevice):
(WebCore::GPUDevice::~GPUDevice):
(WebCore::GPUDevice::contextDestroyed): Added.
Notify inspector after creation and before destruction.
Track all live `GPUDevice` so inspector can instrument them when the frontend
is opened.
* Source/WebCore/html/canvas/GPUCanvasContext.h:
(WebCore::GPUCanvasContext::device const): Added.
* Source/WebCore/html/canvas/GPUCanvasContextCocoa.h:
(WebCore::GPUCanvasContextCocoa::~GPUCanvasContextCocoa): Added.
(WebCore::GPUCanvasContextCocoa::device const): Added.
* Source/WebCore/html/canvas/GPUCanvasContextCocoa.mm:
(WebCore::GPUCanvasContextCocoa::~GPUCanvasContextCocoa): Added.
(WebCore::GPUCanvasContextCocoa::didUpdateCanvasSizeProperties):
(WebCore::GPUCanvasContextCocoa::configure):
(WebCore::GPUCanvasContextCocoa::unconfigure):
Expose the `GPUDevice` configured for a `<canvas>` and notify inspector
whenever a `<canvas>` starts/stops using a `GPUDevice`.
* Source/WebCore/inspector/InspectorCanvas.h:
(WebCore::InspectorCanvas::create):
(WebCore::InspectorCanvas::canvasContext const):
(WebCore::InspectorCanvas::canvasContext): Deleted.
(WebCore::InspectorCanvas::deviceContext const): Added.
(WebCore::InspectorCanvas::getContentAsDataURL):
(WebCore::InspectorCanvas::InspectorCanvas):
* Source/WebCore/inspector/InspectorCanvas.cpp:
(WebCore::InspectorCanvas::create):
(WebCore::InspectorCanvas::InspectorCanvas):
(WebCore::InspectorCanvas::canvasContext const): Added.
(WebCore::InspectorCanvas::deviceContext const): Added.
(WebCore::canvasContextMatchesDevice): Added.
(WebCore::InspectorCanvas::canvasElement const):
(WebCore::InspectorCanvas::scriptExecutionContext const):
(WebCore::InspectorCanvas::resolveContext):
(WebCore::InspectorCanvas::memoryCost const):
(WebCore::InspectorCanvas::clientNodes const):
(WebCore::InspectorCanvas::canvasChanged):
(WebCore::InspectorCanvas::resetRecordingData):
(WebCore::InspectorCanvas::recordAction):
(WebCore::InspectorCanvas::buildObjectForCanvas):
(WebCore::InspectorCanvas::releaseObjectForRecording):
(WebCore::InspectorCanvas::getContentAsDataURL): Added.
(WebCore::InspectorCanvas::buildInitialState):
Store either a `CanvasRenderingContext` or a `GPUDevice` in a `Variant` instead
of always assuming the former.
Expose `features` on the `Canvas.Canvas` since they're immutable at creation
(unlike `Canvas.ContextAttributes`).
* Source/WebCore/inspector/InspectorInstrumentation.h:
(WebCore::InspectorInstrumentation::didCreateWebGPUDevice): Added.
(WebCore::InspectorInstrumentation::willDestroyWebGPUDevice): Added.
(WebCore::InspectorInstrumentation::didChangeGPUDeviceClientNodes): Added.
(WebCore::InspectorInstrumentation::didCreateWebGPUDeviceImpl): Added.
(WebCore::InspectorInstrumentation::willDestroyWebGPUDeviceImpl): Added.
(WebCore::InspectorInstrumentation::didChangeGPUDeviceClientNodesImpl): Added.
* Source/WebCore/inspector/InspectorInstrumentation.cpp:
(WebCore::InspectorInstrumentation::didCreateWebGPUDeviceImpl): Added.
(WebCore::InspectorInstrumentation::willDestroyWebGPUDeviceImpl): Added.
(WebCore::InspectorInstrumentation::didChangeGPUDeviceClientNodesImpl): Added.
Forward `GPUDevice` lifecycle and `<canvas>` changes.
* Source/JavaScriptCore/inspector/protocol/Canvas.json:
* Source/WebCore/inspector/agents/InspectorCanvasAgent.h:
(WebCore::InspectorCanvasAgent::didCreateWebGPUDevice): Added.
(WebCore::InspectorCanvasAgent::willDestroyWebGPUDevice): Added.
(WebCore::InspectorCanvasAgent::findInspectorCanvas): Added WebGPU overload.
(WebCore::InspectorCanvasAgent::bindCanvas): Added WebGPU overload.
* Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp:
(WebCore::InspectorCanvasAgent::internalEnable):
(WebCore::InspectorCanvasAgent::resolveContext):
(WebCore::InspectorCanvasAgent::startRecording):
(WebCore::InspectorCanvasAgent::stopRecording):
(WebCore::InspectorCanvasAgent::didChangeCanvasSize):
(WebCore::InspectorCanvasAgent::didChangeCanvasMemory):
(WebCore::InspectorCanvasAgent::didCreateWebGPUDevice): Added.
(WebCore::InspectorCanvasAgent::willDestroyWebGPUDevice): Added.
(WebCore::InspectorCanvasAgent::recordAction):
(WebCore::InspectorCanvasAgent::reset):
(WebCore::InspectorCanvasAgent::bindCanvas):
(WebCore::InspectorCanvasAgent::unbindCanvas):
(WebCore::InspectorCanvasAgent::findInspectorCanvas):
Discover existing `GPUDevice` when `Canvas` instrumentation is enabled.
* Source/WebCore/inspector/agents/page/PageCanvasAgent.h:
(WebCore::PageCanvasAgent::didChangeGPUDeviceClientNodes): Added.
* Source/WebCore/inspector/agents/page/PageCanvasAgent.cpp:
(WebCore::PageCanvasAgent::didChangeGPUDeviceClientNodes): Added.
Collect every `<canvas>` configured for the `GPUDevice` for
`Canvas.getClientNodes`.
* Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js:
(WI.CanvasManager.prototype._handleTargetRemoved):
Remove all `WI.Canvas` when a `WI.Target` is destroyed.
* Source/WebInspectorUI/UserInterface/Models/Canvas.js:
(WI.Canvas):
(WI.Canvas.fromPayload):
(WI.Canvas.prototype.features): Added.
* Source/WebInspectorUI/UserInterface/Views/CanvasDetailsSidebarPanel.js:
(WI.CanvasDetailsSidebarPanel.prototype.initialLayout):
(WI.CanvasDetailsSidebarPanel.prototype.layout):
(WI.CanvasDetailsSidebarPanel.prototype._refreshFeaturesSection): Added.
Show a new "Features" panel in the details sidebar.
* Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js:
* LayoutTests/inspector/canvas/resources/webgpu-worker.js: Added.
* LayoutTests/inspector/canvas/create-context-webgpu.html: Added.
* LayoutTests/inspector/canvas/create-context-webgpu-expected.txt: Added.
* LayoutTests/inspector/canvas/requestClientNodes-webgpu.html: Added.
* LayoutTests/inspector/canvas/requestClientNodes-webgpu-expected.txt: Added.
* LayoutTests/inspector/canvas/resolveContext-webgpu.html: Added.
* LayoutTests/inspector/canvas/resolveContext-webgpu-expected.txt: Added.
* LayoutTests/inspector/canvas/worker-webgpu.html: Added.
* LayoutTests/inspector/canvas/worker-webgpu-expected.txt: Added.
* LayoutTests/platform/glib/TestExpectations:
* LayoutTests/platform/win/TestExpectations:
Canonical link: https://commits.webkit.org/318336@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications