| 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 |