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