Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / cc / debug / rasterize_and_record_benchmark.h
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_RASTERIZE_AND_RECORD_BENCHMARK_H_
6 #define CC_DEBUG_RASTERIZE_AND_RECORD_BENCHMARK_H_
7
8 #include <map>
9 #include <utility>
10 #include <vector>
11
12 #include "base/memory/weak_ptr.h"
13 #include "base/time/time.h"
14 #include "cc/debug/micro_benchmark_controller.h"
15 #include "cc/resources/picture.h"
16
17 namespace base {
18 class DictionaryValue;
19 }
20
21 namespace cc {
22
23 class LayerTreeHost;
24 class Layer;
25 class RasterizeAndRecordBenchmark : public MicroBenchmark {
26  public:
27   explicit RasterizeAndRecordBenchmark(
28       scoped_ptr<base::Value> value,
29       const MicroBenchmark::DoneCallback& callback);
30   virtual ~RasterizeAndRecordBenchmark();
31
32   // Implements MicroBenchmark interface.
33   virtual void DidUpdateLayers(LayerTreeHost* host) OVERRIDE;
34   virtual void RunOnLayer(PictureLayer* layer) OVERRIDE;
35
36   virtual scoped_ptr<MicroBenchmarkImpl> CreateBenchmarkImpl(
37       scoped_refptr<base::MessageLoopProxy> origin_loop) OVERRIDE;
38
39  private:
40   void Run(Layer* layer);
41
42   void RecordRasterResults(scoped_ptr<base::Value> results);
43
44   struct RecordResults {
45     RecordResults();
46     ~RecordResults();
47
48     int pixels_recorded;
49     base::TimeDelta total_best_time[Picture::RECORDING_MODE_COUNT];
50   };
51
52   RecordResults record_results_;
53   int record_repeat_count_;
54   scoped_ptr<base::Value> settings_;
55   scoped_ptr<base::DictionaryValue> results_;
56
57   // The following is used in DCHECKs.
58   bool main_thread_benchmark_done_;
59
60   LayerTreeHost* host_;
61
62   base::WeakPtrFactory<RasterizeAndRecordBenchmark> weak_ptr_factory_;
63 };
64
65 }  // namespace cc
66
67 #endif  // CC_DEBUG_RASTERIZE_AND_RECORD_BENCHMARK_H_