blob: d8034ce5d5f3cc174743a8b0ca28f3935ec90422 [file] [log] [blame]
mtkleinfd731ce2014-09-10 12:19:30 -07001/*
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"
mtkleinfd731ce2014-09-10 12:19:30 -07009#include "SkBBHFactory.h"
mtklein8c1a4f82016-08-08 06:56:22 -070010#include "SkLiteDL.h"
11#include "SkLiteRecorder.h"
mtkleinfd731ce2014-09-10 12:19:30 -070012#include "SkPictureRecorder.h"
13
mtklein8c1a4f82016-08-08 06:56:22 -070014RecordingBench::RecordingBench(const char* name, const SkPicture* pic, bool useBBH, bool lite)
15 : fName(name)
mtklein1d65fe22016-08-10 12:09:34 -070016 , fUseBBH(useBBH) {
mtklein8c1a4f82016-08-08 06:56:22 -070017 // Flatten the source picture in case it's trivially nested (useless for timing).
18 SkPictureRecorder rec;
19 pic->playback(rec.beginRecording(pic->cullRect(), nullptr,
20 SkPictureRecorder::kPlaybackDrawPicture_RecordFlag));
21 fSrc = rec.finishRecordingAsPicture();
mtklein1d65fe22016-08-10 12:09:34 -070022
23 // If we're recording into an SkLiteDL, also record _from_ one.
24 if (lite) {
25 fDL = SkLiteDL::New(pic->cullRect());
26 SkLiteRecorder r;
27 r.reset(fDL.get());
28 fSrc->playback(&r);
29 }
mtklein8c1a4f82016-08-08 06:56:22 -070030}
mtkleinfd731ce2014-09-10 12:19:30 -070031
32const char* RecordingBench::onGetName() {
33 return fName.c_str();
34}
35
36bool RecordingBench::isSuitableFor(Backend backend) {
37 return backend == kNonRendering_Backend;
38}
39
40SkIPoint RecordingBench::onGetSize() {
41 return SkIPoint::Make(SkScalarCeilToInt(fSrc->cullRect().width()),
42 SkScalarCeilToInt(fSrc->cullRect().height()));
43}
44
mtkleina1ebeb22015-10-01 09:43:39 -070045void RecordingBench::onDraw(int loops, SkCanvas*) {
mtklein1d65fe22016-08-10 12:09:34 -070046 if (fDL) {
mtklein8c1a4f82016-08-08 06:56:22 -070047 SkLiteRecorder rec;
48 while (loops --> 0) {
49 sk_sp<SkLiteDL> dl = SkLiteDL::New(fSrc->cullRect());
50 rec.reset(dl.get());
mtklein1d65fe22016-08-10 12:09:34 -070051 fDL->draw(&rec);
mtklein8c1a4f82016-08-08 06:56:22 -070052 dl->makeThreadsafe();
53 }
mtkleinfd731ce2014-09-10 12:19:30 -070054
mtklein8c1a4f82016-08-08 06:56:22 -070055 } else {
56 SkRTreeFactory factory;
mtkleinfd731ce2014-09-10 12:19:30 -070057 SkPictureRecorder recorder;
mtklein8c1a4f82016-08-08 06:56:22 -070058 while (loops --> 0) {
59 fSrc->playback(recorder.beginRecording(fSrc->cullRect(), fUseBBH ? &factory : nullptr));
60 (void)recorder.finishRecordingAsPicture();
61 }
mtkleinfd731ce2014-09-10 12:19:30 -070062 }
63}