Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Side by Side Diff: bench/BitmapBench.cpp

Issue 26572006: Revert "Revert "change SkColorTable to be immutable"" (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | bench/RepeatTileBench.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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); )
OLDNEW
« no previous file with comments | « no previous file | bench/RepeatTileBench.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698