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

Side by Side Diff: src/core/SkSpriteBlitter_RGB16.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 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 } 299 }
300 300
301 private: 301 private:
302 SkBlitRow::Proc fProc; 302 SkBlitRow::Proc fProc;
303 303
304 typedef SkSpriteBlitter INHERITED; 304 typedef SkSpriteBlitter INHERITED;
305 }; 305 };
306 306
307 /////////////////////////////////////////////////////////////////////////////// 307 ///////////////////////////////////////////////////////////////////////////////
308 308
309 #include "SkTemplatesPriv.h" 309 SkSpriteBlitter* SkSpriteBlitter::ChooseD16(const SkBitmap& source, const SkPain t& paint,
310 SkTBlitterAllocator* allocator) {
310 311
311 SkSpriteBlitter* SkSpriteBlitter::ChooseD16(const SkBitmap& source, 312 SkASSERT(allocator != NULL);
312 const SkPaint& paint, 313
313 void* storage, size_t storageSize) {
314 if (paint.getMaskFilter() != NULL) { // may add cases for this 314 if (paint.getMaskFilter() != NULL) { // may add cases for this
315 return NULL; 315 return NULL;
316 } 316 }
317 if (paint.getXfermode() != NULL) { // may add cases for this 317 if (paint.getXfermode() != NULL) { // may add cases for this
318 return NULL; 318 return NULL;
319 } 319 }
320 if (paint.getColorFilter() != NULL) { // may add cases for this 320 if (paint.getColorFilter() != NULL) { // may add cases for this
321 return NULL; 321 return NULL;
322 } 322 }
323 323
324 SkSpriteBlitter* blitter = NULL; 324 SkSpriteBlitter* blitter = NULL;
325 unsigned alpha = paint.getAlpha(); 325 unsigned alpha = paint.getAlpha();
326 326
327 switch (source.colorType()) { 327 switch (source.colorType()) {
328 case kPMColor_SkColorType: 328 case kPMColor_SkColorType: {
329 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D16_S32_BlitRowProc, 329 blitter = allocator->createT<Sprite_D16_S32_BlitRowProc>(source);
330 storage, storageSize, (source));
331 break; 330 break;
331 }
332 case kARGB_4444_SkColorType: 332 case kARGB_4444_SkColorType:
333 if (255 == alpha) { 333 if (255 == alpha) {
334 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D16_S4444_Opaque, 334 blitter = allocator->createT<Sprite_D16_S4444_Opaque>(source);
335 storage, storageSize, (source));
336 } else { 335 } else {
337 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D16_S4444_Blend, 336 blitter = allocator->createT<Sprite_D16_S4444_Blend>(source, alp ha >> 4);
338 storage, storageSize, (source, alpha >> 4));
339 } 337 }
340 break; 338 break;
341 case kRGB_565_SkColorType: 339 case kRGB_565_SkColorType:
342 if (255 == alpha) { 340 if (255 == alpha) {
343 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D16_S16_Opaque, 341 blitter = allocator->createT<Sprite_D16_S16_Opaque>(source);
344 storage, storageSize, (source));
345 } else { 342 } else {
346 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D16_S16_Blend, 343 blitter = allocator->createT<Sprite_D16_S16_Blend>(source, alpha );
347 storage, storageSize, (source, alpha));
348 } 344 }
349 break; 345 break;
350 case kIndex_8_SkColorType: 346 case kIndex_8_SkColorType:
351 if (paint.isDither()) { 347 if (paint.isDither()) {
352 // we don't support dither yet in these special cases 348 // we don't support dither yet in these special cases
353 break; 349 break;
354 } 350 }
355 if (source.isOpaque()) { 351 if (source.isOpaque()) {
356 if (255 == alpha) { 352 if (255 == alpha) {
357 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D16_SIndex8_Opaque, 353 blitter = allocator->createT<Sprite_D16_SIndex8_Opaque>(sour ce);
358 storage, storageSize, (source));
359 } else { 354 } else {
360 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D16_SIndex8_Blend, 355 blitter = allocator->createT<Sprite_D16_SIndex8_Blend>(sourc e, alpha);
361 storage, storageSize, (source, alpha));
362 } 356 }
363 } else { 357 } else {
364 if (255 == alpha) { 358 if (255 == alpha) {
365 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D16_SIndex8A_Opaque, 359 blitter = allocator->createT<Sprite_D16_SIndex8A_Opaque>(sou rce);
366 storage, storageSize, (source));
367 } else { 360 } else {
368 SK_PLACEMENT_NEW_ARGS(blitter, Sprite_D16_SIndex8A_Blend, 361 blitter = allocator->createT<Sprite_D16_SIndex8A_Blend>(sour ce, alpha);
369 storage, storageSize, (source, alpha));
370 } 362 }
371 } 363 }
372 break; 364 break;
373 default: 365 default:
374 break; 366 break;
375 } 367 }
376 return blitter; 368 return blitter;
377 } 369 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698