Title: [113151] trunk/Source/WebCore
Revision
113151
Author
ca...@chromium.org
Date
2012-04-04 01:47:00 -0700 (Wed, 04 Apr 2012)

Log Message

Web Inspector: event marks are missing in the timeline overview
https://bugs.webkit.org/show_bug.cgi?id=83043

Reviewed by Pavel Feldman.

- invoke overview event dividers update as part of overview update, not lower pane update;
- store raw records for event dividers within overview;
- moved createEventDividers to a class method of TimelinePresentationModel for reuse.
- ditto for forAllRecords

* inspector/front-end/TimelineOverviewPane.js:
(WebInspector.TimelineOverviewPane):
(WebInspector.TimelineOverviewPane.prototype._update):
(WebInspector.TimelineOverviewPane.prototype._updateCategoryStrips):
(WebInspector.TimelineOverviewPane.prototype._updateEventDividers):
(WebInspector.TimelineOverviewPane.prototype._onRecordAdded):
(WebInspector.TimelineOverviewPane.prototype._reset):
(WebInspector.HeapGraph.prototype.update):
* inspector/front-end/TimelinePanel.js:
(WebInspector.TimelinePanel.prototype._updateEventDividers):
(WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline.addTimestampRecords):
(WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
* inspector/front-end/TimelinePresentationModel.js:
(WebInspector.TimelinePresentationModel.isEventDivider):
(WebInspector.TimelinePresentationModel.forAllRecords):
(WebInspector.TimelinePresentationModel.createEventDivider):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (113150 => 113151)


--- trunk/Source/WebCore/ChangeLog	2012-04-04 08:39:46 UTC (rev 113150)
+++ trunk/Source/WebCore/ChangeLog	2012-04-04 08:47:00 UTC (rev 113151)
@@ -1,3 +1,32 @@
+2012-04-03  Andrey Kosyakov  <ca...@chromium.org>
+
+        Web Inspector: event marks are missing in the timeline overview
+        https://bugs.webkit.org/show_bug.cgi?id=83043
+
+        Reviewed by Pavel Feldman.
+
+        - invoke overview event dividers update as part of overview update, not lower pane update;
+        - store raw records for event dividers within overview;
+        - moved createEventDividers to a class method of TimelinePresentationModel for reuse.
+        - ditto for forAllRecords
+
+        * inspector/front-end/TimelineOverviewPane.js:
+        (WebInspector.TimelineOverviewPane):
+        (WebInspector.TimelineOverviewPane.prototype._update):
+        (WebInspector.TimelineOverviewPane.prototype._updateCategoryStrips):
+        (WebInspector.TimelineOverviewPane.prototype._updateEventDividers):
+        (WebInspector.TimelineOverviewPane.prototype._onRecordAdded):
+        (WebInspector.TimelineOverviewPane.prototype._reset):
+        (WebInspector.HeapGraph.prototype.update):
+        * inspector/front-end/TimelinePanel.js:
+        (WebInspector.TimelinePanel.prototype._updateEventDividers):
+        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline.addTimestampRecords):
+        (WebInspector.TimelinePanel.prototype._innerAddRecordToTimeline):
+        * inspector/front-end/TimelinePresentationModel.js:
+        (WebInspector.TimelinePresentationModel.isEventDivider):
+        (WebInspector.TimelinePresentationModel.forAllRecords):
+        (WebInspector.TimelinePresentationModel.createEventDivider):
+
 2012-04-03  Hans Wennborg  <h...@chromium.org>
 
         Speech _javascript_ API: Plumbing for Chromium

Modified: trunk/Source/WebCore/inspector/front-end/TimelineOverviewPane.js (113150 => 113151)


--- trunk/Source/WebCore/inspector/front-end/TimelineOverviewPane.js	2012-04-04 08:39:46 UTC (rev 113150)
+++ trunk/Source/WebCore/inspector/front-end/TimelineOverviewPane.js	2012-04-04 08:47:00 UTC (rev 113151)
@@ -41,6 +41,7 @@
 
     this._windowStartTime = 0;
     this._windowEndTime = Infinity;
+    this._eventDividers = [];
 
     this._model = model;
 
@@ -110,7 +111,7 @@
     this._overviewGrid.setScrollAndDividerTop(0, 0);
     this._overviewCalculator = new WebInspector.TimelineOverviewCalculator();
 
-    model.addEventListener(WebInspector.TimelineModel.Events.RecordAdded, this._scheduleRefresh, this);
+    model.addEventListener(WebInspector.TimelineModel.Events.RecordAdded, this._onRecordAdded, this);
     model.addEventListener(WebInspector.TimelineModel.Events.RecordsCleared, this._reset, this);
 }
 
@@ -204,6 +205,7 @@
 
         this._overviewCalculator.setWindow(this._model.minimumRecordTime(), this._model.maximumRecordTime());
         this._overviewGrid.updateDividers(true, this._overviewCalculator);
