Index: Source/core/inspector/InspectorTimelineAgent.cpp |
diff --git a/Source/core/inspector/InspectorTimelineAgent.cpp b/Source/core/inspector/InspectorTimelineAgent.cpp |
index 4b1623511ddb31017531e15d85c6b804b6756707..67cc151cbb811e1b6c70a8c096c09fe540f82867 100644 |
--- a/Source/core/inspector/InspectorTimelineAgent.cpp |
+++ b/Source/core/inspector/InspectorTimelineAgent.cpp |
@@ -270,9 +270,10 @@ void InspectorTimelineAgent::pushGCEventRecords() |
GCEvents events = m_gcEvents; |
m_gcEvents.clear(); |
for (GCEvents::iterator i = events.begin(); i != events.end(); ++i) { |
- RefPtr<TimelineEvent> record = TimelineRecordFactory::createGenericRecord(m_timeConverter.fromMonotonicallyIncreasingTime(i->startTime), m_maxCallStackDepth, TimelineRecordType::GCEvent, TimelineRecordFactory::createGCEventData(i->collectedBytes)); |
+ double ts = m_timeConverter.fromMonotonicallyIncreasingTime(i->startTime); |
+ RefPtr<TimelineEvent> record = TimelineRecordFactory::createGenericRecord(ts, m_maxCallStackDepth, TimelineRecordType::GCEvent, TimelineRecordFactory::createGCEventData(i->collectedBytes)); |
record->setEndTime(m_timeConverter.fromMonotonicallyIncreasingTime(i->endTime)); |
- addRecordToTimeline(record.release()); |
+ addRecordToTimeline(record.release(), ts); |
} |
} |
@@ -344,8 +345,11 @@ void InspectorTimelineAgent::start(ErrorString* errorString, const int* maxCallS |
else |
m_maxCallStackDepth = 5; |
- if (bufferEvents && *bufferEvents) |
+ if (bufferEvents && *bufferEvents) { |
m_bufferedEvents = TypeBuilder::Array<TimelineEvent>::create(); |
+ m_lastProgressTimestamp = timestamp(); |
+ } |
+ |
if (liveEvents) |
setLiveEvents(*liveEvents); |
@@ -593,7 +597,7 @@ void InspectorTimelineAgent::willPaint(RenderObject* renderer, const GraphicsLay |
if (paintSetupStart) { |
RefPtr<TimelineEvent> paintSetupRecord = TimelineRecordFactory::createGenericRecord(paintSetupStart, 0, TimelineRecordType::PaintSetup, TimelineRecordFactory::createLayerData(nodeIdentifier)); |
paintSetupRecord->setEndTime(m_paintSetupEnd); |
- addRecordToTimeline(paintSetupRecord); |
+ addRecordToTimeline(paintSetupRecord, paintSetupStart); |
} |
} |
pushCurrentRecord(JSONObject::create(), TimelineRecordType::Paint, true, frame, true); |
@@ -1093,10 +1097,14 @@ void InspectorTimelineAgent::onEmbedderCallbackEnd(const TraceEventDispatcher::T |
state.recordStack.closeScopedRecord(m_timeConverter.fromMonotonicallyIncreasingTime(event.timestamp())); |
} |
-void InspectorTimelineAgent::addRecordToTimeline(PassRefPtr<TimelineEvent> record) |
+void InspectorTimelineAgent::addRecordToTimeline(PassRefPtr<TimelineEvent> record, double ts) |
{ |
commitFrameRecord(); |
innerAddRecordToTimeline(record); |
+ if (m_bufferedEvents && ts - m_lastProgressTimestamp > 300) { |
+ m_lastProgressTimestamp = ts; |
+ m_frontend->progress(m_bufferedEvents->length()); |
+ } |
} |
void InspectorTimelineAgent::innerAddRecordToTimeline(PassRefPtr<TimelineEvent> record) |
@@ -1170,11 +1178,12 @@ void InspectorTimelineAgent::didCompleteCurrentRecord(const String& type) |
} |
ASSERT(entry.type == type); |
entry.record->setChildren(entry.children); |
- entry.record->setEndTime(timestamp()); |
+ double ts = timestamp(); |
+ entry.record->setEndTime(ts); |
ptrdiff_t usedHeapSizeDelta = getUsedHeapSize() - entry.usedHeapSizeAtStart; |
if (usedHeapSizeDelta) |
entry.record->setUsedHeapSizeDelta(usedHeapSizeDelta); |
- addRecordToTimeline(entry.record); |
+ addRecordToTimeline(entry.record, ts); |
} |
} |
@@ -1204,15 +1213,17 @@ InspectorTimelineAgent::InspectorTimelineAgent(InspectorPageAgent* pageAgent, In |
, m_paintSetupStart(0) |
, m_styleRecalcElementCounter(0) |
, m_mayEmitFirstPaint(false) |
+ , m_lastProgressTimestamp(0) |
{ |
} |
void InspectorTimelineAgent::appendRecord(PassRefPtr<JSONObject> data, const String& type, bool captureCallStack, LocalFrame* frame) |
{ |
pushGCEventRecords(); |
- RefPtr<TimelineEvent> record = TimelineRecordFactory::createGenericRecord(timestamp(), captureCallStack ? m_maxCallStackDepth : 0, type, data); |
+ double ts = timestamp(); |
+ RefPtr<TimelineEvent> record = TimelineRecordFactory::createGenericRecord(ts, captureCallStack ? m_maxCallStackDepth : 0, type, data); |
setFrameIdentifier(record.get(), frame); |
- addRecordToTimeline(record.release()); |
+ addRecordToTimeline(record.release(), ts); |
} |
void InspectorTimelineAgent::sendEvent(PassRefPtr<TimelineEvent> record) |