summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/skia/bench/PremulAndUnpremulAlphaOpsBench.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/skia/bench/PremulAndUnpremulAlphaOpsBench.cpp')
-rw-r--r--chromium/third_party/skia/bench/PremulAndUnpremulAlphaOpsBench.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/chromium/third_party/skia/bench/PremulAndUnpremulAlphaOpsBench.cpp b/chromium/third_party/skia/bench/PremulAndUnpremulAlphaOpsBench.cpp
new file mode 100644
index 00000000000..311bdf2d477
--- /dev/null
+++ b/chromium/third_party/skia/bench/PremulAndUnpremulAlphaOpsBench.cpp
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2013 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 "SkCanvas.h"
+#include "SkConfig8888.h"
+#include "SkString.h"
+#include "sk_tool_utils.h"
+
+class PremulAndUnpremulAlphaOpsBench : public Benchmark {
+ enum {
+ W = 256,
+ H = 256,
+ };
+ SkBitmap fBmp1, fBmp2;
+
+public:
+ PremulAndUnpremulAlphaOpsBench(SkColorType ct) {
+ fColorType = ct;
+ fName.printf("premul_and_unpremul_alpha_%s", sk_tool_utils::colortype_name(ct));
+ }
+
+protected:
+ virtual const char* onGetName() SK_OVERRIDE {
+ return fName.c_str();
+ }
+
+ virtual void onPreDraw() {
+ SkImageInfo info = SkImageInfo::Make(W, H, fColorType, kPremul_SkAlphaType);
+ fBmp1.allocPixels(info); // used in writePixels
+
+ for (int h = 0; h < H; ++h) {
+ for (int w = 0; w < W; ++w) {
+ // SkColor places A in the right slot for either RGBA or BGRA
+ *fBmp1.getAddr32(w, h) = SkColorSetARGB(h & 0xFF, w & 0xFF, w & 0xFF, w & 0xFF);
+ }
+ }
+
+ fBmp2.allocPixels(info); // used in readPixels()
+ }
+
+ virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
+ canvas->clear(SK_ColorBLACK);
+
+ for (int loop = 0; loop < loops; ++loop) {
+ // Unpremul -> Premul
+ canvas->writePixels(fBmp1.info(), fBmp1.getPixels(), fBmp1.rowBytes(), 0, 0);
+ // Premul -> Unpremul
+ canvas->readPixels(fBmp2.info(), fBmp2.getPixels(), fBmp2.rowBytes(), 0, 0);
+ }
+ }
+
+private:
+ SkColorType fColorType;
+ SkString fName;
+
+ typedef Benchmark INHERITED;
+};
+
+
+DEF_BENCH(return new PremulAndUnpremulAlphaOpsBench(kRGBA_8888_SkColorType));
+DEF_BENCH(return new PremulAndUnpremulAlphaOpsBench(kBGRA_8888_SkColorType));