+        this._updateEventDividers();
     },
 
     _updateCategoryStrips: function()
@@ -231,7 +233,7 @@
                 timelines[categoryName][j] = true;
         }
         var records = this._model.records;
-        WebInspector.TimelinePanel.forAllRecords(records, markPercentagesForRecord.bind(this));
+        WebInspector.TimelinePresentationModel.forAllRecords(records, markPercentagesForRecord.bind(this));
 
         // Convert sparse arrays to continuous segments, render graphs for each.
         for (var category in categories) {
@@ -256,19 +258,18 @@
         }
     },
 
-    updateEventDividers: function(records, dividerConstructor)
+    _updateEventDividers: function()
     {
+        var records = this._eventDividers;
         this._overviewGrid.removeEventDividers();
         var dividers = [];
         for (var i = 0; i < records.length; ++i) {
             var record = records[i];
-            if (record.type === WebInspector.TimelineModel.RecordType.BeginFrame)
-                continue;
             var positions = this._overviewCalculator.computeBarGraphPercentages(record);
             var dividerPosition = Math.round(positions.start * 10);
             if (dividers[dividerPosition])
                 continue;
-            var divider = dividerConstructor(record);
+            var divider = WebInspector.TimelinePresentationModel.createEventDivider(record);
             divider.style.left = positions.start + "%";
             dividers[dividerPosition] = divider;
         }
@@ -290,6 +291,19 @@
         this._scheduleRefresh();
     },
 
