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 13RecordingBench::RecordingBench(const char* name, const SkPicture* pic, bool useBBH) 14 : fSrc(SkRef(pic)) 15 , fName(name) 16 , fUseBBH(useBBH) {} 17 18const char* RecordingBench::onGetName() { 19 return fName.c_str(); 20} 21 22bool RecordingBench::isSuitableFor(Backend backend) { 23 return backend == kNonRendering_Backend; 24} 25 26SkIPoint RecordingBench::onGetSize() { 27 return SkIPoint::Make(SkScalarCeilToInt(fSrc->cullRect().width()), 28 SkScalarCeilToInt(fSrc->cullRect().height())); 29} 30 31void 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