aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/BitmapBench.cpp
diff options
context:
space:
mode:
authorGravatar robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-09-04 12:48:01 +0000
committerGravatar robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-09-04 12:48:01 +0000
commitb78765e63b5de5a7dfe5f9f6813f6df81cae14ae (patch)
tree292bb289b1309e4c31981aa9a1f18586b24247a8 /bench/BitmapBench.cpp
parent4f55d39a175afe70c1231eb7389790633210106f (diff)
Reverting r5364 (Update ARM and NEON optimizations for S32A_Opaque_BlitRow32)
git-svn-id: http://skia.googlecode.com/svn/trunk@5378 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench/BitmapBench.cpp')
-rw-r--r--bench/BitmapBench.cpp205
1 files changed, 47 insertions, 158 deletions
diff --git a/bench/BitmapBench.cpp b/bench/BitmapBench.cpp
index 59ea16dde9..5f06f884a8 100644
--- a/bench/BitmapBench.cpp
+++ b/bench/BitmapBench.cpp
@@ -21,6 +21,25 @@ static const char* gConfigName[] = {
"ERROR", "a1", "a8", "index8", "565", "4444", "8888"
};
+static void drawIntoBitmap(const SkBitmap& bm) {
+ const int w = bm.width();
+ const int h = bm.height();
+
+ SkCanvas canvas(bm);
+ SkPaint p;
+ p.setAntiAlias(true);
+ p.setColor(SK_ColorRED);
+ canvas.drawCircle(SkIntToScalar(w)/2, SkIntToScalar(h)/2,
+ SkIntToScalar(SkMin32(w, h))*3/8, p);
+
+ SkRect r;
+ r.set(0, 0, SkIntToScalar(w), SkIntToScalar(h));
+ p.setStyle(SkPaint::kStroke_Style);
+ p.setStrokeWidth(SkIntToScalar(4));
+ p.setColor(SK_ColorBLUE);
+ canvas.drawRect(r, p);
+}
+
static int conv6ToByte(int x) {
return x * 0xFF / 5;
}
@@ -83,23 +102,38 @@ class BitmapBench : public SkBenchmark {
bool fIsOpaque;
bool fForceUpdate; //bitmap marked as dirty before each draw. forces bitmap to be updated on device cache
int fTileX, fTileY; // -1 means don't use shader
- bool fIsVolatile;
- SkBitmap::Config fConfig;
SkString fName;
enum { N = SkBENCHLOOP(300) };
- enum { W = 128 };
- enum { H = 128 };
public:
BitmapBench(void* param, bool isOpaque, SkBitmap::Config c,
bool forceUpdate = false, bool bitmapVolatile = false,
int tx = -1, int ty = -1)
- : INHERITED(param)
- , fIsOpaque(isOpaque)
- , fForceUpdate(forceUpdate)
- , fIsVolatile(bitmapVolatile)
- , fTileX(tx)
- , fTileY(ty)
- , fConfig(c) {
+ : INHERITED(param), fIsOpaque(isOpaque), fForceUpdate(forceUpdate), fTileX(tx), fTileY(ty) {
+ const int w = 128;
+ const int h = 128;
+ SkBitmap bm;
+
+ if (SkBitmap::kIndex8_Config == c) {
+ bm.setConfig(SkBitmap::kARGB_8888_Config, w, h);
+ } else {
+ bm.setConfig(c, w, h);
+ }
+ bm.allocPixels();
+ bm.eraseColor(isOpaque ? SK_ColorBLACK : 0);
+
+ drawIntoBitmap(bm);
+
+ if (SkBitmap::kIndex8_Config == c) {
+ convertToIndex666(bm, &fBitmap);
+ } else {
+ fBitmap = bm;
+ }
+
+ if (fBitmap.getColorTable()) {
+ fBitmap.getColorTable()->setIsOpaque(isOpaque);
+ }
+ fBitmap.setIsOpaque(isOpaque);
+ fBitmap.setIsVolatile(bitmapVolatile);
}
protected:
@@ -111,43 +145,16 @@ protected:
fName.appendf("_%s", gTileName[fTileY]);
}
}
- fName.appendf("_%s%s", gConfigName[fConfig],
+ fName.appendf("_%s%s", gConfigName[fBitmap.config()],
fIsOpaque ? "" : "_A");
if (fForceUpdate)
fName.append("_update");
- if (fIsVolatile)
+ if (fBitmap.isVolatile())
fName.append("_volatile");
return fName.c_str();
}
- virtual void onPreDraw() {
- SkBitmap bm;
-
- if (SkBitmap::kIndex8_Config == fConfig) {
- bm.setConfig(SkBitmap::kARGB_8888_Config, W, H);
- } else {
- bm.setConfig(fConfig, W, H);
- }
-
- bm.allocPixels();
- bm.eraseColor(fIsOpaque ? SK_ColorBLACK : 0);
-
- onDrawIntoBitmap(bm);
-
- if (SkBitmap::kIndex8_Config == fConfig) {
- convertToIndex666(bm, &fBitmap);
- } else {
- fBitmap = bm;
- }
-
- if (fBitmap.getColorTable()) {
- fBitmap.getColorTable()->setIsOpaque(fIsOpaque);
- }
- fBitmap.setIsOpaque(fIsOpaque);
- fBitmap.setIsVolatile(fIsVolatile);
- }
-
virtual void onDraw(SkCanvas* canvas) {
SkIPoint dim = this->getSize();
SkRandom rand;
@@ -170,25 +177,6 @@ protected:
}
}
- virtual void onDrawIntoBitmap(const SkBitmap& bm) {
- const int w = bm.width();
- const int h = bm.height();
-
- SkCanvas canvas(bm);
- SkPaint p;
- p.setAntiAlias(true);
- p.setColor(SK_ColorRED);
- canvas.drawCircle(SkIntToScalar(w)/2, SkIntToScalar(h)/2,
- SkIntToScalar(SkMin32(w, h))*3/8, p);
-
- SkRect r;
- r.set(0, 0, SkIntToScalar(w), SkIntToScalar(h));
- p.setStyle(SkPaint::kStroke_Style);
- p.setStrokeWidth(SkIntToScalar(4));
- p.setColor(SK_ColorBLUE);
- canvas.drawRect(r, p);
- }
-
private:
typedef SkBenchmark INHERITED;
};
@@ -253,95 +241,6 @@ private:
typedef BitmapBench INHERITED;
};
-/** Verify optimizations that test source alpha values. */
-
-class SourceAlphaBitmapBench : public BitmapBench {
-public:
- enum SourceAlpha { kOpaque_SourceAlpha, kTransparent_SourceAlpha,
- kTwoStripes_SourceAlpha, kThreeStripes_SourceAlpha};
-private:
- SkString fFullName;
- SourceAlpha fSourceAlpha;
-public:
- SourceAlphaBitmapBench(void* param, SourceAlpha alpha, SkBitmap::Config c,
- bool forceUpdate = false, bool bitmapVolatile = false,
- int tx = -1, int ty = -1)
- : INHERITED(param, false, c, forceUpdate, bitmapVolatile, tx, ty)
- , fSourceAlpha(alpha) {
- }
-
-protected:
- virtual const char* onGetName() {
- fFullName.set(INHERITED::onGetName());
-
- if (fSourceAlpha == kOpaque_SourceAlpha) {
- fFullName.append("_source_opaque");
- } else if (fSourceAlpha == kTransparent_SourceAlpha) {
- fFullName.append("_source_transparent");
- } else if (fSourceAlpha == kTwoStripes_SourceAlpha) {
- fFullName.append("_source_stripes_two");
- } else if (fSourceAlpha == kThreeStripes_SourceAlpha) {
- fFullName.append("_source_stripes_three");
- }
-
- return fFullName.c_str();
- }
-
- virtual void onDrawIntoBitmap(const SkBitmap& bm) SK_OVERRIDE {
- const int w = bm.width();
- const int h = bm.height();
-
- if (kOpaque_SourceAlpha == fSourceAlpha) {
- bm.eraseColor(SK_ColorBLACK);
- } else if (kTransparent_SourceAlpha == fSourceAlpha) {
- bm.eraseColor(0);
- } else if (kTwoStripes_SourceAlpha == fSourceAlpha) {
- bm.eraseColor(0);
-
- SkCanvas canvas(bm);
- SkPaint p;
- p.setAntiAlias(false);
- p.setStyle(SkPaint::kFill_Style);
- p.setColor(SK_ColorRED);
-
- // Draw red vertical stripes on transparent background
- SkRect r;
- for (int x = 0; x < w; x+=2)
- {
- r.set(SkIntToScalar(x), 0, SkIntToScalar(x+1), SkIntToScalar(h));
- canvas.drawRect(r, p);
- }
-
- } else if (kThreeStripes_SourceAlpha == fSourceAlpha) {
- bm.eraseColor(0);
-
- SkCanvas canvas(bm);
- SkPaint p;
- p.setAntiAlias(false);
- p.setStyle(SkPaint::kFill_Style);
-
- // Draw vertical stripes on transparent background with a pattern
- // where the first pixel is fully transparent, the next is semi-transparent
- // and the third is fully opaque.
- SkRect r;
- for (int x = 0; x < w; x++)
- {
- if (x % 3 == 0) {
- continue; // Keep transparent
- } else if (x % 3 == 1) {
- p.setColor(SkColorSetARGB(127, 127, 127, 127)); // Semi-transparent
- } else if (x % 3 == 2) {
- p.setColor(SK_ColorRED); // Opaque
- }
- r.set(SkIntToScalar(x), 0, SkIntToScalar(x+1), SkIntToScalar(h));
- canvas.drawRect(r, p);
- }
- }
- }
-
-private:
- typedef BitmapBench INHERITED;
-};
static SkBenchmark* Fact0(void* p) { return new BitmapBench(p, false, SkBitmap::kARGB_8888_Config); }
static SkBenchmark* Fact1(void* p) { return new BitmapBench(p, true, SkBitmap::kARGB_8888_Config); }
static SkBenchmark* Fact2(void* p) { return new BitmapBench(p, true, SkBitmap::kRGB_565_Config); }
@@ -364,12 +263,6 @@ static SkBenchmark* Fact14(void* p) { return new FilterBitmapBench(p, true, SkBi
static SkBenchmark* Fact15(void* p) { return new FilterBitmapBench(p, true, SkBitmap::kARGB_8888_Config, true, true, -1, -1, true, true, true); }
static SkBenchmark* Fact16(void* p) { return new FilterBitmapBench(p, true, SkBitmap::kARGB_8888_Config, true, false, -1, -1, true, true, true); }
-// source alpha tests -> S32A_Opaque_BlitRow32_{arm,neon}
-static SkBenchmark* Fact17(void* p) { return new SourceAlphaBitmapBench(p, SourceAlphaBitmapBench::kOpaque_SourceAlpha, SkBitmap::kARGB_8888_Config); }
-static SkBenchmark* Fact18(void* p) { return new SourceAlphaBitmapBench(p, SourceAlphaBitmapBench::kTransparent_SourceAlpha, SkBitmap::kARGB_8888_Config); }
-static SkBenchmark* Fact19(void* p) { return new SourceAlphaBitmapBench(p, SourceAlphaBitmapBench::kTwoStripes_SourceAlpha, SkBitmap::kARGB_8888_Config); }
-static SkBenchmark* Fact20(void* p) { return new SourceAlphaBitmapBench(p, SourceAlphaBitmapBench::kThreeStripes_SourceAlpha, SkBitmap::kARGB_8888_Config); }
-
static BenchRegistry gReg0(Fact0);
static BenchRegistry gReg1(Fact1);
static BenchRegistry gReg2(Fact2);
@@ -390,7 +283,3 @@ static BenchRegistry gReg14(Fact14);
static BenchRegistry gReg15(Fact15);
static BenchRegistry gReg16(Fact16);
-static BenchRegistry gReg17(Fact17);
-static BenchRegistry gReg18(Fact18);
-static BenchRegistry gReg19(Fact19);
-static BenchRegistry gReg20(Fact20);