• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
RecordingBench(const char * name,const SkPicture * pic,bool useBBH)13 RecordingBench::RecordingBench(const char* name, const SkPicture* pic, bool useBBH)
14     : fSrc(SkRef(pic))
15     , fName(name)
16     , fUseBBH(useBBH) {}
17 
onGetName()18 const char* RecordingBench::onGetName() {
19     return fName.c_str();
20 }
21 
isSuitableFor(Backend backend)22 bool RecordingBench::isSuitableFor(Backend backend) {
23     return backend == kNonRendering_Backend;
24 }
25 
onGetSize()26 SkIPoint RecordingBench::onGetSize() {
27     return SkIPoint::Make(SkScalarCeilToInt(fSrc->cullRect().width()),
28                           SkScalarCeilToInt(fSrc->cullRect().height()));
29 }
30 
onDraw(int loops,SkCanvas *)31 void RecordingBench::onDraw(int loops, SkCanvas*) {
32     SkRTreeFactory factory;
33     const SkScalar w = fSrc->cullRect().width(),
34                    h = fSrc->cullRect().height();
35 
36     uint32_t flags = SkPictureRecorder::kComputeSaveLayerInfo_RecordFlag
37                    | SkPictureRecorder::kPlaybackDrawPicture_RecordFlag;
38     for (int i = 0; i < loops; i++) {
39         SkPictureRecorder recorder;
40         fSrc->playback(recorder.beginRecording(w, h, fUseBBH ? &factory : nullptr, flags));
41         SkSafeUnref(recorder.endRecording());
42     }
43 }
44