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

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

Issue 247513002: Timeline: produce session cookie when timeline is started (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 8 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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 #include "core/page/Page.h" 54 #include "core/page/Page.h"
55 #include "core/rendering/RenderObject.h" 55 #include "core/rendering/RenderObject.h"
56 #include "core/rendering/RenderView.h" 56 #include "core/rendering/RenderView.h"
57 #include "core/xml/XMLHttpRequest.h" 57 #include "core/xml/XMLHttpRequest.h"
58 #include "platform/TraceEvent.h" 58 #include "platform/TraceEvent.h"
59 #include "platform/graphics/DeferredImageDecoder.h" 59 #include "platform/graphics/DeferredImageDecoder.h"
60 #include "platform/graphics/GraphicsLayer.h" 60 #include "platform/graphics/GraphicsLayer.h"
61 #include "platform/network/ResourceRequest.h" 61 #include "platform/network/ResourceRequest.h"
62 #include "wtf/CurrentTime.h" 62 #include "wtf/CurrentTime.h"
63 #include "wtf/DateMath.h" 63 #include "wtf/DateMath.h"
64 #include "wtf/ProcessID.h"
64 65
65 namespace WebCore { 66 namespace WebCore {
66 67
67 namespace TimelineAgentState { 68 namespace TimelineAgentState {
68 static const char enabled[] = "enabled"; 69 static const char enabled[] = "enabled";
69 static const char started[] = "started"; 70 static const char started[] = "started";
70 static const char startedFromProtocol[] = "startedFromProtocol"; 71 static const char startedFromProtocol[] = "startedFromProtocol";
71 static const char timelineMaxCallStackDepth[] = "timelineMaxCallStackDepth"; 72 static const char timelineMaxCallStackDepth[] = "timelineMaxCallStackDepth";
72 static const char includeCounters[] = "includeCounters"; 73 static const char includeCounters[] = "includeCounters";
73 static const char includeGPUEvents[] = "includeGPUEvents"; 74 static const char includeGPUEvents[] = "includeGPUEvents";
74 static const char bufferEvents[] = "bufferEvents"; 75 static const char bufferEvents[] = "bufferEvents";
75 static const char liveEvents[] = "liveEvents"; 76 static const char liveEvents[] = "liveEvents";
77 static const char sessionId[] = "sessionId";
76 static const char traceEventCategoryFilter[] = "traceEventCategoryFilter"; 78 static const char traceEventCategoryFilter[] = "traceEventCategoryFilter";
77 } 79 }
78 80
79 // Must be kept in sync with WebInspector.TimelineModel.RecordType in TimelineMo del.js 81 // Must be kept in sync with WebInspector.TimelineModel.RecordType in TimelineMo del.js
80 namespace TimelineRecordType { 82 namespace TimelineRecordType {
81 static const char Program[] = "Program"; 83 static const char Program[] = "Program";
82 84
83 static const char EventDispatch[] = "EventDispatch"; 85 static const char EventDispatch[] = "EventDispatch";
84 static const char ScheduleStyleRecalculation[] = "ScheduleStyleRecalculation"; 86 static const char ScheduleStyleRecalculation[] = "ScheduleStyleRecalculation";
85 static const char RecalculateStyles[] = "RecalculateStyles"; 87 static const char RecalculateStyles[] = "RecalculateStyles";
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 } 336 }
335 337
336 if (liveEvents) 338 if (liveEvents)
337 setLiveEvents(*liveEvents); 339 setLiveEvents(*liveEvents);
338 340
339 m_state->setLong(TimelineAgentState::timelineMaxCallStackDepth, m_maxCallSta ckDepth); 341 m_state->setLong(TimelineAgentState::timelineMaxCallStackDepth, m_maxCallSta ckDepth);
340 m_state->setBoolean(TimelineAgentState::includeCounters, includeCounters && *includeCounters); 342 m_state->setBoolean(TimelineAgentState::includeCounters, includeCounters && *includeCounters);
341 m_state->setBoolean(TimelineAgentState::includeGPUEvents, includeGPUEvents & & *includeGPUEvents); 343 m_state->setBoolean(TimelineAgentState::includeGPUEvents, includeGPUEvents & & *includeGPUEvents);
342 m_state->setBoolean(TimelineAgentState::bufferEvents, bufferEvents && *buffe rEvents); 344 m_state->setBoolean(TimelineAgentState::bufferEvents, bufferEvents && *buffe rEvents);
343 m_state->setString(TimelineAgentState::liveEvents, liveEvents ? *liveEvents : ""); 345 m_state->setString(TimelineAgentState::liveEvents, liveEvents ? *liveEvents : "");
346 initializeSessionId();
344 347
345 innerStart(); 348 innerStart();
346 bool fromConsole = false; 349 bool fromConsole = false;
347 m_frontend->started(&fromConsole); 350 m_frontend->started(sessionId(), &fromConsole);
348 } 351 }
349 352
350 bool InspectorTimelineAgent::isStarted() 353 bool InspectorTimelineAgent::isStarted()
351 { 354 {
352 return m_state->getBoolean(TimelineAgentState::started); 355 return m_state->getBoolean(TimelineAgentState::started);
353 } 356 }
354 357
355 void InspectorTimelineAgent::innerStart() 358 void InspectorTimelineAgent::innerStart()
356 { 359 {
357 if (m_overlay) 360 if (m_overlay)
358 m_overlay->startedRecordingProfile(); 361 m_overlay->startedRecordingProfile();
359 m_state->setBoolean(TimelineAgentState::started, true); 362 m_state->setBoolean(TimelineAgentState::started, true);
360 String traceEventCategoryFilter = m_state->getString(TimelineAgentState::tra ceEventCategoryFilter); 363 String traceEventCategoryFilter = m_state->getString(TimelineAgentState::tra ceEventCategoryFilter);
361 if (!traceEventCategoryFilter.isEmpty()) { 364 if (!traceEventCategoryFilter.isEmpty()) {
362 m_client->enableTracing(traceEventCategoryFilter); 365 m_client->enableTracing(traceEventCategoryFilter);
363 m_disableTracingOnStop = true; 366 m_disableTracingOnStop = true;
364 } else { 367 } else {
365 m_disableTracingOnStop = false; 368 m_disableTracingOnStop = false;
366 } 369 }
367 m_instrumentingAgents->setInspectorTimelineAgent(this); 370 m_instrumentingAgents->setInspectorTimelineAgent(this);
368 ScriptGCEvent::addEventListener(this); 371 ScriptGCEvent::addEventListener(this);
372 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "Timeli neStarted", "sessionId", sessionId().utf8());
373 if (m_layerTreeId) {
pfeldman 2014/04/22 17:59:50 call setLayerTreeId instead?
374 TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "Se tLayerTreeId", "sessionId", sessionId().utf8(), "layerTreeId", m_layerTreeId);
375 }
369 if (m_client) { 376 if (m_client) {
370 TraceEventDispatcher* dispatcher = TraceEventDispatcher::instance(); 377 TraceEventDispatcher* dispatcher = TraceEventDispatcher::instance();
371 dispatcher->addListener(InstrumentationEvents::BeginFrame, TRACE_EVENT_P HASE_INSTANT, this, &InspectorTimelineAgent::onBeginImplSideFrame, m_client); 378 dispatcher->addListener(InstrumentationEvents::BeginFrame, TRACE_EVENT_P HASE_INSTANT, this, &InspectorTimelineAgent::onBeginImplSideFrame, m_client);
372 dispatcher->addListener(InstrumentationEvents::PaintSetup, TRACE_EVENT_P HASE_BEGIN, this, &InspectorTimelineAgent::onPaintSetupBegin, m_client); 379 dispatcher->addListener(InstrumentationEvents::PaintSetup, TRACE_EVENT_P HASE_BEGIN, this, &InspectorTimelineAgent::onPaintSetupBegin, m_client);
373 dispatcher->addListener(InstrumentationEvents::PaintSetup, TRACE_EVENT_P HASE_END, this, &InspectorTimelineAgent::onPaintSetupEnd, m_client); 380 dispatcher->addListener(InstrumentationEvents::PaintSetup, TRACE_EVENT_P HASE_END, this, &InspectorTimelineAgent::onPaintSetupEnd, m_client);
374 dispatcher->addListener(InstrumentationEvents::RasterTask, TRACE_EVENT_P HASE_BEGIN, this, &InspectorTimelineAgent::onRasterTaskBegin, m_client); 381 dispatcher->addListener(InstrumentationEvents::RasterTask, TRACE_EVENT_P HASE_BEGIN, this, &InspectorTimelineAgent::onRasterTaskBegin, m_client);
375 dispatcher->addListener(InstrumentationEvents::RasterTask, TRACE_EVENT_P HASE_END, this, &InspectorTimelineAgent::onRasterTaskEnd, m_client); 382 dispatcher->addListener(InstrumentationEvents::RasterTask, TRACE_EVENT_P HASE_END, this, &InspectorTimelineAgent::onRasterTaskEnd, m_client);
376 dispatcher->addListener(InstrumentationEvents::Layer, TRACE_EVENT_PHASE_ DELETE_OBJECT, this, &InspectorTimelineAgent::onLayerDeleted, m_client); 383 dispatcher->addListener(InstrumentationEvents::Layer, TRACE_EVENT_PHASE_ DELETE_OBJECT, this, &InspectorTimelineAgent::onLayerDeleted, m_client);
377 dispatcher->addListener(InstrumentationEvents::RequestMainThreadFrame, T RACE_EVENT_PHASE_INSTANT, this, &InspectorTimelineAgent::onRequestMainThreadFram e, m_client); 384 dispatcher->addListener(InstrumentationEvents::RequestMainThreadFrame, T RACE_EVENT_PHASE_INSTANT, this, &InspectorTimelineAgent::onRequestMainThreadFram e, m_client);
378 dispatcher->addListener(InstrumentationEvents::ActivateLayerTree, TRACE_ EVENT_PHASE_INSTANT, this, &InspectorTimelineAgent::onActivateLayerTree, m_clien t); 385 dispatcher->addListener(InstrumentationEvents::ActivateLayerTree, TRACE_ EVENT_PHASE_INSTANT, this, &InspectorTimelineAgent::onActivateLayerTree, m_clien t);
(...skipping 12 matching lines...) Expand all
391 m_client->startGPUEventsRecording(); 398 m_client->startGPUEventsRecording();
392 } 399 }
393 } 400 }
394 } 401 }
395 402
396 void InspectorTimelineAgent::stop(ErrorString* errorString, RefPtr<TypeBuilder:: Array<TimelineEvent> >& events) 403 void InspectorTimelineAgent::stop(ErrorString* errorString, RefPtr<TypeBuilder:: Array<TimelineEvent> >& events)
397 { 404 {
398 m_state->setBoolean(TimelineAgentState::startedFromProtocol, false); 405 m_state->setBoolean(TimelineAgentState::startedFromProtocol, false);
399 m_state->setBoolean(TimelineAgentState::bufferEvents, false); 406 m_state->setBoolean(TimelineAgentState::bufferEvents, false);
400 m_state->setString(TimelineAgentState::liveEvents, ""); 407 m_state->setString(TimelineAgentState::liveEvents, "");
408 m_state->setString(TimelineAgentState::sessionId, "");
401 409
402 if (!isStarted()) { 410 if (!isStarted()) {
403 *errorString = "Timeline was not started"; 411 *errorString = "Timeline was not started";
404 return; 412 return;
405 } 413 }
406 innerStop(false); 414 innerStop(false);
407 if (m_bufferedEvents) 415 if (m_bufferedEvents)
408 events = m_bufferedEvents.release(); 416 events = m_bufferedEvents.release();
409 m_liveEvents.clear(); 417 m_liveEvents.clear();
410 } 418 }
(...skipping 28 matching lines...) Expand all
439 String message = String::format("Timeline '%s' terminated.", m_consoleTi melines[i].utf8().data()); 447 String message = String::format("Timeline '%s' terminated.", m_consoleTi melines[i].utf8().data());
440 mainFrame()->console().addMessage(ConsoleAPIMessageSource, DebugMessageL evel, message); 448 mainFrame()->console().addMessage(ConsoleAPIMessageSource, DebugMessageL evel, message);
441 } 449 }
442 m_consoleTimelines.clear(); 450 m_consoleTimelines.clear();
443 451
444 m_frontend->stopped(&fromConsole); 452 m_frontend->stopped(&fromConsole);
445 if (m_overlay) 453 if (m_overlay)
446 m_overlay->finishedRecordingProfile(); 454 m_overlay->finishedRecordingProfile();
447 } 455 }
448 456
457 String InspectorTimelineAgent::sessionId() const
458 {
459 return m_state->getString(TimelineAgentState::sessionId);
460 }
461
462 void InspectorTimelineAgent::initializeSessionId()
463 {
464 static unsigned lastTimelineSessionId;
465 String token = String::number(getCurrentProcessID()) + "." + String::number( ++lastTimelineSessionId);
yurys 2014/04/23 07:05:38 What if pid is reused after a few navigations? Gen
466 m_state->setString(TimelineAgentState::sessionId, token);
467 }
468
469 void InspectorTimelineAgent::setLayerTreeId(int layerTreeId)
470 {
471 m_layerTreeId = layerTreeId;
472 TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "setLay erTreeId", "sessionId", sessionId().utf8(), "layerTreeId", m_layerTreeId);
yurys 2014/04/23 07:05:38 Are we going to leave this instrumentation here af
473 }
474
449 void InspectorTimelineAgent::didBeginFrame(int frameId) 475 void InspectorTimelineAgent::didBeginFrame(int frameId)
450 { 476 {
451 TraceEventDispatcher::instance()->processBackgroundEvents(); 477 TraceEventDispatcher::instance()->processBackgroundEvents();
452 m_pendingFrameRecord = TimelineRecordFactory::createGenericRecord(timestamp( ), 0, TimelineRecordType::BeginFrame, TimelineRecordFactory::createFrameData(fra meId)); 478 m_pendingFrameRecord = TimelineRecordFactory::createGenericRecord(timestamp( ), 0, TimelineRecordType::BeginFrame, TimelineRecordFactory::createFrameData(fra meId));
453 } 479 }
454 480
455 void InspectorTimelineAgent::didCancelFrame() 481 void InspectorTimelineAgent::didCancelFrame()
456 { 482 {
457 m_pendingFrameRecord.clear(); 483 m_pendingFrameRecord.clear();
458 } 484 }
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 849
824 void InspectorTimelineAgent::consoleTimeline(ExecutionContext* context, const St ring& title, ScriptState* state) 850 void InspectorTimelineAgent::consoleTimeline(ExecutionContext* context, const St ring& title, ScriptState* state)
825 { 851 {
826 if (!m_state->getBoolean(TimelineAgentState::enabled)) 852 if (!m_state->getBoolean(TimelineAgentState::enabled))
827 return; 853 return;
828 854
829 String message = String::format("Timeline '%s' started.", title.utf8().data( )); 855 String message = String::format("Timeline '%s' started.", title.utf8().data( ));
830 mainFrame()->console().addMessage(ConsoleAPIMessageSource, DebugMessageLevel , message, String(), 0, 0, nullptr, state); 856 mainFrame()->console().addMessage(ConsoleAPIMessageSource, DebugMessageLevel , message, String(), 0, 0, nullptr, state);
831 m_consoleTimelines.append(title); 857 m_consoleTimelines.append(title);
832 if (!isStarted()) { 858 if (!isStarted()) {
859 initializeSessionId();
833 innerStart(); 860 innerStart();
834 bool fromConsole = true; 861 bool fromConsole = true;
835 m_frontend->started(&fromConsole); 862 m_frontend->started(sessionId(), &fromConsole);
836 } 863 }
837 appendRecord(TimelineRecordFactory::createTimeStampData(message), TimelineRe cordType::TimeStamp, true, frameForExecutionContext(context)); 864 appendRecord(TimelineRecordFactory::createTimeStampData(message), TimelineRe cordType::TimeStamp, true, frameForExecutionContext(context));
838 } 865 }
839 866
840 void InspectorTimelineAgent::consoleTimelineEnd(ExecutionContext* context, const String& title, ScriptState* state) 867 void InspectorTimelineAgent::consoleTimelineEnd(ExecutionContext* context, const String& title, ScriptState* state)
841 { 868 {
842 if (!m_state->getBoolean(TimelineAgentState::enabled)) 869 if (!m_state->getBoolean(TimelineAgentState::enabled))
843 return; 870 return;
844 871
845 size_t index = m_consoleTimelines.find(title); 872 size_t index = m_consoleTimelines.find(title);
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
1364 1391
1365 #ifndef NDEBUG 1392 #ifndef NDEBUG
1366 bool TimelineRecordStack::isOpenRecordOfType(const String& type) 1393 bool TimelineRecordStack::isOpenRecordOfType(const String& type)
1367 { 1394 {
1368 return !m_stack.isEmpty() && m_stack.last().type == type; 1395 return !m_stack.isEmpty() && m_stack.last().type == type;
1369 } 1396 }
1370 #endif 1397 #endif
1371 1398
1372 } // namespace WebCore 1399 } // namespace WebCore
1373 1400
OLDNEW
« no previous file with comments | « Source/core/inspector/InspectorTimelineAgent.h ('k') | Source/devtools/front_end/TimelineManager.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698