|  | /* | 
|  | * 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 "bench/RecordingBench.h" | 
|  | #include "include/core/SkBBHFactory.h" | 
|  | #include "include/core/SkPictureRecorder.h" | 
|  |  | 
|  | PictureCentricBench::PictureCentricBench(const char* name, const SkPicture* pic) : fName(name) { | 
|  | // Flatten the source picture in case it's trivially nested (useless for timing). | 
|  | SkPictureRecorder rec; | 
|  | pic->playback(rec.beginRecording(pic->cullRect(), nullptr /*, | 
|  | SkPictureRecorder::kPlaybackDrawPicture_RecordFlag*/)); | 
|  | fSrc = rec.finishRecordingAsPicture(); | 
|  | } | 
|  |  | 
|  | const char* PictureCentricBench::onGetName() { | 
|  | return fName.c_str(); | 
|  | } | 
|  |  | 
|  | bool PictureCentricBench::isSuitableFor(Backend backend) { | 
|  | return backend == kNonRendering_Backend; | 
|  | } | 
|  |  | 
|  | SkIPoint PictureCentricBench::onGetSize() { | 
|  | return SkIPoint::Make(SkScalarCeilToInt(fSrc->cullRect().width()), | 
|  | SkScalarCeilToInt(fSrc->cullRect().height())); | 
|  | } | 
|  |  | 
|  | /////////////////////////////////////////////////////////////////////////////////////////////////// | 
|  |  | 
|  | RecordingBench::RecordingBench(const char* name, const SkPicture* pic, bool useBBH) | 
|  | : INHERITED(name, pic) | 
|  | , fUseBBH(useBBH) | 
|  | {} | 
|  |  | 
|  | void RecordingBench::onDraw(int loops, SkCanvas*) { | 
|  | SkRTreeFactory factory; | 
|  | SkPictureRecorder recorder; | 
|  | while (loops --> 0) { | 
|  | fSrc->playback(recorder.beginRecording(fSrc->cullRect(), fUseBBH ? &factory : nullptr)); | 
|  | (void)recorder.finishRecordingAsPicture(); | 
|  | } | 
|  | } | 
|  |  | 
|  | /////////////////////////////////////////////////////////////////////////////////////////////////// | 
|  | #include "include/core/SkSerialProcs.h" | 
|  |  | 
|  | DeserializePictureBench::DeserializePictureBench(const char* name, sk_sp<SkData> data) | 
|  | : fName(name) | 
|  | , fEncodedPicture(std::move(data)) | 
|  | {} | 
|  |  | 
|  | const char* DeserializePictureBench::onGetName() { | 
|  | return fName.c_str(); | 
|  | } | 
|  |  | 
|  | bool DeserializePictureBench::isSuitableFor(Backend backend) { | 
|  | return backend == kNonRendering_Backend; | 
|  | } | 
|  |  | 
|  | SkIPoint DeserializePictureBench::onGetSize() { | 
|  | return SkIPoint::Make(128, 128); | 
|  | } | 
|  |  | 
|  | void DeserializePictureBench::onDraw(int loops, SkCanvas*) { | 
|  | for (int i = 0; i < loops; ++i) { | 
|  | SkPicture::MakeFromData(fEncodedPicture.get()); | 
|  | } | 
|  | } |