// 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. #include "cc/debug/unittest_only_benchmark.h" #include "base/bind.h" #include "base/message_loop/message_loop_proxy.h" #include "base/values.h" #include "cc/debug/unittest_only_benchmark_impl.h" namespace cc { UnittestOnlyBenchmark::UnittestOnlyBenchmark(scoped_ptr value, const DoneCallback& callback) : MicroBenchmark(callback), create_impl_benchmark_(false), weak_ptr_factory_(this) { if (!value) return; base::DictionaryValue* settings = nullptr; value->GetAsDictionary(&settings); if (!settings) return; if (settings->HasKey("run_benchmark_impl")) settings->GetBoolean("run_benchmark_impl", &create_impl_benchmark_); } UnittestOnlyBenchmark::~UnittestOnlyBenchmark() { weak_ptr_factory_.InvalidateWeakPtrs(); } void UnittestOnlyBenchmark::DidUpdateLayers(LayerTreeHost* host) { NotifyDone(nullptr); } bool UnittestOnlyBenchmark::ProcessMessage(scoped_ptr value) { base::DictionaryValue* message = nullptr; value->GetAsDictionary(&message); bool can_handle; if (message->HasKey("can_handle")) { message->GetBoolean("can_handle", &can_handle); if (can_handle) return true; } return false; } void UnittestOnlyBenchmark::RecordImplResults(scoped_ptr results) { NotifyDone(results.Pass()); } scoped_ptr UnittestOnlyBenchmark::CreateBenchmarkImpl( scoped_refptr origin_loop) { if (!create_impl_benchmark_) return make_scoped_ptr(nullptr); return make_scoped_ptr(new UnittestOnlyBenchmarkImpl( origin_loop, nullptr, base::Bind(&UnittestOnlyBenchmark::RecordImplResults, weak_ptr_factory_.GetWeakPtr()))); } } // namespace cc