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 |