1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CC_DEBUG_DEVTOOLS_INSTRUMENTATION_H_ 6#define CC_DEBUG_DEVTOOLS_INSTRUMENTATION_H_ 7 8#include "base/debug/trace_event.h" 9 10namespace cc { 11namespace devtools_instrumentation { 12 13namespace internal { 14const char kCategory[] = TRACE_DISABLED_BY_DEFAULT("devtools.timeline"); 15const char kCategoryFrame[] = 16 TRACE_DISABLED_BY_DEFAULT("devtools.timeline.frame"); 17const char kFrameId[] = "frameId"; 18const char kLayerId[] = "layerId"; 19const char kLayerTreeId[] = "layerTreeId"; 20const char kPixelRefId[] = "pixelRefId"; 21 22const char kImageDecodeTask[] = "ImageDecodeTask"; 23const char kBeginFrame[] = "BeginFrame"; 24const char kActivateLayerTree[] = "ActivateLayerTree"; 25const char kRequestMainThreadFrame[] = "RequestMainThreadFrame"; 26const char kDrawFrame[] = "DrawFrame"; 27} // namespace internal 28 29const char kRasterTask[] = "RasterTask"; 30const char kPaintSetup[] = "PaintSetup"; 31const char kUpdateLayer[] = "UpdateLayer"; 32 33class ScopedLayerTask { 34 public: 35 ScopedLayerTask(const char* event_name, int layer_id) 36 : event_name_(event_name) { 37 TRACE_EVENT_BEGIN1(internal::kCategory, event_name_, 38 internal::kLayerId, layer_id); 39 } 40 ~ScopedLayerTask() { 41 TRACE_EVENT_END0(internal::kCategory, event_name_); 42 } 43 private: 44 const char* event_name_; 45 46 DISALLOW_COPY_AND_ASSIGN(ScopedLayerTask); 47}; 48 49class ScopedImageDecodeTask { 50 public: 51 explicit ScopedImageDecodeTask(void* pixelRef) { 52 TRACE_EVENT_BEGIN1(internal::kCategory, internal::kImageDecodeTask, 53 internal::kPixelRefId, reinterpret_cast<uint64>(pixelRef)); 54 } 55 ~ScopedImageDecodeTask() { 56 TRACE_EVENT_END0(internal::kCategory, internal::kImageDecodeTask); 57 } 58 private: 59 DISALLOW_COPY_AND_ASSIGN(ScopedImageDecodeTask); 60}; 61 62class ScopedLayerTreeTask { 63 public: 64 ScopedLayerTreeTask(const char* event_name, 65 int layer_id, 66 int layer_tree_host_id) 67 : event_name_(event_name) { 68 TRACE_EVENT_BEGIN2(internal::kCategory, event_name_, 69 internal::kLayerId, layer_id, 70 internal::kLayerTreeId, layer_tree_host_id); 71 } 72 ~ScopedLayerTreeTask() { 73 TRACE_EVENT_END0(internal::kCategory, event_name_); 74 } 75 private: 76 const char* event_name_; 77 78 DISALLOW_COPY_AND_ASSIGN(ScopedLayerTreeTask); 79}; 80 81struct ScopedLayerObjectTracker 82 : public base::debug::TraceScopedTrackableObject<int> { 83 explicit ScopedLayerObjectTracker(int layer_id) 84 : base::debug::TraceScopedTrackableObject<int>( 85 internal::kCategory, 86 internal::kLayerId, 87 layer_id) { 88 } 89 90 private: 91 DISALLOW_COPY_AND_ASSIGN(ScopedLayerObjectTracker); 92}; 93 94inline void DidActivateLayerTree(int layer_tree_host_id, int frame_id) { 95 TRACE_EVENT_INSTANT2(internal::kCategoryFrame, 96 internal::kActivateLayerTree, 97 TRACE_EVENT_SCOPE_THREAD, 98 internal::kLayerTreeId, 99 layer_tree_host_id, 100 internal::kFrameId, 101 frame_id); 102} 103 104inline void DidBeginFrame(int layer_tree_host_id) { 105 TRACE_EVENT_INSTANT1(internal::kCategoryFrame, 106 internal::kBeginFrame, 107 TRACE_EVENT_SCOPE_THREAD, 108 internal::kLayerTreeId, 109 layer_tree_host_id); 110} 111 112inline void DidDrawFrame(int layer_tree_host_id) { 113 TRACE_EVENT_INSTANT1(internal::kCategoryFrame, 114 internal::kDrawFrame, 115 TRACE_EVENT_SCOPE_THREAD, 116 internal::kLayerTreeId, 117 layer_tree_host_id); 118} 119 120inline void DidRequestMainThreadFrame(int layer_tree_host_id) { 121 TRACE_EVENT_INSTANT1(internal::kCategoryFrame, 122 internal::kRequestMainThreadFrame, 123 TRACE_EVENT_SCOPE_THREAD, 124 internal::kLayerTreeId, 125 layer_tree_host_id); 126} 127 128} // namespace devtools_instrumentation 129} // namespace cc 130 131#endif // CC_DEBUG_DEVTOOLS_INSTRUMENTATION_H_ 132