Index: bench/BitmapBench.cpp |
diff --git a/bench/BitmapBench.cpp b/bench/BitmapBench.cpp |
index 2b0cabfc37f7583b8986fbf9479dab0a9ab6bc54..e877bd472d80fadba1a546588509582b1af3847f 100644 |
--- a/bench/BitmapBench.cpp |
+++ b/bench/BitmapBench.cpp |
@@ -1,10 +1,10 @@ |
- |
/* |
* Copyright 2011 Google Inc. |
* |
* Use of this source code is governed by a BSD-style license that can be |
* found in the LICENSE file. |
*/ |
+ |
#include "SkBenchmark.h" |
#include "SkBitmap.h" |
#include "SkPaint.h" |
@@ -12,10 +12,7 @@ |
#include "SkColorPriv.h" |
#include "SkRandom.h" |
#include "SkString.h" |
- |
-static const char* gConfigName[] = { |
- "ERROR", "a1", "a8", "index8", "565", "4444", "8888" |
-}; |
+#include "sk_tool_utils.h" |
static int conv6ToByte(int x) { |
return x * 0xFF / 5; |
@@ -33,7 +30,7 @@ static uint8_t compute666Index(SkPMColor c) { |
return convByteTo6(r) * 36 + convByteTo6(g) * 6 + convByteTo6(b); |
} |
-static void convertToIndex666(const SkBitmap& src, SkBitmap* dst, bool isOpaque) { |
+static void convertToIndex666(const SkBitmap& src, SkBitmap* dst, SkAlphaType aType) { |
SkPMColor storage[216]; |
SkPMColor* colors = storage; |
// rrr ggg bbb |
@@ -47,10 +44,9 @@ static void convertToIndex666(const SkBitmap& src, SkBitmap* dst, bool isOpaque) |
} |
} |
} |
- SkColorTable* ctable = new SkColorTable(storage, 216, |
- isOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType); |
- dst->setConfig(SkBitmap::kIndex8_Config, src.width(), src.height()); |
- dst->allocPixels(ctable); |
+ SkColorTable* ctable = new SkColorTable(storage, 216, aType); |
+ dst->allocPixels(SkImageInfo::Make(src.width(), src.height(), kIndex_8_SkColorType, aType), |
+ NULL, ctable); |
ctable->unref(); |
SkAutoLockPixels alps(src); |
@@ -75,29 +71,30 @@ static void convertToIndex666(const SkBitmap& src, SkBitmap* dst, bool isOpaque) |
*/ |
class BitmapBench : public SkBenchmark { |
- SkBitmap fBitmap; |
- SkPaint fPaint; |
- bool fIsOpaque; |
- bool fForceUpdate; //bitmap marked as dirty before each draw. forces bitmap to be updated on device cache |
- bool fIsVolatile; |
- SkBitmap::Config fConfig; |
- SkString fName; |
+ const SkColorType fColorType; |
+ const SkAlphaType fAlphaType; |
+ const bool fForceUpdate; //bitmap marked as dirty before each draw. forces bitmap to be updated on device cache |
+ const bool fIsVolatile; |
+ |
+ SkBitmap fBitmap; |
+ SkPaint fPaint; |
+ SkString fName; |
+ |
enum { W = 128 }; |
enum { H = 128 }; |
public: |
- BitmapBench(bool isOpaque, SkBitmap::Config c, |
- bool forceUpdate = false, bool bitmapVolatile = false) |
- : fIsOpaque(isOpaque) |
+ BitmapBench(SkColorType ct, SkAlphaType at, bool forceUpdate = false, bool isVolatile = false) |
+ : fColorType(ct) |
+ , fAlphaType(at) |
, fForceUpdate(forceUpdate) |
- , fIsVolatile(bitmapVolatile) |
- , fConfig(c) { |
- } |
+ , fIsVolatile(isVolatile) |
+ {} |
protected: |
virtual const char* onGetName() { |
fName.set("bitmap"); |
- fName.appendf("_%s%s", gConfigName[fConfig], |
- fIsOpaque ? "" : "_A"); |
+ fName.appendf("_%s%s", sk_tool_utils::colortype_name(fColorType), |
+ kOpaque_SkAlphaType == fAlphaType ? "" : "_A"); |
if (fForceUpdate) |
fName.append("_update"); |
if (fIsVolatile) |
@@ -109,24 +106,23 @@ protected: |
virtual void onPreDraw() { |
SkBitmap bm; |
- if (SkBitmap::kIndex8_Config == fConfig) { |
- bm.setConfig(SkBitmap::kARGB_8888_Config, W, H); |
+ if (kIndex_8_SkColorType == fColorType) { |
+ bm.setInfo(SkImageInfo::MakeN32(W, H, fAlphaType)); |
} else { |
- bm.setConfig(fConfig, W, H); |
+ bm.setInfo(SkImageInfo::Make(W, H, fColorType, fAlphaType)); |
} |
bm.allocPixels(); |
- bm.eraseColor(fIsOpaque ? SK_ColorBLACK : 0); |
+ bm.eraseColor(kOpaque_SkAlphaType == fAlphaType ? SK_ColorBLACK : 0); |
onDrawIntoBitmap(bm); |
- if (SkBitmap::kIndex8_Config == fConfig) { |
- convertToIndex666(bm, &fBitmap, fIsOpaque); |
+ if (kIndex_8_SkColorType == fColorType) { |
+ convertToIndex666(bm, &fBitmap, fAlphaType); |
} else { |
fBitmap = bm; |
} |
- fBitmap.setAlphaType(fIsOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType); |
fBitmap.setIsVolatile(fIsVolatile); |
} |
@@ -197,9 +193,9 @@ class FilterBitmapBench : public BitmapBench { |
uint32_t fFlags; |
SkString fFullName; |
public: |
- FilterBitmapBench(bool isOpaque, SkBitmap::Config c, |
+ FilterBitmapBench(SkColorType ct, SkAlphaType at, |
bool forceUpdate, bool isVolitile, uint32_t flags) |
- : INHERITED(isOpaque, c, forceUpdate, isVolitile) |
+ : INHERITED(ct, at, forceUpdate, isVolitile) |
, fFlags(flags) { |
} |
@@ -276,9 +272,9 @@ private: |
SkString fFullName; |
SourceAlpha fSourceAlpha; |
public: |
- SourceAlphaBitmapBench(SourceAlpha alpha, SkBitmap::Config c, |
+ SourceAlphaBitmapBench(SourceAlpha alpha, SkColorType ct, |
bool forceUpdate = false, bool bitmapVolatile = false) |
- : INHERITED(false, c, forceUpdate, bitmapVolatile) |
+ : INHERITED(ct, kPremul_SkAlphaType, forceUpdate, bitmapVolatile) |
, fSourceAlpha(alpha) { |
} |
@@ -355,31 +351,31 @@ private: |
typedef BitmapBench INHERITED; |
}; |
-DEF_BENCH( return new BitmapBench(false, SkBitmap::kARGB_8888_Config); ) |
-DEF_BENCH( return new BitmapBench(true, SkBitmap::kARGB_8888_Config); ) |
-DEF_BENCH( return new BitmapBench(true, SkBitmap::kRGB_565_Config); ) |
-DEF_BENCH( return new BitmapBench(false, SkBitmap::kIndex8_Config); ) |
-DEF_BENCH( return new BitmapBench(true, SkBitmap::kIndex8_Config); ) |
-DEF_BENCH( return new BitmapBench(true, SkBitmap::kARGB_8888_Config, true, true); ) |
-DEF_BENCH( return new BitmapBench(true, SkBitmap::kARGB_8888_Config, true, false); ) |
+DEF_BENCH( return new BitmapBench(kN32_SkColorType, kPremul_SkAlphaType); ) |
+DEF_BENCH( return new BitmapBench(kN32_SkColorType, kOpaque_SkAlphaType); ) |
+DEF_BENCH( return new BitmapBench(kRGB_565_SkColorType, kOpaque_SkAlphaType); ) |
+DEF_BENCH( return new BitmapBench(kIndex_8_SkColorType, kPremul_SkAlphaType); ) |
+DEF_BENCH( return new BitmapBench(kIndex_8_SkColorType, kOpaque_SkAlphaType); ) |
+DEF_BENCH( return new BitmapBench(kN32_SkColorType, kOpaque_SkAlphaType, true, true); ) |
+DEF_BENCH( return new BitmapBench(kN32_SkColorType, kOpaque_SkAlphaType, true, false); ) |
// scale filter -> S32_opaque_D32_filter_DX_{SSE2,SSSE3} and Fact9 is also for S32_D16_filter_DX_SSE2 |
-DEF_BENCH( return new FilterBitmapBench(false, SkBitmap::kARGB_8888_Config, false, false, kScale_Flag | kBilerp_Flag); ) |
-DEF_BENCH( return new FilterBitmapBench(true, SkBitmap::kARGB_8888_Config, false, false, kScale_Flag | kBilerp_Flag); ) |
-DEF_BENCH( return new FilterBitmapBench(true, SkBitmap::kARGB_8888_Config, true, true, kScale_Flag | kBilerp_Flag); ) |
-DEF_BENCH( return new FilterBitmapBench(true, SkBitmap::kARGB_8888_Config, true, false, kScale_Flag | kBilerp_Flag); ) |
+DEF_BENCH( return new FilterBitmapBench(kN32_SkColorType, kPremul_SkAlphaType, false, false, kScale_Flag | kBilerp_Flag); ) |
+DEF_BENCH( return new FilterBitmapBench(kN32_SkColorType, kOpaque_SkAlphaType, false, false, kScale_Flag | kBilerp_Flag); ) |
+DEF_BENCH( return new FilterBitmapBench(kN32_SkColorType, kOpaque_SkAlphaType, true, true, kScale_Flag | kBilerp_Flag); ) |
+DEF_BENCH( return new FilterBitmapBench(kN32_SkColorType, kOpaque_SkAlphaType, true, false, kScale_Flag | kBilerp_Flag); ) |
// scale rotate filter -> S32_opaque_D32_filter_DXDY_{SSE2,SSSE3} |
-DEF_BENCH( return new FilterBitmapBench(false, SkBitmap::kARGB_8888_Config, false, false, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) |
-DEF_BENCH( return new FilterBitmapBench(true, SkBitmap::kARGB_8888_Config, false, false, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) |
-DEF_BENCH( return new FilterBitmapBench(true, SkBitmap::kARGB_8888_Config, true, true, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) |
-DEF_BENCH( return new FilterBitmapBench(true, SkBitmap::kARGB_8888_Config, true, false, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) |
+DEF_BENCH( return new FilterBitmapBench(kN32_SkColorType, kPremul_SkAlphaType, false, false, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) |
+DEF_BENCH( return new FilterBitmapBench(kN32_SkColorType, kOpaque_SkAlphaType, false, false, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) |
+DEF_BENCH( return new FilterBitmapBench(kN32_SkColorType, kOpaque_SkAlphaType, true, true, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) |
+DEF_BENCH( return new FilterBitmapBench(kN32_SkColorType, kOpaque_SkAlphaType, true, false, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) |
-DEF_BENCH( return new FilterBitmapBench(false, SkBitmap::kARGB_8888_Config, false, false, kScale_Flag | kBilerp_Flag | kBicubic_Flag); ) |
-DEF_BENCH( return new FilterBitmapBench(false, SkBitmap::kARGB_8888_Config, false, false, kScale_Flag | kRotate_Flag | kBilerp_Flag | kBicubic_Flag); ) |
+DEF_BENCH( return new FilterBitmapBench(kN32_SkColorType, kPremul_SkAlphaType, false, false, kScale_Flag | kBilerp_Flag | kBicubic_Flag); ) |
+DEF_BENCH( return new FilterBitmapBench(kN32_SkColorType, kPremul_SkAlphaType, false, false, kScale_Flag | kRotate_Flag | kBilerp_Flag | kBicubic_Flag); ) |
// source alpha tests -> S32A_Opaque_BlitRow32_{arm,neon} |
-DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kOpaque_SourceAlpha, SkBitmap::kARGB_8888_Config); ) |
-DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kTransparent_SourceAlpha, SkBitmap::kARGB_8888_Config); ) |
-DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kTwoStripes_SourceAlpha, SkBitmap::kARGB_8888_Config); ) |
-DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kThreeStripes_SourceAlpha, SkBitmap::kARGB_8888_Config); ) |
+DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kOpaque_SourceAlpha, kN32_SkColorType); ) |
+DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kTransparent_SourceAlpha, kN32_SkColorType); ) |
+DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kTwoStripes_SourceAlpha, kN32_SkColorType); ) |
+DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kThreeStripes_SourceAlpha, kN32_SkColorType); ) |