Commit 388ab98a authored by Khushal's avatar Khushal Committed by Commit Bot

cc: Avoid a decode task for bitmaps uploaded using GPU image cache.

These are bitmaps so they don't need a seperate decode task. Avoid the
additional task hop.

R=ericrk@chromium.org

Bug: 898886
Change-Id: I8b61b99e3f488d8def752b6ea1f3472be3723628
Reviewed-on: https://chromium-review.googlesource.com/c/1299782Reviewed-by: default avatarEric Karl <ericrk@chromium.org>
Commit-Queue: Khushal <khushalsagar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#602923}
parent 0275d360
......@@ -734,6 +734,7 @@ ImageDecodeCache::TaskResult GpuImageDecodeCache::GetTaskForImageAndRefInternal(
DecodeTaskType task_type) {
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug"),
"GpuImageDecodeCache::GetTaskForImageAndRef");
if (SkipImage(draw_image))
return TaskResult(false);
......@@ -791,10 +792,12 @@ ImageDecodeCache::TaskResult GpuImageDecodeCache::GetTaskForImageAndRefInternal(
// Ref image and create a upload and decode tasks. We will release this ref
// in UploadTaskCompleted.
RefImage(draw_image, cache_key);
auto decode_task =
image_data->is_bitmap_backed
? nullptr
: GetImageDecodeTaskAndRef(draw_image, tracing_info, task_type);
task = base::MakeRefCounted<ImageUploadTaskImpl>(
this, draw_image,
GetImageDecodeTaskAndRef(draw_image, tracing_info, task_type),
tracing_info);
this, draw_image, std::move(decode_task), tracing_info);
image_data->upload.task = task;
} else {
task = GetImageDecodeTaskAndRef(draw_image, tracing_info, task_type);
......@@ -1114,10 +1117,16 @@ void GpuImageDecodeCache::UploadImageInTask(const DrawImage& draw_image) {
gr_context_access.emplace(context_);
base::AutoLock lock(lock_);
ImageData* image_data = GetImageDataForDrawImage(
draw_image, InUseCacheKey::FromDrawImage(draw_image));
auto cache_key = InUseCacheKey::FromDrawImage(draw_image);
ImageData* image_data = GetImageDataForDrawImage(draw_image, cache_key);
DCHECK(image_data);
DCHECK(image_data->is_budgeted) << "Must budget an image for pre-decoding";
if (image_data->is_bitmap_backed) {
RefImageDecode(draw_image, cache_key);
DecodeImageIfNecessary(draw_image, image_data, TaskType::kInRaster);
}
UploadImageIfNecessary(draw_image, image_data);
}
......@@ -1183,6 +1192,7 @@ scoped_refptr<TileTask> GpuImageDecodeCache::GetImageDecodeTaskAndRef(
ImageData* image_data = GetImageDataForDrawImage(draw_image, cache_key);
DCHECK(image_data);
DCHECK(!image_data->is_bitmap_backed);
if (image_data->decode.is_locked()) {
// We should never be creating a decode task for a not budgeted image.
DCHECK(image_data->is_budgeted);
......
......@@ -2251,7 +2251,7 @@ TEST_P(GpuImageDecodeCacheTest, NonLazyImageUploadNoScale) {
EXPECT_FALSE(cache->GetSWImageDecodeForTesting(draw_image));
}
TEST_P(GpuImageDecodeCacheTest, NonLazyImageUploadNoScaleTask) {
TEST_P(GpuImageDecodeCacheTest, NonLazyImageUploadTaskHasNoDeps) {
auto cache = CreateCache();
bool is_decomposable = true;
SkFilterQuality quality = kHigh_SkFilterQuality;
......@@ -2265,7 +2265,7 @@ TEST_P(GpuImageDecodeCacheTest, NonLazyImageUploadNoScaleTask) {
cache->GetTaskForImageAndRef(draw_image, ImageDecodeCache::TracingInfo());
EXPECT_TRUE(result.need_unref);
EXPECT_TRUE(result.task);
TestTileTaskRunner::ProcessTask(result.task->dependencies()[0].get());
EXPECT_TRUE(result.task->dependencies().empty());
TestTileTaskRunner::ProcessTask(result.task.get());
cache->UnrefImage(draw_image);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment