diff options
author | Mike Reed <reed@google.com> | 2017-03-06 14:14:09 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-03-06 21:45:02 +0000 |
commit | 3802888e2a87e130dcadbfac7802455ece13093f (patch) | |
tree | 05fdb450e3d5b593a532517750ab87fc9baecafd /bench/PictureOverheadBench.cpp | |
parent | 05a429614ec3206f9d2b7c145cbda0b5a442b6d0 (diff) |
bench clip overhead during recording
BUG=skia:
Change-Id: I739c5a7f44380e1218627b1b6430a03950ae84aa
Reviewed-on: https://skia-review.googlesource.com/9309
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'bench/PictureOverheadBench.cpp')
-rw-r--r-- | bench/PictureOverheadBench.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/bench/PictureOverheadBench.cpp b/bench/PictureOverheadBench.cpp index 1fea9e927c..8489ab8ae2 100644 --- a/bench/PictureOverheadBench.cpp +++ b/bench/PictureOverheadBench.cpp @@ -61,3 +61,56 @@ DEF_BENCH(return (new PictureOverheadBench<0, true>);) DEF_BENCH(return (new PictureOverheadBench<1, true>);) DEF_BENCH(return (new PictureOverheadBench<2, true>);) DEF_BENCH(return (new PictureOverheadBench<10, true>);) + +/////////////////////////////////////////////////////////////////////////////////////////////////// + +class ClipOverheadRecordingBench : public Benchmark { + SkString fName; + const bool fDoLite; + +public: + ClipOverheadRecordingBench(bool doLite) : fDoLite(doLite) { + fName.printf("clip_overhead_recording_%s", doLite ? "lite" : "std"); + } + +protected: + const char* onGetName() override { return fName.c_str(); } + bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; } + + void onDraw(int loops, SkCanvas*) override { + SkLiteRecorder lite; + SkPictureRecorder rec; + + SkIRect iBounds = {0,0, 2000,3000}; + SkRect bounds = SkRect::Make(iBounds); + + for (int i = 0; i < loops; i++) { + SkLiteDL liteDL; + SkCanvas* canvas; + if (fDoLite) { + lite.reset(&liteDL, iBounds); + canvas = &lite; + } else { + rec.beginRecording(bounds); + canvas = rec.getRecordingCanvas(); + } + + SkPaint paint; + SkRRect rrect; + rrect.setOval({0, 0, 1000, 1000}); + for (int i = 0; i < 1000; i++) { + canvas->save(); + canvas->translate(10, 10); + canvas->clipRect({10,10, 1000, 1000}); + canvas->drawRRect(rrect, paint); + canvas->restore(); + } + + if (!fDoLite) { + (void)rec.finishRecordingAsPicture(); + } + } + } +}; +DEF_BENCH( return new ClipOverheadRecordingBench(true); ) +DEF_BENCH( return new ClipOverheadRecordingBench(false); ) |