OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/workers/WorkerInspectorProxy.h" | 5 #include "core/workers/WorkerInspectorProxy.h" |
6 | 6 |
7 #include "core/dom/CrossThreadTask.h" | 7 #include "core/dom/CrossThreadTask.h" |
8 #include "core/frame/FrameConsole.h" | 8 #include "core/frame/FrameConsole.h" |
9 #include "core/inspector/IdentifiersFactory.h" | 9 #include "core/inspector/IdentifiersFactory.h" |
10 #include "core/inspector/InspectorInstrumentation.h" | 10 #include "core/inspector/InspectorInstrumentation.h" |
11 #include "core/inspector/InspectorTraceEvents.h" | 11 #include "core/inspector/InspectorTraceEvents.h" |
12 #include "core/inspector/WorkerInspectorController.h" | 12 #include "core/inspector/WorkerInspectorController.h" |
13 #include "core/workers/WorkerThread.h" | 13 #include "core/workers/WorkerThread.h" |
14 #include "platform/TraceEvent.h" | 14 #include "platform/TraceEvent.h" |
15 #include "platform/weborigin/KURL.h" | 15 #include "platform/weborigin/KURL.h" |
16 #include "public/platform/WebTaskRunner.h" | 16 #include "public/platform/WebTaskRunner.h" |
17 #include "public/platform/WebTraceLocation.h" | 17 #include "public/platform/WebTraceLocation.h" |
18 | 18 |
19 namespace blink { | 19 namespace blink { |
20 | 20 |
21 namespace { | 21 namespace { |
22 | 22 |
23 static const unsigned maxConsoleMessageCount = 1000; | |
24 | |
25 static WorkerInspectorProxy::WorkerInspectorProxySet& inspectorProxies() | 23 static WorkerInspectorProxy::WorkerInspectorProxySet& inspectorProxies() |
26 { | 24 { |
27 DEFINE_STATIC_LOCAL(WorkerInspectorProxy::WorkerInspectorProxySet, proxies,
()); | 25 DEFINE_STATIC_LOCAL(WorkerInspectorProxy::WorkerInspectorProxySet, proxies,
()); |
28 return proxies; | 26 return proxies; |
29 } | 27 } |
30 | 28 |
31 } // namespace | 29 } // namespace |
32 | 30 |
33 const WorkerInspectorProxy::WorkerInspectorProxySet& WorkerInspectorProxy::allPr
oxies() | 31 const WorkerInspectorProxy::WorkerInspectorProxySet& WorkerInspectorProxy::allPr
oxies() |
34 { | 32 { |
35 return inspectorProxies(); | 33 return inspectorProxies(); |
36 } | 34 } |
37 | 35 |
38 WorkerInspectorProxy::WorkerInspectorProxy() | 36 WorkerInspectorProxy::WorkerInspectorProxy() |
39 : m_workerThread(nullptr) | 37 : m_workerThread(nullptr) |
40 , m_document(nullptr) | 38 , m_document(nullptr) |
41 , m_pageInspector(nullptr) | 39 , m_pageInspector(nullptr) |
42 , m_ignoreConsoleMessages(false) | |
43 { | 40 { |
44 } | 41 } |
45 | 42 |
46 WorkerInspectorProxy* WorkerInspectorProxy::create() | 43 WorkerInspectorProxy* WorkerInspectorProxy::create() |
47 { | 44 { |
48 return new WorkerInspectorProxy(); | 45 return new WorkerInspectorProxy(); |
49 } | 46 } |
50 | 47 |
51 WorkerInspectorProxy::~WorkerInspectorProxy() | 48 WorkerInspectorProxy::~WorkerInspectorProxy() |
52 { | 49 { |
(...skipping 25 matching lines...) Expand all Loading... |
78 } | 75 } |
79 | 76 |
80 void WorkerInspectorProxy::workerThreadTerminated() | 77 void WorkerInspectorProxy::workerThreadTerminated() |
81 { | 78 { |
82 if (m_workerThread) { | 79 if (m_workerThread) { |
83 DCHECK(inspectorProxies().contains(this)); | 80 DCHECK(inspectorProxies().contains(this)); |
84 inspectorProxies().remove(this); | 81 inspectorProxies().remove(this); |
85 InspectorInstrumentation::workerTerminated(m_document, this); | 82 InspectorInstrumentation::workerTerminated(m_document, this); |
86 } | 83 } |
87 | 84 |
88 LocalFrame* frame = m_document ? m_document->frame() : nullptr; | |
89 if (frame) { | |
90 for (ConsoleMessage* message : m_consoleMessages) | |
91 frame->console().adoptWorkerMessage(message); | |
92 m_consoleMessages.clear(); | |
93 } | |
94 | |
95 m_workerThread = nullptr; | 85 m_workerThread = nullptr; |
96 m_pageInspector = nullptr; | 86 m_pageInspector = nullptr; |
97 m_document = nullptr; | 87 m_document = nullptr; |
98 } | 88 } |
99 | 89 |
100 void WorkerInspectorProxy::dispatchMessageFromWorker(const String& message) | 90 void WorkerInspectorProxy::dispatchMessageFromWorker(const String& message) |
101 { | 91 { |
102 if (m_pageInspector) | 92 if (m_pageInspector) |
103 m_pageInspector->dispatchMessageFromWorker(this, message); | 93 m_pageInspector->dispatchMessageFromWorker(this, message); |
104 } | 94 } |
105 | 95 |
106 void WorkerInspectorProxy::workerConsoleAgentEnabled() | |
107 { | |
108 m_ignoreConsoleMessages = true; | |
109 m_consoleMessages.clear(); | |
110 } | |
111 | |
112 void WorkerInspectorProxy::addConsoleMessageFromWorker(ConsoleMessage* consoleMe
ssage) | 96 void WorkerInspectorProxy::addConsoleMessageFromWorker(ConsoleMessage* consoleMe
ssage) |
113 { | 97 { |
114 if (!m_ignoreConsoleMessages) { | |
115 DCHECK(m_consoleMessages.size() <= maxConsoleMessageCount); | |
116 if (m_consoleMessages.size() == maxConsoleMessageCount) | |
117 m_consoleMessages.removeFirst(); | |
118 m_consoleMessages.append(consoleMessage); | |
119 } | |
120 if (LocalFrame* frame = m_document->frame()) | 98 if (LocalFrame* frame = m_document->frame()) |
121 frame->console().reportWorkerMessage(consoleMessage); | 99 frame->console().addMessageFromWorker(consoleMessage, m_inspectorId); |
122 } | 100 } |
123 | 101 |
124 static void connectToWorkerGlobalScopeInspectorTask(WorkerThread* workerThread) | 102 static void connectToWorkerGlobalScopeInspectorTask(WorkerThread* workerThread) |
125 { | 103 { |
126 if (WorkerInspectorController* inspector = workerThread->workerGlobalScope()
->workerInspectorController()) | 104 if (WorkerInspectorController* inspector = workerThread->workerGlobalScope()
->workerInspectorController()) |
127 inspector->connectFrontend(); | 105 inspector->connectFrontend(); |
128 } | 106 } |
129 | 107 |
130 void WorkerInspectorProxy::connectToInspector(WorkerInspectorProxy::PageInspecto
r* pageInspector) | 108 void WorkerInspectorProxy::connectToInspector(WorkerInspectorProxy::PageInspecto
r* pageInspector) |
131 { | 109 { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 void WorkerInspectorProxy::writeTimelineStartedEvent(const String& sessionId) | 143 void WorkerInspectorProxy::writeTimelineStartedEvent(const String& sessionId) |
166 { | 144 { |
167 if (!m_workerThread) | 145 if (!m_workerThread) |
168 return; | 146 return; |
169 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "Tracin
gSessionIdForWorker", TRACE_EVENT_SCOPE_THREAD, "data", InspectorTracingSessionI
dForWorkerEvent::data(sessionId, inspectorId(), m_workerThread)); | 147 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "Tracin
gSessionIdForWorker", TRACE_EVENT_SCOPE_THREAD, "data", InspectorTracingSessionI
dForWorkerEvent::data(sessionId, inspectorId(), m_workerThread)); |
170 } | 148 } |
171 | 149 |
172 DEFINE_TRACE(WorkerInspectorProxy) | 150 DEFINE_TRACE(WorkerInspectorProxy) |
173 { | 151 { |
174 visitor->trace(m_document); | 152 visitor->trace(m_document); |
175 visitor->trace(m_consoleMessages); | |
176 } | 153 } |
177 | 154 |
178 } // namespace blink | 155 } // namespace blink |
OLD | NEW |