14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef CC_DEBUG_MICRO_BENCHMARK_CONTROLLER_H_ 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define CC_DEBUG_MICRO_BENCHMARK_CONTROLLER_H_ 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <string> 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/basictypes.h" 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/callback.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/base/scoped_ptr_vector.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/debug/micro_benchmark.h" 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace base { 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Value; 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MessageLoopProxy; 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace base 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace cc { 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class LayerTreeHost; 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class LayerTreeHostImpl; 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class CC_EXPORT MicroBenchmarkController { 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) explicit MicroBenchmarkController(LayerTreeHost* host); 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ~MicroBenchmarkController(); 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void DidUpdateLayers(); 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Returns the id of the benchmark on success, 0 otherwise. 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int ScheduleRun(const std::string& micro_benchmark_name, 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<base::Value> value, 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const MicroBenchmark::DoneCallback& callback); 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Returns true if the message was successfully delivered and handled. 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool SendMessage(int id, scoped_ptr<base::Value> value); 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void ScheduleImplBenchmarks(LayerTreeHostImpl* host_impl); 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void CleanUpFinishedBenchmarks(); 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int GetNextIdAndIncrement(); 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) LayerTreeHost* host_; 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ScopedPtrVector<MicroBenchmark> benchmarks_; 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static int next_id_; 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<base::MessageLoopProxy> main_controller_message_loop_; 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MicroBenchmarkController); 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace cc 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // CC_DEBUG_MICRO_BENCHMARK_CONTROLLER_H_ 55