blob: e937e14f1749f1daf733e05b68b7ec474c21a3a6 [file] [log] [blame]
commit-bot@chromium.org5f879752013-06-13 10:18:02 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "SkBenchmark.h"
9#include "SkCanvas.h"
10#include "SkConfig8888.h"
11#include "SkString.h"
commit-bot@chromium.org4cd9e212014-03-07 03:25:16 +000012#include "sk_tool_utils.h"
commit-bot@chromium.org5f879752013-06-13 10:18:02 +000013
14class PremulAndUnpremulAlphaOpsBench : public SkBenchmark {
commit-bot@chromium.orga713f9c2014-03-17 21:31:26 +000015 enum {
16 W = 256,
17 H = 256,
18 };
19 SkBitmap fBmp1, fBmp2;
skia.committer@gmail.comdb0c8752014-03-18 03:02:11 +000020
commit-bot@chromium.org5f879752013-06-13 10:18:02 +000021public:
commit-bot@chromium.orga713f9c2014-03-17 21:31:26 +000022 PremulAndUnpremulAlphaOpsBench(SkColorType ct) {
23 fColorType = ct;
24 fName.printf("premul_and_unpremul_alpha_%s", sk_tool_utils::colortype_name(ct));
commit-bot@chromium.org5f879752013-06-13 10:18:02 +000025 }
26
27protected:
28 virtual const char* onGetName() SK_OVERRIDE {
29 return fName.c_str();
30 }
31
commit-bot@chromium.orga713f9c2014-03-17 21:31:26 +000032 virtual void onPreDraw() {
33 SkImageInfo info = SkImageInfo::Make(W, H, fColorType, kPremul_SkAlphaType);
34 fBmp1.allocPixels(info); // used in writePixels
35
36 for (int h = 0; h < H; ++h) {
37 for (int w = 0; w < W; ++w) {
38 // SkColor places A in the right slot for either RGBA or BGRA
39 *fBmp1.getAddr32(w, h) = SkColorSetARGB(h & 0xFF, w & 0xFF, w & 0xFF, w & 0xFF);
40 }
41 }
skia.committer@gmail.comdb0c8752014-03-18 03:02:11 +000042
commit-bot@chromium.orga713f9c2014-03-17 21:31:26 +000043 fBmp2.allocPixels(info); // used in readPixels()
44 }
45
commit-bot@chromium.org33614712013-12-03 18:17:16 +000046 virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
commit-bot@chromium.org5f879752013-06-13 10:18:02 +000047 canvas->clear(SK_ColorBLACK);
commit-bot@chromium.org4cd9e212014-03-07 03:25:16 +000048
commit-bot@chromium.org33614712013-12-03 18:17:16 +000049 for (int loop = 0; loop < loops; ++loop) {
commit-bot@chromium.org5f879752013-06-13 10:18:02 +000050 // Unpremul -> Premul
commit-bot@chromium.orga713f9c2014-03-17 21:31:26 +000051 canvas->writePixels(fBmp1.info(), fBmp1.getPixels(), fBmp1.rowBytes(), 0, 0);
commit-bot@chromium.org5f879752013-06-13 10:18:02 +000052 // Premul -> Unpremul
commit-bot@chromium.orga713f9c2014-03-17 21:31:26 +000053 canvas->readPixels(fBmp2.info(), fBmp2.getPixels(), fBmp2.rowBytes(), 0, 0);
commit-bot@chromium.org5f879752013-06-13 10:18:02 +000054 }
55 }
56
57private:
commit-bot@chromium.orga713f9c2014-03-17 21:31:26 +000058 SkColorType fColorType;
commit-bot@chromium.org5f879752013-06-13 10:18:02 +000059 SkString fName;
commit-bot@chromium.orga713f9c2014-03-17 21:31:26 +000060
commit-bot@chromium.org5f879752013-06-13 10:18:02 +000061 typedef SkBenchmark INHERITED;
62};
63
commit-bot@chromium.org5f879752013-06-13 10:18:02 +000064
commit-bot@chromium.orga713f9c2014-03-17 21:31:26 +000065DEF_BENCH(return new PremulAndUnpremulAlphaOpsBench(kRGBA_8888_SkColorType));
66DEF_BENCH(return new PremulAndUnpremulAlphaOpsBench(kBGRA_8888_SkColorType));