aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/PictureOverheadBench.cpp
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-03-06 14:14:09 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-03-06 21:45:02 +0000
commit3802888e2a87e130dcadbfac7802455ece13093f (patch)
tree05fdb450e3d5b593a532517750ab87fc9baecafd /bench/PictureOverheadBench.cpp
parent05a429614ec3206f9d2b7c145cbda0b5a442b6d0 (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.cpp53
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); )