diff options
author | mtklein <mtklein@chromium.org> | 2016-08-08 06:56:22 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-08 06:56:22 -0700 |
commit | 8c1a4f80d9b2aeb039623128a23223233842fc71 (patch) | |
tree | 34dbbcdc0713a32ea5b5ffcb559b02ca5f91acb7 /bench | |
parent | 1413d52c539a1c687d3bf4412ebc76367ca22bb9 (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.cpp | 40 | ||||
-rw-r--r-- | bench/RecordingBench.h | 5 | ||||
-rw-r--r-- | bench/nanobench.cpp | 3 |
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). |