// 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_