• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2015 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 // A benchmark designed to isolate the constant overheads of picture recording.
9 // We record an empty picture and a picture with one draw op to force memory allocation.
10 
11 #include "Benchmark.h"
12 #include "SkCanvas.h"
13 #include "SkPictureRecorder.h"
14 
15 template <bool kDraw>
16 struct PictureOverheadBench : public Benchmark {
onGetNamePictureOverheadBench17     const char* onGetName() override {
18         return kDraw ? "picture_overhead_draw" : "picture_overhead_nodraw";
19     }
isSuitableForPictureOverheadBench20     bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; }
21 
onDrawPictureOverheadBench22     void onDraw(const int loops, SkCanvas*) override {
23         SkPictureRecorder rec;
24         for (int i = 0; i < loops; i++) {
25             rec.beginRecording(SkRect::MakeWH(2000,3000));
26             if (kDraw) {
27                 rec.getRecordingCanvas()->drawRect(SkRect::MakeXYWH(10, 10, 1000, 1000), SkPaint());
28             }
29             SkAutoTUnref<SkPicture> pic(rec.endRecordingAsPicture());
30         }
31     }
32 };
33 
34 DEF_BENCH(return (new PictureOverheadBench<false>);)
35 DEF_BENCH(return (new PictureOverheadBench< true>);)
36