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

Unified Diff: Source/core/inspector/InspectorTimelineAgent.cpp

Issue 24027002: DevTools: implement console.timeline/timelineEnd. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/inspector/InspectorTimelineAgent.cpp
diff --git a/Source/core/inspector/InspectorTimelineAgent.cpp b/Source/core/inspector/InspectorTimelineAgent.cpp
index 2b5b5df945c7ca93eb9a0290d8d16a4d006bba99..a385353b5843798caccc8138e3f385ca4f2f54ec 100644
--- a/Source/core/inspector/InspectorTimelineAgent.cpp
+++ b/Source/core/inspector/InspectorTimelineAgent.cpp
@@ -48,6 +48,7 @@
#include "core/page/DOMWindow.h"
#include "core/page/Frame.h"
#include "core/page/FrameView.h"
+#include "core/page/PageConsole.h"
#include "core/platform/MemoryUsageSupport.h"
#include "core/platform/chromium/TraceEvent.h"
#include "core/platform/network/ResourceRequest.h"
@@ -60,7 +61,7 @@
namespace WebCore {
namespace TimelineAgentState {
-static const char timelineAgentEnabled[] = "timelineAgentEnabled";
+static const char startedFromProtocol[] = "startedFromProtocol";
static const char timelineMaxCallStackDepth[] = "timelineMaxCallStackDepth";
static const char includeDomCounters[] = "includeDomCounters";
static const char includeNativeMemoryStatistics[] = "includeNativeMemoryStatistics";
@@ -195,7 +196,7 @@ void InspectorTimelineAgent::clearFrontend()
void InspectorTimelineAgent::restore()
{
- if (m_state->getBoolean(TimelineAgentState::timelineAgentEnabled)) {
+ if (m_state->getBoolean(TimelineAgentState::startedFromProtocol)) {
m_maxCallStackDepth = m_state->getLong(TimelineAgentState::timelineMaxCallStackDepth);
ErrorString error;
bool includeDomCounters = m_state->getBoolean(TimelineAgentState::includeDomCounters);
@@ -208,6 +209,10 @@ void InspectorTimelineAgent::start(ErrorString*, const int* maxCallStackDepth, c
{
if (!m_frontend)
return;
+ m_state->setBoolean(TimelineAgentState::startedFromProtocol, true);
+
+ if (m_isStarted)
+ return;
releaseNodeIds();
if (maxCallStackDepth && *maxCallStackDepth >= 0)
@@ -217,19 +222,34 @@ void InspectorTimelineAgent::start(ErrorString*, const int* maxCallStackDepth, c
m_state->setLong(TimelineAgentState::timelineMaxCallStackDepth, m_maxCallStackDepth);
m_state->setBoolean(TimelineAgentState::includeDomCounters, includeDomCounters && *includeDomCounters);
m_state->setBoolean(TimelineAgentState::includeNativeMemoryStatistics, includeNativeMemoryStatistics && *includeNativeMemoryStatistics);
- m_timeConverter.reset();
+ innerStart(false);
+}
+void InspectorTimelineAgent::innerStart(bool fromConsole)
+{
+ if (m_isStarted)
+ return;
+ m_isStarted = true;
+
+ m_timeConverter.reset();
m_instrumentingAgents->setInspectorTimelineAgent(this);
ScriptGCEvent::addEventListener(this);
- m_state->setBoolean(TimelineAgentState::timelineAgentEnabled, true);
if (m_client && m_pageAgent)
m_traceEventProcessor = adoptRef(new TimelineTraceEventProcessor(m_weakFactory.createWeakPtr(), m_client));
+ m_frontend->started(&fromConsole);
}
void InspectorTimelineAgent::stop(ErrorString*)
{
- if (!m_state->getBoolean(TimelineAgentState::timelineAgentEnabled))
+ innerStop(false);
+ m_state->setBoolean(TimelineAgentState::startedFromProtocol, false);
+}
+
+void InspectorTimelineAgent::innerStop(bool fromConsole)
+{
+ if (!m_isStarted)
return;
+ m_isStarted = false;
if (m_traceEventProcessor) {
m_traceEventProcessor->shutdown();
@@ -242,7 +262,13 @@ void InspectorTimelineAgent::stop(ErrorString*)
clearRecordStack();
m_gcEvents.clear();
- m_state->setBoolean(TimelineAgentState::timelineAgentEnabled, false);
+ for (size_t i = 0; i < m_consoleTimelines.size(); ++i) {
+ String message = String::format("Timeline '%s' terminated.", m_consoleTimelines[i].utf8().data());
+ page()->console().addMessage(ConsoleAPIMessageSource, DebugMessageLevel, message);
+ }
+ m_consoleTimelines.clear();
+
+ m_frontend->stopped(&fromConsole);
}
void InspectorTimelineAgent::didBeginFrame()
@@ -549,23 +575,47 @@ void InspectorTimelineAgent::didFailLoading(unsigned long identifier, DocumentLo
didFinishLoadingResource(identifier, true, 0, loader->frame());
}
-void InspectorTimelineAgent::consoleTimeStamp(ScriptExecutionContext* context, PassRefPtr<ScriptArguments> arguments)
+void InspectorTimelineAgent::consoleTimeStamp(ScriptExecutionContext* context, const String& title)
{
- String message;
- arguments->getFirstArgumentAsString(message);
- appendRecord(TimelineRecordFactory::createTimeStampData(message), TimelineRecordType::TimeStamp, true, frameForScriptExecutionContext(context));
+ appendRecord(TimelineRecordFactory::createTimeStampData(title), TimelineRecordType::TimeStamp, true, frameForScriptExecutionContext(context));
}
-void InspectorTimelineAgent::startConsoleTiming(ScriptExecutionContext* context, const String& message)
+void InspectorTimelineAgent::consoleTime(ScriptExecutionContext* context, const String& message)
{
appendRecord(TimelineRecordFactory::createTimeStampData(message), TimelineRecordType::Time, true, frameForScriptExecutionContext(context));
}
-void InspectorTimelineAgent::stopConsoleTiming(ScriptExecutionContext* context, const String& message, PassRefPtr<ScriptCallStack> stack)
+void InspectorTimelineAgent::consoleTimeEnd(ScriptExecutionContext* context, const String& message, ScriptState*)
{
appendRecord(TimelineRecordFactory::createTimeStampData(message), TimelineRecordType::TimeEnd, true, frameForScriptExecutionContext(context));
}
+void InspectorTimelineAgent::consoleTimeline(ScriptExecutionContext* context, const String& title, ScriptState* state)
+{
+ String message = String::format("Timeline '%s' started.", title.utf8().data());
+ page()->console().addMessage(ConsoleAPIMessageSource, DebugMessageLevel, message, String(), 0, 0, 0, state);
+ m_consoleTimelines.append(title);
yurys 2013/09/06 07:56:45 What is the expected behavior when same timeline i
pfeldman 2013/09/06 16:10:30 console.timeline("one") console.timeline("one") co
+ innerStart(true);
+ appendRecord(TimelineRecordFactory::createTimeStampData(title), TimelineRecordType::TimeStamp, true, frameForScriptExecutionContext(context));
+}
+
+void InspectorTimelineAgent::consoleTimelineEnd(ScriptExecutionContext* context, const String& title, ScriptState* state)
+{
+ size_t index = m_consoleTimelines.find(title);
+ if (index == notFound) {
+ String message = String::format("Timeline '%s' was not started.", title.utf8().data());
+ page()->console().addMessage(ConsoleAPIMessageSource, DebugMessageLevel, message, String(), 0, 0, 0, state);
+ return;
+ }
+
+ appendRecord(TimelineRecordFactory::createTimeStampData(title), TimelineRecordType::TimeStamp, true, frameForScriptExecutionContext(context));
+ m_consoleTimelines.remove(index);
+ if (!m_consoleTimelines.size() && !m_state->getBoolean(TimelineAgentState::startedFromProtocol))
+ innerStop(true);
+
+ String message = String::format("Timeline '%s' finished.", title.utf8().data());
+ page()->console().addMessage(ConsoleAPIMessageSource, DebugMessageLevel, message, String(), 0, 0, 0, state);
+}
void InspectorTimelineAgent::domContentLoadedEventFired(Frame* frame)
{
@@ -729,6 +779,7 @@ InspectorTimelineAgent::InspectorTimelineAgent(InstrumentingAgents* instrumentin
, m_weakFactory(this)
, m_styleRecalcElementCounter(0)
, m_layerTreeId(0)
+ , m_isStarted(false)
{
}

Powered by Google App Engine
This is Rietveld 408576698