| Index: content/renderer/all_rendering_benchmarks.cc
 | 
| diff --git a/content/renderer/all_rendering_benchmarks.cc b/content/renderer/all_rendering_benchmarks.cc
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..6039329c4d10942e5d621e1e756fb8300c4cb51b
 | 
| --- /dev/null
 | 
| +++ b/content/renderer/all_rendering_benchmarks.cc
 | 
| @@ -0,0 +1,112 @@
 | 
| +// Copyright (c) 2012 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 "content/renderer/all_rendering_benchmarks.h"
 | 
| +
 | 
| +#include <string>
 | 
| +
 | 
| +#include "base/bind.h"
 | 
| +#include "base/callback.h"
 | 
| +#include "base/compiler_specific.h"
 | 
| +#include "base/time.h"
 | 
| +#include "content/renderer/rendering_benchmark.h"
 | 
| +#include "content/renderer/rendering_benchmark_results.h"
 | 
| +#include "third_party/skia/include/core/SkBitmap.h"
 | 
| +#include "third_party/skia/include/core/SkDevice.h"
 | 
| +#include "third_party/skia/include/utils/SkNullCanvas.h"
 | 
| +#include "third_party/WebKit/Source/Platform/chromium/public/WebCanvas.h"
 | 
| +#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
 | 
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebViewBenchmarkSupport.h"
 | 
| +
 | 
| +using base::TimeDelta;
 | 
| +using base::TimeTicks;
 | 
| +using WebKit::WebSize;
 | 
| +using WebKit::WebCanvas;
 | 
| +using WebKit::WebViewBenchmarkSupport;
 | 
| +
 | 
| +namespace {
 | 
| +
 | 
| +class CustomPaintBenchmark
 | 
| +    : public content::RenderingBenchmark,
 | 
| +      public WebViewBenchmarkSupport::PaintClient {
 | 
| + public:
 | 
| +  CustomPaintBenchmark(const std::string& name,
 | 
| +                       WebViewBenchmarkSupport::PaintMode paint_mode)
 | 
| +      : content::RenderingBenchmark(name),
 | 
| +        paint_mode_(paint_mode) { }
 | 
| +
 | 
| +  virtual WebCanvas* willPaint(const WebSize& size) OVERRIDE {
 | 
| +    WebCanvas* canvas = createCanvas(size);
 | 
| +    before_time_ = TimeTicks::Now();
 | 
| +    return canvas;
 | 
| +  }
 | 
| +
 | 
| +  virtual void didPaint(WebCanvas* canvas) OVERRIDE {
 | 
| +    paint_time_total_ += (TimeTicks::Now() - before_time_);
 | 
| +    delete canvas;
 | 
| +  }
 | 
| +
 | 
| +  virtual void Run(content::RenderingBenchmarkResults* results,
 | 
| +                   WebViewBenchmarkSupport* support) {
 | 
| +    paint_time_total_ = TimeDelta();
 | 
| +    support->paint(this, paint_mode_);
 | 
| +    results->AddResult(name(),
 | 
| +                       "paintTime",
 | 
| +                       "s",
 | 
| +                       paint_time_total_.InSecondsF());
 | 
| +  }
 | 
| +
 | 
| + private:
 | 
| +  virtual WebCanvas* createCanvas(const WebSize& size) = 0;
 | 
| +
 | 
| +  TimeTicks before_time_;
 | 
| +  TimeDelta paint_time_total_;
 | 
| +  const WebViewBenchmarkSupport::PaintMode paint_mode_;
 | 
| +};
 | 
| +
 | 
| +class BitmapCanvasPaintBenchmark : public CustomPaintBenchmark {
 | 
| + public:
 | 
| +  BitmapCanvasPaintBenchmark(const std::string& name,
 | 
| +                             WebViewBenchmarkSupport::PaintMode paint_mode)
 | 
| +      : CustomPaintBenchmark(name, paint_mode) { }
 | 
| +
 | 
| + private:
 | 
| +  virtual WebCanvas* createCanvas(const WebSize& size) OVERRIDE {
 | 
| +    SkDevice* device = new SkDevice(SkBitmap::kARGB_8888_Config,
 | 
| +                                    size.width,
 | 
| +                                    size.height,
 | 
| +                                    false);
 | 
| +    WebCanvas* canvas = new WebCanvas(device);
 | 
| +    device->unref();
 | 
| +    return canvas;
 | 
| +  }
 | 
| +};
 | 
| +
 | 
| +class NullCanvasPaintBenchmark : public CustomPaintBenchmark {
 | 
| + public:
 | 
| +  NullCanvasPaintBenchmark(const std::string& name,
 | 
| +                           WebViewBenchmarkSupport::PaintMode paint_mode)
 | 
| +      : CustomPaintBenchmark(name, paint_mode) { }
 | 
| +
 | 
| + private:
 | 
| +  virtual WebCanvas* createCanvas(const WebSize& size) OVERRIDE {
 | 
| +    return SkCreateNullCanvas();
 | 
| +  }
 | 
| +};
 | 
| +}  // anonymous namespace
 | 
| +
 | 
| +namespace content {
 | 
| +
 | 
| +ScopedVector<RenderingBenchmark> AllRenderingBenchmarks() {
 | 
| +  ScopedVector<RenderingBenchmark> benchmarks;
 | 
| +  benchmarks.push_back(new BitmapCanvasPaintBenchmark(
 | 
| +      "PaintEverythingToBitmap",
 | 
| +      WebViewBenchmarkSupport::PaintModeEverything));
 | 
| +  benchmarks.push_back(new NullCanvasPaintBenchmark(
 | 
| +      "PaintEverythingToNullCanvas",
 | 
| +      WebViewBenchmarkSupport::PaintModeEverything));
 | 
| +  return benchmarks.Pass();
 | 
| +}
 | 
| +
 | 
| +}  // namespace content
 | 
| 
 |