14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef CC_DEBUG_PICTURE_RECORD_BENCHMARK_H_
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define CC_DEBUG_PICTURE_RECORD_BENCHMARK_H_
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <map>
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <utility>
108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include <vector>
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/time/time.h"
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/debug/micro_benchmark_controller.h"
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace cc {
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class LayerTreeHost;
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Layer;
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class CC_EXPORT PictureRecordBenchmark : public MicroBenchmark {
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public:
218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  explicit PictureRecordBenchmark(scoped_ptr<base::Value> value,
228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)                                  const MicroBenchmark::DoneCallback& callback);
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual ~PictureRecordBenchmark();
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Implements MicroBenchmark interface.
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void DidUpdateLayers(LayerTreeHost* host) OVERRIDE;
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void RunOnLayer(PictureLayer* layer) OVERRIDE;
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private:
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  void Run(Layer* layer);
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  typedef std::pair<base::TimeDelta, unsigned> TotalTime;
338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  std::map<std::pair<int, int>, TotalTime> times_;
348bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  std::vector<std::pair<int, int> > dimensions_;
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)};
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace cc
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif  // CC_DEBUG_PICTURE_RECORD_BENCHMARK_H_
40