Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(806)

Unified Diff: Source/core/inspector/TimelineTraceEventProcessor.cpp

Issue 46663010: DevTools: Show GPU utilization bar on timeline (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Addressing comments. Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/inspector/TimelineTraceEventProcessor.cpp
diff --git a/Source/core/inspector/TimelineTraceEventProcessor.cpp b/Source/core/inspector/TimelineTraceEventProcessor.cpp
index 4554d1eae93789f0203ba5629f79eacc8fb9ced1..a1df50745c612fad71f8eb68239f20c095d17e1c 100644
--- a/Source/core/inspector/TimelineTraceEventProcessor.cpp
+++ b/Source/core/inspector/TimelineTraceEventProcessor.cpp
@@ -148,7 +148,7 @@ void TimelineRecordStack::send(PassRefPtr<JSONObject> record)
timelineAgent->sendEvent(record);
}
-TimelineTraceEventProcessor::TimelineTraceEventProcessor(WeakPtr<InspectorTimelineAgent> timelineAgent, InspectorClient *client)
+TimelineTraceEventProcessor::TimelineTraceEventProcessor(WeakPtr<InspectorTimelineAgent> timelineAgent, InspectorClient *client, bool collectGpuEvents)
: m_timelineAgent(timelineAgent)
, m_timeConverter(timelineAgent.get()->timeConverter())
, m_inspectorClient(client)
@@ -159,6 +159,7 @@ TimelineTraceEventProcessor::TimelineTraceEventProcessor(WeakPtr<InspectorTimeli
, m_layerId(0)
, m_paintSetupStart(0)
, m_paintSetupEnd(0)
+ , m_gpuTaskStart(0)
{
registerHandler(InstrumentationEvents::BeginFrame, TRACE_EVENT_PHASE_INSTANT, &TimelineTraceEventProcessor::onBeginFrame);
registerHandler(InstrumentationEvents::UpdateLayer, TRACE_EVENT_PHASE_BEGIN, &TimelineTraceEventProcessor::onUpdateLayerBegin);
@@ -177,6 +178,14 @@ TimelineTraceEventProcessor::TimelineTraceEventProcessor(WeakPtr<InspectorTimeli
registerHandler(PlatformInstrumentation::ImageDecodeEvent, TRACE_EVENT_PHASE_END, &TimelineTraceEventProcessor::onImageDecodeEnd);
registerHandler(PlatformInstrumentation::DrawLazyPixelRefEvent, TRACE_EVENT_PHASE_INSTANT, &TimelineTraceEventProcessor::onDrawLazyPixelRef);
registerHandler(PlatformInstrumentation::LazyPixelRef, TRACE_EVENT_PHASE_DELETE_OBJECT, &TimelineTraceEventProcessor::onLazyPixelRefDeleted);
+ if (collectGpuEvents) {
+ // FIXME: Instead of filtering GPU events here on the client side
+ // just don't enable collection in the GPU process.
+ // Make sure GPU process agent can handle both client types connected
+ // simultaneously: ones that need GPU events and ones that do not.
+ registerHandler(PlatformInstrumentation::GpuTask, TRACE_EVENT_PHASE_BEGIN, &TimelineTraceEventProcessor::onGpuTaskBegin);
+ registerHandler(PlatformInstrumentation::GpuTask, TRACE_EVENT_PHASE_END, &TimelineTraceEventProcessor::onGpuTaskEnd);
+ }
TraceEventDispatcher::instance()->addProcessor(this, m_inspectorClient);
}
@@ -417,6 +426,28 @@ void TimelineTraceEventProcessor::onLazyPixelRefDeleted(const TraceEvent& event)
m_pixelRefToImageInfo.remove(event.id());
}
+void TimelineTraceEventProcessor::onGpuTaskBegin(const TraceEvent& event)
+{
+ m_gpuTaskStart = m_timeConverter.fromMonotonicallyIncreasingTime(event.timestamp());
+ m_gpuTaskRendererPid = event.asUInt(PlatformInstrumentation::GpuTaskRendererPid);
caseq 2013/11/01 13:04:20 nit: m_gpuTask(Initiator|Owner)Pid
alph 2013/11/01 16:40:19 Done.
+}
+
+void TimelineTraceEventProcessor::onGpuTaskEnd(const TraceEvent& event)
+{
+ InspectorTimelineAgent* timelineAgent = m_timelineAgent.get();
+ if (!timelineAgent || !m_gpuTaskStart)
+ return;
+ RefPtr<JSONObject> gpuEvent = TimelineRecordFactory::createBackgroundRecord(m_gpuTaskStart, "gpu");
caseq 2013/11/01 13:04:20 Use TimelineTraceProcessor::createRecord() instead
alph 2013/11/01 16:40:19 Done.
+ RefPtr<JSONObject> data = JSONObject::create();
+ gpuEvent->setString("type", TimelineRecordType::GpuTask);
+ gpuEvent->setNumber("endTime", m_timeConverter.fromMonotonicallyIncreasingTime(event.timestamp()));
+ gpuEvent->setObject("data", data);
+ data->setString("name", event.name());
+ data->setNumber("rendererPid", m_gpuTaskRendererPid);
+ timelineAgent->sendEvent(gpuEvent);
+ m_gpuTaskStart = 0;
+}
+
PassRefPtr<JSONObject> TimelineTraceEventProcessor::createRecord(const TraceEvent& event, const String& recordType, PassRefPtr<JSONObject> data)
{
double startTime = m_timeConverter.fromMonotonicallyIncreasingTime(event.timestamp());

Powered by Google App Engine
This is Rietveld 408576698