Chromium Code Reviews| 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()); |