aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@chromium.org>2016-08-08 06:56:22 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-08-08 06:56:22 -0700
commit8c1a4f80d9b2aeb039623128a23223233842fc71 (patch)
tree34dbbcdc0713a32ea5b5ffcb559b02ca5f91acb7 /bench
parent1413d52c539a1c687d3bf4412ebc76367ca22bb9 (diff)
update picture recording benchmarks to allow comparison with SkLiteRecorder
Here's a demo. The new code is still looking 2-3x faster. ~/skia (bench) $ r nanobench --match nytimes --config nonrendering --ms 2000 curr/maxrss loops min median mean max stddev samples config bench 19/26 MB 2 146µs 147µs 151µs 422µs 9% 6615 nonrendering desk_nytimes.skp 20/26 MB 4 46.6µs 46.9µs 48.2µs 204µs 10% 10370 nonrendering keymobi_nytimes_com_.skp ~/skia (bench) $ r nanobench --match nytimes --config nonrendering --ms 2000 --lite curr/maxrss loops min median mean max stddev samples config bench 19/26 MB 2 73.8µs 76.9µs 78.7µs 417µs 14% 12702 nonrendering desk_nytimes.skp 20/26 MB 5 18.5µs 18.7µs 19.3µs 137µs 12% 20713 nonrendering keymobi_nytimes_com_.skp Here's a quick performance diff, where <1x means --lite is faster: top25desk_wikipedia__1_tab_.skp 285us -> 364us 1.27x top25desk_games_yahoo_com.skp 302us -> 329us 1.09x tabl_mozilla.skp 241us -> 260us 1.08x desk_chalkboard.skp 321us -> 313us 0.98x tabl_gamedeksiam.skp 383us -> 367us 0.96x top25desk_pinterest.skp 375us -> 281us 0.75x keymobi_reddit_com_r_programmin.skp 258us -> 142us 0.55x desk_nytimes.skp 149us -> 77.9us 0.52x keymobi_worldjournal_com_.skp 201us -> 104us 0.52x top25desk_blogger.skp 112us -> 55us 0.49x top25desk_sports_yahoo_com_.skp 186us -> 89.6us 0.48x desk_googlespreadsheet.skp 206us -> 97.5us 0.47x top25desk_google_com_search_q_c.skp 192us -> 89.8us 0.47x keymobi_wikipedia__1_tab_.skp 170us -> 79.3us 0.47x keymobi_wikipedia__1_tab____del.skp 170us -> 78.2us 0.46x desk_unicodetable.skp 6.25ms -> 2.87ms 0.46x desk_carsvg.skp 138us -> 63.3us 0.46x top25desk_answers_yahoo_com.skp 133us -> 60.7us 0.46x top25desk_espn.skp 108us -> 49.2us 0.45x top25desk_plus_google_com_11003.skp 361us -> 162us 0.45x desk_espn.skp 99.4us -> 44.5us 0.45x tabl_worldjournal.skp 103us -> 45.6us 0.44x desk_ugamsolutions.skp 56.2us -> 24.8us 0.44x top25desk_facebook.skp 82.7us -> 35.7us 0.43x keymobi_cuteoverload_com.skp 213us -> 91.9us 0.43x top25desk_linkedin.skp 61.3us -> 26.3us 0.43x top25desk_news_yahoo_com.skp 153us -> 65.6us 0.43x desk_gmailthread.skp 64.9us -> 27.8us 0.43x keymobi_androidpolice_com_2012_.skp 167us -> 71.3us 0.43x top25desk_amazon_com.skp 77.5us -> 33.1us 0.43x desk_wowwiki.skp 129us -> 54.1us 0.42x top25desk_weather_com.skp 113us -> 47.1us 0.42x keymobi_facebook_com_barackobam.skp 95.2us -> 39.6us 0.42x keymobi_shop_mobileweb_ebay_com.skp 31.5us -> 13.1us 0.42x keymobi_amazon_com_gp_aw_s_ref_.skp 46.1us -> 18.9us 0.41x keymobi_mobile_news_sandbox_goo.skp 90.7us -> 37us 0.41x top25desk_google_com__hl_en_q_b.skp 52.4us -> 21.4us 0.41x keymobi_answers_yahoo_com_quest.skp 96.5us -> 39.3us 0.41x tabl_pravda.skp 126us -> 51.2us 0.41x keymobi_nytimes_com_.skp 46.9us -> 19us 0.4x keymobi_ftw_usatoday_com_2014_0.skp 119us -> 48.2us 0.4x top25desk_youtube_com.skp 162us -> 65.3us 0.4x keymobi_news_yahoo_com.skp 58.1us -> 23.2us 0.4x keymobi_boingboing_net.skp 58.8us -> 23.4us 0.4x keymobi_techcrunch_com.skp 26.3us -> 10.4us 0.39x keymobi_plus_google_com_app_bas.skp 26.9us -> 10.4us 0.38x keymobi_google_co_uk_search_hl_.skp 35.1us -> 13.4us 0.38x keymobi_pinterest.skp 26.2us -> 10us 0.38x keymobi_deviantart_com_.skp 67.1us -> 25.4us 0.38x tabl_gmail.skp 10.3us -> 3.86us 0.38x top25desk_ebay_com.skp 65.6us -> 24.5us 0.37x keymobi_m_youtube_com_watch_v_9.skp 57.9us -> 21.6us 0.37x top25desk_wordpress.skp 138us -> 51.3us 0.37x keymobi_gsp_ro.skp 17us -> 6.34us 0.37x top25desk_techcrunch_com.skp 93.6us -> 34.7us 0.37x keymobi_cnn_com_2012_10_03_poli.skp 232us -> 85.5us 0.37x keymobi_cnn_com.skp 30.5us -> 11.1us 0.37x keymobi_baidu_com_s_wd_barack_o.skp 39.3us -> 14.3us 0.36x keymobi_online_wsj_com_home_pag.skp 50.3us -> 18.3us 0.36x keymobi_digg_com.skp 54.8us -> 19.5us 0.36x keymobi_wowwiki_com_world_of_wa.skp 39.4us -> 14us 0.36x keymobi_theverge_com_2012_10_28.skp 102us -> 36.4us 0.36x tabl_digg.skp 105us -> 37.4us 0.36x top25desk_google_com_calendar_.skp 67.2us -> 23.7us 0.35x keymobi_wordpress.skp 65.3us -> 23us 0.35x desk_css3gradients.skp 56.4us -> 19.8us 0.35x top25desk_mail_google_com_mail_.skp 119us -> 41.6us 0.35x desk_googlehome.skp 8.2us -> 2.85us 0.35x top25desk_docs___1_open_documen.skp 23.8us -> 8.22us 0.35x keymobi_mlb_com_.skp 18.6us -> 6.3us 0.34x keymobi_slashdot_org_.skp 33us -> 11us 0.33x desk_tiger8svg.skp 96.2us -> 32us 0.33x top25desk_twitter.skp 124us -> 40.7us 0.33x keymobi_bing_com_search_q_sloth.skp 17.3us -> 5.55us 0.32x keymobi_linkedin.skp 6.78us -> 1.99us 0.29x top25desk_booking_com.skp 291us -> 83.2us 0.29x keymobi_blogger.skp 19.3us -> 5.47us 0.28x keymobi_sfgate_com_.skp 83.3us -> 23us 0.28x desk_jsfiddlebigcar.skp 10.8us -> 2.95us 0.27x keymobi_theverge_com.skp 22us -> 5.27us 0.24x desk_mapsvg.skp 1.15us -> 216ns 0.19x keymobi_iphone_capitolvolkswage.skp 121us -> 22.3us 0.18x desk_wikipedia.skp 1.36us -> 244ns 0.18x desk_pokemonwiki.skp 1.35us -> 243ns 0.18x desk_samoasvg.skp 1.39us -> 241ns 0.17x desk_tigersvg.skp 1.41us -> 241ns 0.17x keymobi_booking_com_searchresul.skp 129us -> 19.7us 0.15x Some spot testing makes it look like everything that's not a giant speedup can be made so by tweaking my (arbitrarily set) maximum size for the free list. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2220273002 Review-Url: https://codereview.chromium.org/2220273002
Diffstat (limited to 'bench')
-rw-r--r--bench/RecordingBench.cpp40
-rw-r--r--bench/RecordingBench.h5
-rw-r--r--bench/nanobench.cpp3
3 files changed, 32 insertions, 16 deletions
diff --git a/bench/RecordingBench.cpp b/bench/RecordingBench.cpp
index 833bb229cc..030bcc8415 100644
--- a/bench/RecordingBench.cpp
+++ b/bench/RecordingBench.cpp
@@ -6,14 +6,21 @@
*/
#include "RecordingBench.h"
-
#include "SkBBHFactory.h"
+#include "SkLiteDL.h"
+#include "SkLiteRecorder.h"
#include "SkPictureRecorder.h"
-RecordingBench::RecordingBench(const char* name, const SkPicture* pic, bool useBBH)
- : fSrc(SkRef(pic))
- , fName(name)
- , fUseBBH(useBBH) {}
+RecordingBench::RecordingBench(const char* name, const SkPicture* pic, bool useBBH, bool lite)
+ : fName(name)
+ , fUseBBH(useBBH)
+ , fLite(lite) {
+ // 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* RecordingBench::onGetName() {
return fName.c_str();
@@ -29,14 +36,21 @@ SkIPoint RecordingBench::onGetSize() {
}
void RecordingBench::onDraw(int loops, SkCanvas*) {
- SkRTreeFactory factory;
- const SkScalar w = fSrc->cullRect().width(),
- h = fSrc->cullRect().height();
-
- uint32_t flags = SkPictureRecorder::kPlaybackDrawPicture_RecordFlag;
- for (int i = 0; i < loops; i++) {
+ if (fLite) {
+ SkLiteRecorder rec;
+ while (loops --> 0) {
+ sk_sp<SkLiteDL> dl = SkLiteDL::New(fSrc->cullRect());
+ rec.reset(dl.get());
+ fSrc->playback(&rec);
+ dl->makeThreadsafe();
+ }
+
+ } else {
+ SkRTreeFactory factory;
SkPictureRecorder recorder;
- fSrc->playback(recorder.beginRecording(w, h, fUseBBH ? &factory : nullptr, flags));
- (void)recorder.finishRecordingAsPicture();
+ while (loops --> 0) {
+ fSrc->playback(recorder.beginRecording(fSrc->cullRect(), fUseBBH ? &factory : nullptr));
+ (void)recorder.finishRecordingAsPicture();
+ }
}
}
diff --git a/bench/RecordingBench.h b/bench/RecordingBench.h
index 0a8befe2f1..a5793b3ac9 100644
--- a/bench/RecordingBench.h
+++ b/bench/RecordingBench.h
@@ -13,7 +13,7 @@
class RecordingBench : public Benchmark {
public:
- RecordingBench(const char* name, const SkPicture*, bool useBBH);
+ RecordingBench(const char* name, const SkPicture*, bool useBBH, bool lite);
protected:
const char* onGetName() override;
@@ -22,9 +22,10 @@ protected:
SkIPoint onGetSize() override;
private:
- SkAutoTUnref<const SkPicture> fSrc;
+ sk_sp<const SkPicture> fSrc;
SkString fName;
bool fUseBBH;
+ bool fLite;
typedef Benchmark INHERITED;
};
diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp
index 6ff2be4b1b..4ded061800 100644
--- a/bench/nanobench.cpp
+++ b/bench/nanobench.cpp
@@ -110,6 +110,7 @@ DEFINE_string(scales, "1.0", "Space-separated scales for SKPs.");
DEFINE_string(zoom, "1.0,0", "Comma-separated zoomMax,zoomPeriodMs factors for a periodic SKP zoom "
"function that ping-pongs between 1.0 and zoomMax.");
DEFINE_bool(bbh, true, "Build a BBH for SKPs?");
+DEFINE_bool(lite, false, "Use SkLiteRecorder in recording benchmarks?");
DEFINE_bool(mpd, true, "Use MultiPictureDraw for the SKPs?");
DEFINE_bool(loopSKP, true, "Loop SKPs like we do for micro benches?");
DEFINE_int32(flushEvery, 10, "Flush --outResultsFile every Nth run.");
@@ -691,7 +692,7 @@ public:
fBenchType = "recording";
fSKPBytes = static_cast<double>(SkPictureUtils::ApproximateBytesUsed(pic.get()));
fSKPOps = pic->approximateOpCount();
- return new RecordingBench(name.c_str(), pic.get(), FLAGS_bbh);
+ return new RecordingBench(name.c_str(), pic.get(), FLAGS_bbh, FLAGS_lite);
}
// Then once each for each scale as SKPBenches (playback).