1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "cc/debug/micro_benchmark_controller_impl.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <string> 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/callback.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/values.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "cc/trees/layer_tree_host_impl.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace cc { 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace { 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class IsDonePredicate { 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) typedef const MicroBenchmarkImpl* argument_type; 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) typedef bool result_type; 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) result_type operator()(argument_type benchmark) const { 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return benchmark->IsDone(); 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)MicroBenchmarkControllerImpl::MicroBenchmarkControllerImpl( 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LayerTreeHostImpl* host) 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : host_(host) { 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(host_); 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)MicroBenchmarkControllerImpl::~MicroBenchmarkControllerImpl() {} 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void MicroBenchmarkControllerImpl::ScheduleRun( 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<MicroBenchmarkImpl> benchmark) { 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) benchmarks_.push_back(benchmark.Pass()); 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void MicroBenchmarkControllerImpl::DidCompleteCommit() { 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (ScopedPtrVector<MicroBenchmarkImpl>::iterator it = benchmarks_.begin(); 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) it != benchmarks_.end(); 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ++it) { 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!(*it)->IsDone()); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (*it)->DidCompleteCommit(host_); 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CleanUpFinishedBenchmarks(); 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void MicroBenchmarkControllerImpl::CleanUpFinishedBenchmarks() { 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) benchmarks_.erase( 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) benchmarks_.partition(std::not1(IsDonePredicate())), 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) benchmarks_.end()); 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace cc 60