Home | History | Annotate | Download | only in bench
      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 {
     17     const char* onGetName() override {
     18         return kDraw ? "picture_overhead_draw" : "picture_overhead_nodraw";
     19     }
     20     bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; }
     21 
     22     void onDraw(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