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 11namespace cc { 12namespace frame_viewer_instrumentation { 13namespace internal { 14 15const char kCategory[] = "cc"; 16const char kTileData[] = "tileData"; 17const char kLayerId[] = "layerId"; 18const char kTileId[] = "tileId"; 19const char kTileResolution[] = "tileResolution"; 20const char kSourceFrameNumber[] = "sourceFrameNumber"; 21const char kRasterMode[] = "rasterMode"; 22 23const char kAnalyzeTask[] = "AnalyzeTask"; 24const char kRasterTask[] = "RasterTask"; 25 26scoped_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 41class 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 64class 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