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
15template <bool kDraw>
16struct 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(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
34DEF_BENCH(return (new PictureOverheadBench<false>);)
35DEF_BENCH(return (new PictureOverheadBench< true>);)
36