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_CONTROLLER_H_ 6 #define CC_DEBUG_MICRO_BENCHMARK_CONTROLLER_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/callback.h" 12 #include "cc/base/scoped_ptr_vector.h" 13 #include "cc/debug/micro_benchmark.h" 14 15 namespace base { 16 class Value; 17 class MessageLoopProxy; 18 } // namespace base 19 20 namespace cc { 21 22 class LayerTreeHost; 23 class LayerTreeHostImpl; 24 class CC_EXPORT MicroBenchmarkController { 25 public: 26 explicit MicroBenchmarkController(LayerTreeHost* host); 27 ~MicroBenchmarkController(); 28 29 void DidUpdateLayers(); 30 31 // Returns the id of the benchmark on success, 0 otherwise. 32 int ScheduleRun(const std::string& micro_benchmark_name, 33 scoped_ptr<base::Value> value, 34 const MicroBenchmark::DoneCallback& callback); 35 // Returns true if the message was successfully delivered and handled. 36 bool SendMessage(int id, scoped_ptr<base::Value> value); 37 38 void ScheduleImplBenchmarks(LayerTreeHostImpl* host_impl); 39 40 private: 41 void CleanUpFinishedBenchmarks(); 42 int GetNextIdAndIncrement(); 43 44 LayerTreeHost* host_; 45 ScopedPtrVector<MicroBenchmark> benchmarks_; 46 static int next_id_; 47 scoped_refptr<base::MessageLoopProxy> main_controller_message_loop_; 48 49 DISALLOW_COPY_AND_ASSIGN(MicroBenchmarkController); 50 }; 51 52 } // namespace cc 53 54 #endif // CC_DEBUG_MICRO_BENCHMARK_CONTROLLER_H_ 55