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#include "cc/debug/micro_benchmark_controller_impl.h"
6
7#include <string>
8
9#include "base/callback.h"
10#include "base/values.h"
11#include "cc/trees/layer_tree_host_impl.h"
12
13namespace cc {
14
15namespace {
16
17class IsDonePredicate {
18 public:
19  typedef const MicroBenchmarkImpl* argument_type;
20  typedef bool result_type;
21
22  result_type operator()(argument_type benchmark) const {
23    return benchmark->IsDone();
24  }
25};
26
27}  // namespace
28
29MicroBenchmarkControllerImpl::MicroBenchmarkControllerImpl(
30    LayerTreeHostImpl* host)
31    : host_(host) {
32  DCHECK(host_);
33}
34
35MicroBenchmarkControllerImpl::~MicroBenchmarkControllerImpl() {}
36
37void MicroBenchmarkControllerImpl::ScheduleRun(
38    scoped_ptr<MicroBenchmarkImpl> benchmark) {
39  benchmarks_.push_back(benchmark.Pass());
40}
41
42void MicroBenchmarkControllerImpl::DidCompleteCommit() {
43  for (ScopedPtrVector<MicroBenchmarkImpl>::iterator it = benchmarks_.begin();
44       it != benchmarks_.end();
45       ++it) {
46    DCHECK(!(*it)->IsDone());
47    (*it)->DidCompleteCommit(host_);
48  }
49
50  CleanUpFinishedBenchmarks();
51}
52
53void MicroBenchmarkControllerImpl::CleanUpFinishedBenchmarks() {
54  benchmarks_.erase(
55      benchmarks_.partition(std::not1(IsDonePredicate())),
56      benchmarks_.end());
57}
58
59}  // namespace cc
60