Index: Source/core/inspector/InspectorTimelineAgent.cpp |
diff --git a/Source/core/inspector/InspectorTimelineAgent.cpp b/Source/core/inspector/InspectorTimelineAgent.cpp |
index 08c88721f1402ae30bf78ca011d3a2525798eaa5..c901add66c37fe076d73a236d36242c74318dd24 100644 |
--- a/Source/core/inspector/InspectorTimelineAgent.cpp |
+++ b/Source/core/inspector/InspectorTimelineAgent.cpp |
@@ -73,6 +73,7 @@ static const char includeCounters[] = "includeCounters"; |
static const char includeGPUEvents[] = "includeGPUEvents"; |
static const char bufferEvents[] = "bufferEvents"; |
static const char liveEvents[] = "liveEvents"; |
+static const char sessionId[] = "sessionId"; |
static const char traceEventCategoryFilter[] = "traceEventCategoryFilter"; |
} |
@@ -341,10 +342,11 @@ void InspectorTimelineAgent::start(ErrorString* errorString, const int* maxCallS |
m_state->setBoolean(TimelineAgentState::includeGPUEvents, includeGPUEvents && *includeGPUEvents); |
m_state->setBoolean(TimelineAgentState::bufferEvents, bufferEvents && *bufferEvents); |
m_state->setString(TimelineAgentState::liveEvents, liveEvents ? *liveEvents : ""); |
+ initializeSessionId(); |
innerStart(); |
bool fromConsole = false; |
- m_frontend->started(&fromConsole); |
+ m_frontend->started(sessionId(), &fromConsole); |
} |
bool InspectorTimelineAgent::isStarted() |
@@ -366,6 +368,10 @@ void InspectorTimelineAgent::innerStart() |
} |
m_instrumentingAgents->setInspectorTimelineAgent(this); |
ScriptGCEvent::addEventListener(this); |
+ TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "TimelineStarted", "sessionId", sessionId().utf8()); |
+ if (m_layerTreeId) { |
+ TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "SetLayerTreeId", "sessionId", sessionId().utf8(), "layerTreeId", m_layerTreeId); |
+ } |
if (m_client) { |
TraceEventDispatcher* dispatcher = TraceEventDispatcher::instance(); |
dispatcher->addListener(InstrumentationEvents::BeginFrame, TRACE_EVENT_PHASE_INSTANT, this, &InspectorTimelineAgent::onBeginImplSideFrame, m_client); |
@@ -398,6 +404,7 @@ void InspectorTimelineAgent::stop(ErrorString* errorString, RefPtr<TypeBuilder:: |
m_state->setBoolean(TimelineAgentState::startedFromProtocol, false); |
m_state->setBoolean(TimelineAgentState::bufferEvents, false); |
m_state->setString(TimelineAgentState::liveEvents, ""); |
+ m_state->setString(TimelineAgentState::sessionId, ""); |
if (!isStarted()) { |
*errorString = "Timeline was not started"; |
@@ -446,6 +453,24 @@ void InspectorTimelineAgent::innerStop(bool fromConsole) |
m_overlay->finishedRecordingProfile(); |
} |
+String InspectorTimelineAgent::sessionId() const |
+{ |
+ return m_state->getString(TimelineAgentState::sessionId); |
+} |
+ |
+void InspectorTimelineAgent::initializeSessionId() |
+{ |
+ static unsigned lastTimelineSessionId; |
+ String sessionId = IdentifiersFactory::createIdentifier(); |
+ m_state->setString(TimelineAgentState::sessionId, sessionId); |
+} |
+ |
+void InspectorTimelineAgent::setLayerTreeId(int layerTreeId) |
+{ |
+ m_layerTreeId = layerTreeId; |
+ TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "setLayerTreeId", "sessionId", sessionId().utf8(), "layerTreeId", m_layerTreeId); |
+} |
+ |
void InspectorTimelineAgent::didBeginFrame(int frameId) |
{ |
TraceEventDispatcher::instance()->processBackgroundEvents(); |
@@ -830,9 +855,10 @@ void InspectorTimelineAgent::consoleTimeline(ExecutionContext* context, const St |
mainFrame()->console().addMessage(ConsoleAPIMessageSource, DebugMessageLevel, message, String(), 0, 0, nullptr, state); |
m_consoleTimelines.append(title); |
if (!isStarted()) { |
+ initializeSessionId(); |
innerStart(); |
bool fromConsole = true; |
- m_frontend->started(&fromConsole); |
+ m_frontend->started(sessionId(), &fromConsole); |
} |
appendRecord(TimelineRecordFactory::createTimeStampData(message), TimelineRecordType::TimeStamp, true, frameForExecutionContext(context)); |
} |