test+bench new swizzle SkOpts
BUG=skia:skia:4767 GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1564233002 Review URL: https://codereview.chromium.org/1564233002
This commit is contained in:
parent
06dd0a8222
commit
55c86abedc
32
bench/SwizzleBench.cpp
Normal file
32
bench/SwizzleBench.cpp
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2016 Google Inc.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by a BSD-style license that can be
|
||||||
|
* found in the LICENSE file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Benchmark.h"
|
||||||
|
#include "SkOpts.h"
|
||||||
|
|
||||||
|
class SwizzleBench : public Benchmark {
|
||||||
|
public:
|
||||||
|
SwizzleBench(const char* name, SkOpts::Swizzle_8888_8888 fn) : fName(name), fFn(fn) {}
|
||||||
|
|
||||||
|
bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; }
|
||||||
|
const char* onGetName() override { return fName; }
|
||||||
|
void onDraw(int loops, SkCanvas*) override {
|
||||||
|
static const int K = 1023; // Arbitrary, but nice to be a non-power-of-two to trip up SIMD.
|
||||||
|
uint32_t dst[K], src[K];
|
||||||
|
while (loops --> 0) {
|
||||||
|
fFn(dst, src, K);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
const char* fName;
|
||||||
|
SkOpts::Swizzle_8888_8888 fFn;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
DEF_BENCH(return new SwizzleBench("SkOpts::premul_xxxa", SkOpts::premul_xxxa));
|
||||||
|
DEF_BENCH(return new SwizzleBench("SkOpts::swaprb_xxxa", SkOpts::swaprb_xxxa));
|
||||||
|
DEF_BENCH(return new SwizzleBench("SkOpts::premul_swaprb_xxxa", SkOpts::premul_swaprb_xxxa));
|
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "SkSwizzler.h"
|
#include "SkSwizzler.h"
|
||||||
#include "Test.h"
|
#include "Test.h"
|
||||||
|
#include "SkOpts.h"
|
||||||
|
|
||||||
// These are the values that we will look for to indicate that the fill was successful
|
// These are the values that we will look for to indicate that the fill was successful
|
||||||
static const uint8_t kFillIndex = 0x11;
|
static const uint8_t kFillIndex = 0x11;
|
||||||
@ -124,3 +125,35 @@ DEF_TEST(SwizzlerFill, r) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEF_TEST(SwizzleOpts, r) {
|
||||||
|
uint32_t dst, src;
|
||||||
|
|
||||||
|
// forall c, c*255 == c, c*0 == 0
|
||||||
|
for (int c = 0; c <= 255; c++) {
|
||||||
|
src = (255<<24) | c;
|
||||||
|
SkOpts::premul_xxxa(&dst, &src, 1);
|
||||||
|
REPORTER_ASSERT(r, dst == src);
|
||||||
|
SkOpts::premul_swaprb_xxxa(&dst, &src, 1);
|
||||||
|
REPORTER_ASSERT(r, dst == (uint32_t)((255<<24) | (c<<16)));
|
||||||
|
|
||||||
|
src = (0<<24) | c;
|
||||||
|
SkOpts::premul_xxxa(&dst, &src, 1);
|
||||||
|
REPORTER_ASSERT(r, dst == 0);
|
||||||
|
SkOpts::premul_swaprb_xxxa(&dst, &src, 1);
|
||||||
|
REPORTER_ASSERT(r, dst == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check a totally arbitrary color
|
||||||
|
src = 0xFACEB004;
|
||||||
|
SkOpts::premul_xxxa(&dst, &src, 1);
|
||||||
|
REPORTER_ASSERT(r, dst == 0xFACAAD04);
|
||||||
|
|
||||||
|
// swap red and blue
|
||||||
|
SkOpts::swaprb_xxxa(&dst, &src, 1);
|
||||||
|
REPORTER_ASSERT(r, dst == 0xFA04B0CE);
|
||||||
|
|
||||||
|
// all together now
|
||||||
|
SkOpts::premul_swaprb_xxxa(&dst, &src, 1);
|
||||||
|
REPORTER_ASSERT(r, dst == 0xFA04ADCA);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user