[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
commit-queue at webkit.org
commit-queue at webkit.org
Wed Dec 22 13:48:37 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 31a8fb8a1fb22ed234cea532d6e255a6c4f51655
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Mon Sep 27 19:16:13 2010 +0000
2010-09-27 Sheriff Bot <webkit.review.bot at gmail.com>
Unreviewed, rolling out r68389.
http://trac.webkit.org/changeset/68389
https://bugs.webkit.org/show_bug.cgi?id=46637
test_shell is crashing on chromium Win (Requested by loislo on
#webkit).
* inspector/InspectorTimelineAgent.cpp:
(WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
(WebCore::InspectorTimelineAgent::pushGCEventRecords):
(WebCore::InspectorTimelineAgent::didGC):
(WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
(WebCore::InspectorTimelineAgent::willCallFunction):
(WebCore::InspectorTimelineAgent::didCallFunction):
(WebCore::InspectorTimelineAgent::willDispatchEvent):
(WebCore::InspectorTimelineAgent::didDispatchEvent):
(WebCore::InspectorTimelineAgent::willLayout):
(WebCore::InspectorTimelineAgent::didLayout):
(WebCore::InspectorTimelineAgent::willRecalculateStyle):
(WebCore::InspectorTimelineAgent::didRecalculateStyle):
(WebCore::InspectorTimelineAgent::willPaint):
(WebCore::InspectorTimelineAgent::didPaint):
(WebCore::InspectorTimelineAgent::willWriteHTML):
(WebCore::InspectorTimelineAgent::didWriteHTML):
(WebCore::InspectorTimelineAgent::didInstallTimer):
(WebCore::InspectorTimelineAgent::didRemoveTimer):
(WebCore::InspectorTimelineAgent::willFireTimer):
(WebCore::InspectorTimelineAgent::didFireTimer):
(WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
(WebCore::InspectorTimelineAgent::didChangeXHRReadyState):
(WebCore::InspectorTimelineAgent::willLoadXHR):
(WebCore::InspectorTimelineAgent::didLoadXHR):
(WebCore::InspectorTimelineAgent::willEvaluateScript):
(WebCore::InspectorTimelineAgent::didEvaluateScript):
(WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
(WebCore::InspectorTimelineAgent::willSendResourceRequest):
(WebCore::InspectorTimelineAgent::willReceiveResourceData):
(WebCore::InspectorTimelineAgent::didReceiveResourceData):
(WebCore::InspectorTimelineAgent::willReceiveResourceResponse):
(WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
(WebCore::InspectorTimelineAgent::didFinishLoadingResource):
(WebCore::InspectorTimelineAgent::didMarkTimeline):
(WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
(WebCore::InspectorTimelineAgent::didMarkLoadEvent):
(WebCore::InspectorTimelineAgent::reset):
(WebCore::InspectorTimelineAgent::resetFrontendProxyObject):
(WebCore::InspectorTimelineAgent::addRecordToTimeline):
(WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
(WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
(WebCore::InspectorTimelineAgent::pushCurrentRecord):
* inspector/InspectorTimelineAgent.h:
(WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
(WebCore::InspectorTimelineAgent::GCEvent::GCEvent):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68412 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index ebf62ef..56fa8d3 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,59 @@
+2010-09-27 Sheriff Bot <webkit.review.bot at gmail.com>
+
+ Unreviewed, rolling out r68389.
+ http://trac.webkit.org/changeset/68389
+ https://bugs.webkit.org/show_bug.cgi?id=46637
+
+ test_shell is crashing on chromium Win (Requested by loislo on
+ #webkit).
+
+ * inspector/InspectorTimelineAgent.cpp:
+ (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
+ (WebCore::InspectorTimelineAgent::pushGCEventRecords):
+ (WebCore::InspectorTimelineAgent::didGC):
+ (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
+ (WebCore::InspectorTimelineAgent::willCallFunction):
+ (WebCore::InspectorTimelineAgent::didCallFunction):
+ (WebCore::InspectorTimelineAgent::willDispatchEvent):
+ (WebCore::InspectorTimelineAgent::didDispatchEvent):
+ (WebCore::InspectorTimelineAgent::willLayout):
+ (WebCore::InspectorTimelineAgent::didLayout):
+ (WebCore::InspectorTimelineAgent::willRecalculateStyle):
+ (WebCore::InspectorTimelineAgent::didRecalculateStyle):
+ (WebCore::InspectorTimelineAgent::willPaint):
+ (WebCore::InspectorTimelineAgent::didPaint):
+ (WebCore::InspectorTimelineAgent::willWriteHTML):
+ (WebCore::InspectorTimelineAgent::didWriteHTML):
+ (WebCore::InspectorTimelineAgent::didInstallTimer):
+ (WebCore::InspectorTimelineAgent::didRemoveTimer):
+ (WebCore::InspectorTimelineAgent::willFireTimer):
+ (WebCore::InspectorTimelineAgent::didFireTimer):
+ (WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
+ (WebCore::InspectorTimelineAgent::didChangeXHRReadyState):
+ (WebCore::InspectorTimelineAgent::willLoadXHR):
+ (WebCore::InspectorTimelineAgent::didLoadXHR):
+ (WebCore::InspectorTimelineAgent::willEvaluateScript):
+ (WebCore::InspectorTimelineAgent::didEvaluateScript):
+ (WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
+ (WebCore::InspectorTimelineAgent::willSendResourceRequest):
+ (WebCore::InspectorTimelineAgent::willReceiveResourceData):
+ (WebCore::InspectorTimelineAgent::didReceiveResourceData):
+ (WebCore::InspectorTimelineAgent::willReceiveResourceResponse):
+ (WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
+ (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
+ (WebCore::InspectorTimelineAgent::didMarkTimeline):
+ (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
+ (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
+ (WebCore::InspectorTimelineAgent::reset):
+ (WebCore::InspectorTimelineAgent::resetFrontendProxyObject):
+ (WebCore::InspectorTimelineAgent::addRecordToTimeline):
+ (WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
+ (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
+ (WebCore::InspectorTimelineAgent::pushCurrentRecord):
+ * inspector/InspectorTimelineAgent.h:
+ (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
+ (WebCore::InspectorTimelineAgent::GCEvent::GCEvent):
+
2010-09-27 Kinuko Yasuda <kinuko at google.com>
Reviewed by Adam Barth.
diff --git a/WebCore/inspector/InspectorTimelineAgent.cpp b/WebCore/inspector/InspectorTimelineAgent.cpp
index 6e85f86..fbb17c4 100644
--- a/WebCore/inspector/InspectorTimelineAgent.cpp
+++ b/WebCore/inspector/InspectorTimelineAgent.cpp
@@ -46,151 +46,15 @@ namespace WebCore {
int InspectorTimelineAgent::s_instanceCount = 0;
-class InspectorTimelineAgent2 : ScriptGCEventListener, public Noncopyable {
-public:
- InspectorTimelineAgent2(InspectorFrontend* frontend);
- virtual ~InspectorTimelineAgent2();
-
- void startNewRecord(PassRefPtr<InspectorObject>, TimelineRecordType);
- void completeCurrentRecord(TimelineRecordType);
- void addAtomicRecord(PassRefPtr<InspectorObject>, TimelineRecordType);
- void pushOutOfOrderRecord(PassRefPtr<InspectorObject>, TimelineRecordType);
- InspectorObject* getTopRecordData();
- virtual void didGC(double, double, size_t);
-
- void resetFrontendProxyObject(InspectorFrontend* frontend);
- void reset();
-
-private:
- struct TimelineRecordEntry {
- TimelineRecordEntry(PassRefPtr<InspectorObject> record, PassRefPtr<InspectorObject> data, PassRefPtr<InspectorArray> children, TimelineRecordType type)
- : record(record), data(data), children(children), type(type)
- {
- }
- RefPtr<InspectorObject> record;
- RefPtr<InspectorObject> data;
- RefPtr<InspectorArray> children;
- TimelineRecordType type;
- };
- Vector<TimelineRecordEntry> m_recordStack;
-
- struct GCEvent {
- GCEvent(double startTime, double endTime, size_t collectedBytes)
- : startTime(startTime), endTime(endTime), collectedBytes(collectedBytes)
- {
- }
- double startTime;
- double endTime;
- size_t collectedBytes;
- };
- typedef Vector<GCEvent> GCEvents;
- GCEvents m_gcEvents;
- InspectorFrontend* m_frontend;
-
- void pushGCEventRecords();
- void setHeapSizeStatistic(InspectorObject* record);
- void addRecordToTimeline(PassRefPtr<InspectorObject> prpRecord, TimelineRecordType type);
-};
-
-InspectorTimelineAgent2::InspectorTimelineAgent2(InspectorFrontend* frontend)
+InspectorTimelineAgent::InspectorTimelineAgent(InspectorFrontend* frontend)
+ : m_frontend(frontend)
{
- m_frontend = frontend;
+ ++s_instanceCount;
ScriptGCEvent::addEventListener(this);
+ ASSERT(m_frontend);
}
-InspectorTimelineAgent2::~InspectorTimelineAgent2()
-{
- ScriptGCEvent::removeEventListener(this);
-}
-
-void InspectorTimelineAgent2::didGC(double startTime, double endTime, size_t collectedBytesCount)
-{
- m_gcEvents.append(GCEvent(startTime, endTime, collectedBytesCount));
-}
-
-void InspectorTimelineAgent2::addRecordToTimeline(PassRefPtr<InspectorObject> prpRecord, TimelineRecordType type)
-{
- RefPtr<InspectorObject> record(prpRecord);
- record->setNumber("type", type);
- setHeapSizeStatistic(record.get());
- if (m_recordStack.isEmpty())
- m_frontend->addRecordToTimeline(record.release());
- else {
- TimelineRecordEntry parent = m_recordStack.last();
- parent.children->pushObject(record.release());
- }
-}
-
-void InspectorTimelineAgent2::setHeapSizeStatistic(InspectorObject* record)
-{
- size_t usedHeapSize = 0;
- size_t totalHeapSize = 0;
- ScriptGCEvent::getHeapSize(usedHeapSize, totalHeapSize);
- record->setNumber("usedHeapSize", usedHeapSize);
- record->setNumber("totalHeapSize", totalHeapSize);
-}
-
-void InspectorTimelineAgent2::startNewRecord(PassRefPtr<InspectorObject> data, TimelineRecordType type)
-{
- pushGCEventRecords();
- RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
- m_recordStack.append(TimelineRecordEntry(record.release(), data, InspectorArray::create(), type));
-}
-
-void InspectorTimelineAgent2::completeCurrentRecord(TimelineRecordType type)
-{
- // An empty stack could merely mean that the timeline agent was turned on in the middle of
- // an event. Don't treat as an error.
- if (!m_recordStack.isEmpty()) {
- pushGCEventRecords();
- TimelineRecordEntry entry = m_recordStack.last();
- m_recordStack.removeLast();
- ASSERT(entry.type == type);
- entry.record->setObject("data", entry.data);
- entry.record->setArray("children", entry.children);
- entry.record->setNumber("endTime", WTF::currentTimeMS());
- addRecordToTimeline(entry.record, type);
- }
-}
-
-void InspectorTimelineAgent2::pushOutOfOrderRecord(PassRefPtr<InspectorObject> data, TimelineRecordType recordType)
-{
- pushGCEventRecords();
- RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
- record->setObject("data", data);
- record->setNumber("type", recordType);
- setHeapSizeStatistic(record.get());
- m_frontend->addRecordToTimeline(record.release());
-}
-
-void InspectorTimelineAgent2::addAtomicRecord(PassRefPtr<InspectorObject> data, TimelineRecordType recordType)
-{
- pushGCEventRecords();
- RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
- record->setObject("data", data);
- addRecordToTimeline(record.release(), recordType);
-}
-
-InspectorObject* InspectorTimelineAgent2::getTopRecordData()
-{
- if (m_recordStack.isEmpty())
- return 0;
- return m_recordStack.last().data.get();
-}
-
-void InspectorTimelineAgent2::reset()
-{
- m_recordStack.clear();
-}
-
-void InspectorTimelineAgent2::resetFrontendProxyObject(InspectorFrontend* frontend)
-{
- ASSERT(frontend);
- reset();
- m_frontend = frontend;
-}
-
-void InspectorTimelineAgent2::pushGCEventRecords()
+void InspectorTimelineAgent::pushGCEventRecords()
{
if (!m_gcEvents.size())
return;
@@ -205,227 +69,267 @@ void InspectorTimelineAgent2::pushGCEventRecords()
}
}
-InspectorTimelineAgent::InspectorTimelineAgent(InspectorFrontend* frontend)
+void InspectorTimelineAgent::didGC(double startTime, double endTime, size_t collectedBytesCount)
{
- ++s_instanceCount;
- m_timelineAgent = new InspectorTimelineAgent2(frontend);
+ m_gcEvents.append(GCEvent(startTime, endTime, collectedBytesCount));
}
InspectorTimelineAgent::~InspectorTimelineAgent()
{
ASSERT(s_instanceCount);
--s_instanceCount;
-}
-
-void InspectorTimelineAgent::reset()
-{
- if (m_timelineAgent)
- m_timelineAgent->reset();
+ ScriptGCEvent::removeEventListener(this);
}
void InspectorTimelineAgent::willCallFunction(const String& scriptName, int scriptLine)
{
- if (m_timelineAgent)
- m_timelineAgent->startNewRecord(TimelineRecordFactory::createFunctionCallData(scriptName, scriptLine), FunctionCallTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createFunctionCallData(scriptName, scriptLine), FunctionCallTimelineRecordType);
}
void InspectorTimelineAgent::didCallFunction()
{
- if (m_timelineAgent)
- m_timelineAgent->completeCurrentRecord(FunctionCallTimelineRecordType);
+ didCompleteCurrentRecord(FunctionCallTimelineRecordType);
}
void InspectorTimelineAgent::willDispatchEvent(const Event& event)
{
- if (m_timelineAgent)
- m_timelineAgent->startNewRecord(TimelineRecordFactory::createEventDispatchData(event), EventDispatchTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createEventDispatchData(event),
+ EventDispatchTimelineRecordType);
}
void InspectorTimelineAgent::didDispatchEvent()
{
- if (m_timelineAgent)
- m_timelineAgent->completeCurrentRecord(EventDispatchTimelineRecordType);
+ didCompleteCurrentRecord(EventDispatchTimelineRecordType);
}
void InspectorTimelineAgent::willLayout()
{
- if (m_timelineAgent)
- m_timelineAgent->startNewRecord(InspectorObject::create(), LayoutTimelineRecordType);
+ pushCurrentRecord(InspectorObject::create(), LayoutTimelineRecordType);
}
void InspectorTimelineAgent::didLayout()
{
- if (m_timelineAgent)
- m_timelineAgent->completeCurrentRecord(LayoutTimelineRecordType);
+ didCompleteCurrentRecord(LayoutTimelineRecordType);
}
void InspectorTimelineAgent::willRecalculateStyle()
{
- if (m_timelineAgent)
- m_timelineAgent->startNewRecord(InspectorObject::create(), RecalculateStylesTimelineRecordType);
+ pushCurrentRecord(InspectorObject::create(), RecalculateStylesTimelineRecordType);
}
void InspectorTimelineAgent::didRecalculateStyle()
{
- if (m_timelineAgent)
- m_timelineAgent->completeCurrentRecord(RecalculateStylesTimelineRecordType);
+ didCompleteCurrentRecord(RecalculateStylesTimelineRecordType);
}
void InspectorTimelineAgent::willPaint(const IntRect& rect)
{
- if (m_timelineAgent)
- m_timelineAgent->startNewRecord(TimelineRecordFactory::createPaintData(rect), PaintTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createPaintData(rect), PaintTimelineRecordType);
}
void InspectorTimelineAgent::didPaint()
{
- if (m_timelineAgent)
- m_timelineAgent->completeCurrentRecord(PaintTimelineRecordType);
+ didCompleteCurrentRecord(PaintTimelineRecordType);
}
void InspectorTimelineAgent::willWriteHTML(unsigned int length, unsigned int startLine)
{
- if (m_timelineAgent)
- m_timelineAgent->startNewRecord(TimelineRecordFactory::createParseHTMLData(length, startLine), ParseHTMLTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createParseHTMLData(length, startLine), ParseHTMLTimelineRecordType);
}
void InspectorTimelineAgent::didWriteHTML(unsigned int endLine)
{
- if (m_timelineAgent) {
- InspectorObject* data = m_timelineAgent->getTopRecordData();
- if (data) {
- data->setNumber("endLine", endLine);
- m_timelineAgent->completeCurrentRecord(ParseHTMLTimelineRecordType);
- }
+ if (!m_recordStack.isEmpty()) {
+ TimelineRecordEntry entry = m_recordStack.last();
+ entry.data->setNumber("endLine", endLine);
+ didCompleteCurrentRecord(ParseHTMLTimelineRecordType);
}
}
void InspectorTimelineAgent::didInstallTimer(int timerId, int timeout, bool singleShot)
{
- if (m_timelineAgent)
- m_timelineAgent->addAtomicRecord(TimelineRecordFactory::createTimerInstallData(timerId, timeout, singleShot), TimerInstallTimelineRecordType);
+ pushGCEventRecords();
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ record->setObject("data", TimelineRecordFactory::createTimerInstallData(timerId, timeout, singleShot));
+ addRecordToTimeline(record.release(), TimerInstallTimelineRecordType);
}
void InspectorTimelineAgent::didRemoveTimer(int timerId)
{
- if (m_timelineAgent)
- m_timelineAgent->addAtomicRecord(TimelineRecordFactory::createGenericTimerData(timerId), TimerRemoveTimelineRecordType);
+ pushGCEventRecords();
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ record->setObject("data", TimelineRecordFactory::createGenericTimerData(timerId));
+ addRecordToTimeline(record.release(), TimerRemoveTimelineRecordType);
}
void InspectorTimelineAgent::willFireTimer(int timerId)
{
- if (m_timelineAgent)
- m_timelineAgent->startNewRecord(TimelineRecordFactory::createGenericTimerData(timerId), TimerFireTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createGenericTimerData(timerId), TimerFireTimelineRecordType);
}
void InspectorTimelineAgent::didFireTimer()
{
- if (m_timelineAgent)
- m_timelineAgent->completeCurrentRecord(TimerFireTimelineRecordType);
+ didCompleteCurrentRecord(TimerFireTimelineRecordType);
}
void InspectorTimelineAgent::willChangeXHRReadyState(const String& url, int readyState)
{
- if (m_timelineAgent)
- m_timelineAgent->startNewRecord(TimelineRecordFactory::createXHRReadyStateChangeData(url, readyState), XHRReadyStateChangeRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createXHRReadyStateChangeData(url, readyState), XHRReadyStateChangeRecordType);
}
void InspectorTimelineAgent::didChangeXHRReadyState()
{
- if (m_timelineAgent)
- m_timelineAgent->completeCurrentRecord(XHRReadyStateChangeRecordType);
+ didCompleteCurrentRecord(XHRReadyStateChangeRecordType);
}
void InspectorTimelineAgent::willLoadXHR(const String& url)
{
- if (m_timelineAgent)
- m_timelineAgent->startNewRecord(TimelineRecordFactory::createXHRLoadData(url), XHRLoadRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createXHRLoadData(url), XHRLoadRecordType);
}
void InspectorTimelineAgent::didLoadXHR()
{
- if (m_timelineAgent)
- m_timelineAgent->completeCurrentRecord(XHRLoadRecordType);
+ didCompleteCurrentRecord(XHRLoadRecordType);
}
void InspectorTimelineAgent::willEvaluateScript(const String& url, int lineNumber)
{
- if (m_timelineAgent)
- m_timelineAgent->startNewRecord(TimelineRecordFactory::createEvaluateScriptData(url, lineNumber), EvaluateScriptTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createEvaluateScriptData(url, lineNumber), EvaluateScriptTimelineRecordType);
}
void InspectorTimelineAgent::didEvaluateScript()
{
- if (m_timelineAgent)
- m_timelineAgent->completeCurrentRecord(EvaluateScriptTimelineRecordType);
+ didCompleteCurrentRecord(EvaluateScriptTimelineRecordType);
}
void InspectorTimelineAgent::didScheduleResourceRequest(const String& url)
{
- if (m_timelineAgent)
- m_timelineAgent->addAtomicRecord(TimelineRecordFactory::createScheduleResourceRequestData(url), ScheduleResourceRequestTimelineRecordType);
+ pushGCEventRecords();
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ record->setObject("data", TimelineRecordFactory::createScheduleResourceRequestData(url));
+ record->setNumber("type", ScheduleResourceRequestTimelineRecordType);
+ addRecordToTimeline(record.release(), ScheduleResourceRequestTimelineRecordType);
}
-void InspectorTimelineAgent::willSendResourceRequest(unsigned long identifier, bool isMainResource, const ResourceRequest& request)
+void InspectorTimelineAgent::willSendResourceRequest(unsigned long identifier, bool isMainResource,
+ const ResourceRequest& request)
{
- if (m_timelineAgent)
- m_timelineAgent->pushOutOfOrderRecord(TimelineRecordFactory::createResourceSendRequestData(identifier, isMainResource, request), ResourceSendRequestTimelineRecordType);
+ pushGCEventRecords();
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ record->setObject("data", TimelineRecordFactory::createResourceSendRequestData(identifier, isMainResource, request));
+ record->setNumber("type", ResourceSendRequestTimelineRecordType);
+ setHeapSizeStatistic(record.get());
+ m_frontend->addRecordToTimeline(record.release());
}
void InspectorTimelineAgent::willReceiveResourceData(unsigned long identifier)
{
- if (m_timelineAgent)
- m_timelineAgent->startNewRecord(TimelineRecordFactory::createReceiveResourceData(identifier), ReceiveResourceDataTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createReceiveResourceData(identifier), ReceiveResourceDataTimelineRecordType);
}
void InspectorTimelineAgent::didReceiveResourceData()
{
- if (m_timelineAgent)
- m_timelineAgent->completeCurrentRecord(ReceiveResourceDataTimelineRecordType);
+ didCompleteCurrentRecord(ReceiveResourceDataTimelineRecordType);
}
void InspectorTimelineAgent::willReceiveResourceResponse(unsigned long identifier, const ResourceResponse& response)
{
- if (m_timelineAgent)
- m_timelineAgent->startNewRecord(TimelineRecordFactory::createResourceReceiveResponseData(identifier, response), ResourceReceiveResponseTimelineRecordType);
+ pushCurrentRecord(TimelineRecordFactory::createResourceReceiveResponseData(identifier, response), ResourceReceiveResponseTimelineRecordType);
}
void InspectorTimelineAgent::didReceiveResourceResponse()
{
- if (m_timelineAgent)
- m_timelineAgent->completeCurrentRecord(ResourceReceiveResponseTimelineRecordType);
+ didCompleteCurrentRecord(ResourceReceiveResponseTimelineRecordType);
}
void InspectorTimelineAgent::didFinishLoadingResource(unsigned long identifier, bool didFail)
{
- if (m_timelineAgent)
- m_timelineAgent->pushOutOfOrderRecord(TimelineRecordFactory::createResourceFinishData(identifier, didFail), ResourceFinishTimelineRecordType);
+ pushGCEventRecords();
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ record->setObject("data", TimelineRecordFactory::createResourceFinishData(identifier, didFail));
+ record->setNumber("type", ResourceFinishTimelineRecordType);
+ setHeapSizeStatistic(record.get());
+ m_frontend->addRecordToTimeline(record.release());
}
void InspectorTimelineAgent::didMarkTimeline(const String& message)
{
- if (m_timelineAgent)
- m_timelineAgent->addAtomicRecord(TimelineRecordFactory::createMarkTimelineData(message), MarkTimelineRecordType);
+ pushGCEventRecords();
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ record->setObject("data", TimelineRecordFactory::createMarkTimelineData(message));
+ addRecordToTimeline(record.release(), MarkTimelineRecordType);
}
void InspectorTimelineAgent::didMarkDOMContentEvent()
{
- if (m_timelineAgent)
- m_timelineAgent->addAtomicRecord(InspectorObject::create(), MarkDOMContentEventType);
+ pushGCEventRecords();
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ addRecordToTimeline(record.release(), MarkDOMContentEventType);
}
void InspectorTimelineAgent::didMarkLoadEvent()
{
- if (m_timelineAgent)
- m_timelineAgent->addAtomicRecord(InspectorObject::create(), MarkLoadEventType);
+ pushGCEventRecords();
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ addRecordToTimeline(record.release(), MarkLoadEventType);
+}
+
+void InspectorTimelineAgent::reset()
+{
+ m_recordStack.clear();
}
void InspectorTimelineAgent::resetFrontendProxyObject(InspectorFrontend* frontend)
{
- if (m_timelineAgent)
- m_timelineAgent->resetFrontendProxyObject(frontend);
+ ASSERT(frontend);
+ reset();
+ m_frontend = frontend;
+}
+
+void InspectorTimelineAgent::addRecordToTimeline(PassRefPtr<InspectorObject> prpRecord, TimelineRecordType type)
+{
+ RefPtr<InspectorObject> record(prpRecord);
+ record->setNumber("type", type);
+ setHeapSizeStatistic(record.get());
+ if (m_recordStack.isEmpty())
+ m_frontend->addRecordToTimeline(record.release());
+ else {
+ TimelineRecordEntry parent = m_recordStack.last();
+ parent.children->pushObject(record.release());
+ }
+}
+
+void InspectorTimelineAgent::setHeapSizeStatistic(InspectorObject* record)
+{
+ size_t usedHeapSize = 0;
+ size_t totalHeapSize = 0;
+ ScriptGCEvent::getHeapSize(usedHeapSize, totalHeapSize);
+ record->setNumber("usedHeapSize", usedHeapSize);
+ record->setNumber("totalHeapSize", totalHeapSize);
}
+void InspectorTimelineAgent::didCompleteCurrentRecord(TimelineRecordType type)
+{
+ // An empty stack could merely mean that the timeline agent was turned on in the middle of
+ // an event. Don't treat as an error.
+ if (!m_recordStack.isEmpty()) {
+ pushGCEventRecords();
+ TimelineRecordEntry entry = m_recordStack.last();
+ m_recordStack.removeLast();
+ ASSERT(entry.type == type);
+ entry.record->setObject("data", entry.data);
+ entry.record->setArray("children", entry.children);
+ entry.record->setNumber("endTime", WTF::currentTimeMS());
+ addRecordToTimeline(entry.record, type);
+ }
+}
+
+void InspectorTimelineAgent::pushCurrentRecord(PassRefPtr<InspectorObject> data, TimelineRecordType type)
+{
+ pushGCEventRecords();
+ RefPtr<InspectorObject> record = TimelineRecordFactory::createGenericRecord(WTF::currentTimeMS());
+ m_recordStack.append(TimelineRecordEntry(record.release(), data, InspectorArray::create(), type));
+}
} // namespace WebCore
#endif // ENABLE(INSPECTOR)
diff --git a/WebCore/inspector/InspectorTimelineAgent.h b/WebCore/inspector/InspectorTimelineAgent.h
index 65ca442..6b3324b 100644
--- a/WebCore/inspector/InspectorTimelineAgent.h
+++ b/WebCore/inspector/InspectorTimelineAgent.h
@@ -46,7 +46,6 @@ class InspectorFrontend;
class IntRect;
class ResourceRequest;
class ResourceResponse;
-class InspectorTimelineAgent2;
// Must be kept in sync with TimelineAgent.js
enum TimelineRecordType {
@@ -73,7 +72,7 @@ enum TimelineRecordType {
ScheduleResourceRequestTimelineRecordType = 20
};
-class InspectorTimelineAgent : public Noncopyable {
+class InspectorTimelineAgent : ScriptGCEventListener, public Noncopyable {
public:
InspectorTimelineAgent(InspectorFrontend* frontend);
~InspectorTimelineAgent();
@@ -126,15 +125,48 @@ public:
void didFinishLoadingResource(unsigned long, bool didFail);
void willReceiveResourceData(unsigned long identifier);
void didReceiveResourceData();
+
+ virtual void didGC(double, double, size_t);
static int instanceCount() { return s_instanceCount; }
static InspectorTimelineAgent* retrieve(ScriptExecutionContext*);
private:
-
+ struct TimelineRecordEntry {
+ TimelineRecordEntry(PassRefPtr<InspectorObject> record, PassRefPtr<InspectorObject> data, PassRefPtr<InspectorArray> children, TimelineRecordType type)
+ : record(record), data(data), children(children), type(type)
+ {
+ }
+ RefPtr<InspectorObject> record;
+ RefPtr<InspectorObject> data;
+ RefPtr<InspectorArray> children;
+ TimelineRecordType type;
+ };
+
+ void pushCurrentRecord(PassRefPtr<InspectorObject>, TimelineRecordType);
+ void setHeapSizeStatistic(InspectorObject* record);
+
+ void didCompleteCurrentRecord(TimelineRecordType);
+
+ void addRecordToTimeline(PassRefPtr<InspectorObject>, TimelineRecordType);
+
+ void pushGCEventRecords();
+
+ InspectorFrontend* m_frontend;
+
+ Vector<TimelineRecordEntry> m_recordStack;
static int s_instanceCount;
-
- OwnPtr<InspectorTimelineAgent2> m_timelineAgent;
+ struct GCEvent {
+ GCEvent(double startTime, double endTime, size_t collectedBytes)
+ : startTime(startTime), endTime(endTime), collectedBytes(collectedBytes)
+ {
+ }
+ double startTime;
+ double endTime;
+ size_t collectedBytes;
+ };
+ typedef Vector<GCEvent> GCEvents;
+ GCEvents m_gcEvents;
};
inline InspectorTimelineAgent* InspectorTimelineAgent::retrieve(ScriptExecutionContext* context)
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list