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_MICRO_BENCHMARK_H_
6#define CC_DEBUG_MICRO_BENCHMARK_H_
7
8#include "base/callback.h"
9#include "base/memory/scoped_ptr.h"
10#include "cc/base/cc_export.h"
11
12namespace base {
13class Value;
14class MessageLoopProxy;
15}  // namespace base
16
17namespace cc {
18
19class LayerTreeHost;
20class Layer;
21class PictureLayer;
22class MicroBenchmarkImpl;
23class CC_EXPORT MicroBenchmark {
24 public:
25  typedef base::Callback<void(scoped_ptr<base::Value>)> DoneCallback;
26
27  explicit MicroBenchmark(const DoneCallback& callback);
28  virtual ~MicroBenchmark();
29
30  bool IsDone() const;
31  virtual void DidUpdateLayers(LayerTreeHost* host);
32  int id() const { return id_; }
33  void set_id(int id) { id_ = id; }
34
35  virtual void RunOnLayer(Layer* layer);
36  virtual void RunOnLayer(PictureLayer* layer);
37
38  virtual bool ProcessMessage(scoped_ptr<base::Value> value);
39
40  bool ProcessedForBenchmarkImpl() const;
41  scoped_ptr<MicroBenchmarkImpl> GetBenchmarkImpl(
42      scoped_refptr<base::MessageLoopProxy> origin_loop);
43
44 protected:
45  void NotifyDone(scoped_ptr<base::Value> result);
46
47  virtual scoped_ptr<MicroBenchmarkImpl> CreateBenchmarkImpl(
48      scoped_refptr<base::MessageLoopProxy> origin_loop);
49
50 private:
51  DoneCallback callback_;
52  bool is_done_;
53  bool processed_for_benchmark_impl_;
54  int id_;
55};
56
57}  // namespace cc
58
59#endif  // CC_DEBUG_MICRO_BENCHMARK_H_
60