Chromium Code Reviews| Index: cc/tiles/software_image_decode_controller.cc |
| diff --git a/cc/tiles/software_image_decode_controller.cc b/cc/tiles/software_image_decode_controller.cc |
| index e4fc39eb68878c0ecf53a5e269d9bdc3946b8d10..987dd8be6ceeb5ae17143a7837c93598147fa131 100644 |
| --- a/cc/tiles/software_image_decode_controller.cc |
| +++ b/cc/tiles/software_image_decode_controller.cc |
| @@ -107,12 +107,43 @@ SkFilterQuality GetDecodedFilterQuality(const ImageDecodeControllerKey& key) { |
| return std::min(key.filter_quality(), kLow_SkFilterQuality); |
| } |
| +SkColorType SkColorTypeForDecoding(ResourceFormat format) { |
| + // Use kN32_SkColorType if there is no corresponding SkColorType. |
| + switch (format) { |
| + case RGBA_4444: |
| + return kARGB_4444_SkColorType; |
| + case RGBA_8888: |
| + case BGRA_8888: |
| + return kN32_SkColorType; |
| + case ALPHA_8: |
| + return kAlpha_8_SkColorType; |
| + case RGB_565: |
| + return kRGB_565_SkColorType; |
| + case LUMINANCE_8: |
|
reed1
2016/03/17 14:38:23
kGray_8_SkColorType
bashi
2016/03/17 23:29:38
Done.
|
| + case ETC1: |
| + case RED_8: |
| + case LUMINANCE_F16: |
|
reed1
2016/03/17 14:38:23
BTW -- not hard for Skia to add native support for
bashi
2016/03/17 23:29:38
I'm not sure but I guess that LUM_16 is not common
|
| + return kN32_SkColorType; |
| + } |
| + NOTREACHED(); |
| + return kN32_SkColorType; |
| +} |
| + |
| +SkImageInfo CreateImageInfo(size_t width, |
| + size_t height, |
| + ResourceFormat format) { |
| + return SkImageInfo::Make(width, height, SkColorTypeForDecoding(format), |
| + kPremul_SkAlphaType); |
|
reed1
2016/03/17 14:38:23
FYI -- Skia is actively working on native support
|
| +} |
| + |
| } // namespace |
| -SoftwareImageDecodeController::SoftwareImageDecodeController() |
| +SoftwareImageDecodeController::SoftwareImageDecodeController( |
| + ResourceFormat format) |
| : decoded_images_(ImageMRUCache::NO_AUTO_EVICT), |
| at_raster_decoded_images_(ImageMRUCache::NO_AUTO_EVICT), |
| - locked_images_budget_(kLockedMemoryLimitBytes) {} |
| + locked_images_budget_(kLockedMemoryLimitBytes), |
| + format_(format) {} |
| SoftwareImageDecodeController::~SoftwareImageDecodeController() { |
| DCHECK_EQ(0u, decoded_images_ref_counts_.size()); |
| @@ -345,7 +376,7 @@ SoftwareImageDecodeController::DecodeImageInternal( |
| // just read pixels into the final memory. |
| if (key.can_use_original_decode()) { |
| SkImageInfo decoded_info = |
| - SkImageInfo::MakeN32Premul(image->width(), image->height()); |
| + CreateImageInfo(image->width(), image->height(), format_); |
| scoped_ptr<base::DiscardableMemory> decoded_pixels; |
| { |
| TRACE_EVENT0( |
| @@ -414,8 +445,8 @@ SoftwareImageDecodeController::DecodeImageInternal( |
| // Now we have a decoded_pixmap which represents the src_rect at the |
| // original scale. All we need to do is scale it. |
| DCHECK(!key.target_size().IsEmpty()); |
| - SkImageInfo scaled_info = SkImageInfo::MakeN32Premul( |
| - key.target_size().width(), key.target_size().height()); |
| + SkImageInfo scaled_info = CreateImageInfo( |
| + key.target_size().width(), key.target_size().height(), format_); |
| scoped_ptr<base::DiscardableMemory> scaled_pixels; |
| { |
| TRACE_EVENT0( |