aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@chromium.org>2016-08-10 12:09:34 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-08-10 12:09:34 -0700
commit1d65fe293241cfeb405b1724371d6c532bcee55f (patch)
tree398a1eb2e3442b50908d308ff066bcc00249ba46
parentf5a83e818483ef910ffd107df8f98b5ee24671f5 (diff)
In recording benches, record to and from the same format.
The recording bench must record some source material into some sort of display list, and fundamentally cannot separate the timing of the two. This CL makes it so the source material and display list are of the same type. So instead of previous: --nolite: SkRecord-based picture -> SkRecord-based picture --lite: SkRecord-based picture -> threadsafe SkLiteDL Now this times --nolite: SkRecord-based picture -> SkRecord-based picture --lite: SkLiteDL -> threadsafe SkLiteDL This makes it easier to profile SkLiteDL and explore both recording and playback overhead hot spots. The threadsafety is incidental for the source (and doesn't affect playback speed), but I think it's handy to keep around on the destination to make a more fair comparison. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2230323002 Review-Url: https://codereview.chromium.org/2230323002
-rw-r--r--bench/RecordingBench.cpp15
-rw-r--r--bench/RecordingBench.h3
2 files changed, 13 insertions, 5 deletions
diff --git a/bench/RecordingBench.cpp b/bench/RecordingBench.cpp
index 030bcc8415..d8034ce5d5 100644
--- a/bench/RecordingBench.cpp
+++ b/bench/RecordingBench.cpp
@@ -13,13 +13,20 @@
RecordingBench::RecordingBench(const char* name, const SkPicture* pic, bool useBBH, bool lite)
: fName(name)
- , fUseBBH(useBBH)
- , fLite(lite) {
+ , fUseBBH(useBBH) {
// 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();
+
+ // If we're recording into an SkLiteDL, also record _from_ one.
+ if (lite) {
+ fDL = SkLiteDL::New(pic->cullRect());
+ SkLiteRecorder r;
+ r.reset(fDL.get());
+ fSrc->playback(&r);
+ }
}
const char* RecordingBench::onGetName() {
@@ -36,12 +43,12 @@ SkIPoint RecordingBench::onGetSize() {
}
void RecordingBench::onDraw(int loops, SkCanvas*) {
- if (fLite) {
+ if (fDL) {
SkLiteRecorder rec;
while (loops --> 0) {
sk_sp<SkLiteDL> dl = SkLiteDL::New(fSrc->cullRect());
rec.reset(dl.get());
- fSrc->playback(&rec);
+ fDL->draw(&rec);
dl->makeThreadsafe();
}
diff --git a/bench/RecordingBench.h b/bench/RecordingBench.h
index a5793b3ac9..8e0e12ee96 100644
--- a/bench/RecordingBench.h
+++ b/bench/RecordingBench.h
@@ -10,6 +10,7 @@
#include "Benchmark.h"
#include "SkPicture.h"
+#include "SkLiteDL.h"
class RecordingBench : public Benchmark {
public:
@@ -24,8 +25,8 @@ protected:
private:
sk_sp<const SkPicture> fSrc;
SkString fName;
+ sk_sp<SkLiteDL> fDL;
bool fUseBBH;
- bool fLite;
typedef Benchmark INHERITED;
};