|  | // Copyright 2013 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef CC_DEBUG_MICRO_BENCHMARK_H_ | 
|  | #define CC_DEBUG_MICRO_BENCHMARK_H_ | 
|  |  | 
|  | #include "base/callback.h" | 
|  | #include "base/memory/scoped_ptr.h" | 
|  | #include "cc/base/cc_export.h" | 
|  |  | 
|  | namespace base { | 
|  | class Value; | 
|  | class MessageLoopProxy; | 
|  | }  // namespace base | 
|  |  | 
|  | namespace cc { | 
|  |  | 
|  | class LayerTreeHost; | 
|  | class Layer; | 
|  | class PictureLayer; | 
|  | class MicroBenchmarkImpl; | 
|  | class CC_EXPORT MicroBenchmark { | 
|  | public: | 
|  | typedef base::Callback<void(scoped_ptr<base::Value>)> DoneCallback; | 
|  |  | 
|  | explicit MicroBenchmark(const DoneCallback& callback); | 
|  | virtual ~MicroBenchmark(); | 
|  |  | 
|  | bool IsDone() const; | 
|  | virtual void DidUpdateLayers(LayerTreeHost* host); | 
|  | int id() const { return id_; } | 
|  | void set_id(int id) { id_ = id; } | 
|  |  | 
|  | virtual void RunOnLayer(Layer* layer); | 
|  | virtual void RunOnLayer(PictureLayer* layer); | 
|  |  | 
|  | virtual bool ProcessMessage(scoped_ptr<base::Value> value); | 
|  |  | 
|  | bool ProcessedForBenchmarkImpl() const; | 
|  | scoped_ptr<MicroBenchmarkImpl> GetBenchmarkImpl( | 
|  | scoped_refptr<base::MessageLoopProxy> origin_loop); | 
|  |  | 
|  | protected: | 
|  | void NotifyDone(scoped_ptr<base::Value> result); | 
|  |  | 
|  | virtual scoped_ptr<MicroBenchmarkImpl> CreateBenchmarkImpl( | 
|  | scoped_refptr<base::MessageLoopProxy> origin_loop); | 
|  |  | 
|  | private: | 
|  | DoneCallback callback_; | 
|  | bool is_done_; | 
|  | bool processed_for_benchmark_impl_; | 
|  | int id_; | 
|  | }; | 
|  |  | 
|  | }  // namespace cc | 
|  |  | 
|  | #endif  // CC_DEBUG_MICRO_BENCHMARK_H_ |