haikuwebkit/LayoutTests/inspector/canvas/requestClientNodes-css.html

90 lines
2.8 KiB
HTML
Raw Permalink Normal View History

Web Inspector: Canvas: instrument WebGPUDevice instead of GPUCanvasContext https://bugs.webkit.org/show_bug.cgi?id=201650 Reviewed by Joseph Pecoraro. Source/JavaScriptCore: Most of the actual "work" done with Web GPU actually uses a `WebGPUDevice`. A `GPUCanvasContext` is basically just a display "client" of the device, and isn't even required (e.g. compute pipeline). We should treat the `GPUCanvasContext` almost like a `-webkit-canvas` client of a `WebGPUDevice`. * inspector/protocol/Canvas.json: - Add `powerPreference` key to `ContextAttributes` type. - Rename `requestCSSCanvasClientNodes` command to `requestClientNodes` for the above reason. - Rename `cssCanvasClientNodesChanged` event to `clientNodesChanged` for the above reason. - Rename `resolveCanvasContext` command to `resolveContext` since a `WebGPUDevice` isn't really a "canvas". Source/WebCore: Most of the actual "work" done with Web GPU actually uses a `WebGPUDevice`. A `GPUCanvasContext` is basically just a display "client" of the device, and isn't even required (e.g. compute pipeline). We should treat the `GPUCanvasContext` almost like a `-webkit-canvas` client of a `WebGPUDevice`. Tests: inspector/canvas/create-context-webgpu.html inspector/canvas/requestClientNodes-webgpu.html inspector/canvas/resolveContext-webgpu.html * Modules/webgpu/WebGPUAdapter.cpp: (WebCore::WebGPUAdapter::requestDevice const): Notify web inspector after a device is created. * Modules/webgpu/WebGPUDevice.idl: * Modules/webgpu/WebGPUDevice.h: * Modules/webgpu/WebGPUDevice.cpp: (WebCore::WebGPUDevice::instances): Added. (WebCore::WebGPUDevice::instancesMutex): Added. (WebCore::WebGPUDevice::~WebGPUDevice): Added. Notify web inspector when the device is about to be destructed. * Modules/webgpu/GPUCanvasContext.h: * Modules/webgpu/GPUCanvasContext.cpp: (WebCore::GPUCanvasContext::create): (WebCore::GPUCanvasContext::configureSwapChain): * inspector/InspectorCanvas.h: * inspector/InspectorCanvas.cpp: (WebCore::canvasIfContextMatchesDevice): Added. (WebCore::InspectorCanvas::create): (WebCore::InspectorCanvas::InspectorCanvas): (WebCore::InspectorCanvas::canvasContext const): Added. (WebCore::InspectorCanvas::canvasElement const): Added. (WebCore::InspectorCanvas::isDeviceForCanvasContext const): Added. (WebCore::InspectorCanvas::deviceContext const): Added. (WebCore::InspectorCanvas::scriptExecutionContext const): Added. (WebCore::InspectorCanvas::resolveContext const): Added. (WebCore::InspectorCanvas::clientNodes const): Added. (WebCore::InspectorCanvas::canvasChanged): (WebCore::InspectorCanvas::resetRecordingData): (WebCore::InspectorCanvas::recordAction): (WebCore::InspectorCanvas::buildObjectForCanvas): (WebCore::InspectorCanvas::releaseObjectForRecording): (WebCore::InspectorCanvas::getCanvasContentAsDataURL): (WebCore::InspectorCanvas::buildInitialState): (WebCore::InspectorCanvas::canvasElement): Deleted. * inspector/InspectorInstrumentation.cpp: (WebCore::InspectorInstrumentation::didCreateWebGPUDeviceImpl): Added. (WebCore::InspectorInstrumentation::willDestroyWebGPUDeviceImpl): Added. (WebCore::InspectorInstrumentation::willConfigureSwapChainImpl): Added. * inspector/InspectorInstrumentation.h: (WebCore::InspectorInstrumentation::didCreateWebGPUDevice): Added. (WebCore::InspectorInstrumentation::willDestroyWebGPUDevice): Added. (WebCore::InspectorInstrumentation::willConfigureSwapChain): Added. * inspector/agents/InspectorCanvasAgent.h: * inspector/agents/InspectorCanvasAgent.cpp: (WebCore::InspectorCanvasAgent::enable): (WebCore::InspectorCanvasAgent::requestClientNodes): Added. (WebCore::InspectorCanvasAgent::resolveContext): Added. (WebCore::InspectorCanvasAgent::startRecording): (WebCore::InspectorCanvasAgent::stopRecording): (WebCore::InspectorCanvasAgent::frameNavigated): (WebCore::InspectorCanvasAgent::didChangeCSSCanvasClientNodes): (WebCore::InspectorCanvasAgent::didChangeCanvasMemory): (WebCore::InspectorCanvasAgent::canvasDestroyed): (WebCore::InspectorCanvasAgent::recordCanvasAction): (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame): (WebCore::InspectorCanvasAgent::didCreateWebGPUDevice): Added. (WebCore::InspectorCanvasAgent::willDestroyWebGPUDevice): Added. (WebCore::InspectorCanvasAgent::willConfigureSwapChain): Added. (WebCore::InspectorCanvasAgent::clearCanvasData): (WebCore::InspectorCanvasAgent::bindCanvas): (WebCore::InspectorCanvasAgent::unbindCanvas): (WebCore::InspectorCanvasAgent::findInspectorCanvas): (WebCore::InspectorCanvasAgent::requestCSSCanvasClientNodes): Deleted. (WebCore::contextAsScriptValue): Deleted. (WebCore::InspectorCanvasAgent::resolveCanvasContext): Deleted. * inspector/InspectorShaderProgram.cpp: (WebCore::InspectorShaderProgram::context const): Source/WebInspectorUI: Most of the actual "work" done with Web GPU actually uses a `WebGPUDevice`. A `GPUCanvasContext` is basically just a display "client" of the device, and isn't even required (e.g. compute pipeline). We should treat the `GPUCanvasContext` almost like a `-webkit-canvas` client of a `WebGPUDevice`. * UserInterface/Protocol/CanvasObserver.js: (WI.CanvasObserver.prototype.clientNodesChanged): Added. (WI.CanvasObserver.prototype.cssCanvasClientNodesChanged): * UserInterface/Controllers/CanvasManager.js: (WI.CanvasManager.prototype.clientNodesChanged): Added. (WI.CanvasManager.prototype.cssCanvasClientNodesChanged): Deleted. * UserInterface/Models/Canvas.js: (WI.Canvas.resetUniqueDisplayNameNumbers): (WI.Canvas.prototype.get displayName): (WI.Canvas.prototype.requestNode): (WI.Canvas.prototype.requestClientNodes): Added. (WI.Canvas.prototype.requestSize): (WI.Canvas.prototype.clientNodesChanged): Added. (WI.Canvas.prototype.requestCSSCanvasClientNodes): Deleted. (WI.Canvas.prototype.cssCanvasClientNodesChanged): Deleted. * UserInterface/Protocol/RemoteObject.js: (WI.RemoteObject.resolveCanvasContext): * UserInterface/Views/CanvasContentView.js: (WI.CanvasContentView.prototype.attached): (WI.CanvasContentView.prototype._refreshPixelSize): * UserInterface/Views/CanvasDetailsSidebarPanel.js: (WI.CanvasDetailsSidebarPanel.prototype.set canvas): (WI.CanvasDetailsSidebarPanel.prototype.initialLayout): (WI.CanvasDetailsSidebarPanel.prototype.layout): (WI.CanvasDetailsSidebarPanel.prototype._refreshSourceSection): (WI.CanvasDetailsSidebarPanel.prototype._refreshClientsSection): Added. (WI.CanvasDetailsSidebarPanel.prototype._refreshCSSCanvasSection): Deleted. * UserInterface/Views/CanvasOverviewContentView.js: (WI.CanvasOverviewContentView.prototype._contentViewMouseEnter): * UserInterface/Views/CanvasTreeElement.js: (WI.CanvasTreeElement.prototype._handleMouseOver): * Localizations/en.lproj/localizedStrings.js: LayoutTests: * inspector/canvas/create-context-webgpu.html: * inspector/canvas/create-context-webgpu-expected.txt: * inspector/canvas/resources/create-context-utilities.js: (createDetachedCanvas): (createCSSCanvas): (destroyCanvases): * inspector/canvas/requestClientNodes.html: Added. * inspector/canvas/requestClientNodes-expected.txt: Added. * inspector/canvas/requestClientNodes-css.html: Renamed from LayoutTests/inspector/canvas/css-canvas-clients.html. * inspector/canvas/requestClientNodes-css-expected.txt: Renamed from LayoutTests/inspector/canvas/css-canvas-clients-expected.txt. * inspector/canvas/requestClientNodes-webgpu.html: Added. * inspector/canvas/requestClientNodes-webgpu-expected.txt: Added. * inspector/canvas/resolveContext-2d.html: Renamed from LayoutTests/inspector/canvas/resolveCanvasContext-2d.html. * inspector/canvas/resolveContext-2d-expected.txt: Renamed from LayoutTests/inspector/canvas/resolveCanvasContext-2d-expected.txt. * inspector/canvas/resolveContext-bitmaprenderer.html: Renamed from LayoutTests/inspector/canvas/resolveCanvasContext-bitmaprenderer.html. * inspector/canvas/resolveContext-bitmaprenderer-expected.txt: Renamed from LayoutTests/inspector/canvas/resolveCanvasContext-bitmaprenderer-expected.txt. * inspector/canvas/resolveContext-webgl.html: Renamed from LayoutTests/inspector/canvas/resolveCanvasContext-webgl.html. * inspector/canvas/resolveContext-webgl-expected.txt: Renamed from LayoutTests/inspector/canvas/resolveCanvasContext-webgl-expected.txt. * inspector/canvas/resolveContext-webgl2.html: Renamed from LayoutTests/inspector/canvas/resolveCanvasContext-webgl2.html. * inspector/canvas/resolveContext-webgl2-expected.txt: Renamed from LayoutTests/inspector/canvas/resolveCanvasContext-webgl2-expected.txt. * inspector/canvas/resolveContext-webgpu.html: Renamed from LayoutTests/inspector/canvas/resolveCanvasContext-webgpu.html. * inspector/canvas/resolveContext-webgpu-expected.txt: Renamed from LayoutTests/inspector/canvas/resolveCanvasContext-webgpu-expected.txt. * inspector/canvas/context-attributes-expected.txt: * platform/gtk/TestExpectations: * platform/ios/TestExpectations: * platform/mac-wk1/TestExpectations: * platform/mac/TestExpectations: * platform/win/TestExpectations: * platform/wincairo/TestExpectations: * platform/wpe/TestExpectations: Canonical link: https://commits.webkit.org/215342@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@249786 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-09-11 23:28:37 +00:00
<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>
function load() {
window.context2d = document.getCSSCanvasContext("2d", "css-canvas", 10, 10);
runTest();
}
let clients = [];
function createClient() {
clients.push(document.body.appendChild(document.createElement("div")));
}
function destroyClients() {
for (let client of clients)
client.remove();
clients = [];
setTimeout(() => { GCController.collect(); }, 0);
}
function test() {
let suite = InspectorTest.createAsyncSuite("Canvas.requestClientNodes.CSS");
function logClientNodes(clientNodes) {
for (let clientNode of clientNodes) {
if (clientNode)
InspectorTest.pass(`Client node "${clientNode.appropriateSelectorFor()}" is valid.`);
else
InspectorTest.fail("Invalid client node.");
}
}
suite.addTestCase({
name: "Canvas.requestClientNodes.CSS.Create",
description: "Check that creating a CSS canvas client node is tracked correctly.",
test(resolve, reject) {
WI.Canvas.awaitEvent(WI.Canvas.Event.ClientNodesChanged)
.then((event) => {
InspectorTest.expectEqual(event.target.cssCanvasName, "css-canvas", `Canvas with created client should have CSS name "css-canvas".`);
event.target.requestClientNodes((clientNodes) => {
InspectorTest.expectEqual(clientNodes.length, 1, "There should be one client node.");
logClientNodes(clientNodes);
resolve();
});
});
InspectorTest.evaluateInPage(`createClient()`);
}
});
suite.addTestCase({
name: "Canvas.requestClientNodes.CSS.Destroy",
description: "Check that destroying a CSS canvas client node is tracked correctly.",
test(resolve, reject) {
WI.Canvas.awaitEvent(WI.Canvas.Event.ClientNodesChanged)
.then((event) => {
InspectorTest.expectEqual(event.target.cssCanvasName, "css-canvas", `Canvas with destroyed client should have CSS name "css-canvas".`);
event.target.requestClientNodes((clientNodes) => {
InspectorTest.expectEqual(clientNodes.length, 0, "There should be no client nodes.");
logClientNodes(clientNodes);
resolve();
});
});
InspectorTest.evaluateInPage(`destroyClients()`);
}
});
suite.runTestCasesAndFinish();
}
</script>
<style>
div {
width: 10px;
height: 10px;
background-image: -webkit-canvas(css-canvas);
}
</style>
</head>
<body onload="load()">
<p>Test that CanvasAgent tracks changes in the client nodes of a CSS canvas.</p>
</body>
</html>