Diff
Modified: trunk/LayoutTests/ChangeLog (237009 => 237010)
--- trunk/LayoutTests/ChangeLog 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/LayoutTests/ChangeLog 2018-10-10 18:34:49 UTC (rev 237010)
@@ -1,3 +1,19 @@
+2018-10-10 Devin Rousso <[email protected]>
+
+ Web Inspector: notify the frontend when a canvas has started recording via console.record
+ https://bugs.webkit.org/show_bug.cgi?id=190306
+
+ Reviewed by Brian Burg.
+
+ * inspector/canvas/recording-2d.html:
+ * inspector/canvas/recording-bitmaprenderer.html:
+ * inspector/canvas/recording-webgl-snapshots.html:
+ * inspector/canvas/recording-webgl.html:
+ * inspector/canvas/resources/recording-utilities.js:
+ (TestPage.registerInitializer.window.startRecording):
+ Wait to complete the test until the "LastFrame" event is fired, ensuring that any running
+ commands don't affect the next test case.
+
2018-10-09 Antoine Quint <[email protected]>
Remove the frames() timing function
Modified: trunk/LayoutTests/inspector/canvas/recording-2d.html (237009 => 237010)
--- trunk/LayoutTests/inspector/canvas/recording-2d.html 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/LayoutTests/inspector/canvas/recording-2d.html 2018-10-10 18:34:49 UTC (rev 237010)
@@ -427,16 +427,7 @@
name: "Canvas.recording2D.multipleFrames",
description: "Check that recording data is serialized correctly for multiple frames.",
test(resolve, reject) {
- let canvas = startRecording(WI.Canvas.ContextType.Canvas2D, resolve, reject, {singleFrame: false});
-
- InspectorTest.singleFireEventListener("LastFrame", () => {
- CanvasAgent.stopRecording(canvas.identifier, (error) => {
- if (error) {
- reject(error);
- return;
- }
- });
- });
+ startRecording(WI.Canvas.ContextType.Canvas2D, resolve, reject, {singleFrame: false});
},
});
@@ -480,15 +471,14 @@
})
.then(resolve, reject);
- const singleFrame = true;
- CanvasAgent.startRecording(canvas.identifier, singleFrame, (error) => {
- if (error) {
- reject(error);
- return;
- }
-
+ canvas.awaitEvent(WI.Canvas.Event.RecordingStarted)
+ .then((event) => {
InspectorTest.evaluateInPage(`performNaNActions()`);
});
+
+ const singleFrame = true;
+ CanvasAgent.startRecording(canvas.identifier, singleFrame)
+ .catch(reject);
},
});
Modified: trunk/LayoutTests/inspector/canvas/recording-bitmaprenderer.html (237009 => 237010)
--- trunk/LayoutTests/inspector/canvas/recording-bitmaprenderer.html 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/LayoutTests/inspector/canvas/recording-bitmaprenderer.html 2018-10-10 18:34:49 UTC (rev 237010)
@@ -95,16 +95,7 @@
name: "Canvas.recordingBitmapRenderer.multipleFrames",
description: "Check that recording data is serialized correctly for multiple frames.",
test(resolve, reject) {
- let canvas = startRecording(WI.Canvas.ContextType.BitmapRenderer, resolve, reject, {singleFrame: false});
-
- InspectorTest.singleFireEventListener("LastFrame", () => {
- CanvasAgent.stopRecording(canvas.identifier, (error) => {
- if (error) {
- reject(error);
- return;
- }
- });
- });
+ startRecording(WI.Canvas.ContextType.BitmapRenderer, resolve, reject, {singleFrame: false});
},
});
Modified: trunk/LayoutTests/inspector/canvas/recording-webgl-snapshots.html (237009 => 237010)
--- trunk/LayoutTests/inspector/canvas/recording-webgl-snapshots.html 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/LayoutTests/inspector/canvas/recording-webgl-snapshots.html 2018-10-10 18:34:49 UTC (rev 237010)
@@ -45,6 +45,10 @@
runTest();
}
+function cancelActions() {
+ // This function is expected by "resources/recording-utilities.js".
+}
+
function performActions() {
context.useProgram(program);
@@ -83,6 +87,10 @@
clearContext();
drawElements();
clearContext();
+
+ setTimeout(() => {
+ TestPage.dispatchEventToFrontend("LastFrame");
+ }, 0);
}
function test() {
Modified: trunk/LayoutTests/inspector/canvas/recording-webgl.html (237009 => 237010)
--- trunk/LayoutTests/inspector/canvas/recording-webgl.html 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/LayoutTests/inspector/canvas/recording-webgl.html 2018-10-10 18:34:49 UTC (rev 237010)
@@ -521,16 +521,7 @@
name: "Canvas.recordingWebGL.multipleFrames",
description: "Check that recording data is serialized correctly for multiple frames.",
test(resolve, reject) {
- let canvas = startRecording(WI.Canvas.ContextType.WebGL, resolve, reject, {singleFrame: false});
-
- InspectorTest.singleFireEventListener("LastFrame", () => {
- CanvasAgent.stopRecording(canvas.identifier, (error) => {
- if (error) {
- reject(error);
- return;
- }
- });
- });
+ startRecording(WI.Canvas.ContextType.WebGL, resolve, reject, {singleFrame: false});
},
});
Modified: trunk/LayoutTests/inspector/canvas/resources/recording-utilities.js (237009 => 237010)
--- trunk/LayoutTests/inspector/canvas/resources/recording-utilities.js 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/LayoutTests/inspector/canvas/resources/recording-utilities.js 2018-10-10 18:34:49 UTC (rev 237010)
@@ -81,6 +81,24 @@
return;
}
+ let stopped = false;
+ let swizzled = false;
+ let lastFrame = false;
+
+ InspectorTest.awaitEvent("LastFrame")
+ .then((event) => {
+ lastFrame = true;
+
+ if (!stopped)
+ CanvasAgent.stopRecording(canvas.identifier).catch(reject);
+ else {
+ InspectorTest.evaluateInPage(`cancelActions()`).catch(reject);
+
+ if (swizzled)
+ resolve();
+ }
+ });
+
let bufferUsed = 0;
let frameCount = 0;
function handleRecordingProgress(event) {
@@ -93,10 +111,10 @@
canvas.addEventListener(WI.Canvas.Event.RecordingProgress, handleRecordingProgress);
canvas.awaitEvent(WI.Canvas.Event.RecordingStopped).then((event) => {
+ stopped = true;
+
canvas.removeEventListener(WI.Canvas.Event.RecordingProgress, handleRecordingProgress);
- InspectorTest.evaluateInPage(`cancelActions()`);
-
let recording = event.data.recording;
InspectorTest.assert(recording.source === canvas, "Recording should be of the given canvas.");
InspectorTest.assert(recording.source.contextType === type, `Recording should be of a canvas with type "${type}".`);
@@ -103,21 +121,23 @@
InspectorTest.assert(recording.source.recordingCollection.has(recording), "Recording should be in the canvas' list of recordings.");
InspectorTest.assert(recording.frames.length === frameCount, `Recording should have ${frameCount} frames.`)
- return Promise.all(recording.actions.map((action) => action.swizzle(recording))).then(() => {
+ Promise.all(recording.actions.map((action) => action.swizzle(recording))).then(() => {
+ swizzled = true;
+
logRecording(recording, type);
+
+ if (lastFrame) {
+ InspectorTest.evaluateInPage(`cancelActions()`)
+ .then(resolve, reject);
+ }
});
- }).then(resolve, reject);
+ });
- CanvasAgent.startRecording(canvas.identifier, singleFrame, memoryLimit, (error) => {
- if (error) {
- reject(error);
- return;
- }
-
- InspectorTest.evaluateInPage(`performActions()`);
+ canvas.awaitEvent(WI.Canvas.Event.RecordingStarted).then((event) => {
+ InspectorTest.evaluateInPage(`performActions()`).catch(reject);
});
- return canvas;
+ CanvasAgent.startRecording(canvas.identifier, singleFrame, memoryLimit).catch(reject);
};
window.consoleRecord = function(type, resolve, reject) {
Modified: trunk/Source/_javascript_Core/ChangeLog (237009 => 237010)
--- trunk/Source/_javascript_Core/ChangeLog 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/Source/_javascript_Core/ChangeLog 2018-10-10 18:34:49 UTC (rev 237010)
@@ -1,3 +1,16 @@
+2018-10-10 Devin Rousso <[email protected]>
+
+ Web Inspector: notify the frontend when a canvas has started recording via console.record
+ https://bugs.webkit.org/show_bug.cgi?id=190306
+
+ Reviewed by Brian Burg.
+
+ * inspector/protocol/Canvas.json:
+ Add `recordingStarted` event.
+
+ * inspector/protocol/Recording.json:
+ Add `Initiator` enum for determining who started the recording.
+
2018-10-10 Yusuke Suzuki <[email protected]>
[JSC] Rename createXXX to tryCreateXXX if it can return RefPtr
Modified: trunk/Source/_javascript_Core/inspector/protocol/Canvas.json (237009 => 237010)
--- trunk/Source/_javascript_Core/inspector/protocol/Canvas.json 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/Source/_javascript_Core/inspector/protocol/Canvas.json 2018-10-10 18:34:49 UTC (rev 237010)
@@ -191,6 +191,13 @@
]
},
{
+ "name": "recordingStarted",
+ "parameters": [
+ { "name": "canvasId", "$ref": "CanvasId" },
+ { "name": "initiator", "$ref": "Recording.Initiator" }
+ ]
+ },
+ {
"name": "recordingProgress",
"parameters": [
{ "name": "canvasId", "$ref": "CanvasId" },
Modified: trunk/Source/_javascript_Core/inspector/protocol/Recording.json (237009 => 237010)
--- trunk/Source/_javascript_Core/inspector/protocol/Recording.json 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/Source/_javascript_Core/inspector/protocol/Recording.json 2018-10-10 18:34:49 UTC (rev 237010)
@@ -9,6 +9,11 @@
"description": "The type of the recording."
},
{
+ "id": "Initiator",
+ "type": "string",
+ "enum": ["frontend", "console"]
+ },
+ {
"id": "InitialState",
"type": "object",
"description": "Information about the initial state of the recorded object.",
Modified: trunk/Source/WebCore/ChangeLog (237009 => 237010)
--- trunk/Source/WebCore/ChangeLog 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/Source/WebCore/ChangeLog 2018-10-10 18:34:49 UTC (rev 237010)
@@ -1,3 +1,24 @@
+2018-10-10 Devin Rousso <[email protected]>
+
+ Web Inspector: notify the frontend when a canvas has started recording via console.record
+ https://bugs.webkit.org/show_bug.cgi?id=190306
+
+ Reviewed by Brian Burg.
+
+ Updated existing tests: LayoutTests/inspector/canvas/recording-2d.html
+ LayoutTests/inspector/canvas/recording-bitmaprenderer.html
+ LayoutTests/inspector/canvas/recording-webgl-snapshots.html
+ LayoutTests/inspector/canvas/recording-webgl.html
+
+ * inspector/agents/InspectorCanvasAgent.cpp:
+ (WebCore::InspectorCanvasAgent::startRecording):
+ (WebCore::InspectorCanvasAgent::consoleStartRecordingCanvas):
+
+ * inspector/InspectorCanvas.h:
+ Default `singleFrame` to false to better match the default behaviour of other `console`
+ functions (`profile` doesn't stop until `profileEnd` is called, so the same should be true
+ of `record` and `recordEnd`).
+
2018-10-10 Yusuke Suzuki <[email protected]>
[JSC] Rename createXXX to tryCreateXXX if it can return RefPtr
Modified: trunk/Source/WebCore/inspector/InspectorCanvas.h (237009 => 237010)
--- trunk/Source/WebCore/inspector/InspectorCanvas.h 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/Source/WebCore/inspector/InspectorCanvas.h 2018-10-10 18:34:49 UTC (rev 237010)
@@ -116,7 +116,7 @@
MonotonicTime m_currentFrameStartTime { MonotonicTime::nan() };
size_t m_bufferLimit { 100 * 1024 * 1024 };
size_t m_bufferUsed { 0 };
- bool m_singleFrame { true };
+ bool m_singleFrame { false };
};
} // namespace WebCore
Modified: trunk/Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp (237009 => 237010)
--- trunk/Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp 2018-10-10 18:34:49 UTC (rev 237010)
@@ -279,6 +279,8 @@
inspectorCanvas->setBufferLimit(*memoryLimit);
inspectorCanvas->context().setCallTracingActive(true);
+
+ m_frontendDispatcher->recordingStarted(inspectorCanvas->identifier(), Inspector::Protocol::Recording::Initiator::Frontend);
}
void InspectorCanvasAgent::stopRecording(ErrorString& errorString, const String& canvasId)
@@ -577,6 +579,8 @@
}
inspectorCanvas->context().setCallTracingActive(true);
+
+ m_frontendDispatcher->recordingStarted(inspectorCanvas->identifier(), Inspector::Protocol::Recording::Initiator::Console);
}
#if ENABLE(WEBGL)
Modified: trunk/Source/WebInspectorUI/ChangeLog (237009 => 237010)
--- trunk/Source/WebInspectorUI/ChangeLog 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/Source/WebInspectorUI/ChangeLog 2018-10-10 18:34:49 UTC (rev 237010)
@@ -1,5 +1,23 @@
2018-10-10 Devin Rousso <[email protected]>
+ Web Inspector: notify the frontend when a canvas has started recording via console.record
+ https://bugs.webkit.org/show_bug.cgi?id=190306
+
+ Reviewed by Brian Burg.
+
+ * UserInterface/Protocol/CanvasObserver.js:
+ (WI.CanvasObserver.prototype.recordingStarted): Added.
+
+ * UserInterface/Protocol/CanvasManager.js:
+ (WI.CanvasManager.prototype.recordingStarted): Added.
+
+ * UserInterface/Models/Canvas.js:
+ (WI.Canvas.prototype.startRecording):
+ (WI.Canvas.prototype.recordingStarted): Added.
+ (WI.Canvas.prototype.recordingFinished):
+
+2018-10-10 Devin Rousso <[email protected]>
+
Web Inspector: indent all network entries when "Group by Node" is checked
https://bugs.webkit.org/show_bug.cgi?id=190388
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js (237009 => 237010)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js 2018-10-10 18:34:49 UTC (rev 237010)
@@ -127,6 +127,18 @@
canvas.cssCanvasClientNodesChanged();
}
+ recordingStarted(canvasIdentifier, initiator)
+ {
+ // Called from WI.CanvasObserver.
+
+ let canvas = this._canvasIdentifierMap.get(canvasIdentifier);
+ console.assert(canvas);
+ if (!canvas)
+ return;
+
+ canvas.recordingStarted(initiator);
+ }
+
recordingProgress(canvasIdentifier, framesPayload, bufferUsed)
{
// Called from WI.CanvasObserver.
Modified: trunk/Source/WebInspectorUI/UserInterface/Models/Canvas.js (237009 => 237010)
--- trunk/Source/WebInspectorUI/UserInterface/Models/Canvas.js 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/Canvas.js 2018-10-10 18:34:49 UTC (rev 237010)
@@ -275,7 +275,12 @@
return;
}
- this._recordingState = WI.Canvas.RecordingState.Active;
+ this._recordingState = WI.Canvas.RecordingState.ActiveFrontend;
+
+ // COMPATIBILITY (iOS 12.1): Canvas.event.recordingStarted did not exist yet
+ if (CanvasAgent.hasEvent("recordingStarted"))
+ return;
+
this._recordingFrames = [];
this._recordingBufferUsed = 0;
@@ -321,6 +326,23 @@
this.dispatchEventToListeners(WI.Canvas.Event.CSSCanvasClientNodesChanged);
}
+ recordingStarted(initiator)
+ {
+ // Called from WI.CanvasManager.
+
+ if (initiator === WI.Recording.Initiator.Console)
+ this._recordingState = WI.Canvas.RecordingState.ActiveConsole;
+ else {
+ console.assert(initiator === WI.Recording.Initiator.Frontend);
+ this._recordingState = WI.Canvas.RecordingState.ActiveFrontend;
+ }
+
+ this._recordingFrames = [];
+ this._recordingBufferUsed = 0;
+
+ this.dispatchEventToListeners(WI.Canvas.Event.RecordingStarted);
+ }
+
recordingProgress(framesPayload, bufferUsed)
{
// Called from WI.CanvasManager.
@@ -336,8 +358,12 @@
{
// Called from WI.CanvasManager.
- let fromConsole = !this.recordingActive;
+ let fromConsole = this._recordingState === WI.Canvas.RecordingState.ActiveConsole;
+ // COMPATIBILITY (iOS 12.1): Canvas.event.recordingStarted did not exist yet
+ if (!fromConsole && !CanvasAgent.hasEvent("recordingStarted"))
+ fromConsole = !this.recordingActive;
+
let recording = recordingPayload ? WI.Recording.fromPayload(recordingPayload, this._recordingFrames) : null;
if (recording) {
recording.source = this;
@@ -377,7 +403,8 @@
WI.Canvas.RecordingState = {
Inactive: "canvas-recording-state-inactive",
- Active: "canvas-recording-state-active",
+ ActiveFrontend: "canvas-recording-state-active-frontend",
+ ActiveConsole: "canvas-recording-state-active-console",
};
WI.Canvas.Event = {
Modified: trunk/Source/WebInspectorUI/UserInterface/Models/Recording.js (237009 => 237010)
--- trunk/Source/WebInspectorUI/UserInterface/Models/Recording.js 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/Recording.js 2018-10-10 18:34:49 UTC (rev 237010)
@@ -486,6 +486,11 @@
CanvasWebGL: "canvas-webgl",
};
+WI.Recording.Initiator = {
+ Frontend: "frontend",
+ Console: "console",
+};
+
// Keep this in sync with WebCore::RecordingSwizzleTypes.
WI.Recording.Swizzle = {
None: 0,
Modified: trunk/Source/WebInspectorUI/UserInterface/Protocol/CanvasObserver.js (237009 => 237010)
--- trunk/Source/WebInspectorUI/UserInterface/Protocol/CanvasObserver.js 2018-10-10 18:29:44 UTC (rev 237009)
+++ trunk/Source/WebInspectorUI/UserInterface/Protocol/CanvasObserver.js 2018-10-10 18:34:49 UTC (rev 237010)
@@ -47,6 +47,11 @@
WI.canvasManager.cssCanvasClientNodesChanged(canvasId);
}
+ recordingStarted(canvasId, initiator)
+ {
+ WI.canvasManager.recordingStarted(canvasId, initiator);
+ }
+
recordingProgress(canvasId, frames, bufferUsed)
{
WI.canvasManager.recordingProgress(canvasId, frames, bufferUsed);