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