diff options
Diffstat (limited to 'bench/RecordingBench.cpp')
-rw-r--r-- | bench/RecordingBench.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/bench/RecordingBench.cpp b/bench/RecordingBench.cpp new file mode 100644 index 0000000000..ee626bc52c --- /dev/null +++ b/bench/RecordingBench.cpp @@ -0,0 +1,48 @@ +/* + * Copyright 2014 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "RecordingBench.h" + +#include "SkBBHFactory.h" +#include "SkPictureRecorder.h" + +static const int kTileSize = 256; + +RecordingBench::RecordingBench(const char* name, const SkPicture* pic, bool useBBH) + : fSrc(SkRef(pic)) + , fName(name) + , fUseBBH(useBBH) {} + +const char* RecordingBench::onGetName() { + return fName.c_str(); +} + +bool RecordingBench::isSuitableFor(Backend backend) { + return backend == kNonRendering_Backend; +} + +SkIPoint RecordingBench::onGetSize() { + return SkIPoint::Make(SkScalarCeilToInt(fSrc->cullRect().width()), + SkScalarCeilToInt(fSrc->cullRect().height())); +} + +void RecordingBench::onDraw(const int loops, SkCanvas*) { + SkTileGridFactory::TileGridInfo info; + info.fTileInterval.set(kTileSize, kTileSize); + info.fMargin.setEmpty(); + info.fOffset.setZero(); + SkTileGridFactory factory(info); + + const SkScalar w = fSrc->cullRect().width(), + h = fSrc->cullRect().height(); + + for (int i = 0; i < loops; i++) { + SkPictureRecorder recorder; + fSrc->playback(recorder.beginRecording(w, h, fUseBBH ? &factory : NULL)); + SkDELETE(recorder.endRecording()); + } +} |