+    _onRecordAdded: function(event)
+    {
+        var record = event.data;
+        var eventDividers = this._eventDividers;
+        function addEventDividers(record)
+        {
+            if (WebInspector.TimelinePresentationModel.isEventDivider(record))
+                eventDividers.push(record);
+        }
+        WebInspector.TimelinePresentationModel.forAllRecords([record], addEventDividers);
+        this._scheduleRefresh();
+    },
+
     _reset: function()
     {
         this._windowStartTime = 0;
@@ -297,6 +311,7 @@
         this._overviewWindow.reset();
         this._overviewCalculator.reset();
         this._overviewGrid.updateDividers(true, this._overviewCalculator);
+        this._eventDividers = [];
         if (this._verticalOverview)
             this._verticalOverview.reset();
         this._update();
@@ -745,7 +760,7 @@
         var minUsedHeapSize = 100000000000;
         var minTime = this._model.minimumRecordTime();
         var maxTime = this._model.maximumRecordTime();;
-        WebInspector.TimelinePanel.forAllRecords(records, function(r) {
+        WebInspector.TimelinePresentationModel.forAllRecords(records, function(r) {
             maxUsedHeapSize = Math.max(maxUsedHeapSize, r.usedHeapSize || maxUsedHeapSize);
             minUsedHeapSize = Math.min(minUsedHeapSize, r.usedHeapSize || minUsedHeapSize);
         });
@@ -757,7 +772,7 @@
         var yFactor = height / (maxUsedHeapSize - minUsedHeapSize);
 
         var histogram = new Array(width);
-        WebInspector.TimelinePanel.forAllRecords(records, function(r) {
+        WebInspector.TimelinePresentationModel.forAllRecords(records, function(r) {
             if (!r.usedHeapSize)
                 return;
             var x = Math.round((WebInspector.TimelineModel.endTimeInSeconds(r) - minTime) * xFactor);

Modified: trunk/Source/WebCore/inspector/front-end/TimelinePanel.js (113150 => 113151)


--- trunk/Source/WebCore/inspector/front-end/TimelinePanel.js	2012-04-04 08:39:46 UTC (rev 113150)
+++ trunk/Source/WebCore/inspector/front-end/TimelinePanel.js	2012-04-04 08:47:00 UTC (rev 113151)
@@ -342,38 +342,14 @@
             var dividerPosition = Math.round(positions.left);
             if (dividerPosition < 0 || dividerPosition >= clientWidth || dividers[dividerPosition])
                 continue;
-            var divider = this._createEventDivider(record);
+            var divider = WebInspector.TimelinePresentationModel.createEventDivider(record);
+            divider.title = record.title;
             divider.style.left = (dividerPosition + this._expandOffset) + "px";
             dividers[dividerPosition] = divider;
         }
         this._timelineGrid.addEventDividers(dividers);
-        this._overviewPane.updateEventDividers(this._timeStampRecords, this._createEventDivider.bind(this));
     },
 
-    _createEventDivider: function(record)
-    {
-        var eventDivider = document.createElement("div");
-        eventDivider.className = "resources-event-divider";
-        var recordTypes = WebInspector.TimelineModel.RecordType;
-
-        var eventDividerPadding = document.createElement("div");
-        eventDividerPadding.className = "resources-event-divider-padding";
-        eventDividerPadding.title = record.title;
-
-        if (record.type === recordTypes.MarkDOMContent)
-            eventDivider.className += " resources-blue-divider";
-        else if (record.type === recordTypes.MarkLoad)
-            eventDivider.className += " resources-red-divider";
-        else if (record.type === recordTypes.TimeStamp) {
-            eventDivider.className += " resources-orange-divider";
-            eventDividerPadding.title = record.data["message"];
-        } else if (record.type === recordTypes.BeginFrame)
-            eventDivider.className += " timeline-frame-divider";
-
-        eventDividerPadding.appendChild(eventDivider);
-        return eventDividerPadding;
-    },
-
     _timelinesOverviewModeChanged: function(event)
     {
         var shouldShowMemory = event.data ="" WebInspector.TimelineOverviewPane.Mode.Memory;
@@ -466,12 +442,10 @@
         var timeStampRecords = this._timeStampRecords;
         function addTimestampRecords(record)
         {
-            if (record.type === recordTypes.MarkDOMContent || record.type === recordTypes.MarkLoad ||
-                record.type === recordTypes.TimeStamp || record.type === recordTypes.BeginFrame) {
+            if (WebInspector.TimelinePresentationModel.isEventDivider(record) || record.type === recordTypes.BeginFrame)
                 timeStampRecords.push(record);
-            }
         }
-        WebInspector.TimelinePanel.forAllRecords([ formattedRecord ], addTimestampRecords);
+        WebInspector.TimelinePresentationModel.forAllRecords([ formattedRecord ], addTimestampRecords);
     },
 
     sidebarResized: function(event)
@@ -919,26 +893,6 @@
     }
 }
 
-WebInspector.TimelinePanel.forAllRecords = function(recordsArray, callback)
-{
-    if (!recordsArray)
-        return;
-    var stack = [{array: recordsArray, index: 0}];
-    while (stack.length) {
-        var entry = stack[stack.length - 1];
-        var records = entry.array;
-        if (entry.index < records.length) {
-             var record = records[entry.index];
-             if (callback(record))
-                 return;
-             if (record.children)
-                 stack.push({array: record.children, index: 0});
-             ++entry.index;
-        } else
-            stack.pop();
-    }
-}
-
 /**
  * @constructor
  */

Modified: trunk/Source/WebCore/inspector/front-end/TimelinePresentationModel.js (113150 => 113151)


--- trunk/Source/WebCore/inspector/front-end/TimelinePresentationModel.js	2012-04-04 08:39:46 UTC (rev 113150)
+++ trunk/Source/WebCore/inspector/front-end/TimelinePresentationModel.js	2012-04-04 08:47:00 UTC (rev 113151)
@@ -101,6 +101,55 @@
         return WebInspector.TimelinePresentationModel.recordStyle(record).category;
 }
 
+WebInspector.TimelinePresentationModel.isEventDivider = function(record)
+{
+    var recordTypes = WebInspector.TimelineModel.RecordType;
+    return record.type === recordTypes.MarkDOMContent || record.type === recordTypes.MarkLoad || record.type === recordTypes.TimeStamp;
+}
+
+WebInspector.TimelinePresentationModel.forAllRecords = function(recordsArray, callback)
+{
+    if (!recordsArray)
+        return;
+    var stack = [{array: recordsArray, index: 0}];
+    while (stack.length) {
+        var entry = stack[stack.length - 1];
+        var records = entry.array;
+        if (entry.index < records.length) {
+             var record = records[entry.index];
+             if (callback(record))
+                 return;
+             if (record.children)
+                 stack.push({array: record.children, index: 0});
+             ++entry.index;
+        } else
+            stack.pop();
+    }
+}
+
+WebInspector.TimelinePresentationModel.createEventDivider = function(record)
+{
+    var eventDivider = document.createElement("div");
+    eventDivider.className = "resources-event-divider";
+    var recordTypes = WebInspector.TimelineModel.RecordType;
+
+    var eventDividerPadding = document.createElement("div");
+    eventDividerPadding.className = "resources-event-divider-padding";
+
+    if (record.type === recordTypes.MarkDOMContent)
+        eventDivider.className += " resources-blue-divider";
+    else if (record.type === recordTypes.MarkLoad)
+        eventDivider.className += " resources-red-divider";
+    else if (record.type === recordTypes.TimeStamp) {
+        eventDivider.className += " resources-orange-divider";
+        eventDividerPadding.title = record.data["message"];
+    } else if (record.type === recordTypes.BeginFrame)
+        eventDivider.className += " timeline-frame-divider";
+
+    eventDividerPadding.appendChild(eventDivider);
+    return eventDividerPadding;
+}
+
 WebInspector.TimelinePresentationModel.prototype = {
     /**
      * @param {WebInspector.TimelinePresentationModel.Filter} filter
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to