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