| Index: bench/Sk4fBench.cpp
|
| diff --git a/bench/Sk4fBench.cpp b/bench/Sk4fBench.cpp
|
| index 712a65776d8dc8d9667e447adac9c204d254236b..823e14c0af17a5f4cc7c63732caaee2007581ef6 100644
|
| --- a/bench/Sk4fBench.cpp
|
| +++ b/bench/Sk4fBench.cpp
|
| @@ -10,37 +10,47 @@
|
| #include "SkNx.h"
|
|
|
| // Used to prevent the compiler from optimizing away the whole loop.
|
| -volatile uint32_t blackhole = 0;
|
| +volatile uint64_t blackhole = 0;
|
|
|
| // Not a great random number generator, but it's very fast.
|
| // The code we're measuring is quite fast, so low overhead is essential.
|
| -static uint32_t lcg_rand(uint32_t* seed) {
|
| +static uint64_t lcg_rand(uint64_t* seed) {
|
| *seed *= 1664525;
|
| *seed += 1013904223;
|
| return *seed;
|
| }
|
|
|
| -struct Sk4fBytesRoundtripBench : public Benchmark {
|
| - Sk4fBytesRoundtripBench() {}
|
| +template <typename T>
|
| +struct Sk4fRoundtripBench : public Benchmark {
|
| + Sk4fRoundtripBench() {}
|
| +
|
| + const char* onGetName() override {
|
| + switch (sizeof(T)) {
|
| + case 1: return "Sk4f_roundtrip_u8";
|
| + case 2: return "Sk4f_roundtrip_u16";
|
| + }
|
| + SkASSERT(false);
|
| + return "";
|
| + }
|
|
|
| - const char* onGetName() override { return "Sk4f_roundtrip"; }
|
| bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; }
|
|
|
| void onDraw(int loops, SkCanvas* canvas) override {
|
| // Unlike blackhole, junk can and probably will be a register.
|
| - uint32_t junk = 0;
|
| - uint32_t seed = 0;
|
| + uint64_t junk = 0;
|
| + uint64_t seed = 0;
|
| for (int i = 0; i < loops; i++) {
|
| - uint32_t color = lcg_rand(&seed),
|
| + uint64_t src = lcg_rand(&seed),
|
| back;
|
| - auto f = SkNx_cast<float>(Sk4b::Load(&color));
|
| - SkNx_cast<uint8_t>(f).store(&back);
|
| + auto f = SkNx_cast<float>(SkNx<4,T>::Load(&src));
|
| + SkNx_cast<T>(f).store(&back);
|
| junk ^= back;
|
| }
|
| blackhole ^= junk;
|
| }
|
| };
|
| -DEF_BENCH(return new Sk4fBytesRoundtripBench;)
|
| +DEF_BENCH(return new Sk4fRoundtripBench<uint8_t>;)
|
| +DEF_BENCH(return new Sk4fRoundtripBench<uint16_t>;)
|
|
|
| struct Sk4fGradientBench : public Benchmark {
|
| const char* onGetName() override { return "Sk4f_gradient"; }
|
|
|