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

Side by Side Diff: Source/devtools/front_end/timeline/TracingTimelineUIUtils.js

Issue 328143003: Timeline: add preview of painted picture for Paint event (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/devtools/front_end/timeline/TracingTimelineModel.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 */ 6 */
7 WebInspector.TracingTimelineUIUtils = function() { } 7 WebInspector.TracingTimelineUIUtils = function() { }
8 8
9 /** 9 /**
10 * @constructor 10 * @constructor
(...skipping 22 matching lines...) Expand all
33 eventStyles[recordTypes.EventDispatch] = new WebInspector.TimelineRecordStyl e(WebInspector.UIString("Event"), categories["scripting"]); 33 eventStyles[recordTypes.EventDispatch] = new WebInspector.TimelineRecordStyl e(WebInspector.UIString("Event"), categories["scripting"]);
34 eventStyles[recordTypes.RequestMainThreadFrame] = new WebInspector.TimelineR ecordStyle(WebInspector.UIString("Request Main Thread Frame"), categories["rende ring"]); 34 eventStyles[recordTypes.RequestMainThreadFrame] = new WebInspector.TimelineR ecordStyle(WebInspector.UIString("Request Main Thread Frame"), categories["rende ring"]);
35 eventStyles[recordTypes.BeginFrame] = new WebInspector.TimelineRecordStyle(W ebInspector.UIString("Frame Start"), categories["rendering"]); 35 eventStyles[recordTypes.BeginFrame] = new WebInspector.TimelineRecordStyle(W ebInspector.UIString("Frame Start"), categories["rendering"]);
36 eventStyles[recordTypes.BeginMainThreadFrame] = new WebInspector.TimelineRec ordStyle(WebInspector.UIString("Frame Start (main thread)"), categories["renderi ng"]); 36 eventStyles[recordTypes.BeginMainThreadFrame] = new WebInspector.TimelineRec ordStyle(WebInspector.UIString("Frame Start (main thread)"), categories["renderi ng"]);
37 eventStyles[recordTypes.DrawFrame] = new WebInspector.TimelineRecordStyle(We bInspector.UIString("Draw Frame"), categories["rendering"]); 37 eventStyles[recordTypes.DrawFrame] = new WebInspector.TimelineRecordStyle(We bInspector.UIString("Draw Frame"), categories["rendering"]);
38 eventStyles[recordTypes.ScheduleStyleRecalculation] = new WebInspector.Timel ineRecordStyle(WebInspector.UIString("Schedule Style Recalculation"), categories ["rendering"]); 38 eventStyles[recordTypes.ScheduleStyleRecalculation] = new WebInspector.Timel ineRecordStyle(WebInspector.UIString("Schedule Style Recalculation"), categories ["rendering"]);
39 eventStyles[recordTypes.RecalculateStyles] = new WebInspector.TimelineRecord Style(WebInspector.UIString("Recalculate Style"), categories["rendering"]); 39 eventStyles[recordTypes.RecalculateStyles] = new WebInspector.TimelineRecord Style(WebInspector.UIString("Recalculate Style"), categories["rendering"]);
40 eventStyles[recordTypes.InvalidateLayout] = new WebInspector.TimelineRecordS tyle(WebInspector.UIString("Invalidate Layout"), categories["rendering"]); 40 eventStyles[recordTypes.InvalidateLayout] = new WebInspector.TimelineRecordS tyle(WebInspector.UIString("Invalidate Layout"), categories["rendering"]);
41 eventStyles[recordTypes.Layout] = new WebInspector.TimelineRecordStyle(WebIn spector.UIString("Layout"), categories["rendering"]); 41 eventStyles[recordTypes.Layout] = new WebInspector.TimelineRecordStyle(WebIn spector.UIString("Layout"), categories["rendering"]);
42 eventStyles[recordTypes.PaintSetup] = new WebInspector.TimelineRecordStyle(W ebInspector.UIString("Paint Setup"), categories["painting"]); 42 eventStyles[recordTypes.PaintSetup] = new WebInspector.TimelineRecordStyle(W ebInspector.UIString("Paint Setup"), categories["painting"]);
43 eventStyles[recordTypes.UpdateLayer] = new WebInspector.TimelineRecordStyle( WebInspector.UIString("Update Layer"), categories["painting"]);
43 eventStyles[recordTypes.Paint] = new WebInspector.TimelineRecordStyle(WebIns pector.UIString("Paint"), categories["painting"]); 44 eventStyles[recordTypes.Paint] = new WebInspector.TimelineRecordStyle(WebIns pector.UIString("Paint"), categories["painting"]);
44 eventStyles[recordTypes.Rasterize] = new WebInspector.TimelineRecordStyle(We bInspector.UIString("Paint"), categories["painting"]); 45 eventStyles[recordTypes.Rasterize] = new WebInspector.TimelineRecordStyle(We bInspector.UIString("Paint"), categories["painting"]);
45 eventStyles[recordTypes.RasterTask] = new WebInspector.TimelineRecordStyle(W ebInspector.UIString("Paint"), categories["painting"]); 46 eventStyles[recordTypes.RasterTask] = new WebInspector.TimelineRecordStyle(W ebInspector.UIString("Paint"), categories["painting"]);
46 eventStyles[recordTypes.ScrollLayer] = new WebInspector.TimelineRecordStyle( WebInspector.UIString("Scroll"), categories["rendering"]); 47 eventStyles[recordTypes.ScrollLayer] = new WebInspector.TimelineRecordStyle( WebInspector.UIString("Scroll"), categories["rendering"]);
47 eventStyles[recordTypes.CompositeLayers] = new WebInspector.TimelineRecordSt yle(WebInspector.UIString("Composite Layers"), categories["painting"]); 48 eventStyles[recordTypes.CompositeLayers] = new WebInspector.TimelineRecordSt yle(WebInspector.UIString("Composite Layers"), categories["painting"]);
48 eventStyles[recordTypes.ParseHTML] = new WebInspector.TimelineRecordStyle(We bInspector.UIString("Parse HTML"), categories["loading"]); 49 eventStyles[recordTypes.ParseHTML] = new WebInspector.TimelineRecordStyle(We bInspector.UIString("Parse HTML"), categories["loading"]);
49 eventStyles[recordTypes.TimerInstall] = new WebInspector.TimelineRecordStyle (WebInspector.UIString("Install Timer"), categories["scripting"]); 50 eventStyles[recordTypes.TimerInstall] = new WebInspector.TimelineRecordStyle (WebInspector.UIString("Install Timer"), categories["scripting"]);
50 eventStyles[recordTypes.TimerRemove] = new WebInspector.TimelineRecordStyle( WebInspector.UIString("Remove Timer"), categories["scripting"]); 51 eventStyles[recordTypes.TimerRemove] = new WebInspector.TimelineRecordStyle( WebInspector.UIString("Remove Timer"), categories["scripting"]);
51 eventStyles[recordTypes.TimerFire] = new WebInspector.TimelineRecordStyle(We bInspector.UIString("Timer Fired"), categories["scripting"]); 52 eventStyles[recordTypes.TimerFire] = new WebInspector.TimelineRecordStyle(We bInspector.UIString("Timer Fired"), categories["scripting"]);
52 eventStyles[recordTypes.XHRReadyStateChange] = new WebInspector.TimelineReco rdStyle(WebInspector.UIString("XHR Ready State Change"), categories["scripting"] ); 53 eventStyles[recordTypes.XHRReadyStateChange] = new WebInspector.TimelineReco rdStyle(WebInspector.UIString("XHR Ready State Change"), categories["scripting"] );
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 * @param {!WebInspector.TracingTimelineModel} model 259 * @param {!WebInspector.TracingTimelineModel} model
259 * @param {!WebInspector.Linkifier} linkifier 260 * @param {!WebInspector.Linkifier} linkifier
260 * @param {function(!DocumentFragment)} callback 261 * @param {function(!DocumentFragment)} callback
261 * @param {boolean} loadedFromFile 262 * @param {boolean} loadedFromFile
262 * @param {!WebInspector.Target} target 263 * @param {!WebInspector.Target} target
263 */ 264 */
264 WebInspector.TracingTimelineUIUtils.buildTraceEventDetails = function(event, mod el, linkifier, callback, loadedFromFile, target) 265 WebInspector.TracingTimelineUIUtils.buildTraceEventDetails = function(event, mod el, linkifier, callback, loadedFromFile, target)
265 { 266 {
266 var relatedNode = null; 267 var relatedNode = null;
267 var barrier = new CallbackBarrier(); 268 var barrier = new CallbackBarrier();
268 if (event.imageURL && !event.previewElement) 269 if (!event.previewElement) {
269 WebInspector.DOMPresentationUtils.buildImagePreviewContents(target, even t.imageURL, false, barrier.createCallback(saveImage)); 270 if (event.imageURL)
271 WebInspector.DOMPresentationUtils.buildImagePreviewContents(target, event.imageURL, false, barrier.createCallback(saveImage));
272 else if (event.picture)
273 WebInspector.TracingTimelineUIUtils._buildPicturePreviewContent(even t.picture, barrier.createCallback(saveImage));
274 }
270 if (event.backendNodeId) 275 if (event.backendNodeId)
271 target.domModel.pushNodesByBackendIdsToFrontend([event.backendNodeId], b arrier.createCallback(setRelatedNode)); 276 target.domModel.pushNodesByBackendIdsToFrontend([event.backendNodeId], b arrier.createCallback(setRelatedNode));
272 barrier.callWhenDone(callbackWrapper); 277 barrier.callWhenDone(callbackWrapper);
273 278
274 /** 279 /**
275 * @param {!Element=} element 280 * @param {!Element=} element
276 */ 281 */
277 function saveImage(element) 282 function saveImage(element)
278 { 283 {
279 event.previewElement = element || null; 284 event.previewElement = element || null;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 if (eventData["scriptName"]) 355 if (eventData["scriptName"])
351 contentHelper.appendLocationRow(WebInspector.UIString("Location"), e ventData["scriptName"], eventData["scriptLine"]); 356 contentHelper.appendLocationRow(WebInspector.UIString("Location"), e ventData["scriptName"], eventData["scriptLine"]);
352 break; 357 break;
353 case recordTypes.ResourceSendRequest: 358 case recordTypes.ResourceSendRequest:
354 case recordTypes.ResourceReceiveResponse: 359 case recordTypes.ResourceReceiveResponse:
355 case recordTypes.ResourceReceivedData: 360 case recordTypes.ResourceReceivedData:
356 case recordTypes.ResourceFinish: 361 case recordTypes.ResourceFinish:
357 var url = (event.name === recordTypes.ResourceSendRequest) ? eventData[" url"] : initiator.args.data["url"]; 362 var url = (event.name === recordTypes.ResourceSendRequest) ? eventData[" url"] : initiator.args.data["url"];
358 if (url) 363 if (url)
359 contentHelper.appendElementRow(WebInspector.UIString("Resource"), We bInspector.linkifyResourceAsNode(url)); 364 contentHelper.appendElementRow(WebInspector.UIString("Resource"), We bInspector.linkifyResourceAsNode(url));
360 if (event.previewElement)
361 contentHelper.appendElementRow(WebInspector.UIString("Preview"), eve nt.previewElement);
362 if (eventData["requestMethod"]) 365 if (eventData["requestMethod"])
363 contentHelper.appendTextRow(WebInspector.UIString("Request Method"), eventData["requestMethod"]); 366 contentHelper.appendTextRow(WebInspector.UIString("Request Method"), eventData["requestMethod"]);
364 if (typeof eventData["statusCode"] === "number") 367 if (typeof eventData["statusCode"] === "number")
365 contentHelper.appendTextRow(WebInspector.UIString("Status Code"), ev entData["statusCode"]); 368 contentHelper.appendTextRow(WebInspector.UIString("Status Code"), ev entData["statusCode"]);
366 if (eventData["mimeType"]) 369 if (eventData["mimeType"])
367 contentHelper.appendTextRow(WebInspector.UIString("MIME Type"), even tData["mimeType"]); 370 contentHelper.appendTextRow(WebInspector.UIString("MIME Type"), even tData["mimeType"]);
368 if (eventData["encodedDataLength"]) 371 if (eventData["encodedDataLength"])
369 contentHelper.appendTextRow(WebInspector.UIString("Encoded Data Leng th"), WebInspector.UIString("%d Bytes", eventData["encodedDataLength"])); 372 contentHelper.appendTextRow(WebInspector.UIString("Encoded Data Leng th"), WebInspector.UIString("%d Bytes", eventData["encodedDataLength"]));
370 break; 373 break;
371 case recordTypes.EvaluateScript: 374 case recordTypes.EvaluateScript:
(...skipping 15 matching lines...) Expand all
387 relatedNodeLabel = WebInspector.UIString("Layer root"); 390 relatedNodeLabel = WebInspector.UIString("Layer root");
388 break; 391 break;
389 case recordTypes.PaintImage: 392 case recordTypes.PaintImage:
390 case recordTypes.DecodeLazyPixelRef: 393 case recordTypes.DecodeLazyPixelRef:
391 case recordTypes.DecodeImage: 394 case recordTypes.DecodeImage:
392 case recordTypes.ResizeImage: 395 case recordTypes.ResizeImage:
393 case recordTypes.DrawLazyPixelRef: 396 case recordTypes.DrawLazyPixelRef:
394 relatedNodeLabel = WebInspector.UIString("Image element"); 397 relatedNodeLabel = WebInspector.UIString("Image element");
395 if (event.imageURL) 398 if (event.imageURL)
396 contentHelper.appendElementRow(WebInspector.UIString("Image URL"), W ebInspector.linkifyResourceAsNode(event.imageURL)); 399 contentHelper.appendElementRow(WebInspector.UIString("Image URL"), W ebInspector.linkifyResourceAsNode(event.imageURL));
397 if (event.previewElement)
398 contentHelper.appendElementRow(WebInspector.UIString("Preview"), eve nt.previewElement);
399 break; 400 break;
400 case recordTypes.RecalculateStyles: // We don't want to see default details. 401 case recordTypes.RecalculateStyles: // We don't want to see default details.
401 contentHelper.appendTextRow(WebInspector.UIString("Elements affected"), event.args["elementCount"]); 402 contentHelper.appendTextRow(WebInspector.UIString("Elements affected"), event.args["elementCount"]);
402 callStackLabel = WebInspector.UIString("Styles recalculation forced"); 403 callStackLabel = WebInspector.UIString("Styles recalculation forced");
403 break; 404 break;
404 case recordTypes.Layout: 405 case recordTypes.Layout:
405 var beginData = event.args["beginData"]; 406 var beginData = event.args["beginData"];
406 contentHelper.appendTextRow(WebInspector.UIString("Nodes that need layou t"), beginData["dirtyObjects"]); 407 contentHelper.appendTextRow(WebInspector.UIString("Nodes that need layou t"), beginData["dirtyObjects"]);
407 contentHelper.appendTextRow(WebInspector.UIString("Layout tree size"), b eginData["totalObjects"]); 408 contentHelper.appendTextRow(WebInspector.UIString("Layout tree size"), b eginData["totalObjects"]);
408 contentHelper.appendTextRow(WebInspector.UIString("Layout scope"), 409 contentHelper.appendTextRow(WebInspector.UIString("Layout scope"),
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 var eventStackTrace = event.stackTrace; 451 var eventStackTrace = event.stackTrace;
451 if (eventStackTrace) 452 if (eventStackTrace)
452 contentHelper.appendStackTrace(callStackLabel || WebInspector.UIString(" Call Stack"), eventStackTrace); 453 contentHelper.appendStackTrace(callStackLabel || WebInspector.UIString(" Call Stack"), eventStackTrace);
453 454
454 var warning = event.warning; 455 var warning = event.warning;
455 if (warning) { 456 if (warning) {
456 var div = document.createElement("div"); 457 var div = document.createElement("div");
457 div.textContent = warning; 458 div.textContent = warning;
458 contentHelper.appendElementRow(WebInspector.UIString("Warning"), div); 459 contentHelper.appendElementRow(WebInspector.UIString("Warning"), div);
459 } 460 }
461 if (event.previewElement)
462 contentHelper.appendElementRow(WebInspector.UIString("Preview"), event.p reviewElement);
460 fragment.appendChild(contentHelper.element); 463 fragment.appendChild(contentHelper.element);
461 return fragment; 464 return fragment;
462 } 465 }
463 466
464 /** 467 /**
465 * @param {!WebInspector.TracingTimelineModel} model 468 * @param {!WebInspector.TracingTimelineModel} model
466 * @param {!WebInspector.TracingModel.Event} event 469 * @param {!WebInspector.TracingModel.Event} event
467 * @return {!{ aggregatedStats: !Object, hasChildren: boolean }} 470 * @return {!{ aggregatedStats: !Object, hasChildren: boolean }}
468 */ 471 */
469 WebInspector.TracingTimelineUIUtils._aggregatedStatsForTraceEvent = function(mod el, event) 472 WebInspector.TracingTimelineUIUtils._aggregatedStatsForTraceEvent = function(mod el, event)
(...skipping 20 matching lines...) Expand all
490 if (!nextEvent.selfTime) 493 if (!nextEvent.selfTime)
491 continue; 494 continue;
492 if (i > index) 495 if (i > index)
493 hasChildren = true; 496 hasChildren = true;
494 var category = WebInspector.TracingTimelineUIUtils.styleForTraceEven t(nextEvent.name).category.name; 497 var category = WebInspector.TracingTimelineUIUtils.styleForTraceEven t(nextEvent.name).category.name;
495 aggregatedStats[category] = (aggregatedStats[category] || 0) + nextE vent.selfTime; 498 aggregatedStats[category] = (aggregatedStats[category] || 0) + nextE vent.selfTime;
496 } 499 }
497 } 500 }
498 return { aggregatedStats: aggregatedStats, hasChildren: hasChildren }; 501 return { aggregatedStats: aggregatedStats, hasChildren: hasChildren };
499 } 502 }
503
504 /**
505 * @param {string} encodedPicture
506 * @param {function(!Element=)} callback
507 */
508 WebInspector.TracingTimelineUIUtils._buildPicturePreviewContent = function(encod edPicture, callback)
509 {
510 var snapshotId;
511
512 LayerTreeAgent.loadSnapshot(encodedPicture, onSnapshotLoaded);
513 /**
514 * @param {string} error
515 * @param {string} id
516 */
517 function onSnapshotLoaded(error, id)
518 {
519 if (error) {
520 console.error("LayerTreeAgent.loadSnapshot(): " + error);
521 callback();
522 return;
523 }
524 snapshotId = id;
525 LayerTreeAgent.replaySnapshot(snapshotId, onSnapshotReplayed);
526 }
527
528 /**
529 * @param {string} error
530 * @param {string} encodedBitmap
531 */
532 function onSnapshotReplayed(error, encodedBitmap)
533 {
534 LayerTreeAgent.releaseSnapshot(snapshotId);
535 if (error) {
536 console.error("LayerTreeAgent.replaySnapshot(): " + error);
537 callback();
538 return;
539 }
540 var container = document.createElement("div");
541 container.className = "image-preview-container";
542 var img = container.createChild("img");
543 img.src = encodedBitmap;
544 callback(container);
545 }
546 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/timeline/TracingTimelineModel.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698