aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/Xfer4fBench.cpp
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2016-02-03 09:47:46 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-02-03 09:47:46 -0800
commitef5252e48ff6c5ed2b53b87333b7ed716c8b9035 (patch)
tree10ab03edaa080ed511ea74889850c0f1a26d561a /bench/Xfer4fBench.cpp
parentafb188de27d047c8327ccc7b099203e8fc2a4129 (diff)
extend gm to test aa[] parameter on xfer4f procs
Diffstat (limited to 'bench/Xfer4fBench.cpp')
-rw-r--r--bench/Xfer4fBench.cpp37
1 files changed, 30 insertions, 7 deletions
diff --git a/bench/Xfer4fBench.cpp b/bench/Xfer4fBench.cpp
index 9c1b419ba5..6b6bbc8d23 100644
--- a/bench/Xfer4fBench.cpp
+++ b/bench/Xfer4fBench.cpp
@@ -10,6 +10,8 @@
#include "SkString.h"
#include "SkXfermode.h"
+#define USE_AA (1 << 31) // merge with Xfermode::PMFlags w/o conflict
+
#define INNER_LOOPS 1000
// Benchmark that draws non-AA rects or AA text with an SkXfermode::Mode.
@@ -17,17 +19,27 @@ class Xfer4fBench : public Benchmark {
public:
Xfer4fBench(SkXfermode::Mode mode, const char name[], bool doN, uint32_t flags)
: fDoN(doN)
- , fFlags(flags)
+ , fFlags(flags & ~USE_AA)
{
- fProc1 = SkXfermode::GetPM4fProc1(mode, flags);
- fProcN = SkXfermode::GetPM4fProcN(mode, flags);
- fName.printf("xfer4f_%s_%c_%s_%s", name, fDoN ? 'N' : '1',
+ fProc1 = SkXfermode::GetPM4fProc1(mode, fFlags);
+ fProcN = SkXfermode::GetPM4fProcN(mode, fFlags);
+ fName.printf("xfer4f_%s_%s_%c_%s_%s",
+ name,
+ (flags & USE_AA) ? "aa" : "bw",
+ fDoN ? 'N' : '1',
(flags & SkXfermode::kSrcIsOpaque_PM4fFlag) ? "opaque" : "alpha",
(flags & SkXfermode::kDstIsSRGB_PM4fFlag) ? "srgb" : "linear");
for (int i = 0; i < N; ++i) {
fSrc[i] = {{ 1, 1, 1, 1 }};
fDst[i] = 0;
+ fAAStorage[i] = i * 255 / (N - 1);
+ }
+
+ if (flags & USE_AA) {
+ fAA = fAAStorage;
+ } else {
+ fAA = nullptr;
}
}
@@ -38,13 +50,12 @@ protected:
void onDraw(int loops, SkCanvas*) override {
const SkXfermode::PM4fState state{ nullptr, fFlags };
- const uint8_t* aa = nullptr;
for (int i = 0; i < loops * INNER_LOOPS; ++i) {
if (fDoN) {
- fProcN(state, fDst, fSrc, N, aa);
+ fProcN(state, fDst, fSrc, N, fAA);
} else {
- fProc1(state, fDst, fSrc[0], N, aa);
+ fProc1(state, fDst, fSrc[0], N, fAA);
}
}
}
@@ -53,6 +64,7 @@ private:
SkString fName;
SkXfermode::PM4fProc1 fProc1;
SkXfermode::PM4fProcN fProcN;
+ const SkAlpha* fAA;
bool fDoN;
uint32_t fFlags;
@@ -61,6 +73,7 @@ private:
};
SkPM4f fSrc[N];
SkPMColor fDst[N];
+ uint8_t fAAStorage[N];
typedef Benchmark INHERITED;
};
@@ -79,3 +92,13 @@ DEF_BENCH( return new Xfer4fBench(SkXfermode::kSrcOver_Mode, "srcover", true, F
DEF_BENCH( return new Xfer4fBench(SkXfermode::kSrcOver_Mode, "srcover", true, F00); )
DEF_BENCH( return new Xfer4fBench(SkXfermode::kSrcOver_Mode, "srcover", true, F11); )
DEF_BENCH( return new Xfer4fBench(SkXfermode::kSrcOver_Mode, "srcover", true, F01); )
+
+DEF_BENCH( return new Xfer4fBench(SkXfermode::kSrcOver_Mode, "srcover", false, F10 | USE_AA); )
+DEF_BENCH( return new Xfer4fBench(SkXfermode::kSrcOver_Mode, "srcover", false, F00 | USE_AA); )
+DEF_BENCH( return new Xfer4fBench(SkXfermode::kSrcOver_Mode, "srcover", false, F11 | USE_AA); )
+DEF_BENCH( return new Xfer4fBench(SkXfermode::kSrcOver_Mode, "srcover", false, F01 | USE_AA); )
+
+DEF_BENCH( return new Xfer4fBench(SkXfermode::kSrcOver_Mode, "srcover", true, F10 | USE_AA); )
+DEF_BENCH( return new Xfer4fBench(SkXfermode::kSrcOver_Mode, "srcover", true, F00 | USE_AA); )
+DEF_BENCH( return new Xfer4fBench(SkXfermode::kSrcOver_Mode, "srcover", true, F11 | USE_AA); )
+DEF_BENCH( return new Xfer4fBench(SkXfermode::kSrcOver_Mode, "srcover", true, F01 | USE_AA); )