1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2014 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "bench/RecordingBench.h" 9cb93a386Sopenharmony_ci#include "include/core/SkBBHFactory.h" 10cb93a386Sopenharmony_ci#include "include/core/SkPictureRecorder.h" 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_ciPictureCentricBench::PictureCentricBench(const char* name, const SkPicture* pic) : fName(name) { 13cb93a386Sopenharmony_ci // Flatten the source picture in case it's trivially nested (useless for timing). 14cb93a386Sopenharmony_ci SkPictureRecorder rec; 15cb93a386Sopenharmony_ci pic->playback(rec.beginRecording(pic->cullRect(), nullptr /*, 16cb93a386Sopenharmony_ci SkPictureRecorder::kPlaybackDrawPicture_RecordFlag*/)); 17cb93a386Sopenharmony_ci fSrc = rec.finishRecordingAsPicture(); 18cb93a386Sopenharmony_ci} 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ciconst char* PictureCentricBench::onGetName() { 21cb93a386Sopenharmony_ci return fName.c_str(); 22cb93a386Sopenharmony_ci} 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_cibool PictureCentricBench::isSuitableFor(Backend backend) { 25cb93a386Sopenharmony_ci return backend == kNonRendering_Backend; 26cb93a386Sopenharmony_ci} 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_ciSkIPoint PictureCentricBench::onGetSize() { 29cb93a386Sopenharmony_ci return SkIPoint::Make(SkScalarCeilToInt(fSrc->cullRect().width()), 30cb93a386Sopenharmony_ci SkScalarCeilToInt(fSrc->cullRect().height())); 31cb93a386Sopenharmony_ci} 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_ci/////////////////////////////////////////////////////////////////////////////////////////////////// 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ciRecordingBench::RecordingBench(const char* name, const SkPicture* pic, bool useBBH) 36cb93a386Sopenharmony_ci : INHERITED(name, pic) 37cb93a386Sopenharmony_ci , fUseBBH(useBBH) 38cb93a386Sopenharmony_ci{} 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_civoid RecordingBench::onDraw(int loops, SkCanvas*) { 41cb93a386Sopenharmony_ci SkRTreeFactory factory; 42cb93a386Sopenharmony_ci SkPictureRecorder recorder; 43cb93a386Sopenharmony_ci while (loops --> 0) { 44cb93a386Sopenharmony_ci fSrc->playback(recorder.beginRecording(fSrc->cullRect(), fUseBBH ? &factory : nullptr)); 45cb93a386Sopenharmony_ci (void)recorder.finishRecordingAsPicture(); 46cb93a386Sopenharmony_ci } 47cb93a386Sopenharmony_ci} 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_ci/////////////////////////////////////////////////////////////////////////////////////////////////// 50cb93a386Sopenharmony_ci#include "include/core/SkSerialProcs.h" 51cb93a386Sopenharmony_ci 52cb93a386Sopenharmony_ciDeserializePictureBench::DeserializePictureBench(const char* name, sk_sp<SkData> data) 53cb93a386Sopenharmony_ci : fName(name) 54cb93a386Sopenharmony_ci , fEncodedPicture(std::move(data)) 55cb93a386Sopenharmony_ci{} 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ciconst char* DeserializePictureBench::onGetName() { 58cb93a386Sopenharmony_ci return fName.c_str(); 59cb93a386Sopenharmony_ci} 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_cibool DeserializePictureBench::isSuitableFor(Backend backend) { 62cb93a386Sopenharmony_ci return backend == kNonRendering_Backend; 63cb93a386Sopenharmony_ci} 64cb93a386Sopenharmony_ci 65cb93a386Sopenharmony_ciSkIPoint DeserializePictureBench::onGetSize() { 66cb93a386Sopenharmony_ci return SkIPoint::Make(128, 128); 67cb93a386Sopenharmony_ci} 68cb93a386Sopenharmony_ci 69cb93a386Sopenharmony_civoid DeserializePictureBench::onDraw(int loops, SkCanvas*) { 70cb93a386Sopenharmony_ci for (int i = 0; i < loops; ++i) { 71cb93a386Sopenharmony_ci SkPicture::MakeFromData(fEncodedPicture.get()); 72cb93a386Sopenharmony_ci } 73cb93a386Sopenharmony_ci} 74