1649e0451708b72d467e3a0ea4a71720699330c12mtklein/* 2649e0451708b72d467e3a0ea4a71720699330c12mtklein * Copyright 2015 Google Inc. 3649e0451708b72d467e3a0ea4a71720699330c12mtklein * 4649e0451708b72d467e3a0ea4a71720699330c12mtklein * Use of this source code is governed by a BSD-style license that can be 5649e0451708b72d467e3a0ea4a71720699330c12mtklein * found in the LICENSE file. 6649e0451708b72d467e3a0ea4a71720699330c12mtklein */ 7649e0451708b72d467e3a0ea4a71720699330c12mtklein 8649e0451708b72d467e3a0ea4a71720699330c12mtklein// A benchmark designed to isolate the constant overheads of picture recording. 9f559de433890e55d3cce909fac2e0d1fb17327fdmtklein// We record an empty picture and a picture with one draw op to force memory allocation. 10649e0451708b72d467e3a0ea4a71720699330c12mtklein 11649e0451708b72d467e3a0ea4a71720699330c12mtklein#include "Benchmark.h" 12649e0451708b72d467e3a0ea4a71720699330c12mtklein#include "SkCanvas.h" 13649e0451708b72d467e3a0ea4a71720699330c12mtklein#include "SkPictureRecorder.h" 14649e0451708b72d467e3a0ea4a71720699330c12mtklein 15f559de433890e55d3cce909fac2e0d1fb17327fdmtkleintemplate <bool kDraw> 16649e0451708b72d467e3a0ea4a71720699330c12mtkleinstruct PictureOverheadBench : public Benchmark { 17f559de433890e55d3cce909fac2e0d1fb17327fdmtklein const char* onGetName() override { 18f559de433890e55d3cce909fac2e0d1fb17327fdmtklein return kDraw ? "picture_overhead_draw" : "picture_overhead_nodraw"; 19f559de433890e55d3cce909fac2e0d1fb17327fdmtklein } 20649e0451708b72d467e3a0ea4a71720699330c12mtklein bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; } 21649e0451708b72d467e3a0ea4a71720699330c12mtklein 22649e0451708b72d467e3a0ea4a71720699330c12mtklein void onDraw(const int loops, SkCanvas*) override { 23649e0451708b72d467e3a0ea4a71720699330c12mtklein SkPictureRecorder rec; 24649e0451708b72d467e3a0ea4a71720699330c12mtklein for (int i = 0; i < loops; i++) { 25f559de433890e55d3cce909fac2e0d1fb17327fdmtklein rec.beginRecording(SkRect::MakeWH(2000,3000)); 26f559de433890e55d3cce909fac2e0d1fb17327fdmtklein if (kDraw) { 27f559de433890e55d3cce909fac2e0d1fb17327fdmtklein rec.getRecordingCanvas()->drawRect(SkRect::MakeXYWH(10, 10, 1000, 1000), SkPaint()); 28f559de433890e55d3cce909fac2e0d1fb17327fdmtklein } 29649e0451708b72d467e3a0ea4a71720699330c12mtklein SkAutoTUnref<SkPicture> pic(rec.endRecordingAsPicture()); 30649e0451708b72d467e3a0ea4a71720699330c12mtklein } 31649e0451708b72d467e3a0ea4a71720699330c12mtklein } 32649e0451708b72d467e3a0ea4a71720699330c12mtklein}; 33f559de433890e55d3cce909fac2e0d1fb17327fdmtklein 34f559de433890e55d3cce909fac2e0d1fb17327fdmtkleinDEF_BENCH(return (new PictureOverheadBench<false>);) 35f559de433890e55d3cce909fac2e0d1fb17327fdmtkleinDEF_BENCH(return (new PictureOverheadBench< true>);) 36