Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / inspector / InspectorTracingAgent.cpp
index 9e2ee3d..5440aea 100644 (file)
 #include "core/inspector/IdentifiersFactory.h"
 #include "core/inspector/InspectorClient.h"
 #include "core/inspector/InspectorState.h"
+#include "core/inspector/InspectorWorkerAgent.h"
 #include "platform/TraceEvent.h"
 
-namespace WebCore {
+namespace blink {
 
 namespace TracingAgentState {
 const char sessionId[] = "sessionId";
+const char tracingStartedFromProtocol[] = "tracingStartedFromProtocol";
+const char tracingStarted[] = "tracingStarted";
 }
 
 namespace {
 const char devtoolsMetadataEventCategory[] = TRACE_DISABLED_BY_DEFAULT("devtools.timeline");
 }
 
-InspectorTracingAgent::InspectorTracingAgent(InspectorClient* client)
+InspectorTracingAgent::InspectorTracingAgent(InspectorClient* client, InspectorWorkerAgent* workerAgent)
     : InspectorBaseAgent<InspectorTracingAgent>("Tracing")
     , m_layerTreeId(0)
     , m_client(client)
+    , m_frontend(0)
+    , m_workerAgent(workerAgent)
 {
 }
 
@@ -35,12 +40,26 @@ void InspectorTracingAgent::restore()
     emitMetadataEvents();
 }
 
-void InspectorTracingAgent::start(ErrorString*, const String& categoryFilter, const String&, const double*, String* outSessionId)
+void InspectorTracingAgent::start(ErrorString*, const String& categoryFilter, const String&, const double*)
+{
+    m_state->setBoolean(TracingAgentState::tracingStartedFromProtocol, true);
+    innerStart(categoryFilter, false);
+}
+
+void InspectorTracingAgent::end(ErrorString* errorString)
+{
+    m_state->setBoolean(TracingAgentState::tracingStarted, false);
+    m_consoleTimelines.clear();
+    notifyTracingStopped();
+}
+
+void InspectorTracingAgent::innerStart(const String& categoryFilter, bool fromConsole)
 {
     m_state->setString(TracingAgentState::sessionId, IdentifiersFactory::createIdentifier());
+    m_state->setBoolean(TracingAgentState::tracingStarted, true);
     m_client->enableTracing(categoryFilter);
     emitMetadataEvents();
-    *outSessionId = sessionId();
+    m_frontend->started(fromConsole, sessionId());
 }
 
 String InspectorTracingAgent::sessionId()
@@ -50,9 +69,12 @@ String InspectorTracingAgent::sessionId()
 
 void InspectorTracingAgent::emitMetadataEvents()
 {
+    if (!m_state->getBoolean(TracingAgentState::tracingStarted))
+        return;
     TRACE_EVENT_INSTANT1(devtoolsMetadataEventCategory, "TracingStartedInPage", "sessionId", sessionId().utf8());
     if (m_layerTreeId)
         setLayerTreeId(m_layerTreeId);
+    m_workerAgent->setTracingSessionId(sessionId());
 }
 
 void InspectorTracingAgent::setLayerTreeId(int layerTreeId)
@@ -61,4 +83,37 @@ void InspectorTracingAgent::setLayerTreeId(int layerTreeId)
     TRACE_EVENT_INSTANT2(devtoolsMetadataEventCategory, "SetLayerTreeId", "sessionId", sessionId().utf8(), "layerTreeId", m_layerTreeId);
 }
 
+void InspectorTracingAgent::consoleTimeline(const String& title)
+{
+    m_consoleTimelines.append(title);
+    if (m_state->getBoolean(TracingAgentState::tracingStarted))
+        return;
+    innerStart("-*,disabled-by-default-devtools.timeline", true);
+}
+
+void InspectorTracingAgent::consoleTimelineEnd(const String& title)
+{
+    size_t index = m_consoleTimelines.find(title);
+    if (index == kNotFound)
+        return;
+
+    m_consoleTimelines.remove(index);
+    if (!m_consoleTimelines.size()
+        && m_state->getBoolean(TracingAgentState::tracingStarted)
+        && !m_state->getBoolean(TracingAgentState::tracingStartedFromProtocol))
+        notifyTracingStopped();
+    m_state->setBoolean(TracingAgentState::tracingStarted, false);
+}
+
+void InspectorTracingAgent::notifyTracingStopped()
+{
+    m_frontend->stopped();
+    m_workerAgent->setTracingSessionId(String());
+}
+
+void InspectorTracingAgent::setFrontend(InspectorFrontend* frontend)
+{
+    m_frontend = frontend->tracing();
+}
+
 }