diff options
author | Hal Canary <halcanary@google.com> | 2018-02-21 15:49:41 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-05-31 21:03:24 +0000 |
commit | b4a8a629406fd84c04ecbb1bd2301cfbff91121d (patch) | |
tree | 23b8b2302de2243aeee5b6ae4fb084fb86accb2c /bench | |
parent | 458f40a43e12260a3b73ee170b30d966d6c1fe56 (diff) |
SkFloatToDecimal: optimize the less common cases.
bench PDFScalar_random goes from 120 ns to 70 ns.
Change-Id: I6254f5c900395ee470ffee26303915025a8f0dda
Reviewed-on: https://skia-review.googlesource.com/131151
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
Auto-Submit: Hal Canary <halcanary@google.com>
Diffstat (limited to 'bench')
-rw-r--r-- | bench/PDFBench.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/bench/PDFBench.cpp b/bench/PDFBench.cpp index bebf2b9f17..4cda80bd6e 100644 --- a/bench/PDFBench.cpp +++ b/bench/PDFBench.cpp @@ -40,21 +40,35 @@ DEF_BENCH(return new WStreamWriteTextBenchmark;) // Test speed of SkFloatToDecimal for typical floats that // might be found in a PDF document. struct PDFScalarBench : public Benchmark { + PDFScalarBench(const char* n, float (*f)(SkRandom*)) : fName(n), fNextFloat(f) {} + const char* fName; + float (*fNextFloat)(SkRandom*); bool isSuitableFor(Backend b) override { return b == kNonRendering_Backend; } - const char* onGetName() override { return "PDFScalar"; } + const char* onGetName() override { return fName; } void onDraw(int loops, SkCanvas*) override { SkRandom random; char dst[kMaximumSkFloatToDecimalLength]; while (loops-- > 0) { - auto f = random.nextRangeF(-500.0f, 1500.0f); + auto f = fNextFloat(&random); (void)SkFloatToDecimal(f, dst); } } }; -DEF_BENCH(return new PDFScalarBench;) +float next_common(SkRandom* random) { + return random->nextRangeF(-500.0f, 1500.0f); +} +float next_any(SkRandom* random) { + union { uint32_t u; float f; }; + u = random->nextU(); + static_assert(sizeof(float) == sizeof(uint32_t), ""); + return f; +} + +DEF_BENCH(return new PDFScalarBench("PDFScalar_common", next_common);) +DEF_BENCH(return new PDFScalarBench("PDFScalar_random", next_any);) #ifdef SK_SUPPORT_PDF |