Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2085)

Unified Diff: Source/devtools/front_end/main/Tests.js

Issue 1184383002: DevTools: adopt FilmStripModel to new screenshot recorder trace format (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: promisified Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/devtools/front_end/main/Tests.js
diff --git a/Source/devtools/front_end/main/Tests.js b/Source/devtools/front_end/main/Tests.js
index 9c7b2412a76fe55f668f5b09d9e788452f2cc0d0..25f51ff64867ef5b8c17f8c3b48f55e70750d217 100644
--- a/Source/devtools/front_end/main/Tests.js
+++ b/Source/devtools/front_end/main/Tests.js
@@ -489,6 +489,85 @@ TestSuite.prototype.testDeviceMetricsOverrides = function()
this.waitForThrottler(WebInspector.overridesSupport._deviceMetricsThrottler, step1);
};
+TestSuite.prototype.testScreenshotRecording = function()
+{
+ var test = this;
+
+ function performActionsInPage(callback)
+ {
+ var count = 0;
+ var d = document.createElement("div");
+ d.style.width = "100px";
+ d.style.height = "100px";
+ d.style.position = "absolute";
+ d.style.left = "0px";
+ d.style.top = "0px";
+ document.body.appendChild(d);
+ requestAnimationFrame(frame);
+ function frame()
+ {
+ var color = [0, 0, 0];
+ color[count % 3] = 255;
+ d.style.backgroundColor = "rgb(" + color.join(",") + ")";
+ if (++count > 5)
+ requestAnimationFrame(callback);
+ else
+ requestAnimationFrame(frame);
+ }
+ }
+
+ Runtime.experiments.enableForTest("filmStripInNetworkAndTimeline");
+ var captureFilmStripSetting = WebInspector.settings.createSetting("timelineCaptureFilmStrip", false);
+ captureFilmStripSetting.set(true);
+ test.evaluateInConsole_(performActionsInPage.toString(), function() {});
+ test.invokeAsyncWithTimeline_("performActionsInPage", onTimelineDone);
+
+ function onTimelineDone()
+ {
+ captureFilmStripSetting.set(false);
+ var filmStripModel = new WebInspector.FilmStripModel(WebInspector.panels.timeline._tracingModel);
+ var frames = filmStripModel.frames();
+ console.error("Frame count: " + frames.length);
+ test.assertTrue(frames.length > 2 && typeof frames.length === "number");
alph 2015/06/17 13:47:51 We tend to not use assert in tests, but rather log
+ loadFrameImages(frames);
+ }
+
+ function loadFrameImages(frames)
+ {
+ var readyImages = [];
+ for (var frame of frames) {
+ var image = new Image();
+ image.addEventListener("load", onLoad);
+ image.src = "data:image/jpg;base64," + frame.imageData;
alph 2015/06/17 13:47:51 Ain't you just nuked imageData?
+ }
+
+ function onLoad(event)
+ {
+ readyImages.push(event.target);
+ if (readyImages.length === frames.length)
+ validateImagesAndCompleteTest(readyImages);
+ }
+ }
+
+ function validateImagesAndCompleteTest(images)
+ {
+ var canvas = document.createElement("canvas");
+ var ctx = canvas.getContext("2d");
+ for (var image of images) {
+ test.assertTrue(image.naturalWidth > 10);
alph 2015/06/17 13:47:51 ditto for assertTrue
+ test.assertTrue(image.naturalHeight > 10);
+ canvas.width = image.naturalWidth;
+ canvas.height = image.naturalHeight;
+ ctx.drawImage(image, 0, 0);
+ var data = ctx.getImageData(0, 0, 1, 1);
+ console.error("Color " + Array.prototype.join.call(data.data, ","));
+ }
+ test.releaseControl();
+ }
+
+ test.takeControl();
+}
+
TestSuite.prototype.testSettings = function()
{
var test = this;
@@ -551,6 +630,43 @@ TestSuite.prototype.waitForTestResultsInConsole = function()
this.takeControl();
};
+TestSuite.prototype.invokeAsyncWithTimeline_ = function(functionName, callback)
+{
+ var test = this;
+ test.showPanel("timeline").then(function() {
+ WebInspector.panels.timeline._model.addEventListener(WebInspector.TimelineModel.Events.RecordingStarted, onRecordingStarted);
+ WebInspector.panels.timeline.toggleTimelineButton.element.click();
+ });
+
+ function onRecordingStarted()
+ {
+ WebInspector.panels.timeline._model.removeEventListener(WebInspector.TimelineModel.Events.RecordingStarted, onRecordingStarted);
+ test.evaluateInConsole_(functionName + "(function() { console.log('DONE'); });", function() {});
+ WebInspector.multitargetConsoleModel.addEventListener(WebInspector.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);
alph 2015/06/17 13:47:51 Not sure, but does it make sense to addEventListen
+ }
+
+ function onConsoleMessage(event)
+ {
+ var text = event.data.messageText;
+ if (text === "DONE") {
+ WebInspector.multitargetConsoleModel.removeEventListener(WebInspector.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);
+ pageActionsDone();
+ }
+ }
+
+ function pageActionsDone()
+ {
+ WebInspector.panels.timeline._model.addEventListener(WebInspector.TimelineModel.Events.RecordingStopped, onRecordingStopped);
+ WebInspector.panels.timeline.toggleTimelineButton.element.click();
+ }
+
+ function onRecordingStopped()
+ {
+ WebInspector.panels.timeline._model.removeEventListener(WebInspector.TimelineModel.Events.RecordingStopped, onRecordingStopped);
+ callback();
+ }
+};
+
/**
* Serializes array of uiSourceCodes to string.
* @param {!Array.<!WebInspectorUISourceCode>} uiSourceCodes
« no previous file with comments | « Source/devtools/front_end/components_lazy/FilmStripView.js ('k') | Source/devtools/front_end/sdk/TracingModel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698