| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 #include "SkBenchmark.h" | 8 #include "SkBenchmark.h" |
| 9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
| 10 #include "SkPaint.h" | 10 #include "SkPaint.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 } | 26 } |
| 27 | 27 |
| 28 static uint8_t compute666Index(SkPMColor c) { | 28 static uint8_t compute666Index(SkPMColor c) { |
| 29 int r = SkGetPackedR32(c); | 29 int r = SkGetPackedR32(c); |
| 30 int g = SkGetPackedG32(c); | 30 int g = SkGetPackedG32(c); |
| 31 int b = SkGetPackedB32(c); | 31 int b = SkGetPackedB32(c); |
| 32 | 32 |
| 33 return convByteTo6(r) * 36 + convByteTo6(g) * 6 + convByteTo6(b); | 33 return convByteTo6(r) * 36 + convByteTo6(g) * 6 + convByteTo6(b); |
| 34 } | 34 } |
| 35 | 35 |
| 36 static void convertToIndex666(const SkBitmap& src, SkBitmap* dst) { | 36 static void convertToIndex666(const SkBitmap& src, SkBitmap* dst, bool isOpaque)
{ |
| 37 SkColorTable* ctable = new SkColorTable(216); | 37 SkPMColor storage[216]; |
| 38 SkPMColor* colors = ctable->lockColors(); | 38 SkPMColor* colors = storage; |
| 39 // rrr ggg bbb | 39 // rrr ggg bbb |
| 40 for (int r = 0; r < 6; r++) { | 40 for (int r = 0; r < 6; r++) { |
| 41 int rr = conv6ToByte(r); | 41 int rr = conv6ToByte(r); |
| 42 for (int g = 0; g < 6; g++) { | 42 for (int g = 0; g < 6; g++) { |
| 43 int gg = conv6ToByte(g); | 43 int gg = conv6ToByte(g); |
| 44 for (int b = 0; b < 6; b++) { | 44 for (int b = 0; b < 6; b++) { |
| 45 int bb = conv6ToByte(b); | 45 int bb = conv6ToByte(b); |
| 46 *colors++ = SkPreMultiplyARGB(0xFF, rr, gg, bb); | 46 *colors++ = SkPreMultiplyARGB(0xFF, rr, gg, bb); |
| 47 } | 47 } |
| 48 } | 48 } |
| 49 } | 49 } |
| 50 ctable->unlockColors(true); | 50 SkColorTable* ctable = new SkColorTable(storage, 216, |
| 51 isOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType); |
| 51 dst->setConfig(SkBitmap::kIndex8_Config, src.width(), src.height()); | 52 dst->setConfig(SkBitmap::kIndex8_Config, src.width(), src.height()); |
| 52 dst->allocPixels(ctable); | 53 dst->allocPixels(ctable); |
| 53 ctable->unref(); | 54 ctable->unref(); |
| 54 | 55 |
| 55 SkAutoLockPixels alps(src); | 56 SkAutoLockPixels alps(src); |
| 56 SkAutoLockPixels alpd(*dst); | 57 SkAutoLockPixels alpd(*dst); |
| 57 | 58 |
| 58 for (int y = 0; y < src.height(); y++) { | 59 for (int y = 0; y < src.height(); y++) { |
| 59 const SkPMColor* srcP = src.getAddr32(0, y); | 60 const SkPMColor* srcP = src.getAddr32(0, y); |
| 60 uint8_t* dstP = dst->getAddr8(0, y); | 61 uint8_t* dstP = dst->getAddr8(0, y); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 } else { | 114 } else { |
| 114 bm.setConfig(fConfig, W, H); | 115 bm.setConfig(fConfig, W, H); |
| 115 } | 116 } |
| 116 | 117 |
| 117 bm.allocPixels(); | 118 bm.allocPixels(); |
| 118 bm.eraseColor(fIsOpaque ? SK_ColorBLACK : 0); | 119 bm.eraseColor(fIsOpaque ? SK_ColorBLACK : 0); |
| 119 | 120 |
| 120 onDrawIntoBitmap(bm); | 121 onDrawIntoBitmap(bm); |
| 121 | 122 |
| 122 if (SkBitmap::kIndex8_Config == fConfig) { | 123 if (SkBitmap::kIndex8_Config == fConfig) { |
| 123 convertToIndex666(bm, &fBitmap); | 124 convertToIndex666(bm, &fBitmap, fIsOpaque); |
| 124 } else { | 125 } else { |
| 125 fBitmap = bm; | 126 fBitmap = bm; |
| 126 } | 127 } |
| 127 | 128 |
| 128 if (fBitmap.getColorTable()) { | |
| 129 fBitmap.getColorTable()->setIsOpaque(fIsOpaque); | |
| 130 } | |
| 131 fBitmap.setIsOpaque(fIsOpaque); | 129 fBitmap.setIsOpaque(fIsOpaque); |
| 132 fBitmap.setIsVolatile(fIsVolatile); | 130 fBitmap.setIsVolatile(fIsVolatile); |
| 133 } | 131 } |
| 134 | 132 |
| 135 virtual void onDraw(SkCanvas* canvas) { | 133 virtual void onDraw(SkCanvas* canvas) { |
| 136 SkIPoint dim = this->getSize(); | 134 SkIPoint dim = this->getSize(); |
| 137 SkRandom rand; | 135 SkRandom rand; |
| 138 | 136 |
| 139 SkPaint paint(fPaint); | 137 SkPaint paint(fPaint); |
| 140 this->setupPaint(&paint); | 138 this->setupPaint(&paint); |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 DEF_BENCH( return new FilterBitmapBench(true, SkBitmap::kARGB_8888_Config, true,
false, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) | 376 DEF_BENCH( return new FilterBitmapBench(true, SkBitmap::kARGB_8888_Config, true,
false, kScale_Flag | kRotate_Flag | kBilerp_Flag); ) |
| 379 | 377 |
| 380 DEF_BENCH( return new FilterBitmapBench(false, SkBitmap::kARGB_8888_Config, fals
e, false, kScale_Flag | kBilerp_Flag | kBicubic_Flag); ) | 378 DEF_BENCH( return new FilterBitmapBench(false, SkBitmap::kARGB_8888_Config, fals
e, false, kScale_Flag | kBilerp_Flag | kBicubic_Flag); ) |
| 381 DEF_BENCH( return new FilterBitmapBench(false, SkBitmap::kARGB_8888_Config, fals
e, false, kScale_Flag | kRotate_Flag | kBilerp_Flag | kBicubic_Flag); ) | 379 DEF_BENCH( return new FilterBitmapBench(false, SkBitmap::kARGB_8888_Config, fals
e, false, kScale_Flag | kRotate_Flag | kBilerp_Flag | kBicubic_Flag); ) |
| 382 | 380 |
| 383 // source alpha tests -> S32A_Opaque_BlitRow32_{arm,neon} | 381 // source alpha tests -> S32A_Opaque_BlitRow32_{arm,neon} |
| 384 DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kOpaque_Sou
rceAlpha, SkBitmap::kARGB_8888_Config); ) | 382 DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kOpaque_Sou
rceAlpha, SkBitmap::kARGB_8888_Config); ) |
| 385 DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kTransparen
t_SourceAlpha, SkBitmap::kARGB_8888_Config); ) | 383 DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kTransparen
t_SourceAlpha, SkBitmap::kARGB_8888_Config); ) |
| 386 DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kTwoStripes
_SourceAlpha, SkBitmap::kARGB_8888_Config); ) | 384 DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kTwoStripes
_SourceAlpha, SkBitmap::kARGB_8888_Config); ) |
| 387 DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kThreeStrip
es_SourceAlpha, SkBitmap::kARGB_8888_Config); ) | 385 DEF_BENCH( return new SourceAlphaBitmapBench(SourceAlphaBitmapBench::kThreeStrip
es_SourceAlpha, SkBitmap::kARGB_8888_Config); ) |
| OLD | NEW |