• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
TileDataAsValue(const void * tile_id,TileResolution tile_resolution,int source_frame_number,int layer_id)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:
ScopedAnalyzeTask(const void * tile_id,TileResolution tile_resolution,int source_frame_number,int layer_id)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   }
~ScopedAnalyzeTask()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:
ScopedRasterTask(const void * tile_id,TileResolution tile_resolution,int source_frame_number,int layer_id,RasterMode raster_mode)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   }
~ScopedRasterTask()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