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

Side by Side Diff: Source/core/inspector/TimelineTraceEventProcessor.cpp

Issue 16878004: DevTools: add instrumentation for deferred canvas rasterization (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 if (!timelineAgent) 146 if (!timelineAgent)
147 return; 147 return;
148 timelineAgent->sendEvent(record); 148 timelineAgent->sendEvent(record);
149 } 149 }
150 150
151 TimelineTraceEventProcessor::TimelineTraceEventProcessor(WeakPtr<InspectorTimeli neAgent> timelineAgent, InspectorClient *client) 151 TimelineTraceEventProcessor::TimelineTraceEventProcessor(WeakPtr<InspectorTimeli neAgent> timelineAgent, InspectorClient *client)
152 : m_timelineAgent(timelineAgent) 152 : m_timelineAgent(timelineAgent)
153 , m_timeConverter(timelineAgent.get()->timeConverter()) 153 , m_timeConverter(timelineAgent.get()->timeConverter())
154 , m_inspectorClient(client) 154 , m_inspectorClient(client)
155 , m_pageId(reinterpret_cast<unsigned long long>(m_timelineAgent.get()->page( ))) 155 , m_pageId(reinterpret_cast<unsigned long long>(m_timelineAgent.get()->page( )))
156 , m_layerTreeId(m_timelineAgent.get()->layerTreeId())
156 , m_layerId(0) 157 , m_layerId(0)
157 , m_paintSetupStart(0) 158 , m_paintSetupStart(0)
158 , m_paintSetupEnd(0) 159 , m_paintSetupEnd(0)
159 { 160 {
160 registerHandler(InstrumentationEvents::BeginFrame, TracePhaseInstant, &Timel ineTraceEventProcessor::onBeginFrame); 161 registerHandler(InstrumentationEvents::BeginFrame, TracePhaseInstant, &Timel ineTraceEventProcessor::onBeginFrame);
162 registerHandler(InstrumentationEvents::UpdateLayer, TracePhaseBegin, &Timeli neTraceEventProcessor::onUpdateLayerBegin);
163 registerHandler(InstrumentationEvents::UpdateLayer, TracePhaseEnd, &Timeline TraceEventProcessor::onUpdateLayerEnd);
161 registerHandler(InstrumentationEvents::PaintSetup, TracePhaseBegin, &Timelin eTraceEventProcessor::onPaintSetupBegin); 164 registerHandler(InstrumentationEvents::PaintSetup, TracePhaseBegin, &Timelin eTraceEventProcessor::onPaintSetupBegin);
162 registerHandler(InstrumentationEvents::PaintSetup, TracePhaseEnd, &TimelineT raceEventProcessor::onPaintSetupEnd); 165 registerHandler(InstrumentationEvents::PaintSetup, TracePhaseEnd, &TimelineT raceEventProcessor::onPaintSetupEnd);
163 registerHandler(InstrumentationEvents::PaintLayer, TracePhaseBegin, &Timelin eTraceEventProcessor::onPaintLayerBegin);
164 registerHandler(InstrumentationEvents::PaintLayer, TracePhaseEnd, &TimelineT raceEventProcessor::onPaintLayerEnd);
165 registerHandler(InstrumentationEvents::RasterTask, TracePhaseBegin, &Timelin eTraceEventProcessor::onRasterTaskBegin); 166 registerHandler(InstrumentationEvents::RasterTask, TracePhaseBegin, &Timelin eTraceEventProcessor::onRasterTaskBegin);
166 registerHandler(InstrumentationEvents::RasterTask, TracePhaseEnd, &TimelineT raceEventProcessor::onRasterTaskEnd); 167 registerHandler(InstrumentationEvents::RasterTask, TracePhaseEnd, &TimelineT raceEventProcessor::onRasterTaskEnd);
167 registerHandler(InstrumentationEvents::ImageDecodeTask, TracePhaseBegin, &Ti melineTraceEventProcessor::onImageDecodeTaskBegin); 168 registerHandler(InstrumentationEvents::ImageDecodeTask, TracePhaseBegin, &Ti melineTraceEventProcessor::onImageDecodeTaskBegin);
168 registerHandler(InstrumentationEvents::ImageDecodeTask, TracePhaseEnd, &Time lineTraceEventProcessor::onImageDecodeTaskEnd); 169 registerHandler(InstrumentationEvents::ImageDecodeTask, TracePhaseEnd, &Time lineTraceEventProcessor::onImageDecodeTaskEnd);
169 registerHandler(InstrumentationEvents::Layer, TracePhaseDeleteObject, &Timel ineTraceEventProcessor::onLayerDeleted); 170 registerHandler(InstrumentationEvents::Layer, TracePhaseDeleteObject, &Timel ineTraceEventProcessor::onLayerDeleted);
170 registerHandler(InstrumentationEvents::Paint, TracePhaseInstant, &TimelineTr aceEventProcessor::onPaint); 171 registerHandler(InstrumentationEvents::Paint, TracePhaseInstant, &TimelineTr aceEventProcessor::onPaint);
171 registerHandler(PlatformInstrumentation::ImageDecodeEvent, TracePhaseBegin, &TimelineTraceEventProcessor::onImageDecodeBegin); 172 registerHandler(PlatformInstrumentation::ImageDecodeEvent, TracePhaseBegin, &TimelineTraceEventProcessor::onImageDecodeBegin);
172 registerHandler(PlatformInstrumentation::ImageDecodeEvent, TracePhaseEnd, &T imelineTraceEventProcessor::onImageDecodeEnd); 173 registerHandler(PlatformInstrumentation::ImageDecodeEvent, TracePhaseEnd, &T imelineTraceEventProcessor::onImageDecodeEnd);
174 registerHandler(PlatformInstrumentation::RasterizeCanvasEvent, TracePhaseBeg in, &TimelineTraceEventProcessor::onRasterizeCanvasBegin);
175 registerHandler(PlatformInstrumentation::RasterizeCanvasEvent, TracePhaseEnd , &TimelineTraceEventProcessor::onRasterizeCanvasEnd);
173 176
174 TraceEventDispatcher::instance()->addProcessor(this, m_inspectorClient); 177 TraceEventDispatcher::instance()->addProcessor(this, m_inspectorClient);
175 } 178 }
176 179
177 TimelineTraceEventProcessor::~TimelineTraceEventProcessor() 180 TimelineTraceEventProcessor::~TimelineTraceEventProcessor()
178 { 181 {
179 } 182 }
180 183
181 void TimelineTraceEventProcessor::registerHandler(const char* name, TraceEventPh ase phase, TraceEventHandler handler) 184 void TimelineTraceEventProcessor::registerHandler(const char* name, TraceEventPh ase phase, TraceEventHandler handler)
182 { 185 {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 return; 227 return;
225 } 228 }
226 (this->*(it->value))(event); 229 (this->*(it->value))(event);
227 } 230 }
228 231
229 void TimelineTraceEventProcessor::onBeginFrame(const TraceEvent&) 232 void TimelineTraceEventProcessor::onBeginFrame(const TraceEvent&)
230 { 233 {
231 processBackgroundEvents(); 234 processBackgroundEvents();
232 } 235 }
233 236
237 void TimelineTraceEventProcessor::onUpdateLayerBegin(const TraceEvent& event)
238 {
239 unsigned long long layerTreeId = event.asUInt(InstrumentationEventArguments: :LayerTreeId);
240 if (layerTreeId != m_layerTreeId)
241 return;
242 m_layerId = event.asUInt(InstrumentationEventArguments::LayerId);
243 // We don't know the node yet. For content layers, the node will be updated
244 // by paint. For others, let it remain 0 -- we just need the fact that
245 // the layer belongs to the page (see cookie check).
246 m_layerToNodeMap.add(m_layerId, 0);
247 }
248
249 void TimelineTraceEventProcessor::onUpdateLayerEnd(const TraceEvent& event)
250 {
251 m_layerId = 0;
252 }
253
234 void TimelineTraceEventProcessor::onPaintSetupBegin(const TraceEvent& event) 254 void TimelineTraceEventProcessor::onPaintSetupBegin(const TraceEvent& event)
235 { 255 {
236 ASSERT(!m_paintSetupStart); 256 ASSERT(!m_paintSetupStart);
237 m_paintSetupStart = m_timeConverter.fromMonotonicallyIncreasingTime(event.ti mestamp()); 257 m_paintSetupStart = m_timeConverter.fromMonotonicallyIncreasingTime(event.ti mestamp());
238 } 258 }
239 259
240 void TimelineTraceEventProcessor::onPaintSetupEnd(const TraceEvent& event) 260 void TimelineTraceEventProcessor::onPaintSetupEnd(const TraceEvent& event)
241 { 261 {
242 ASSERT(m_paintSetupStart); 262 ASSERT(m_paintSetupStart);
243 m_paintSetupEnd = m_timeConverter.fromMonotonicallyIncreasingTime(event.time stamp()); 263 m_paintSetupEnd = m_timeConverter.fromMonotonicallyIncreasingTime(event.time stamp());
244 } 264 }
245 265
246 void TimelineTraceEventProcessor::onPaintLayerBegin(const TraceEvent& event)
247 {
248 m_layerId = event.asUInt(InstrumentationEventArguments::LayerId);
249 ASSERT(m_layerId);
250 }
251
252 void TimelineTraceEventProcessor::onPaintLayerEnd(const TraceEvent&)
253 {
254 m_layerId = 0;
255 }
256
257 void TimelineTraceEventProcessor::onRasterTaskBegin(const TraceEvent& event) 266 void TimelineTraceEventProcessor::onRasterTaskBegin(const TraceEvent& event)
258 { 267 {
259 TimelineThreadState& state = threadState(event.threadIdentifier()); 268 TimelineThreadState& state = threadState(event.threadIdentifier());
260 if (!maybeEnterLayerTask(event, state)) 269 if (!maybeEnterLayerTask(event, state))
261 return; 270 return;
262 unsigned long long layerId = event.asUInt(InstrumentationEventArguments::Lay erId); 271 unsigned long long layerId = event.asUInt(InstrumentationEventArguments::Lay erId);
263 ASSERT(layerId); 272 ASSERT(layerId);
264 RefPtr<JSONObject> record = createRecord(event, TimelineRecordType::Rasteriz e); 273 RefPtr<JSONObject> record = createRecord(event, TimelineRecordType::Rasteriz e);
265 record->setObject("data", TimelineRecordFactory::createLayerData(m_layerToNo deMap.get(layerId))); 274 record->setObject("data", TimelineRecordFactory::createLayerData(m_layerToNo deMap.get(layerId)));
266 state.recordStack.addScopedRecord(record.release()); 275 state.recordStack.addScopedRecord(record.release());
(...skipping 12 matching lines...) Expand all
279 void TimelineTraceEventProcessor::onImageDecodeTaskBegin(const TraceEvent& event ) 288 void TimelineTraceEventProcessor::onImageDecodeTaskBegin(const TraceEvent& event )
280 { 289 {
281 maybeEnterLayerTask(event, threadState(event.threadIdentifier())); 290 maybeEnterLayerTask(event, threadState(event.threadIdentifier()));
282 } 291 }
283 292
284 void TimelineTraceEventProcessor::onImageDecodeTaskEnd(const TraceEvent& event) 293 void TimelineTraceEventProcessor::onImageDecodeTaskEnd(const TraceEvent& event)
285 { 294 {
286 leaveLayerTask(threadState(event.threadIdentifier())); 295 leaveLayerTask(threadState(event.threadIdentifier()));
287 } 296 }
288 297
298 void TimelineTraceEventProcessor::onRasterizeCanvasBegin(const TraceEvent& event )
299 {
300 if (!m_layerId)
301 return;
302 InspectorTimelineAgent* timelineAgent = m_timelineAgent.get();
303 if (!timelineAgent)
304 return;
305 fprintf(stderr, "Rasterize canvas: %d\n", m_layerId);
306 timelineAgent->pushCurrentRecord(JSONObject::create(), TimelineRecordType::R asterize, false, 0);
307 }
308
309 void TimelineTraceEventProcessor::onRasterizeCanvasEnd(const TraceEvent& event)
310 {
311 if (!m_layerId)
312 return;
313 InspectorTimelineAgent* timelineAgent = m_timelineAgent.get();
314 if (!timelineAgent)
315 return;
316 timelineAgent->didCompleteCurrentRecord(TimelineRecordType::Rasterize);
317 }
318
289 bool TimelineTraceEventProcessor::maybeEnterLayerTask(const TraceEvent& event, T imelineThreadState& threadState) 319 bool TimelineTraceEventProcessor::maybeEnterLayerTask(const TraceEvent& event, T imelineThreadState& threadState)
290 { 320 {
291 unsigned long long layerId = event.asUInt(InstrumentationEventArguments::Lay erId); 321 unsigned long long layerId = event.asUInt(InstrumentationEventArguments::Lay erId);
292 if (!m_layerToNodeMap.contains(layerId)) 322 if (!m_layerToNodeMap.contains(layerId))
293 return false; 323 return false;
294 ASSERT(!threadState.inKnownLayerTask); 324 ASSERT(!threadState.inKnownLayerTask);
295 threadState.inKnownLayerTask = true; 325 threadState.inKnownLayerTask = true;
296 return true; 326 return true;
297 } 327 }
298 328
(...skipping 24 matching lines...) Expand all
323 unsigned long long id = event.id(); 353 unsigned long long id = event.id();
324 ASSERT(id); 354 ASSERT(id);
325 processBackgroundEvents(); 355 processBackgroundEvents();
326 m_layerToNodeMap.remove(id); 356 m_layerToNodeMap.remove(id);
327 } 357 }
328 358
329 void TimelineTraceEventProcessor::onPaint(const TraceEvent& event) 359 void TimelineTraceEventProcessor::onPaint(const TraceEvent& event)
330 { 360 {
331 double paintSetupStart = m_paintSetupStart; 361 double paintSetupStart = m_paintSetupStart;
332 m_paintSetupStart = 0; 362 m_paintSetupStart = 0;
333 if (!m_layerId)
334 return;
335 unsigned long long pageId = event.asUInt(InstrumentationEventArguments::Page Id); 363 unsigned long long pageId = event.asUInt(InstrumentationEventArguments::Page Id);
336 if (pageId != m_pageId) 364 if (pageId != m_pageId)
337 return; 365 return;
366 ASSERT(m_layerId);
338 long long nodeId = event.asInt(InstrumentationEventArguments::NodeId); 367 long long nodeId = event.asInt(InstrumentationEventArguments::NodeId);
339 ASSERT(nodeId); 368 ASSERT(nodeId);
340 m_layerToNodeMap.set(m_layerId, nodeId); 369 m_layerToNodeMap.set(m_layerId, nodeId);
341 InspectorTimelineAgent* timelineAgent = m_timelineAgent.get(); 370 InspectorTimelineAgent* timelineAgent = m_timelineAgent.get();
342 if (timelineAgent && paintSetupStart) { 371 if (timelineAgent && paintSetupStart) {
343 RefPtr<JSONObject> paintSetupRecord = TimelineRecordFactory::createGener icRecord(paintSetupStart, 0, TimelineRecordType::PaintSetup); 372 RefPtr<JSONObject> paintSetupRecord = TimelineRecordFactory::createGener icRecord(paintSetupStart, 0, TimelineRecordType::PaintSetup);
344 paintSetupRecord->setNumber("endTime", m_paintSetupEnd); 373 paintSetupRecord->setNumber("endTime", m_paintSetupEnd);
345 paintSetupRecord->setObject("data", TimelineRecordFactory::createLayerDa ta(nodeId)); 374 paintSetupRecord->setObject("data", TimelineRecordFactory::createLayerDa ta(nodeId));
346 timelineAgent->addRecordToTimeline(paintSetupRecord); 375 timelineAgent->addRecordToTimeline(paintSetupRecord);
347 } 376 }
(...skipping 20 matching lines...) Expand all
368 for (size_t i = 0, size = events.size(); i < size; ++i) { 397 for (size_t i = 0, size = events.size(); i < size; ++i) {
369 const TraceEvent& event = events[i]; 398 const TraceEvent& event = events[i];
370 HandlersMap::iterator it = m_handlersByType.find(std::make_pair(event.na me(), event.phase())); 399 HandlersMap::iterator it = m_handlersByType.find(std::make_pair(event.na me(), event.phase()));
371 ASSERT(it != m_handlersByType.end() && it->value); 400 ASSERT(it != m_handlersByType.end() && it->value);
372 (this->*(it->value))(event); 401 (this->*(it->value))(event);
373 } 402 }
374 } 403 }
375 404
376 } // namespace WebCore 405 } // namespace WebCore
377 406
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698