Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // | 1 // |
| 2 // Copyright 2014 The Chromium Authors. All rights reserved. | 2 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 3 // Use of this source code is governed by a BSD-style license that can be | 3 // Use of this source code is governed by a BSD-style license that can be |
| 4 // found in the LICENSE file. | 4 // found in the LICENSE file. |
| 5 // | 5 // |
| 6 | 6 |
| 7 #include "config.h" | 7 #include "config.h" |
| 8 | 8 |
| 9 #include "core/inspector/InspectorTracingAgent.h" | 9 #include "core/inspector/InspectorTracingAgent.h" |
| 10 | 10 |
| 11 #include "core/inspector/IdentifiersFactory.h" | 11 #include "core/inspector/IdentifiersFactory.h" |
| 12 #include "core/inspector/InspectorClient.h" | 12 #include "core/inspector/InspectorClient.h" |
| 13 #include "core/inspector/InspectorState.h" | 13 #include "core/inspector/InspectorState.h" |
| 14 #include "core/inspector/InspectorWorkerAgent.h" | 14 #include "core/inspector/InspectorWorkerAgent.h" |
| 15 #include "platform/TraceEvent.h" | 15 #include "platform/TraceEvent.h" |
| 16 | 16 |
| 17 namespace blink { | 17 namespace blink { |
| 18 | 18 |
| 19 namespace TracingAgentState { | 19 namespace TracingAgentState { |
| 20 const char sessionId[] = "sessionId"; | 20 const char sessionId[] = "sessionId"; |
| 21 const char tracingStarted[] = "tracingStarted"; | |
| 22 } | 21 } |
| 23 | 22 |
| 24 namespace { | 23 namespace { |
| 25 const char devtoolsMetadataEventCategory[] = TRACE_DISABLED_BY_DEFAULT("devtools .timeline"); | 24 const char devtoolsMetadataEventCategory[] = TRACE_DISABLED_BY_DEFAULT("devtools .timeline"); |
| 26 } | 25 } |
| 27 | 26 |
| 28 InspectorTracingAgent::InspectorTracingAgent(InspectorClient* client, InspectorW orkerAgent* workerAgent) | 27 InspectorTracingAgent::InspectorTracingAgent(InspectorClient* client, InspectorW orkerAgent* workerAgent) |
| 29 : InspectorBaseAgent<InspectorTracingAgent>("Tracing") | 28 : InspectorBaseAgent<InspectorTracingAgent>("Tracing") |
| 30 , m_layerTreeId(0) | 29 , m_layerTreeId(0) |
| 31 , m_client(client) | 30 , m_client(client) |
| 32 , m_frontend(0) | 31 , m_frontend(0) |
| 33 , m_workerAgent(workerAgent) | 32 , m_workerAgent(workerAgent) |
| 34 { | 33 { |
| 35 } | 34 } |
| 36 | 35 |
| 37 void InspectorTracingAgent::restore() | 36 void InspectorTracingAgent::restore() |
| 38 { | 37 { |
| 39 emitMetadataEvents(); | 38 emitMetadataEvents(); |
| 40 } | 39 } |
| 41 | 40 |
| 42 void InspectorTracingAgent::start(ErrorString*, const String& categoryFilter, co nst String&, const double*, PassRefPtrWillBeRawPtr<StartCallback> callback) | 41 void InspectorTracingAgent::start(ErrorString*, const String& categoryFilter, co nst String&, const double*, PassRefPtrWillBeRawPtr<StartCallback> callback) |
| 43 { | 42 { |
| 44 if (m_state->getBoolean(TracingAgentState::tracingStarted)) { | |
|
yurys
2014/10/15 08:43:46
I believe we'd better return an error when tracing
yurys
2014/10/15 08:46:23
It can be a DCHECK since we reject such requests o
| |
| 45 callback->sendSuccess(); | |
| 46 return; | |
| 47 } | |
| 48 m_state->setString(TracingAgentState::sessionId, IdentifiersFactory::createI dentifier()); | 43 m_state->setString(TracingAgentState::sessionId, IdentifiersFactory::createI dentifier()); |
| 49 m_state->setBoolean(TracingAgentState::tracingStarted, true); | |
| 50 m_client->enableTracing(categoryFilter); | 44 m_client->enableTracing(categoryFilter); |
| 51 emitMetadataEvents(); | 45 emitMetadataEvents(); |
| 52 callback->sendSuccess(); | 46 callback->sendSuccess(); |
| 53 } | 47 } |
| 54 | 48 |
| 55 void InspectorTracingAgent::end(ErrorString* errorString, PassRefPtrWillBeRawPtr <EndCallback> callback) | 49 void InspectorTracingAgent::end(ErrorString* errorString, PassRefPtrWillBeRawPtr <EndCallback> callback) |
| 56 { | 50 { |
| 57 m_client->disableTracing(); | 51 m_client->disableTracing(); |
| 58 m_state->setBoolean(TracingAgentState::tracingStarted, false); | |
|
yurys
2014/10/15 08:43:46
This is not enough as after front-end disconnect w
| |
| 59 m_workerAgent->setTracingSessionId(String()); | 52 m_workerAgent->setTracingSessionId(String()); |
| 60 callback->sendSuccess(); | 53 callback->sendSuccess(); |
| 61 } | 54 } |
| 62 | 55 |
| 63 String InspectorTracingAgent::sessionId() | 56 String InspectorTracingAgent::sessionId() |
| 64 { | 57 { |
| 65 return m_state->getString(TracingAgentState::sessionId); | 58 return m_state->getString(TracingAgentState::sessionId); |
| 66 } | 59 } |
| 67 | 60 |
| 68 void InspectorTracingAgent::emitMetadataEvents() | 61 void InspectorTracingAgent::emitMetadataEvents() |
| 69 { | 62 { |
| 70 if (!m_state->getBoolean(TracingAgentState::tracingStarted)) | |
| 71 return; | |
| 72 TRACE_EVENT_INSTANT1(devtoolsMetadataEventCategory, "TracingStartedInPage", "sessionId", sessionId().utf8()); | 63 TRACE_EVENT_INSTANT1(devtoolsMetadataEventCategory, "TracingStartedInPage", "sessionId", sessionId().utf8()); |
| 73 if (m_layerTreeId) | 64 if (m_layerTreeId) |
| 74 setLayerTreeId(m_layerTreeId); | 65 setLayerTreeId(m_layerTreeId); |
| 75 m_workerAgent->setTracingSessionId(sessionId()); | 66 m_workerAgent->setTracingSessionId(sessionId()); |
| 76 } | 67 } |
| 77 | 68 |
| 78 void InspectorTracingAgent::setLayerTreeId(int layerTreeId) | 69 void InspectorTracingAgent::setLayerTreeId(int layerTreeId) |
| 79 { | 70 { |
| 80 m_layerTreeId = layerTreeId; | 71 m_layerTreeId = layerTreeId; |
| 81 TRACE_EVENT_INSTANT2(devtoolsMetadataEventCategory, "SetLayerTreeId", "sessi onId", sessionId().utf8(), "layerTreeId", m_layerTreeId); | 72 TRACE_EVENT_INSTANT2(devtoolsMetadataEventCategory, "SetLayerTreeId", "sessi onId", sessionId().utf8(), "layerTreeId", m_layerTreeId); |
| 82 } | 73 } |
| 83 | 74 |
| 84 void InspectorTracingAgent::setFrontend(InspectorFrontend* frontend) | 75 void InspectorTracingAgent::setFrontend(InspectorFrontend* frontend) |
| 85 { | 76 { |
| 86 m_frontend = frontend->tracing(); | 77 m_frontend = frontend->tracing(); |
| 87 } | 78 } |
| 88 | 79 |
| 89 } | 80 } |
| OLD | NEW |