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

Side by Side Diff: cc/tiles/gpu_image_decode_cache.cc

Issue 2801413002: color: Enable color conversion in image decoder caches (Closed)
Patch Set: Rebase Created 3 years, 8 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 // 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
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
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(), &params, 1, nullptr, 1222 *context_threadsafe_proxy_.get(), &params, 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
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
OLDNEW
« no previous file with comments | « no previous file | cc/tiles/software_image_decode_cache.h » ('j') | cc/tiles/software_image_decode_cache.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698