1 // Copyright 2014 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_FRAME_VIEWER_INSTRUMENTATION_H_ 6 #define CC_DEBUG_FRAME_VIEWER_INSTRUMENTATION_H_ 7 8 #include "base/debug/trace_event.h" 9 #include "cc/resources/tile.h" 10 11 namespace cc { 12 namespace frame_viewer_instrumentation { 13 namespace internal { 14 15 const char kCategory[] = "cc"; 16 const char kTileData[] = "tileData"; 17 const char kLayerId[] = "layerId"; 18 const char kTileId[] = "tileId"; 19 const char kTileResolution[] = "tileResolution"; 20 const char kSourceFrameNumber[] = "sourceFrameNumber"; 21 const char kRasterMode[] = "rasterMode"; 22 23 const char kAnalyzeTask[] = "AnalyzeTask"; 24 const char kRasterTask[] = "RasterTask"; 25 26 scoped_ptr<base::Value> TileDataAsValue(const void* tile_id, 27 TileResolution tile_resolution, 28 int source_frame_number, 29 int layer_id) { 30 scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue); 31 res->Set(internal::kTileId, TracedValue::CreateIDRef(tile_id).release()); 32 res->Set(internal::kTileResolution, 33 TileResolutionAsValue(tile_resolution).release()); 34 res->SetInteger(internal::kSourceFrameNumber, source_frame_number); 35 res->SetInteger(internal::kLayerId, layer_id); 36 return res.PassAs<base::Value>(); 37 } 38 39 } // namespace internal 40 41 class ScopedAnalyzeTask { 42 public: 43 ScopedAnalyzeTask(const void* tile_id, 44 TileResolution tile_resolution, 45 int source_frame_number, 46 int layer_id) { 47 TRACE_EVENT_BEGIN1( 48 internal::kCategory, 49 internal::kAnalyzeTask, 50 internal::kTileData, 51 TracedValue::FromValue(internal::TileDataAsValue(tile_id, 52 tile_resolution, 53 source_frame_number, 54 layer_id).release())); 55 } 56 ~ScopedAnalyzeTask() { 57 TRACE_EVENT_END0(internal::kCategory, internal::kAnalyzeTask); 58 } 59 60 private: 61 DISALLOW_COPY_AND_ASSIGN(ScopedAnalyzeTask); 62 }; 63 64 class ScopedRasterTask { 65 public: 66 ScopedRasterTask(const void* tile_id, 67 TileResolution tile_resolution, 68 int source_frame_number, 69 int layer_id, 70 RasterMode raster_mode) { 71 TRACE_EVENT_BEGIN2( 72 internal::kCategory, 73 internal::kRasterTask, 74 internal::kTileData, 75 TracedValue::FromValue(internal::TileDataAsValue(tile_id, 76 tile_resolution, 77 source_frame_number, 78 layer_id).release()), 79 internal::kRasterMode, 80 TracedValue::FromValue(RasterModeAsValue(raster_mode).release())); 81 } 82 ~ScopedRasterTask() { 83 TRACE_EVENT_END0(internal::kCategory, internal::kRasterTask); 84 } 85 86 private: 87 DISALLOW_COPY_AND_ASSIGN(ScopedRasterTask); 88 }; 89 90 } // namespace frame_viewer_instrumentation 91 } // namespace cc 92 93 #endif // CC_DEBUG_FRAME_VIEWER_INSTRUMENTATION_H_ 94