1/*
2 * Copyright 2014 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#include "RecordingBench.h"
9
10#include "SkBBHFactory.h"
11#include "SkPictureRecorder.h"
12
13static const int kTileSize = 256;
14
15RecordingBench::RecordingBench(const char* name, const SkPicture* pic, bool useBBH)
16    : fSrc(SkRef(pic))
17    , fName(name)
18    , fUseBBH(useBBH) {}
19
20const char* RecordingBench::onGetName() {
21    return fName.c_str();
22}
23
24bool RecordingBench::isSuitableFor(Backend backend) {
25    return backend == kNonRendering_Backend;
26}
27
28SkIPoint RecordingBench::onGetSize() {
29    return SkIPoint::Make(SkScalarCeilToInt(fSrc->cullRect().width()),
30                          SkScalarCeilToInt(fSrc->cullRect().height()));
31}
32
33void RecordingBench::onDraw(const int loops, SkCanvas*) {
34    SkTileGridFactory::TileGridInfo info;
35    info.fTileInterval.set(kTileSize, kTileSize);
36    info.fMargin.setEmpty();
37    info.fOffset.setZero();
38    SkTileGridFactory factory(info);
39
40    const SkScalar w = fSrc->cullRect().width(),
41                   h = fSrc->cullRect().height();
42
43    for (int i = 0; i < loops; i++) {
44        SkPictureRecorder recorder;
45        fSrc->playback(recorder.beginRecording(w, h, fUseBBH ? &factory : NULL));
46        SkDELETE(recorder.endRecording());
47    }
48}
49