// 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_BENCHMARKS_MICRO_BENCHMARK_CONTROLLER_H_
#define CC_BENCHMARKS_MICRO_BENCHMARK_CONTROLLER_H_

#include <string>
#include <vector>

#include "base/callback.h"
#include "base/macros.h"
#include "cc/benchmarks/micro_benchmark.h"

namespace base {
class SingleThreadTaskRunner;
class Value;
}  // namespace base

namespace cc {

class LayerTreeHost;
class LayerTreeHostImpl;
class CC_EXPORT MicroBenchmarkController {
 public:
  explicit MicroBenchmarkController(LayerTreeHost* host);
  ~MicroBenchmarkController();

  void DidUpdateLayers();

  // Returns the id of the benchmark on success, 0 otherwise.
  int ScheduleRun(const std::string& micro_benchmark_name,
                  std::unique_ptr<base::Value> value,
                  MicroBenchmark::DoneCallback callback);
  // Returns true if the message was successfully delivered and handled.
  bool SendMessage(int id, std::unique_ptr<base::Value> value);

  void ScheduleImplBenchmarks(LayerTreeHostImpl* host_impl);

 private:
  void CleanUpFinishedBenchmarks();
  int GetNextIdAndIncrement();

  LayerTreeHost* host_;
  std::vector<std::unique_ptr<MicroBenchmark>> benchmarks_;
  static int next_id_;
  scoped_refptr<base::SingleThreadTaskRunner> main_controller_task_runner_;

  DISALLOW_COPY_AND_ASSIGN(MicroBenchmarkController);
};

}  // namespace cc

#endif  // CC_BENCHMARKS_MICRO_BENCHMARK_CONTROLLER_H_
