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

Side by Side Diff: src/core/SkSpriteBlitter_ARGB32.cpp

Issue 179343005: Add a class to allocate small objects w/o extra calls to new. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Rename the .h file Created 6 years, 9 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
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
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 8
9 9
10 #include "SkSpriteBlitter.h" 10 #include "SkSpriteBlitter.h"
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 do { 256 do {
257 srcover_row(dst, src, width); 257 srcover_row(dst, src, width);
258 dst = (SkPMColor* SK_RESTRICT)((char*)dst + dstRB); 258 dst = (SkPMColor* SK_RESTRICT)((char*)dst + dstRB);
259 src = (const SkPMColor16* SK_RESTRICT)((const char*)src + srcRB); 259 src = (const SkPMColor16* SK_RESTRICT)((const char*)src + srcRB);
260 } while (--height != 0); 260 } while (--height != 0);
261 } 261 }
262 }; 262 };
263 263
264 /////////////////////////////////////////////////////////////////////////////// 264 ///////////////////////////////////////////////////////////////////////////////
265 265
266 #include "SkTemplatesPriv.h" 266 SkSpriteBlitter* SkSpriteBlitter::ChooseD32(const SkBitmap& source, const SkPain t& paint,
267 SkTBlitterAllocator* allocator) {
268 SkASSERT(allocator != NULL);
267 269
268 SkSpriteBlitter* SkSpriteBlitter::ChooseD32(const SkBitmap& source,
269 const SkPaint& paint,
270 void* storage, size_t storageSize) {
271 if (paint.getMaskFilter() != NULL) { 270 if (paint.getMaskFilter() != NULL) {
272 return NULL; 271 return NULL;
273 } 272 }
274 273
275 U8CPU alpha = paint.getAlpha(); 274 U8CPU alpha = paint.getAlpha();
276 SkXfermode* xfermode = paint.getXfermode(); 275 SkXfermode* xfermode = paint.getXfermode();
277 SkColorFilter* filter = paint.getColorFilter(); 276 SkColorFilter* filter = paint.getColorFilter();
278 SkSpriteBlitter* blitter = NULL; 277 SkSpriteBlitter* blitter = NULL;
279 278
280 switch (source.colorType()) { 279 switch (source.colorType()) {
281 case kARGB_4444_SkColorType: 280 case kARGB_4444_SkColorType:
282 if (alpha != 0xFF) { 281 if (alpha != 0xFF) {
283 return NULL; // we only have opaque sprites 282 return NULL; // we only have opaque sprites
284 } 283 }
285 if (xfermode || filter) { 284 if (xfermode || filter) {
286 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D32_S4444_XferFilter, 285 blitter = allocator->createT<Sprite_D32_S4444_XferFilter>(source , paint);
287 storage, storageSize, (source, paint));
288 } else if (source.isOpaque()) { 286 } else if (source.isOpaque()) {
289 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D32_S4444_Opaque, 287 blitter = allocator->createT<Sprite_D32_S4444_Opaque>(source);
290 storage, storageSize, (source));
291 } else { 288 } else {
292 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D32_S4444, 289 blitter = allocator->createT<Sprite_D32_S4444>(source);
293 storage, storageSize, (source));
294 } 290 }
295 break; 291 break;
296 case kPMColor_SkColorType: 292 case kPMColor_SkColorType:
297 if (xfermode || filter) { 293 if (xfermode || filter) {
298 if (255 == alpha) { 294 if (255 == alpha) {
299 // this can handle xfermode or filter, but not alpha 295 // this can handle xfermode or filter, but not alpha
300 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D32_S32A_XferFilter, 296 blitter = allocator->createT<Sprite_D32_S32A_XferFilter>(sou rce, paint);
301 storage, storageSize, (source, paint));
302 } 297 }
303 } else { 298 } else {
304 // this can handle alpha, but not xfermode or filter 299 // this can handle alpha, but not xfermode or filter
305 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D32_S32, 300 blitter = allocator->createT<Sprite_D32_S32>(source, alpha);
306 storage, storageSize, (source, alpha));
307 } 301 }
308 break; 302 break;
309 default: 303 default:
310 break; 304 break;
311 } 305 }
312 return blitter; 306 return blitter;
313 } 307 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698