• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
13 namespace cc {
14 
15 namespace {
16 
17 class IsDonePredicate {
18  public:
19   typedef const MicroBenchmarkImpl* argument_type;
20   typedef bool result_type;
21 
operator ()(argument_type benchmark) const22   result_type operator()(argument_type benchmark) const {
23     return benchmark->IsDone();
24   }
25 };
26 
27 }  // namespace
28 
MicroBenchmarkControllerImpl(LayerTreeHostImpl * host)29 MicroBenchmarkControllerImpl::MicroBenchmarkControllerImpl(
30     LayerTreeHostImpl* host)
31     : host_(host) {
32   DCHECK(host_);
33 }
34 
~MicroBenchmarkControllerImpl()35 MicroBenchmarkControllerImpl::~MicroBenchmarkControllerImpl() {}
36 
ScheduleRun(scoped_ptr<MicroBenchmarkImpl> benchmark)37 void MicroBenchmarkControllerImpl::ScheduleRun(
38     scoped_ptr<MicroBenchmarkImpl> benchmark) {
39   benchmarks_.push_back(benchmark.Pass());
40 }
41 
DidCompleteCommit()42 void 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 
CleanUpFinishedBenchmarks()53 void MicroBenchmarkControllerImpl::CleanUpFinishedBenchmarks() {
54   benchmarks_.erase(
55       benchmarks_.partition(std::not1(IsDonePredicate())),
56       benchmarks_.end());
57 }
58 
59 }  // namespace cc
60