1fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch// found in the LICENSE file. 4fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 5fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#ifndef SKIA_EXT_BENCHMARKING_CANVAS_H_ 6fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#define SKIA_EXT_BENCHMARKING_CANVAS_H_ 7fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 8fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "base/compiler_specific.h" 9fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "skia/ext/refptr.h" 10fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "third_party/skia/include/utils/SkNWayCanvas.h" 11fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "third_party/skia/src/utils/debugger/SkDebugCanvas.h" 12fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 13fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdochnamespace skia { 14fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 15fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdochclass TimingCanvas; 16fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 17fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdochclass SK_API BenchmarkingCanvas : public SkNWayCanvas { 18fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdochpublic: 19fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch BenchmarkingCanvas(int width, int height); 20fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch virtual ~BenchmarkingCanvas(); 21fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 22fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // Returns the number of draw commands executed on this canvas. 23fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch size_t CommandCount() const; 24fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 25fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // Get draw command info for a given index. 26fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch SkDrawCommand* GetCommand(size_t index); 27fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 28fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // Return the recorded render time (milliseconds) for a draw command index. 29fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch double GetTime(size_t index); 30fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 31fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdochprivate: 32fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // In order to avoid introducing a Skia version dependency, this 33fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // implementation dispatches draw commands in lock-step to two distinct 34fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // canvases: 35fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // * a SkDebugCanvas used for gathering command info and tracking 36fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // the current command index 37fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // * a SkiaTimingCanvas used for measuring raster paint times (and relying 38fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // on the former for tracking the current command index). 39fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // 40fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // This way, if the SkCanvas API is extended, we don't need to worry about 41fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // updating content::SkiaTimingCanvas to accurately override all new methods 42fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // (to avoid timing info indices from getting out of sync), as SkDebugCanvas 43fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // already does that for us. 44fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 45fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch skia::RefPtr<SkDebugCanvas> debug_canvas_; 46fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch skia::RefPtr<TimingCanvas> timing_canvas_; 47fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch}; 48fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 49fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch} 50fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#endif // SKIA_EXT_BENCHMARKING_CANVAS_H 51