OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkBitmap.h" | 8 #include "SkBitmap.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkColor.h" | 10 #include "SkColor.h" |
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 // example of how Android will do this inside their BitmapFactory | 484 // example of how Android will do this inside their BitmapFactory |
485 static SkPixelRef* install_pixel_ref(SkBitmap* bitmap, | 485 static SkPixelRef* install_pixel_ref(SkBitmap* bitmap, |
486 SkStreamRewindable* stream, | 486 SkStreamRewindable* stream, |
487 int sampleSize, bool ditherImage) { | 487 int sampleSize, bool ditherImage) { |
488 SkASSERT(bitmap != NULL); | 488 SkASSERT(bitmap != NULL); |
489 SkASSERT(stream != NULL); | 489 SkASSERT(stream != NULL); |
490 SkASSERT(stream->rewind()); | 490 SkASSERT(stream->rewind()); |
491 SkASSERT(stream->unique()); | 491 SkASSERT(stream->unique()); |
492 SkColorType colorType = bitmap->colorType(); | 492 SkColorType colorType = bitmap->colorType(); |
493 SkDecodingImageGenerator::Options opts(sampleSize, ditherImage, colorType); | 493 SkDecodingImageGenerator::Options opts(sampleSize, ditherImage, colorType); |
494 SkAutoTDelete<SkImageGenerator> gen( | 494 if (SkInstallDiscardablePixelRef( |
495 SkDecodingImageGenerator::Create(stream, opts)); | 495 SkDecodingImageGenerator::Create(stream, opts), bitmap)) { |
496 SkImageInfo info; | |
497 if ((NULL == gen.get()) || !gen->getInfo(&info)) { | |
498 return NULL; | |
499 } | |
500 SkDiscardableMemory::Factory* factory = NULL; | |
501 if (info.getSafeSize(info.minRowBytes()) < (32 * 1024)) { | |
502 // only use ashmem for large images, since mmaps come at a price | |
503 factory = SkGetGlobalDiscardableMemoryPool(); | |
504 } | |
505 if (SkInstallDiscardablePixelRef(gen.detach(), bitmap, factory)) { | |
506 return bitmap->pixelRef(); | 496 return bitmap->pixelRef(); |
507 } | 497 } |
508 return NULL; | 498 return NULL; |
509 } | 499 } |
510 /** | 500 /** |
511 * A test for the SkDecodingImageGenerator::Create and | 501 * A test for the SkDecodingImageGenerator::Create and |
512 * SkInstallDiscardablePixelRef functions. | 502 * SkInstallDiscardablePixelRef functions. |
513 */ | 503 */ |
514 DEF_TEST(ImprovedBitmapFactory, reporter) { | 504 DEF_TEST(ImprovedBitmapFactory, reporter) { |
515 SkString resourcePath = skiatest::Test::GetResourcePath(); | 505 SkString resourcePath = skiatest::Test::GetResourcePath(); |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
730 } | 720 } |
731 SkDecodingImageGenerator::Options options(scaleList[i], | 721 SkDecodingImageGenerator::Options options(scaleList[i], |
732 ditherList[j]); | 722 ditherList[j]); |
733 test_options(reporter, options, encodedStream, encodedData, | 723 test_options(reporter, options, encodedStream, encodedData, |
734 useDataList[m], path); | 724 useDataList[m], path); |
735 } | 725 } |
736 } | 726 } |
737 } | 727 } |
738 } | 728 } |
739 } | 729 } |
OLD | NEW |