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

Reply via email to