| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/tiles/gpu_image_decode_cache.h" | 5 #include "cc/tiles/gpu_image_decode_cache.h" |
| 6 | 6 |
| 7 #include <inttypes.h> | 7 #include <inttypes.h> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/debug/alias.h" | 10 #include "base/debug/alias.h" |
| (...skipping 1112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1123 DLOG(ERROR) << "getDeferredTextureImageData failed despite params " | 1123 DLOG(ERROR) << "getDeferredTextureImageData failed despite params " |
| 1124 << "having validated."; | 1124 << "having validated."; |
| 1125 backing_memory->Unlock(); | 1125 backing_memory->Unlock(); |
| 1126 backing_memory.reset(); | 1126 backing_memory.reset(); |
| 1127 } | 1127 } |
| 1128 break; | 1128 break; |
| 1129 } | 1129 } |
| 1130 } | 1130 } |
| 1131 } | 1131 } |
| 1132 | 1132 |
| 1133 // TODO(ccameron,msarett): Convert image to target color space. | |
| 1134 // http://crbug.com/706613 | |
| 1135 | |
| 1136 if (image_data->decode.data()) { | 1133 if (image_data->decode.data()) { |
| 1137 // An at-raster task decoded this before us. Ingore our decode. | 1134 // An at-raster task decoded this before us. Ingore our decode. |
| 1138 return; | 1135 return; |
| 1139 } | 1136 } |
| 1140 | 1137 |
| 1141 if (!backing_memory) { | 1138 if (!backing_memory) { |
| 1142 // If |backing_memory| was not populated, we had a non-decodable image. | 1139 // If |backing_memory| was not populated, we had a non-decodable image. |
| 1143 image_data->decode.decode_failure = true; | 1140 image_data->decode.decode_failure = true; |
| 1144 return; | 1141 return; |
| 1145 } | 1142 } |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1189 uploaded_image = SkImage::MakeFromDeferredTextureImageData( | 1186 uploaded_image = SkImage::MakeFromDeferredTextureImageData( |
| 1190 context_->GrContext(), image_data->decode.data()->data(), | 1187 context_->GrContext(), image_data->decode.data()->data(), |
| 1191 SkBudgeted::kNo); | 1188 SkBudgeted::kNo); |
| 1192 break; | 1189 break; |
| 1193 } | 1190 } |
| 1194 } | 1191 } |
| 1195 } | 1192 } |
| 1196 image_data->decode.mark_used(); | 1193 image_data->decode.mark_used(); |
| 1197 DCHECK(uploaded_image); | 1194 DCHECK(uploaded_image); |
| 1198 | 1195 |
| 1196 if (draw_image.target_color_space().IsValid()) { |
| 1197 TRACE_EVENT0("cc", "GpuImageDecodeCache::UploadImage - color conversion"); |
| 1198 uploaded_image = uploaded_image->makeColorSpace( |
| 1199 draw_image.target_color_space().ToSkColorSpace(), |
| 1200 SkTransferFunctionBehavior::kIgnore); |
| 1201 } |
| 1202 DCHECK(uploaded_image); |
| 1203 |
| 1199 // At-raster may have decoded this while we were unlocked. If so, ignore our | 1204 // At-raster may have decoded this while we were unlocked. If so, ignore our |
| 1200 // result. | 1205 // result. |
| 1201 if (!image_data->upload.image()) | 1206 if (!image_data->upload.image()) |
| 1202 image_data->upload.SetImage(std::move(uploaded_image)); | 1207 image_data->upload.SetImage(std::move(uploaded_image)); |
| 1203 } | 1208 } |
| 1204 | 1209 |
| 1205 scoped_refptr<GpuImageDecodeCache::ImageData> | 1210 scoped_refptr<GpuImageDecodeCache::ImageData> |
| 1206 GpuImageDecodeCache::CreateImageData(const DrawImage& draw_image) { | 1211 GpuImageDecodeCache::CreateImageData(const DrawImage& draw_image) { |
| 1207 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), | 1212 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"), |
| 1208 "GpuImageDecodeCache::CreateImageData"); | 1213 "GpuImageDecodeCache::CreateImageData"); |
| 1209 lock_.AssertAcquired(); | 1214 lock_.AssertAcquired(); |
| 1210 | 1215 |
| 1211 DecodedDataMode mode; | 1216 DecodedDataMode mode; |
| 1212 int upload_scale_mip_level = CalculateUploadScaleMipLevel(draw_image); | 1217 int upload_scale_mip_level = CalculateUploadScaleMipLevel(draw_image); |
| 1213 auto params = SkImage::DeferredTextureImageUsageParams( | 1218 auto params = SkImage::DeferredTextureImageUsageParams( |
| 1214 draw_image.matrix(), CalculateUploadScaleFilterQuality(draw_image), | 1219 draw_image.matrix(), CalculateUploadScaleFilterQuality(draw_image), |
| 1215 upload_scale_mip_level); | 1220 upload_scale_mip_level); |
| 1216 size_t data_size = draw_image.image()->getDeferredTextureImageData( | 1221 size_t data_size = draw_image.image()->getDeferredTextureImageData( |
| 1217 *context_threadsafe_proxy_.get(), ¶ms, 1, nullptr, | 1222 *context_threadsafe_proxy_.get(), ¶ms, 1, nullptr, nullptr); |
| 1218 draw_image.target_color_space().ToSkColorSpace().get()); | |
| 1219 | 1223 |
| 1220 if (data_size == 0) { | 1224 if (data_size == 0) { |
| 1221 // Can't upload image, too large or other failure. Try to use SW fallback. | 1225 // Can't upload image, too large or other failure. Try to use SW fallback. |
| 1222 SkImageInfo image_info = | 1226 SkImageInfo image_info = |
| 1223 CreateImageInfoForDrawImage(draw_image, upload_scale_mip_level); | 1227 CreateImageInfoForDrawImage(draw_image, upload_scale_mip_level); |
| 1224 data_size = image_info.getSafeSize(image_info.minRowBytes()); | 1228 data_size = image_info.getSafeSize(image_info.minRowBytes()); |
| 1225 mode = DecodedDataMode::CPU; | 1229 mode = DecodedDataMode::CPU; |
| 1226 } else { | 1230 } else { |
| 1227 mode = DecodedDataMode::GPU; | 1231 mode = DecodedDataMode::GPU; |
| 1228 } | 1232 } |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1335 | 1339 |
| 1336 void GpuImageDecodeCache::OnPurgeMemory() { | 1340 void GpuImageDecodeCache::OnPurgeMemory() { |
| 1337 base::AutoLock lock(lock_); | 1341 base::AutoLock lock(lock_); |
| 1338 // Temporary changes |memory_state_| to free up cache as much as possible. | 1342 // Temporary changes |memory_state_| to free up cache as much as possible. |
| 1339 base::AutoReset<base::MemoryState> reset(&memory_state_, | 1343 base::AutoReset<base::MemoryState> reset(&memory_state_, |
| 1340 base::MemoryState::SUSPENDED); | 1344 base::MemoryState::SUSPENDED); |
| 1341 EnsureCapacity(0); | 1345 EnsureCapacity(0); |
| 1342 } | 1346 } |
| 1343 | 1347 |
| 1344 } // namespace cc | 1348 } // namespace cc |
| OLD | NEW |