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 |