| Index: bench/PMFloatBench.cpp
|
| diff --git a/bench/PMFloatBench.cpp b/bench/PMFloatBench.cpp
|
| index 540fdb781588a87da5a7968a2632ed7a4f5c233c..794a7cf83cd24ffdc9a605a55e05714ba0d462b2 100644
|
| --- a/bench/PMFloatBench.cpp
|
| +++ b/bench/PMFloatBench.cpp
|
| @@ -19,18 +19,21 @@ static uint32_t lcg_rand(uint32_t* seed) {
|
| return *seed;
|
| }
|
|
|
| -// I'm having better luck getting these to constant-propagate away as template parameters.
|
| +template <int kBias>
|
| struct PMFloatRoundtripBench : public Benchmark {
|
| - PMFloatRoundtripBench() {}
|
| + SkString fName;
|
| + PMFloatRoundtripBench() {
|
| + fName.appendf("SkPMFloat<%d>_roundtrip", kBias);
|
| + }
|
|
|
| - const char* onGetName() override { return "SkPMFloat_roundtrip"; }
|
| + const char* onGetName() override { return fName.c_str(); }
|
| bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; }
|
|
|
| void onDraw(const int loops, SkCanvas* canvas) override {
|
| // Unlike blackhole, junk can and probably will be a register.
|
| uint32_t junk = 0;
|
| uint32_t seed = 0;
|
| - for (int i = 0; i < loops; i++) {
|
| + for (int i = 0; i < 1000*loops; i++) {
|
| SkPMColor color;
|
| #ifdef SK_DEBUG
|
| // Our SkASSERTs will remind us that it's technically required that we premultiply.
|
| @@ -40,14 +43,15 @@ struct PMFloatRoundtripBench : public Benchmark {
|
| color = lcg_rand(&seed);
|
| #endif
|
|
|
| - auto f = SkPMFloat::FromPMColor(color);
|
| + auto f = SkPMFloat<kBias>::FromPMColor(color);
|
| SkPMColor back = f.round();
|
| junk ^= back;
|
| }
|
| blackhole ^= junk;
|
| }
|
| };
|
| -DEF_BENCH(return new PMFloatRoundtripBench;)
|
| +DEF_BENCH(return new PMFloatRoundtripBench<1>;)
|
| +DEF_BENCH(return new PMFloatRoundtripBench<255>;)
|
|
|
| struct PMFloatGradientBench : public Benchmark {
|
| const char* onGetName() override { return "PMFloat_gradient"; }
|
| @@ -55,8 +59,8 @@ struct PMFloatGradientBench : public Benchmark {
|
|
|
| SkPMColor fDevice[100];
|
| void onDraw(const int loops, SkCanvas*) override {
|
| - Sk4f c0 = SkPMFloat::FromARGB(1, 1, 0, 0),
|
| - c1 = SkPMFloat::FromARGB(1, 0, 0, 1),
|
| + Sk4f c0 = SkPMFloat<1>::FromARGB(1, 1, 0, 0),
|
| + c1 = SkPMFloat<1>::FromARGB(1, 0, 0, 1),
|
| dc = c1 - c0,
|
| fx(0.1f),
|
| dx(0.002f),
|
| @@ -69,10 +73,10 @@ struct PMFloatGradientBench : public Benchmark {
|
| c = b + dcdx,
|
| d = c + dcdx;
|
| for (size_t i = 0; i < SK_ARRAY_COUNT(fDevice); i += 4) {
|
| - fDevice[i+0] = SkPMFloat(a).round();
|
| - fDevice[i+1] = SkPMFloat(b).round();
|
| - fDevice[i+2] = SkPMFloat(c).round();
|
| - fDevice[i+3] = SkPMFloat(d).round();
|
| + fDevice[i+0] = SkPMFloat<1>(a).round();
|
| + fDevice[i+1] = SkPMFloat<1>(b).round();
|
| + fDevice[i+2] = SkPMFloat<1>(c).round();
|
| + fDevice[i+3] = SkPMFloat<1>(d).round();
|
| a = a + dcdx4;
|
| b = b + dcdx4;
|
| c = c + dcdx4;
|
|
|