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
This commit is contained in:
parent
1413d52c53
commit
8c1a4f80d9
@ -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();
|
||||
if (fLite) {
|
||||
SkLiteRecorder rec;
|
||||
while (loops --> 0) {
|
||||
sk_sp<SkLiteDL> dl = SkLiteDL::New(fSrc->cullRect());
|
||||
rec.reset(dl.get());
|
||||
fSrc->playback(&rec);
|
||||
dl->makeThreadsafe();
|
||||
}
|
||||
|
||||
uint32_t flags = SkPictureRecorder::kPlaybackDrawPicture_RecordFlag;
|
||||
for (int i = 0; i < loops; i++) {
|
||||
} else {
|
||||
SkRTreeFactory factory;
|
||||
SkPictureRecorder recorder;
|
||||
fSrc->playback(recorder.beginRecording(w, h, fUseBBH ? &factory : nullptr, flags));
|
||||
while (loops --> 0) {
|
||||
fSrc->playback(recorder.beginRecording(fSrc->cullRect(), fUseBBH ? &factory : nullptr));
|
||||
(void)recorder.finishRecordingAsPicture();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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).
|
||||
|
Loading…
Reference in New Issue
Block a user