diff options
Diffstat (limited to 'chromium/third_party/skia/bench/PremulAndUnpremulAlphaOpsBench.cpp')
-rw-r--r-- | chromium/third_party/skia/bench/PremulAndUnpremulAlphaOpsBench.cpp | 66 |
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)); |