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)29MicroBenchmarkControllerImpl::MicroBenchmarkControllerImpl( 30 LayerTreeHostImpl* host) 31 : host_(host) { 32 DCHECK(host_); 33 } 34 ~MicroBenchmarkControllerImpl()35MicroBenchmarkControllerImpl::~MicroBenchmarkControllerImpl() {} 36 ScheduleRun(scoped_ptr<MicroBenchmarkImpl> benchmark)37void MicroBenchmarkControllerImpl::ScheduleRun( 38 scoped_ptr<MicroBenchmarkImpl> benchmark) { 39 benchmarks_.push_back(benchmark.Pass()); 40 } 41 DidCompleteCommit()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 CleanUpFinishedBenchmarks()53void MicroBenchmarkControllerImpl::CleanUpFinishedBenchmarks() { 54 benchmarks_.erase( 55 benchmarks_.partition(std::not1(IsDonePredicate())), 56 benchmarks_.end()); 57 } 58 59 } // namespace cc 60