Home | History | Annotate | Download | only in debug
      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 
     10 namespace cc {
     11 namespace devtools_instrumentation {
     12 
     13 namespace internal {
     14 const char kCategory[] = "cc,devtools";
     15 const char kFrameId[] = "frameId";
     16 const char kLayerId[] = "layerId";
     17 const char kLayerTreeId[] = "layerTreeId";
     18 const char kPixelRefId[] = "pixelRefId";
     19 
     20 const char kImageDecodeTask[] = "ImageDecodeTask";
     21 const char kBeginFrame[] = "BeginFrame";
     22 const char kActivateLayerTree[] = "ActivateLayerTree";
     23 }  // namespace internal
     24 
     25 const char kRasterTask[] = "RasterTask";
     26 const char kPaintSetup[] = "PaintSetup";
     27 
     28 class ScopedLayerTask {
     29  public:
     30   ScopedLayerTask(const char* event_name, int layer_id)
     31     : event_name_(event_name) {
     32     TRACE_EVENT_BEGIN1(internal::kCategory, event_name_,
     33         internal::kLayerId, layer_id);
     34   }
     35   ~ScopedLayerTask() {
     36     TRACE_EVENT_END0(internal::kCategory, event_name_);
     37   }
     38  private:
     39   const char* event_name_;
     40 
     41   DISALLOW_COPY_AND_ASSIGN(ScopedLayerTask);
     42 };
     43 
     44 class ScopedImageDecodeTask {
     45  public:
     46   explicit ScopedImageDecodeTask(void* pixelRef) {
     47     TRACE_EVENT_BEGIN1(internal::kCategory, internal::kImageDecodeTask,
     48         internal::kPixelRefId, reinterpret_cast<uint64>(pixelRef));
     49   }
     50   ~ScopedImageDecodeTask() {
     51     TRACE_EVENT_END0(internal::kCategory, internal::kImageDecodeTask);
     52   }
     53  private:
     54   DISALLOW_COPY_AND_ASSIGN(ScopedImageDecodeTask);
     55 };
     56 
     57 class ScopedLayerTreeTask {
     58  public:
     59   ScopedLayerTreeTask(const char* event_name,
     60                       int layer_id,
     61                       int layer_tree_host_id)
     62     : event_name_(event_name) {
     63     TRACE_EVENT_BEGIN2(internal::kCategory, event_name_,
     64         internal::kLayerId, layer_id,
     65         internal::kLayerTreeId, layer_tree_host_id);
     66   }
     67   ~ScopedLayerTreeTask() {
     68     TRACE_EVENT_END0(internal::kCategory, event_name_);
     69   }
     70  private:
     71   const char* event_name_;
     72 
     73   DISALLOW_COPY_AND_ASSIGN(ScopedLayerTreeTask);
     74 };
     75 
     76 struct ScopedLayerObjectTracker
     77     : public base::debug::TraceScopedTrackableObject<int> {
     78   explicit ScopedLayerObjectTracker(int layer_id)
     79       : base::debug::TraceScopedTrackableObject<int>(
     80             internal::kCategory,
     81             internal::kLayerId,
     82             layer_id) {
     83   }
     84 
     85  private:
     86   DISALLOW_COPY_AND_ASSIGN(ScopedLayerObjectTracker);
     87 };
     88 
     89 inline void didActivateLayerTree(int layer_tree_host_id, int frame_id) {
     90   TRACE_EVENT_INSTANT2(internal::kCategory,
     91                        internal::kActivateLayerTree,
     92                        TRACE_EVENT_SCOPE_THREAD,
     93                        internal::kLayerTreeId, layer_tree_host_id,
     94                        internal::kFrameId, frame_id);
     95 }
     96 
     97 inline void didBeginFrame(int layer_tree_host_id) {
     98   TRACE_EVENT_INSTANT1(internal::kCategory,
     99                        internal::kBeginFrame,
    100                        TRACE_EVENT_SCOPE_THREAD,
    101                        internal::kLayerTreeId, layer_tree_host_id);
    102 }
    103 
    104 }  // namespace devtools_instrumentation
    105 }  // namespace cc
    106 
    107 #endif  // CC_DEBUG_DEVTOOLS_INSTRUMENTATION_H_
    108