| 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 "cc/paint/draw_image.h" | 7 #include "cc/paint/draw_image.h" |
| 8 #include "cc/test/test_context_provider.h" | 8 #include "cc/test/test_context_provider.h" |
| 9 #include "cc/test/test_tile_task_runner.h" | 9 #include "cc/test/test_tile_task_runner.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include "third_party/skia/include/core/SkRefCnt.h" | 11 #include "third_party/skia/include/core/SkRefCnt.h" |
| 12 | 12 |
| 13 namespace cc { | 13 namespace cc { |
| 14 namespace { | 14 namespace { |
| 15 | 15 |
| 16 gfx::ColorSpace DefaultColorSpace() { |
| 17 return gfx::ColorSpace::CreateSRGB(); |
| 18 } |
| 19 |
| 16 size_t kGpuMemoryLimitBytes = 96 * 1024 * 1024; | 20 size_t kGpuMemoryLimitBytes = 96 * 1024 * 1024; |
| 17 class TestGpuImageDecodeCache : public GpuImageDecodeCache { | 21 class TestGpuImageDecodeCache : public GpuImageDecodeCache { |
| 18 public: | 22 public: |
| 19 explicit TestGpuImageDecodeCache(ContextProvider* context) | 23 explicit TestGpuImageDecodeCache(ContextProvider* context) |
| 20 : GpuImageDecodeCache(context, | 24 : GpuImageDecodeCache(context, |
| 21 ResourceFormat::RGBA_8888, | 25 ResourceFormat::RGBA_8888, |
| 22 kGpuMemoryLimitBytes, | 26 kGpuMemoryLimitBytes, |
| 23 kGpuMemoryLimitBytes) {} | 27 kGpuMemoryLimitBytes) {} |
| 24 }; | 28 }; |
| 25 | 29 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 44 TEST(GpuImageDecodeCacheTest, GetTaskForImageSameImage) { | 48 TEST(GpuImageDecodeCacheTest, GetTaskForImageSameImage) { |
| 45 auto context_provider = TestContextProvider::Create(); | 49 auto context_provider = TestContextProvider::Create(); |
| 46 context_provider->BindToCurrentThread(); | 50 context_provider->BindToCurrentThread(); |
| 47 TestGpuImageDecodeCache cache(context_provider.get()); | 51 TestGpuImageDecodeCache cache(context_provider.get()); |
| 48 sk_sp<SkImage> image = CreateImage(100, 100); | 52 sk_sp<SkImage> image = CreateImage(100, 100); |
| 49 bool is_decomposable = true; | 53 bool is_decomposable = true; |
| 50 SkFilterQuality quality = kHigh_SkFilterQuality; | 54 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 51 | 55 |
| 52 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 56 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 53 quality, | 57 quality, |
| 54 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); | 58 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable), |
| 59 DefaultColorSpace()); |
| 55 scoped_refptr<TileTask> task; | 60 scoped_refptr<TileTask> task; |
| 56 bool need_unref = cache.GetTaskForImageAndRef( | 61 bool need_unref = cache.GetTaskForImageAndRef( |
| 57 draw_image, ImageDecodeCache::TracingInfo(), &task); | 62 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 58 EXPECT_TRUE(need_unref); | 63 EXPECT_TRUE(need_unref); |
| 59 EXPECT_TRUE(task); | 64 EXPECT_TRUE(task); |
| 60 | 65 |
| 61 DrawImage another_draw_image( | 66 DrawImage another_draw_image( |
| 62 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 67 image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| 63 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); | 68 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable), |
| 69 DefaultColorSpace()); |
| 64 scoped_refptr<TileTask> another_task; | 70 scoped_refptr<TileTask> another_task; |
| 65 need_unref = cache.GetTaskForImageAndRef( | 71 need_unref = cache.GetTaskForImageAndRef( |
| 66 another_draw_image, ImageDecodeCache::TracingInfo(), &another_task); | 72 another_draw_image, ImageDecodeCache::TracingInfo(), &another_task); |
| 67 EXPECT_TRUE(need_unref); | 73 EXPECT_TRUE(need_unref); |
| 68 EXPECT_TRUE(task.get() == another_task.get()); | 74 EXPECT_TRUE(task.get() == another_task.get()); |
| 69 | 75 |
| 70 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 76 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 71 TestTileTaskRunner::ProcessTask(task.get()); | 77 TestTileTaskRunner::ProcessTask(task.get()); |
| 72 | 78 |
| 73 cache.UnrefImage(draw_image); | 79 cache.UnrefImage(draw_image); |
| 74 cache.UnrefImage(draw_image); | 80 cache.UnrefImage(draw_image); |
| 75 } | 81 } |
| 76 | 82 |
| 77 TEST(GpuImageDecodeCacheTest, GetTaskForImageSmallerScale) { | 83 TEST(GpuImageDecodeCacheTest, GetTaskForImageSmallerScale) { |
| 78 auto context_provider = TestContextProvider::Create(); | 84 auto context_provider = TestContextProvider::Create(); |
| 79 context_provider->BindToCurrentThread(); | 85 context_provider->BindToCurrentThread(); |
| 80 TestGpuImageDecodeCache cache(context_provider.get()); | 86 TestGpuImageDecodeCache cache(context_provider.get()); |
| 81 sk_sp<SkImage> image = CreateImage(100, 100); | 87 sk_sp<SkImage> image = CreateImage(100, 100); |
| 82 bool is_decomposable = true; | 88 bool is_decomposable = true; |
| 83 SkFilterQuality quality = kHigh_SkFilterQuality; | 89 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 84 | 90 |
| 85 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 91 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 86 quality, | 92 quality, |
| 87 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); | 93 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable), |
| 94 DefaultColorSpace()); |
| 88 scoped_refptr<TileTask> task; | 95 scoped_refptr<TileTask> task; |
| 89 bool need_unref = cache.GetTaskForImageAndRef( | 96 bool need_unref = cache.GetTaskForImageAndRef( |
| 90 draw_image, ImageDecodeCache::TracingInfo(), &task); | 97 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 91 EXPECT_TRUE(need_unref); | 98 EXPECT_TRUE(need_unref); |
| 92 EXPECT_TRUE(task); | 99 EXPECT_TRUE(task); |
| 93 | 100 |
| 94 DrawImage another_draw_image( | 101 DrawImage another_draw_image( |
| 95 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 102 image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| 96 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 103 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 104 DefaultColorSpace()); |
| 97 scoped_refptr<TileTask> another_task; | 105 scoped_refptr<TileTask> another_task; |
| 98 need_unref = cache.GetTaskForImageAndRef( | 106 need_unref = cache.GetTaskForImageAndRef( |
| 99 another_draw_image, ImageDecodeCache::TracingInfo(), &another_task); | 107 another_draw_image, ImageDecodeCache::TracingInfo(), &another_task); |
| 100 EXPECT_TRUE(need_unref); | 108 EXPECT_TRUE(need_unref); |
| 101 EXPECT_TRUE(task.get() == another_task.get()); | 109 EXPECT_TRUE(task.get() == another_task.get()); |
| 102 | 110 |
| 103 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 111 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 104 TestTileTaskRunner::ProcessTask(task.get()); | 112 TestTileTaskRunner::ProcessTask(task.get()); |
| 105 | 113 |
| 106 cache.UnrefImage(draw_image); | 114 cache.UnrefImage(draw_image); |
| 107 cache.UnrefImage(another_draw_image); | 115 cache.UnrefImage(another_draw_image); |
| 108 } | 116 } |
| 109 | 117 |
| 110 TEST(GpuImageDecodeCacheTest, GetTaskForImageLowerQuality) { | 118 TEST(GpuImageDecodeCacheTest, GetTaskForImageLowerQuality) { |
| 111 auto context_provider = TestContextProvider::Create(); | 119 auto context_provider = TestContextProvider::Create(); |
| 112 context_provider->BindToCurrentThread(); | 120 context_provider->BindToCurrentThread(); |
| 113 TestGpuImageDecodeCache cache(context_provider.get()); | 121 TestGpuImageDecodeCache cache(context_provider.get()); |
| 114 sk_sp<SkImage> image = CreateImage(100, 100); | 122 sk_sp<SkImage> image = CreateImage(100, 100); |
| 115 bool is_decomposable = true; | 123 bool is_decomposable = true; |
| 116 SkMatrix matrix = CreateMatrix(SkSize::Make(0.4f, 0.4f), is_decomposable); | 124 SkMatrix matrix = CreateMatrix(SkSize::Make(0.4f, 0.4f), is_decomposable); |
| 117 | 125 |
| 118 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 126 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 119 kHigh_SkFilterQuality, matrix); | 127 kHigh_SkFilterQuality, matrix, DefaultColorSpace()); |
| 120 scoped_refptr<TileTask> task; | 128 scoped_refptr<TileTask> task; |
| 121 bool need_unref = cache.GetTaskForImageAndRef( | 129 bool need_unref = cache.GetTaskForImageAndRef( |
| 122 draw_image, ImageDecodeCache::TracingInfo(), &task); | 130 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 123 EXPECT_TRUE(need_unref); | 131 EXPECT_TRUE(need_unref); |
| 124 EXPECT_TRUE(task); | 132 EXPECT_TRUE(task); |
| 125 | 133 |
| 126 DrawImage another_draw_image(image, | 134 DrawImage another_draw_image( |
| 127 SkIRect::MakeWH(image->width(), image->height()), | 135 image, SkIRect::MakeWH(image->width(), image->height()), |
| 128 kLow_SkFilterQuality, matrix); | 136 kLow_SkFilterQuality, matrix, DefaultColorSpace()); |
| 129 scoped_refptr<TileTask> another_task; | 137 scoped_refptr<TileTask> another_task; |
| 130 need_unref = cache.GetTaskForImageAndRef( | 138 need_unref = cache.GetTaskForImageAndRef( |
| 131 another_draw_image, ImageDecodeCache::TracingInfo(), &another_task); | 139 another_draw_image, ImageDecodeCache::TracingInfo(), &another_task); |
| 132 EXPECT_TRUE(need_unref); | 140 EXPECT_TRUE(need_unref); |
| 133 EXPECT_TRUE(task.get() == another_task.get()); | 141 EXPECT_TRUE(task.get() == another_task.get()); |
| 134 | 142 |
| 135 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 143 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 136 TestTileTaskRunner::ProcessTask(task.get()); | 144 TestTileTaskRunner::ProcessTask(task.get()); |
| 137 | 145 |
| 138 cache.UnrefImage(draw_image); | 146 cache.UnrefImage(draw_image); |
| 139 cache.UnrefImage(another_draw_image); | 147 cache.UnrefImage(another_draw_image); |
| 140 } | 148 } |
| 141 | 149 |
| 142 TEST(GpuImageDecodeCacheTest, GetTaskForImageDifferentImage) { | 150 TEST(GpuImageDecodeCacheTest, GetTaskForImageDifferentImage) { |
| 143 auto context_provider = TestContextProvider::Create(); | 151 auto context_provider = TestContextProvider::Create(); |
| 144 context_provider->BindToCurrentThread(); | 152 context_provider->BindToCurrentThread(); |
| 145 TestGpuImageDecodeCache cache(context_provider.get()); | 153 TestGpuImageDecodeCache cache(context_provider.get()); |
| 146 bool is_decomposable = true; | 154 bool is_decomposable = true; |
| 147 SkFilterQuality quality = kHigh_SkFilterQuality; | 155 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 148 | 156 |
| 149 sk_sp<SkImage> first_image = CreateImage(100, 100); | 157 sk_sp<SkImage> first_image = CreateImage(100, 100); |
| 150 DrawImage first_draw_image( | 158 DrawImage first_draw_image( |
| 151 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 159 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 152 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 160 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 161 DefaultColorSpace()); |
| 153 scoped_refptr<TileTask> first_task; | 162 scoped_refptr<TileTask> first_task; |
| 154 bool need_unref = cache.GetTaskForImageAndRef( | 163 bool need_unref = cache.GetTaskForImageAndRef( |
| 155 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); | 164 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); |
| 156 EXPECT_TRUE(need_unref); | 165 EXPECT_TRUE(need_unref); |
| 157 EXPECT_TRUE(first_task); | 166 EXPECT_TRUE(first_task); |
| 158 | 167 |
| 159 sk_sp<SkImage> second_image = CreateImage(100, 100); | 168 sk_sp<SkImage> second_image = CreateImage(100, 100); |
| 160 DrawImage second_draw_image( | 169 DrawImage second_draw_image( |
| 161 second_image, | 170 second_image, |
| 162 SkIRect::MakeWH(second_image->width(), second_image->height()), quality, | 171 SkIRect::MakeWH(second_image->width(), second_image->height()), quality, |
| 163 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable)); | 172 CreateMatrix(SkSize::Make(0.25f, 0.25f), is_decomposable), |
| 173 DefaultColorSpace()); |
| 164 scoped_refptr<TileTask> second_task; | 174 scoped_refptr<TileTask> second_task; |
| 165 need_unref = cache.GetTaskForImageAndRef( | 175 need_unref = cache.GetTaskForImageAndRef( |
| 166 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); | 176 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); |
| 167 EXPECT_TRUE(need_unref); | 177 EXPECT_TRUE(need_unref); |
| 168 EXPECT_TRUE(second_task); | 178 EXPECT_TRUE(second_task); |
| 169 EXPECT_TRUE(first_task.get() != second_task.get()); | 179 EXPECT_TRUE(first_task.get() != second_task.get()); |
| 170 | 180 |
| 171 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); | 181 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); |
| 172 TestTileTaskRunner::ProcessTask(first_task.get()); | 182 TestTileTaskRunner::ProcessTask(first_task.get()); |
| 173 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); | 183 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
| 174 TestTileTaskRunner::ProcessTask(second_task.get()); | 184 TestTileTaskRunner::ProcessTask(second_task.get()); |
| 175 | 185 |
| 176 cache.UnrefImage(first_draw_image); | 186 cache.UnrefImage(first_draw_image); |
| 177 cache.UnrefImage(second_draw_image); | 187 cache.UnrefImage(second_draw_image); |
| 178 } | 188 } |
| 179 | 189 |
| 180 TEST(GpuImageDecodeCacheTest, GetTaskForImageLargerScale) { | 190 TEST(GpuImageDecodeCacheTest, GetTaskForImageLargerScale) { |
| 181 auto context_provider = TestContextProvider::Create(); | 191 auto context_provider = TestContextProvider::Create(); |
| 182 context_provider->BindToCurrentThread(); | 192 context_provider->BindToCurrentThread(); |
| 183 TestGpuImageDecodeCache cache(context_provider.get()); | 193 TestGpuImageDecodeCache cache(context_provider.get()); |
| 184 bool is_decomposable = true; | 194 bool is_decomposable = true; |
| 185 SkFilterQuality quality = kHigh_SkFilterQuality; | 195 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 186 | 196 |
| 187 sk_sp<SkImage> first_image = CreateImage(100, 100); | 197 sk_sp<SkImage> first_image = CreateImage(100, 100); |
| 188 DrawImage first_draw_image( | 198 DrawImage first_draw_image( |
| 189 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 199 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 190 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 200 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 201 DefaultColorSpace()); |
| 191 scoped_refptr<TileTask> first_task; | 202 scoped_refptr<TileTask> first_task; |
| 192 bool need_unref = cache.GetTaskForImageAndRef( | 203 bool need_unref = cache.GetTaskForImageAndRef( |
| 193 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); | 204 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); |
| 194 EXPECT_TRUE(need_unref); | 205 EXPECT_TRUE(need_unref); |
| 195 EXPECT_TRUE(first_task); | 206 EXPECT_TRUE(first_task); |
| 196 | 207 |
| 197 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); | 208 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); |
| 198 TestTileTaskRunner::ProcessTask(first_task.get()); | 209 TestTileTaskRunner::ProcessTask(first_task.get()); |
| 199 | 210 |
| 200 cache.UnrefImage(first_draw_image); | 211 cache.UnrefImage(first_draw_image); |
| 201 | 212 |
| 202 DrawImage second_draw_image( | 213 DrawImage second_draw_image( |
| 203 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 214 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 204 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable)); | 215 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 216 DefaultColorSpace()); |
| 205 scoped_refptr<TileTask> second_task; | 217 scoped_refptr<TileTask> second_task; |
| 206 need_unref = cache.GetTaskForImageAndRef( | 218 need_unref = cache.GetTaskForImageAndRef( |
| 207 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); | 219 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); |
| 208 EXPECT_TRUE(need_unref); | 220 EXPECT_TRUE(need_unref); |
| 209 EXPECT_TRUE(second_task); | 221 EXPECT_TRUE(second_task); |
| 210 EXPECT_TRUE(first_task.get() != second_task.get()); | 222 EXPECT_TRUE(first_task.get() != second_task.get()); |
| 211 | 223 |
| 212 DrawImage third_draw_image( | 224 DrawImage third_draw_image( |
| 213 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 225 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 214 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 226 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 227 DefaultColorSpace()); |
| 215 scoped_refptr<TileTask> third_task; | 228 scoped_refptr<TileTask> third_task; |
| 216 need_unref = cache.GetTaskForImageAndRef( | 229 need_unref = cache.GetTaskForImageAndRef( |
| 217 third_draw_image, ImageDecodeCache::TracingInfo(), &third_task); | 230 third_draw_image, ImageDecodeCache::TracingInfo(), &third_task); |
| 218 EXPECT_TRUE(need_unref); | 231 EXPECT_TRUE(need_unref); |
| 219 EXPECT_TRUE(third_task.get() == second_task.get()); | 232 EXPECT_TRUE(third_task.get() == second_task.get()); |
| 220 | 233 |
| 221 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); | 234 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
| 222 TestTileTaskRunner::ProcessTask(second_task.get()); | 235 TestTileTaskRunner::ProcessTask(second_task.get()); |
| 223 | 236 |
| 224 cache.UnrefImage(second_draw_image); | 237 cache.UnrefImage(second_draw_image); |
| 225 cache.UnrefImage(third_draw_image); | 238 cache.UnrefImage(third_draw_image); |
| 226 } | 239 } |
| 227 | 240 |
| 228 TEST(GpuImageDecodeCacheTest, GetTaskForImageLargerScaleNoReuse) { | 241 TEST(GpuImageDecodeCacheTest, GetTaskForImageLargerScaleNoReuse) { |
| 229 auto context_provider = TestContextProvider::Create(); | 242 auto context_provider = TestContextProvider::Create(); |
| 230 context_provider->BindToCurrentThread(); | 243 context_provider->BindToCurrentThread(); |
| 231 TestGpuImageDecodeCache cache(context_provider.get()); | 244 TestGpuImageDecodeCache cache(context_provider.get()); |
| 232 bool is_decomposable = true; | 245 bool is_decomposable = true; |
| 233 SkFilterQuality quality = kHigh_SkFilterQuality; | 246 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 234 | 247 |
| 235 sk_sp<SkImage> first_image = CreateImage(100, 100); | 248 sk_sp<SkImage> first_image = CreateImage(100, 100); |
| 236 DrawImage first_draw_image( | 249 DrawImage first_draw_image( |
| 237 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 250 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 238 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 251 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 252 DefaultColorSpace()); |
| 239 scoped_refptr<TileTask> first_task; | 253 scoped_refptr<TileTask> first_task; |
| 240 bool need_unref = cache.GetTaskForImageAndRef( | 254 bool need_unref = cache.GetTaskForImageAndRef( |
| 241 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); | 255 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); |
| 242 EXPECT_TRUE(need_unref); | 256 EXPECT_TRUE(need_unref); |
| 243 EXPECT_TRUE(first_task); | 257 EXPECT_TRUE(first_task); |
| 244 | 258 |
| 245 DrawImage second_draw_image( | 259 DrawImage second_draw_image( |
| 246 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 260 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 247 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable)); | 261 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 262 DefaultColorSpace()); |
| 248 scoped_refptr<TileTask> second_task; | 263 scoped_refptr<TileTask> second_task; |
| 249 need_unref = cache.GetTaskForImageAndRef( | 264 need_unref = cache.GetTaskForImageAndRef( |
| 250 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); | 265 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); |
| 251 EXPECT_TRUE(need_unref); | 266 EXPECT_TRUE(need_unref); |
| 252 EXPECT_TRUE(second_task); | 267 EXPECT_TRUE(second_task); |
| 253 EXPECT_TRUE(first_task.get() != second_task.get()); | 268 EXPECT_TRUE(first_task.get() != second_task.get()); |
| 254 | 269 |
| 255 DrawImage third_draw_image( | 270 DrawImage third_draw_image( |
| 256 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 271 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 257 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 272 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 273 DefaultColorSpace()); |
| 258 scoped_refptr<TileTask> third_task; | 274 scoped_refptr<TileTask> third_task; |
| 259 need_unref = cache.GetTaskForImageAndRef( | 275 need_unref = cache.GetTaskForImageAndRef( |
| 260 third_draw_image, ImageDecodeCache::TracingInfo(), &third_task); | 276 third_draw_image, ImageDecodeCache::TracingInfo(), &third_task); |
| 261 EXPECT_TRUE(need_unref); | 277 EXPECT_TRUE(need_unref); |
| 262 EXPECT_TRUE(third_task.get() == first_task.get()); | 278 EXPECT_TRUE(third_task.get() == first_task.get()); |
| 263 | 279 |
| 264 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); | 280 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); |
| 265 TestTileTaskRunner::ProcessTask(first_task.get()); | 281 TestTileTaskRunner::ProcessTask(first_task.get()); |
| 266 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); | 282 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
| 267 TestTileTaskRunner::ProcessTask(second_task.get()); | 283 TestTileTaskRunner::ProcessTask(second_task.get()); |
| 268 | 284 |
| 269 cache.UnrefImage(first_draw_image); | 285 cache.UnrefImage(first_draw_image); |
| 270 cache.UnrefImage(second_draw_image); | 286 cache.UnrefImage(second_draw_image); |
| 271 cache.UnrefImage(third_draw_image); | 287 cache.UnrefImage(third_draw_image); |
| 272 } | 288 } |
| 273 | 289 |
| 274 TEST(GpuImageDecodeCacheTest, GetTaskForImageHigherQuality) { | 290 TEST(GpuImageDecodeCacheTest, GetTaskForImageHigherQuality) { |
| 275 auto context_provider = TestContextProvider::Create(); | 291 auto context_provider = TestContextProvider::Create(); |
| 276 context_provider->BindToCurrentThread(); | 292 context_provider->BindToCurrentThread(); |
| 277 TestGpuImageDecodeCache cache(context_provider.get()); | 293 TestGpuImageDecodeCache cache(context_provider.get()); |
| 278 bool is_decomposable = true; | 294 bool is_decomposable = true; |
| 279 SkMatrix matrix = CreateMatrix(SkSize::Make(0.4f, 0.4f), is_decomposable); | 295 SkMatrix matrix = CreateMatrix(SkSize::Make(0.4f, 0.4f), is_decomposable); |
| 280 | 296 |
| 281 sk_sp<SkImage> first_image = CreateImage(100, 100); | 297 sk_sp<SkImage> first_image = CreateImage(100, 100); |
| 282 DrawImage first_draw_image( | 298 DrawImage first_draw_image( |
| 283 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 299 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 284 kLow_SkFilterQuality, matrix); | 300 kLow_SkFilterQuality, matrix, DefaultColorSpace()); |
| 285 scoped_refptr<TileTask> first_task; | 301 scoped_refptr<TileTask> first_task; |
| 286 bool need_unref = cache.GetTaskForImageAndRef( | 302 bool need_unref = cache.GetTaskForImageAndRef( |
| 287 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); | 303 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); |
| 288 EXPECT_TRUE(need_unref); | 304 EXPECT_TRUE(need_unref); |
| 289 EXPECT_TRUE(first_task); | 305 EXPECT_TRUE(first_task); |
| 290 | 306 |
| 291 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); | 307 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); |
| 292 TestTileTaskRunner::ProcessTask(first_task.get()); | 308 TestTileTaskRunner::ProcessTask(first_task.get()); |
| 293 | 309 |
| 294 cache.UnrefImage(first_draw_image); | 310 cache.UnrefImage(first_draw_image); |
| 295 | 311 |
| 296 DrawImage second_draw_image( | 312 DrawImage second_draw_image( |
| 297 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 313 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 298 kHigh_SkFilterQuality, matrix); | 314 kHigh_SkFilterQuality, matrix, DefaultColorSpace()); |
| 299 scoped_refptr<TileTask> second_task; | 315 scoped_refptr<TileTask> second_task; |
| 300 need_unref = cache.GetTaskForImageAndRef( | 316 need_unref = cache.GetTaskForImageAndRef( |
| 301 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); | 317 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); |
| 302 EXPECT_TRUE(need_unref); | 318 EXPECT_TRUE(need_unref); |
| 303 EXPECT_TRUE(second_task); | 319 EXPECT_TRUE(second_task); |
| 304 EXPECT_TRUE(first_task.get() != second_task.get()); | 320 EXPECT_TRUE(first_task.get() != second_task.get()); |
| 305 | 321 |
| 306 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); | 322 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
| 307 TestTileTaskRunner::ProcessTask(second_task.get()); | 323 TestTileTaskRunner::ProcessTask(second_task.get()); |
| 308 | 324 |
| 309 cache.UnrefImage(second_draw_image); | 325 cache.UnrefImage(second_draw_image); |
| 310 } | 326 } |
| 311 | 327 |
| 312 TEST(GpuImageDecodeCacheTest, GetTaskForImageAlreadyDecodedAndLocked) { | 328 TEST(GpuImageDecodeCacheTest, GetTaskForImageAlreadyDecodedAndLocked) { |
| 313 auto context_provider = TestContextProvider::Create(); | 329 auto context_provider = TestContextProvider::Create(); |
| 314 context_provider->BindToCurrentThread(); | 330 context_provider->BindToCurrentThread(); |
| 315 TestGpuImageDecodeCache cache(context_provider.get()); | 331 TestGpuImageDecodeCache cache(context_provider.get()); |
| 316 bool is_decomposable = true; | 332 bool is_decomposable = true; |
| 317 SkFilterQuality quality = kHigh_SkFilterQuality; | 333 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 318 | 334 |
| 319 sk_sp<SkImage> image = CreateImage(100, 100); | 335 sk_sp<SkImage> image = CreateImage(100, 100); |
| 320 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 336 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 321 quality, | 337 quality, |
| 322 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 338 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 339 DefaultColorSpace()); |
| 323 scoped_refptr<TileTask> task; | 340 scoped_refptr<TileTask> task; |
| 324 bool need_unref = cache.GetTaskForImageAndRef( | 341 bool need_unref = cache.GetTaskForImageAndRef( |
| 325 draw_image, ImageDecodeCache::TracingInfo(), &task); | 342 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 326 EXPECT_TRUE(need_unref); | 343 EXPECT_TRUE(need_unref); |
| 327 EXPECT_TRUE(task); | 344 EXPECT_TRUE(task); |
| 328 EXPECT_EQ(task->dependencies().size(), 1u); | 345 EXPECT_EQ(task->dependencies().size(), 1u); |
| 329 EXPECT_TRUE(task->dependencies()[0]); | 346 EXPECT_TRUE(task->dependencies()[0]); |
| 330 | 347 |
| 331 // Run the decode but don't complete it (this will keep the decode locked). | 348 // Run the decode but don't complete it (this will keep the decode locked). |
| 332 TestTileTaskRunner::ScheduleTask(task->dependencies()[0].get()); | 349 TestTileTaskRunner::ScheduleTask(task->dependencies()[0].get()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 357 TEST(GpuImageDecodeCacheTest, GetTaskForImageAlreadyDecodedNotLocked) { | 374 TEST(GpuImageDecodeCacheTest, GetTaskForImageAlreadyDecodedNotLocked) { |
| 358 auto context_provider = TestContextProvider::Create(); | 375 auto context_provider = TestContextProvider::Create(); |
| 359 context_provider->BindToCurrentThread(); | 376 context_provider->BindToCurrentThread(); |
| 360 TestGpuImageDecodeCache cache(context_provider.get()); | 377 TestGpuImageDecodeCache cache(context_provider.get()); |
| 361 bool is_decomposable = true; | 378 bool is_decomposable = true; |
| 362 SkFilterQuality quality = kHigh_SkFilterQuality; | 379 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 363 | 380 |
| 364 sk_sp<SkImage> image = CreateImage(100, 100); | 381 sk_sp<SkImage> image = CreateImage(100, 100); |
| 365 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 382 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 366 quality, | 383 quality, |
| 367 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 384 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 385 DefaultColorSpace()); |
| 368 scoped_refptr<TileTask> task; | 386 scoped_refptr<TileTask> task; |
| 369 bool need_unref = cache.GetTaskForImageAndRef( | 387 bool need_unref = cache.GetTaskForImageAndRef( |
| 370 draw_image, ImageDecodeCache::TracingInfo(), &task); | 388 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 371 EXPECT_TRUE(need_unref); | 389 EXPECT_TRUE(need_unref); |
| 372 EXPECT_TRUE(task); | 390 EXPECT_TRUE(task); |
| 373 EXPECT_EQ(task->dependencies().size(), 1u); | 391 EXPECT_EQ(task->dependencies().size(), 1u); |
| 374 EXPECT_TRUE(task->dependencies()[0]); | 392 EXPECT_TRUE(task->dependencies()[0]); |
| 375 | 393 |
| 376 // Run the decode. | 394 // Run the decode. |
| 377 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 395 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 402 TEST(GpuImageDecodeCacheTest, GetTaskForImageAlreadyUploaded) { | 420 TEST(GpuImageDecodeCacheTest, GetTaskForImageAlreadyUploaded) { |
| 403 auto context_provider = TestContextProvider::Create(); | 421 auto context_provider = TestContextProvider::Create(); |
| 404 context_provider->BindToCurrentThread(); | 422 context_provider->BindToCurrentThread(); |
| 405 TestGpuImageDecodeCache cache(context_provider.get()); | 423 TestGpuImageDecodeCache cache(context_provider.get()); |
| 406 bool is_decomposable = true; | 424 bool is_decomposable = true; |
| 407 SkFilterQuality quality = kHigh_SkFilterQuality; | 425 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 408 | 426 |
| 409 sk_sp<SkImage> image = CreateImage(100, 100); | 427 sk_sp<SkImage> image = CreateImage(100, 100); |
| 410 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 428 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 411 quality, | 429 quality, |
| 412 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 430 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 431 DefaultColorSpace()); |
| 413 scoped_refptr<TileTask> task; | 432 scoped_refptr<TileTask> task; |
| 414 bool need_unref = cache.GetTaskForImageAndRef( | 433 bool need_unref = cache.GetTaskForImageAndRef( |
| 415 draw_image, ImageDecodeCache::TracingInfo(), &task); | 434 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 416 EXPECT_TRUE(need_unref); | 435 EXPECT_TRUE(need_unref); |
| 417 EXPECT_TRUE(task); | 436 EXPECT_TRUE(task); |
| 418 EXPECT_EQ(task->dependencies().size(), 1u); | 437 EXPECT_EQ(task->dependencies().size(), 1u); |
| 419 EXPECT_TRUE(task->dependencies()[0]); | 438 EXPECT_TRUE(task->dependencies()[0]); |
| 420 | 439 |
| 421 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 440 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 422 TestTileTaskRunner::ScheduleTask(task.get()); | 441 TestTileTaskRunner::ScheduleTask(task.get()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 437 TEST(GpuImageDecodeCacheTest, GetTaskForImageCanceledGetsNewTask) { | 456 TEST(GpuImageDecodeCacheTest, GetTaskForImageCanceledGetsNewTask) { |
| 438 auto context_provider = TestContextProvider::Create(); | 457 auto context_provider = TestContextProvider::Create(); |
| 439 context_provider->BindToCurrentThread(); | 458 context_provider->BindToCurrentThread(); |
| 440 TestGpuImageDecodeCache cache(context_provider.get()); | 459 TestGpuImageDecodeCache cache(context_provider.get()); |
| 441 bool is_decomposable = true; | 460 bool is_decomposable = true; |
| 442 SkFilterQuality quality = kHigh_SkFilterQuality; | 461 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 443 | 462 |
| 444 sk_sp<SkImage> image = CreateImage(100, 100); | 463 sk_sp<SkImage> image = CreateImage(100, 100); |
| 445 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 464 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 446 quality, | 465 quality, |
| 447 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 466 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 467 DefaultColorSpace()); |
| 448 scoped_refptr<TileTask> task; | 468 scoped_refptr<TileTask> task; |
| 449 bool need_unref = cache.GetTaskForImageAndRef( | 469 bool need_unref = cache.GetTaskForImageAndRef( |
| 450 draw_image, ImageDecodeCache::TracingInfo(), &task); | 470 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 451 EXPECT_TRUE(need_unref); | 471 EXPECT_TRUE(need_unref); |
| 452 EXPECT_TRUE(task); | 472 EXPECT_TRUE(task); |
| 453 | 473 |
| 454 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 474 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 455 | 475 |
| 456 scoped_refptr<TileTask> another_task; | 476 scoped_refptr<TileTask> another_task; |
| 457 need_unref = cache.GetTaskForImageAndRef( | 477 need_unref = cache.GetTaskForImageAndRef( |
| (...skipping 26 matching lines...) Expand all Loading... |
| 484 TEST(GpuImageDecodeCacheTest, GetTaskForImageCanceledWhileReffedGetsNewTask) { | 504 TEST(GpuImageDecodeCacheTest, GetTaskForImageCanceledWhileReffedGetsNewTask) { |
| 485 auto context_provider = TestContextProvider::Create(); | 505 auto context_provider = TestContextProvider::Create(); |
| 486 context_provider->BindToCurrentThread(); | 506 context_provider->BindToCurrentThread(); |
| 487 TestGpuImageDecodeCache cache(context_provider.get()); | 507 TestGpuImageDecodeCache cache(context_provider.get()); |
| 488 bool is_decomposable = true; | 508 bool is_decomposable = true; |
| 489 SkFilterQuality quality = kHigh_SkFilterQuality; | 509 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 490 | 510 |
| 491 sk_sp<SkImage> image = CreateImage(100, 100); | 511 sk_sp<SkImage> image = CreateImage(100, 100); |
| 492 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 512 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 493 quality, | 513 quality, |
| 494 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 514 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 515 DefaultColorSpace()); |
| 495 scoped_refptr<TileTask> task; | 516 scoped_refptr<TileTask> task; |
| 496 bool need_unref = cache.GetTaskForImageAndRef( | 517 bool need_unref = cache.GetTaskForImageAndRef( |
| 497 draw_image, ImageDecodeCache::TracingInfo(), &task); | 518 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 498 EXPECT_TRUE(need_unref); | 519 EXPECT_TRUE(need_unref); |
| 499 EXPECT_TRUE(task); | 520 EXPECT_TRUE(task); |
| 500 | 521 |
| 501 ASSERT_GT(task->dependencies().size(), 0u); | 522 ASSERT_GT(task->dependencies().size(), 0u); |
| 502 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 523 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 503 | 524 |
| 504 scoped_refptr<TileTask> another_task; | 525 scoped_refptr<TileTask> another_task; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 535 TEST(GpuImageDecodeCacheTest, NoTaskForImageAlreadyFailedDecoding) { | 556 TEST(GpuImageDecodeCacheTest, NoTaskForImageAlreadyFailedDecoding) { |
| 536 auto context_provider = TestContextProvider::Create(); | 557 auto context_provider = TestContextProvider::Create(); |
| 537 context_provider->BindToCurrentThread(); | 558 context_provider->BindToCurrentThread(); |
| 538 TestGpuImageDecodeCache cache(context_provider.get()); | 559 TestGpuImageDecodeCache cache(context_provider.get()); |
| 539 bool is_decomposable = true; | 560 bool is_decomposable = true; |
| 540 SkFilterQuality quality = kHigh_SkFilterQuality; | 561 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 541 | 562 |
| 542 sk_sp<SkImage> image = CreateImage(100, 100); | 563 sk_sp<SkImage> image = CreateImage(100, 100); |
| 543 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 564 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 544 quality, | 565 quality, |
| 545 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 566 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 567 DefaultColorSpace()); |
| 546 scoped_refptr<TileTask> task; | 568 scoped_refptr<TileTask> task; |
| 547 bool need_unref = cache.GetTaskForImageAndRef( | 569 bool need_unref = cache.GetTaskForImageAndRef( |
| 548 draw_image, ImageDecodeCache::TracingInfo(), &task); | 570 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 549 EXPECT_TRUE(need_unref); | 571 EXPECT_TRUE(need_unref); |
| 550 EXPECT_TRUE(task); | 572 EXPECT_TRUE(task); |
| 551 | 573 |
| 552 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 574 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 553 // Didn't run the task, so cancel it. | 575 // Didn't run the task, so cancel it. |
| 554 TestTileTaskRunner::CancelTask(task.get()); | 576 TestTileTaskRunner::CancelTask(task.get()); |
| 555 TestTileTaskRunner::CompleteTask(task.get()); | 577 TestTileTaskRunner::CompleteTask(task.get()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 568 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDraw) { | 590 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDraw) { |
| 569 auto context_provider = TestContextProvider::Create(); | 591 auto context_provider = TestContextProvider::Create(); |
| 570 context_provider->BindToCurrentThread(); | 592 context_provider->BindToCurrentThread(); |
| 571 TestGpuImageDecodeCache cache(context_provider.get()); | 593 TestGpuImageDecodeCache cache(context_provider.get()); |
| 572 bool is_decomposable = true; | 594 bool is_decomposable = true; |
| 573 SkFilterQuality quality = kHigh_SkFilterQuality; | 595 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 574 | 596 |
| 575 sk_sp<SkImage> image = CreateImage(100, 100); | 597 sk_sp<SkImage> image = CreateImage(100, 100); |
| 576 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 598 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 577 quality, | 599 quality, |
| 578 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 600 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 601 DefaultColorSpace()); |
| 579 scoped_refptr<TileTask> task; | 602 scoped_refptr<TileTask> task; |
| 580 bool need_unref = cache.GetTaskForImageAndRef( | 603 bool need_unref = cache.GetTaskForImageAndRef( |
| 581 draw_image, ImageDecodeCache::TracingInfo(), &task); | 604 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 582 EXPECT_TRUE(need_unref); | 605 EXPECT_TRUE(need_unref); |
| 583 EXPECT_TRUE(task); | 606 EXPECT_TRUE(task); |
| 584 | 607 |
| 585 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 608 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 586 TestTileTaskRunner::ProcessTask(task.get()); | 609 TestTileTaskRunner::ProcessTask(task.get()); |
| 587 | 610 |
| 588 // Must hold context lock before calling GetDecodedImageForDraw / | 611 // Must hold context lock before calling GetDecodedImageForDraw / |
| (...skipping 13 matching lines...) Expand all Loading... |
| 602 TEST(GpuImageDecodeCacheTest, GetLargeDecodedImageForDraw) { | 625 TEST(GpuImageDecodeCacheTest, GetLargeDecodedImageForDraw) { |
| 603 auto context_provider = TestContextProvider::Create(); | 626 auto context_provider = TestContextProvider::Create(); |
| 604 context_provider->BindToCurrentThread(); | 627 context_provider->BindToCurrentThread(); |
| 605 TestGpuImageDecodeCache cache(context_provider.get()); | 628 TestGpuImageDecodeCache cache(context_provider.get()); |
| 606 bool is_decomposable = true; | 629 bool is_decomposable = true; |
| 607 SkFilterQuality quality = kHigh_SkFilterQuality; | 630 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 608 | 631 |
| 609 sk_sp<SkImage> image = CreateImage(1, 24000); | 632 sk_sp<SkImage> image = CreateImage(1, 24000); |
| 610 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 633 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 611 quality, | 634 quality, |
| 612 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable)); | 635 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 636 DefaultColorSpace()); |
| 613 scoped_refptr<TileTask> task; | 637 scoped_refptr<TileTask> task; |
| 614 bool need_unref = cache.GetTaskForImageAndRef( | 638 bool need_unref = cache.GetTaskForImageAndRef( |
| 615 draw_image, ImageDecodeCache::TracingInfo(), &task); | 639 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 616 EXPECT_TRUE(need_unref); | 640 EXPECT_TRUE(need_unref); |
| 617 EXPECT_TRUE(task); | 641 EXPECT_TRUE(task); |
| 618 | 642 |
| 619 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 643 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 620 TestTileTaskRunner::ProcessTask(task.get()); | 644 TestTileTaskRunner::ProcessTask(task.get()); |
| 621 | 645 |
| 622 // Must hold context lock before calling GetDecodedImageForDraw / | 646 // Must hold context lock before calling GetDecodedImageForDraw / |
| (...skipping 16 matching lines...) Expand all Loading... |
| 639 context_provider->BindToCurrentThread(); | 663 context_provider->BindToCurrentThread(); |
| 640 TestGpuImageDecodeCache cache(context_provider.get()); | 664 TestGpuImageDecodeCache cache(context_provider.get()); |
| 641 bool is_decomposable = true; | 665 bool is_decomposable = true; |
| 642 SkFilterQuality quality = kHigh_SkFilterQuality; | 666 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 643 | 667 |
| 644 cache.SetAllByteLimitsForTesting(0); | 668 cache.SetAllByteLimitsForTesting(0); |
| 645 | 669 |
| 646 sk_sp<SkImage> image = CreateImage(100, 100); | 670 sk_sp<SkImage> image = CreateImage(100, 100); |
| 647 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 671 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 648 quality, | 672 quality, |
| 649 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable)); | 673 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 674 DefaultColorSpace()); |
| 650 | 675 |
| 651 scoped_refptr<TileTask> task; | 676 scoped_refptr<TileTask> task; |
| 652 bool need_unref = cache.GetTaskForImageAndRef( | 677 bool need_unref = cache.GetTaskForImageAndRef( |
| 653 draw_image, ImageDecodeCache::TracingInfo(), &task); | 678 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 654 EXPECT_FALSE(need_unref); | 679 EXPECT_FALSE(need_unref); |
| 655 EXPECT_FALSE(task); | 680 EXPECT_FALSE(task); |
| 656 | 681 |
| 657 // Must hold context lock before calling GetDecodedImageForDraw / | 682 // Must hold context lock before calling GetDecodedImageForDraw / |
| 658 // DrawWithImageFinished. | 683 // DrawWithImageFinished. |
| 659 ContextProvider::ScopedContextLock context_lock(context_provider.get()); | 684 ContextProvider::ScopedContextLock context_lock(context_provider.get()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 670 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawLargerScale) { | 695 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawLargerScale) { |
| 671 auto context_provider = TestContextProvider::Create(); | 696 auto context_provider = TestContextProvider::Create(); |
| 672 context_provider->BindToCurrentThread(); | 697 context_provider->BindToCurrentThread(); |
| 673 TestGpuImageDecodeCache cache(context_provider.get()); | 698 TestGpuImageDecodeCache cache(context_provider.get()); |
| 674 bool is_decomposable = true; | 699 bool is_decomposable = true; |
| 675 SkFilterQuality quality = kHigh_SkFilterQuality; | 700 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 676 | 701 |
| 677 sk_sp<SkImage> image = CreateImage(100, 100); | 702 sk_sp<SkImage> image = CreateImage(100, 100); |
| 678 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 703 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 679 quality, | 704 quality, |
| 680 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 705 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 706 DefaultColorSpace()); |
| 681 scoped_refptr<TileTask> task; | 707 scoped_refptr<TileTask> task; |
| 682 bool need_unref = cache.GetTaskForImageAndRef( | 708 bool need_unref = cache.GetTaskForImageAndRef( |
| 683 draw_image, ImageDecodeCache::TracingInfo(), &task); | 709 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 684 EXPECT_TRUE(need_unref); | 710 EXPECT_TRUE(need_unref); |
| 685 EXPECT_TRUE(task); | 711 EXPECT_TRUE(task); |
| 686 | 712 |
| 687 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 713 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 688 TestTileTaskRunner::ProcessTask(task.get()); | 714 TestTileTaskRunner::ProcessTask(task.get()); |
| 689 | 715 |
| 690 DrawImage larger_draw_image( | 716 DrawImage larger_draw_image( |
| 691 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 717 image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| 692 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable)); | 718 CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable), |
| 719 DefaultColorSpace()); |
| 693 scoped_refptr<TileTask> larger_task; | 720 scoped_refptr<TileTask> larger_task; |
| 694 bool larger_need_unref = cache.GetTaskForImageAndRef( | 721 bool larger_need_unref = cache.GetTaskForImageAndRef( |
| 695 larger_draw_image, ImageDecodeCache::TracingInfo(), &larger_task); | 722 larger_draw_image, ImageDecodeCache::TracingInfo(), &larger_task); |
| 696 EXPECT_TRUE(larger_need_unref); | 723 EXPECT_TRUE(larger_need_unref); |
| 697 EXPECT_TRUE(larger_task); | 724 EXPECT_TRUE(larger_task); |
| 698 | 725 |
| 699 TestTileTaskRunner::ProcessTask(larger_task->dependencies()[0].get()); | 726 TestTileTaskRunner::ProcessTask(larger_task->dependencies()[0].get()); |
| 700 TestTileTaskRunner::ProcessTask(larger_task.get()); | 727 TestTileTaskRunner::ProcessTask(larger_task.get()); |
| 701 | 728 |
| 702 // Must hold context lock before calling GetDecodedImageForDraw / | 729 // Must hold context lock before calling GetDecodedImageForDraw / |
| (...skipping 23 matching lines...) Expand all Loading... |
| 726 | 753 |
| 727 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawHigherQuality) { | 754 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawHigherQuality) { |
| 728 auto context_provider = TestContextProvider::Create(); | 755 auto context_provider = TestContextProvider::Create(); |
| 729 context_provider->BindToCurrentThread(); | 756 context_provider->BindToCurrentThread(); |
| 730 TestGpuImageDecodeCache cache(context_provider.get()); | 757 TestGpuImageDecodeCache cache(context_provider.get()); |
| 731 bool is_decomposable = true; | 758 bool is_decomposable = true; |
| 732 SkMatrix matrix = CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable); | 759 SkMatrix matrix = CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable); |
| 733 | 760 |
| 734 sk_sp<SkImage> image = CreateImage(100, 100); | 761 sk_sp<SkImage> image = CreateImage(100, 100); |
| 735 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 762 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 736 kLow_SkFilterQuality, matrix); | 763 kLow_SkFilterQuality, matrix, DefaultColorSpace()); |
| 737 scoped_refptr<TileTask> task; | 764 scoped_refptr<TileTask> task; |
| 738 bool need_unref = cache.GetTaskForImageAndRef( | 765 bool need_unref = cache.GetTaskForImageAndRef( |
| 739 draw_image, ImageDecodeCache::TracingInfo(), &task); | 766 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 740 EXPECT_TRUE(need_unref); | 767 EXPECT_TRUE(need_unref); |
| 741 EXPECT_TRUE(task); | 768 EXPECT_TRUE(task); |
| 742 | 769 |
| 743 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 770 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 744 TestTileTaskRunner::ProcessTask(task.get()); | 771 TestTileTaskRunner::ProcessTask(task.get()); |
| 745 | 772 |
| 746 DrawImage higher_quality_draw_image( | 773 DrawImage higher_quality_draw_image( |
| 747 image, SkIRect::MakeWH(image->width(), image->height()), | 774 image, SkIRect::MakeWH(image->width(), image->height()), |
| 748 kHigh_SkFilterQuality, matrix); | 775 kHigh_SkFilterQuality, matrix, DefaultColorSpace()); |
| 749 scoped_refptr<TileTask> hq_task; | 776 scoped_refptr<TileTask> hq_task; |
| 750 bool hq_needs_unref = cache.GetTaskForImageAndRef( | 777 bool hq_needs_unref = cache.GetTaskForImageAndRef( |
| 751 higher_quality_draw_image, ImageDecodeCache::TracingInfo(), &hq_task); | 778 higher_quality_draw_image, ImageDecodeCache::TracingInfo(), &hq_task); |
| 752 EXPECT_TRUE(hq_needs_unref); | 779 EXPECT_TRUE(hq_needs_unref); |
| 753 EXPECT_TRUE(hq_task); | 780 EXPECT_TRUE(hq_task); |
| 754 | 781 |
| 755 TestTileTaskRunner::ProcessTask(hq_task->dependencies()[0].get()); | 782 TestTileTaskRunner::ProcessTask(hq_task->dependencies()[0].get()); |
| 756 TestTileTaskRunner::ProcessTask(hq_task.get()); | 783 TestTileTaskRunner::ProcessTask(hq_task.get()); |
| 757 | 784 |
| 758 // Must hold context lock before calling GetDecodedImageForDraw / | 785 // Must hold context lock before calling GetDecodedImageForDraw / |
| (...skipping 23 matching lines...) Expand all Loading... |
| 782 } | 809 } |
| 783 | 810 |
| 784 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawNegative) { | 811 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawNegative) { |
| 785 auto context_provider = TestContextProvider::Create(); | 812 auto context_provider = TestContextProvider::Create(); |
| 786 context_provider->BindToCurrentThread(); | 813 context_provider->BindToCurrentThread(); |
| 787 TestGpuImageDecodeCache cache(context_provider.get()); | 814 TestGpuImageDecodeCache cache(context_provider.get()); |
| 788 bool is_decomposable = true; | 815 bool is_decomposable = true; |
| 789 SkFilterQuality quality = kHigh_SkFilterQuality; | 816 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 790 | 817 |
| 791 sk_sp<SkImage> image = CreateImage(100, 100); | 818 sk_sp<SkImage> image = CreateImage(100, 100); |
| 792 DrawImage draw_image( | 819 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 793 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 820 quality, |
| 794 CreateMatrix(SkSize::Make(-0.5f, 0.5f), is_decomposable)); | 821 CreateMatrix(SkSize::Make(-0.5f, 0.5f), is_decomposable), |
| 822 DefaultColorSpace()); |
| 795 scoped_refptr<TileTask> task; | 823 scoped_refptr<TileTask> task; |
| 796 bool need_unref = cache.GetTaskForImageAndRef( | 824 bool need_unref = cache.GetTaskForImageAndRef( |
| 797 draw_image, ImageDecodeCache::TracingInfo(), &task); | 825 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 798 EXPECT_TRUE(need_unref); | 826 EXPECT_TRUE(need_unref); |
| 799 EXPECT_TRUE(task); | 827 EXPECT_TRUE(task); |
| 800 | 828 |
| 801 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 829 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 802 TestTileTaskRunner::ProcessTask(task.get()); | 830 TestTileTaskRunner::ProcessTask(task.get()); |
| 803 | 831 |
| 804 // Must hold context lock before calling GetDecodedImageForDraw / | 832 // Must hold context lock before calling GetDecodedImageForDraw / |
| (...skipping 15 matching lines...) Expand all Loading... |
| 820 TEST(GpuImageDecodeCacheTest, GetLargeScaledDecodedImageForDraw) { | 848 TEST(GpuImageDecodeCacheTest, GetLargeScaledDecodedImageForDraw) { |
| 821 auto context_provider = TestContextProvider::Create(); | 849 auto context_provider = TestContextProvider::Create(); |
| 822 context_provider->BindToCurrentThread(); | 850 context_provider->BindToCurrentThread(); |
| 823 TestGpuImageDecodeCache cache(context_provider.get()); | 851 TestGpuImageDecodeCache cache(context_provider.get()); |
| 824 bool is_decomposable = true; | 852 bool is_decomposable = true; |
| 825 SkFilterQuality quality = kHigh_SkFilterQuality; | 853 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 826 | 854 |
| 827 sk_sp<SkImage> image = CreateImage(1, 48000); | 855 sk_sp<SkImage> image = CreateImage(1, 48000); |
| 828 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 856 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 829 quality, | 857 quality, |
| 830 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 858 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 859 DefaultColorSpace()); |
| 831 scoped_refptr<TileTask> task; | 860 scoped_refptr<TileTask> task; |
| 832 bool need_unref = cache.GetTaskForImageAndRef( | 861 bool need_unref = cache.GetTaskForImageAndRef( |
| 833 draw_image, ImageDecodeCache::TracingInfo(), &task); | 862 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 834 EXPECT_TRUE(need_unref); | 863 EXPECT_TRUE(need_unref); |
| 835 EXPECT_TRUE(task); | 864 EXPECT_TRUE(task); |
| 836 | 865 |
| 837 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 866 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 838 TestTileTaskRunner::ProcessTask(task.get()); | 867 TestTileTaskRunner::ProcessTask(task.get()); |
| 839 | 868 |
| 840 // Must hold context lock before calling GetDecodedImageForDraw / | 869 // Must hold context lock before calling GetDecodedImageForDraw / |
| (...skipping 19 matching lines...) Expand all Loading... |
| 860 context_provider->BindToCurrentThread(); | 889 context_provider->BindToCurrentThread(); |
| 861 TestGpuImageDecodeCache cache(context_provider.get()); | 890 TestGpuImageDecodeCache cache(context_provider.get()); |
| 862 bool is_decomposable = true; | 891 bool is_decomposable = true; |
| 863 SkFilterQuality quality = kHigh_SkFilterQuality; | 892 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 864 | 893 |
| 865 cache.SetAllByteLimitsForTesting(0); | 894 cache.SetAllByteLimitsForTesting(0); |
| 866 | 895 |
| 867 sk_sp<SkImage> image = CreateImage(100, 100); | 896 sk_sp<SkImage> image = CreateImage(100, 100); |
| 868 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 897 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 869 quality, | 898 quality, |
| 870 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 899 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 900 DefaultColorSpace()); |
| 871 | 901 |
| 872 scoped_refptr<TileTask> task; | 902 scoped_refptr<TileTask> task; |
| 873 bool need_unref = cache.GetTaskForImageAndRef( | 903 bool need_unref = cache.GetTaskForImageAndRef( |
| 874 draw_image, ImageDecodeCache::TracingInfo(), &task); | 904 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 875 EXPECT_FALSE(need_unref); | 905 EXPECT_FALSE(need_unref); |
| 876 EXPECT_FALSE(task); | 906 EXPECT_FALSE(task); |
| 877 | 907 |
| 878 // Must hold context lock before calling GetDecodedImageForDraw / | 908 // Must hold context lock before calling GetDecodedImageForDraw / |
| 879 // DrawWithImageFinished. | 909 // DrawWithImageFinished. |
| 880 ContextProvider::ScopedContextLock context_lock(context_provider.get()); | 910 ContextProvider::ScopedContextLock context_lock(context_provider.get()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 905 context_provider->BindToCurrentThread(); | 935 context_provider->BindToCurrentThread(); |
| 906 TestGpuImageDecodeCache cache(context_provider.get()); | 936 TestGpuImageDecodeCache cache(context_provider.get()); |
| 907 bool is_decomposable = true; | 937 bool is_decomposable = true; |
| 908 SkFilterQuality quality = kHigh_SkFilterQuality; | 938 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 909 | 939 |
| 910 cache.SetAllByteLimitsForTesting(0); | 940 cache.SetAllByteLimitsForTesting(0); |
| 911 | 941 |
| 912 sk_sp<SkImage> image = CreateImage(100, 100); | 942 sk_sp<SkImage> image = CreateImage(100, 100); |
| 913 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 943 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 914 quality, | 944 quality, |
| 915 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 945 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 946 DefaultColorSpace()); |
| 916 | 947 |
| 917 // Must hold context lock before calling GetDecodedImageForDraw / | 948 // Must hold context lock before calling GetDecodedImageForDraw / |
| 918 // DrawWithImageFinished. | 949 // DrawWithImageFinished. |
| 919 ContextProvider::ScopedContextLock context_lock(context_provider.get()); | 950 ContextProvider::ScopedContextLock context_lock(context_provider.get()); |
| 920 DecodedDrawImage decoded_draw_image = | 951 DecodedDrawImage decoded_draw_image = |
| 921 cache.GetDecodedImageForDraw(draw_image); | 952 cache.GetDecodedImageForDraw(draw_image); |
| 922 EXPECT_TRUE(decoded_draw_image.image()); | 953 EXPECT_TRUE(decoded_draw_image.image()); |
| 923 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); | 954 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); |
| 924 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); | 955 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); |
| 925 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); | 956 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 937 GetLargeDecodedImageForDrawAtRasterDecodeMultipleTimes) { | 968 GetLargeDecodedImageForDrawAtRasterDecodeMultipleTimes) { |
| 938 auto context_provider = TestContextProvider::Create(); | 969 auto context_provider = TestContextProvider::Create(); |
| 939 context_provider->BindToCurrentThread(); | 970 context_provider->BindToCurrentThread(); |
| 940 TestGpuImageDecodeCache cache(context_provider.get()); | 971 TestGpuImageDecodeCache cache(context_provider.get()); |
| 941 bool is_decomposable = true; | 972 bool is_decomposable = true; |
| 942 SkFilterQuality quality = kHigh_SkFilterQuality; | 973 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 943 | 974 |
| 944 sk_sp<SkImage> image = CreateImage(1, 24000); | 975 sk_sp<SkImage> image = CreateImage(1, 24000); |
| 945 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 976 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 946 quality, | 977 quality, |
| 947 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable)); | 978 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 979 DefaultColorSpace()); |
| 948 | 980 |
| 949 // Must hold context lock before calling GetDecodedImageForDraw / | 981 // Must hold context lock before calling GetDecodedImageForDraw / |
| 950 // DrawWithImageFinished. | 982 // DrawWithImageFinished. |
| 951 ContextProvider::ScopedContextLock context_lock(context_provider.get()); | 983 ContextProvider::ScopedContextLock context_lock(context_provider.get()); |
| 952 DecodedDrawImage decoded_draw_image = | 984 DecodedDrawImage decoded_draw_image = |
| 953 cache.GetDecodedImageForDraw(draw_image); | 985 cache.GetDecodedImageForDraw(draw_image); |
| 954 EXPECT_TRUE(decoded_draw_image.image()); | 986 EXPECT_TRUE(decoded_draw_image.image()); |
| 955 EXPECT_FALSE(decoded_draw_image.image()->isTextureBacked()); | 987 EXPECT_FALSE(decoded_draw_image.image()->isTextureBacked()); |
| 956 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); | 988 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); |
| 957 EXPECT_TRUE(cache.DiscardableIsLockedForTesting(draw_image)); | 989 EXPECT_TRUE(cache.DiscardableIsLockedForTesting(draw_image)); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 973 TEST(GpuImageDecodeCacheTest, ZeroSizedImagesAreSkipped) { | 1005 TEST(GpuImageDecodeCacheTest, ZeroSizedImagesAreSkipped) { |
| 974 auto context_provider = TestContextProvider::Create(); | 1006 auto context_provider = TestContextProvider::Create(); |
| 975 context_provider->BindToCurrentThread(); | 1007 context_provider->BindToCurrentThread(); |
| 976 TestGpuImageDecodeCache cache(context_provider.get()); | 1008 TestGpuImageDecodeCache cache(context_provider.get()); |
| 977 bool is_decomposable = true; | 1009 bool is_decomposable = true; |
| 978 SkFilterQuality quality = kHigh_SkFilterQuality; | 1010 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 979 | 1011 |
| 980 sk_sp<SkImage> image = CreateImage(100, 100); | 1012 sk_sp<SkImage> image = CreateImage(100, 100); |
| 981 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1013 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 982 quality, | 1014 quality, |
| 983 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable)); | 1015 CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable), |
| 1016 DefaultColorSpace()); |
| 984 | 1017 |
| 985 scoped_refptr<TileTask> task; | 1018 scoped_refptr<TileTask> task; |
| 986 bool need_unref = cache.GetTaskForImageAndRef( | 1019 bool need_unref = cache.GetTaskForImageAndRef( |
| 987 draw_image, ImageDecodeCache::TracingInfo(), &task); | 1020 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 988 EXPECT_FALSE(task); | 1021 EXPECT_FALSE(task); |
| 989 EXPECT_FALSE(need_unref); | 1022 EXPECT_FALSE(need_unref); |
| 990 | 1023 |
| 991 // Must hold context lock before calling GetDecodedImageForDraw / | 1024 // Must hold context lock before calling GetDecodedImageForDraw / |
| 992 // DrawWithImageFinished. | 1025 // DrawWithImageFinished. |
| 993 ContextProvider::ScopedContextLock context_lock(context_provider.get()); | 1026 ContextProvider::ScopedContextLock context_lock(context_provider.get()); |
| 994 DecodedDrawImage decoded_draw_image = | 1027 DecodedDrawImage decoded_draw_image = |
| 995 cache.GetDecodedImageForDraw(draw_image); | 1028 cache.GetDecodedImageForDraw(draw_image); |
| 996 EXPECT_FALSE(decoded_draw_image.image()); | 1029 EXPECT_FALSE(decoded_draw_image.image()); |
| 997 | 1030 |
| 998 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 1031 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 999 } | 1032 } |
| 1000 | 1033 |
| 1001 TEST(GpuImageDecodeCacheTest, NonOverlappingSrcRectImagesAreSkipped) { | 1034 TEST(GpuImageDecodeCacheTest, NonOverlappingSrcRectImagesAreSkipped) { |
| 1002 auto context_provider = TestContextProvider::Create(); | 1035 auto context_provider = TestContextProvider::Create(); |
| 1003 context_provider->BindToCurrentThread(); | 1036 context_provider->BindToCurrentThread(); |
| 1004 TestGpuImageDecodeCache cache(context_provider.get()); | 1037 TestGpuImageDecodeCache cache(context_provider.get()); |
| 1005 bool is_decomposable = true; | 1038 bool is_decomposable = true; |
| 1006 SkFilterQuality quality = kHigh_SkFilterQuality; | 1039 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 1007 | 1040 |
| 1008 sk_sp<SkImage> image = CreateImage(100, 100); | 1041 sk_sp<SkImage> image = CreateImage(100, 100); |
| 1009 DrawImage draw_image( | 1042 DrawImage draw_image( |
| 1010 image, SkIRect::MakeXYWH(150, 150, image->width(), image->height()), | 1043 image, SkIRect::MakeXYWH(150, 150, image->width(), image->height()), |
| 1011 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 1044 quality, CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), |
| 1045 DefaultColorSpace()); |
| 1012 | 1046 |
| 1013 scoped_refptr<TileTask> task; | 1047 scoped_refptr<TileTask> task; |
| 1014 bool need_unref = cache.GetTaskForImageAndRef( | 1048 bool need_unref = cache.GetTaskForImageAndRef( |
| 1015 draw_image, ImageDecodeCache::TracingInfo(), &task); | 1049 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 1016 EXPECT_FALSE(task); | 1050 EXPECT_FALSE(task); |
| 1017 EXPECT_FALSE(need_unref); | 1051 EXPECT_FALSE(need_unref); |
| 1018 | 1052 |
| 1019 // Must hold context lock before calling GetDecodedImageForDraw / | 1053 // Must hold context lock before calling GetDecodedImageForDraw / |
| 1020 // DrawWithImageFinished. | 1054 // DrawWithImageFinished. |
| 1021 ContextProvider::ScopedContextLock context_lock(context_provider.get()); | 1055 ContextProvider::ScopedContextLock context_lock(context_provider.get()); |
| 1022 DecodedDrawImage decoded_draw_image = | 1056 DecodedDrawImage decoded_draw_image = |
| 1023 cache.GetDecodedImageForDraw(draw_image); | 1057 cache.GetDecodedImageForDraw(draw_image); |
| 1024 EXPECT_FALSE(decoded_draw_image.image()); | 1058 EXPECT_FALSE(decoded_draw_image.image()); |
| 1025 | 1059 |
| 1026 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 1060 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
| 1027 } | 1061 } |
| 1028 | 1062 |
| 1029 TEST(GpuImageDecodeCacheTest, CanceledTasksDoNotCountAgainstBudget) { | 1063 TEST(GpuImageDecodeCacheTest, CanceledTasksDoNotCountAgainstBudget) { |
| 1030 auto context_provider = TestContextProvider::Create(); | 1064 auto context_provider = TestContextProvider::Create(); |
| 1031 context_provider->BindToCurrentThread(); | 1065 context_provider->BindToCurrentThread(); |
| 1032 TestGpuImageDecodeCache cache(context_provider.get()); | 1066 TestGpuImageDecodeCache cache(context_provider.get()); |
| 1033 bool is_decomposable = true; | 1067 bool is_decomposable = true; |
| 1034 SkFilterQuality quality = kHigh_SkFilterQuality; | 1068 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 1035 | 1069 |
| 1036 sk_sp<SkImage> image = CreateImage(100, 100); | 1070 sk_sp<SkImage> image = CreateImage(100, 100); |
| 1037 DrawImage draw_image( | 1071 DrawImage draw_image( |
| 1038 image, SkIRect::MakeXYWH(0, 0, image->width(), image->height()), quality, | 1072 image, SkIRect::MakeXYWH(0, 0, image->width(), image->height()), quality, |
| 1039 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable)); | 1073 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), |
| 1074 DefaultColorSpace()); |
| 1040 | 1075 |
| 1041 scoped_refptr<TileTask> task; | 1076 scoped_refptr<TileTask> task; |
| 1042 bool need_unref = cache.GetTaskForImageAndRef( | 1077 bool need_unref = cache.GetTaskForImageAndRef( |
| 1043 draw_image, ImageDecodeCache::TracingInfo(), &task); | 1078 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 1044 EXPECT_NE(0u, cache.GetBytesUsedForTesting()); | 1079 EXPECT_NE(0u, cache.GetBytesUsedForTesting()); |
| 1045 EXPECT_TRUE(task); | 1080 EXPECT_TRUE(task); |
| 1046 EXPECT_TRUE(need_unref); | 1081 EXPECT_TRUE(need_unref); |
| 1047 | 1082 |
| 1048 TestTileTaskRunner::CancelTask(task->dependencies()[0].get()); | 1083 TestTileTaskRunner::CancelTask(task->dependencies()[0].get()); |
| 1049 TestTileTaskRunner::CompleteTask(task->dependencies()[0].get()); | 1084 TestTileTaskRunner::CompleteTask(task->dependencies()[0].get()); |
| 1050 TestTileTaskRunner::CancelTask(task.get()); | 1085 TestTileTaskRunner::CancelTask(task.get()); |
| 1051 TestTileTaskRunner::CompleteTask(task.get()); | 1086 TestTileTaskRunner::CompleteTask(task.get()); |
| 1052 | 1087 |
| 1053 cache.UnrefImage(draw_image); | 1088 cache.UnrefImage(draw_image); |
| 1054 EXPECT_EQ(0u, cache.GetBytesUsedForTesting()); | 1089 EXPECT_EQ(0u, cache.GetBytesUsedForTesting()); |
| 1055 } | 1090 } |
| 1056 | 1091 |
| 1057 TEST(GpuImageDecodeCacheTest, ShouldAggressivelyFreeResources) { | 1092 TEST(GpuImageDecodeCacheTest, ShouldAggressivelyFreeResources) { |
| 1058 auto context_provider = TestContextProvider::Create(); | 1093 auto context_provider = TestContextProvider::Create(); |
| 1059 context_provider->BindToCurrentThread(); | 1094 context_provider->BindToCurrentThread(); |
| 1060 TestGpuImageDecodeCache cache(context_provider.get()); | 1095 TestGpuImageDecodeCache cache(context_provider.get()); |
| 1061 bool is_decomposable = true; | 1096 bool is_decomposable = true; |
| 1062 SkFilterQuality quality = kHigh_SkFilterQuality; | 1097 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 1063 | 1098 |
| 1064 sk_sp<SkImage> image = CreateImage(100, 100); | 1099 sk_sp<SkImage> image = CreateImage(100, 100); |
| 1065 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1100 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 1066 quality, | 1101 quality, |
| 1067 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 1102 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 1103 DefaultColorSpace()); |
| 1068 scoped_refptr<TileTask> task; | 1104 scoped_refptr<TileTask> task; |
| 1069 { | 1105 { |
| 1070 bool need_unref = cache.GetTaskForImageAndRef( | 1106 bool need_unref = cache.GetTaskForImageAndRef( |
| 1071 draw_image, ImageDecodeCache::TracingInfo(), &task); | 1107 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 1072 EXPECT_TRUE(need_unref); | 1108 EXPECT_TRUE(need_unref); |
| 1073 EXPECT_TRUE(task); | 1109 EXPECT_TRUE(task); |
| 1074 } | 1110 } |
| 1075 | 1111 |
| 1076 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 1112 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 1077 TestTileTaskRunner::ProcessTask(task.get()); | 1113 TestTileTaskRunner::ProcessTask(task.get()); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1121 auto context_provider = TestContextProvider::Create(); | 1157 auto context_provider = TestContextProvider::Create(); |
| 1122 context_provider->BindToCurrentThread(); | 1158 context_provider->BindToCurrentThread(); |
| 1123 TestGpuImageDecodeCache cache(context_provider.get()); | 1159 TestGpuImageDecodeCache cache(context_provider.get()); |
| 1124 bool is_decomposable = true; | 1160 bool is_decomposable = true; |
| 1125 SkFilterQuality quality = kHigh_SkFilterQuality; | 1161 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 1126 | 1162 |
| 1127 // Create a downscaled image. | 1163 // Create a downscaled image. |
| 1128 sk_sp<SkImage> first_image = CreateImage(100, 100); | 1164 sk_sp<SkImage> first_image = CreateImage(100, 100); |
| 1129 DrawImage first_draw_image( | 1165 DrawImage first_draw_image( |
| 1130 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 1166 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 1131 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 1167 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 1168 DefaultColorSpace()); |
| 1132 scoped_refptr<TileTask> first_task; | 1169 scoped_refptr<TileTask> first_task; |
| 1133 bool need_unref = cache.GetTaskForImageAndRef( | 1170 bool need_unref = cache.GetTaskForImageAndRef( |
| 1134 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); | 1171 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); |
| 1135 EXPECT_TRUE(need_unref); | 1172 EXPECT_TRUE(need_unref); |
| 1136 EXPECT_TRUE(first_task); | 1173 EXPECT_TRUE(first_task); |
| 1137 | 1174 |
| 1138 // The budget should account for exactly one image. | 1175 // The budget should account for exactly one image. |
| 1139 EXPECT_EQ(cache.GetBytesUsedForTesting(), | 1176 EXPECT_EQ(cache.GetBytesUsedForTesting(), |
| 1140 cache.GetDrawImageSizeForTesting(first_draw_image)); | 1177 cache.GetDrawImageSizeForTesting(first_draw_image)); |
| 1141 | 1178 |
| 1142 // Create a larger version of |first_image|, this should immediately free the | 1179 // Create a larger version of |first_image|, this should immediately free the |
| 1143 // memory used by |first_image| for the smaller scale. | 1180 // memory used by |first_image| for the smaller scale. |
| 1144 DrawImage second_draw_image( | 1181 DrawImage second_draw_image( |
| 1145 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 1182 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 1146 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable)); | 1183 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 1184 DefaultColorSpace()); |
| 1147 scoped_refptr<TileTask> second_task; | 1185 scoped_refptr<TileTask> second_task; |
| 1148 need_unref = cache.GetTaskForImageAndRef( | 1186 need_unref = cache.GetTaskForImageAndRef( |
| 1149 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); | 1187 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); |
| 1150 EXPECT_TRUE(need_unref); | 1188 EXPECT_TRUE(need_unref); |
| 1151 EXPECT_TRUE(second_task); | 1189 EXPECT_TRUE(second_task); |
| 1152 EXPECT_TRUE(first_task.get() != second_task.get()); | 1190 EXPECT_TRUE(first_task.get() != second_task.get()); |
| 1153 | 1191 |
| 1154 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); | 1192 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
| 1155 TestTileTaskRunner::ProcessTask(second_task.get()); | 1193 TestTileTaskRunner::ProcessTask(second_task.get()); |
| 1156 | 1194 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1176 auto context_provider = TestContextProvider::Create(); | 1214 auto context_provider = TestContextProvider::Create(); |
| 1177 context_provider->BindToCurrentThread(); | 1215 context_provider->BindToCurrentThread(); |
| 1178 TestGpuImageDecodeCache cache(context_provider.get()); | 1216 TestGpuImageDecodeCache cache(context_provider.get()); |
| 1179 bool is_decomposable = true; | 1217 bool is_decomposable = true; |
| 1180 SkFilterQuality quality = kHigh_SkFilterQuality; | 1218 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 1181 | 1219 |
| 1182 // Create a downscaled image. | 1220 // Create a downscaled image. |
| 1183 sk_sp<SkImage> first_image = CreateImage(100, 100); | 1221 sk_sp<SkImage> first_image = CreateImage(100, 100); |
| 1184 DrawImage first_draw_image( | 1222 DrawImage first_draw_image( |
| 1185 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 1223 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 1186 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable)); | 1224 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
| 1225 DefaultColorSpace()); |
| 1187 scoped_refptr<TileTask> first_task; | 1226 scoped_refptr<TileTask> first_task; |
| 1188 bool need_unref = cache.GetTaskForImageAndRef( | 1227 bool need_unref = cache.GetTaskForImageAndRef( |
| 1189 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); | 1228 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); |
| 1190 EXPECT_TRUE(need_unref); | 1229 EXPECT_TRUE(need_unref); |
| 1191 EXPECT_TRUE(first_task); | 1230 EXPECT_TRUE(first_task); |
| 1192 | 1231 |
| 1193 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); | 1232 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); |
| 1194 TestTileTaskRunner::ProcessTask(first_task.get()); | 1233 TestTileTaskRunner::ProcessTask(first_task.get()); |
| 1195 cache.UnrefImage(first_draw_image); | 1234 cache.UnrefImage(first_draw_image); |
| 1196 | 1235 |
| 1197 // The budget should account for exactly one image. | 1236 // The budget should account for exactly one image. |
| 1198 EXPECT_EQ(cache.GetBytesUsedForTesting(), | 1237 EXPECT_EQ(cache.GetBytesUsedForTesting(), |
| 1199 cache.GetDrawImageSizeForTesting(first_draw_image)); | 1238 cache.GetDrawImageSizeForTesting(first_draw_image)); |
| 1200 | 1239 |
| 1201 // Create a larger version of |first_image|, this should immediately free the | 1240 // Create a larger version of |first_image|, this should immediately free the |
| 1202 // memory used by |first_image| for the smaller scale. | 1241 // memory used by |first_image| for the smaller scale. |
| 1203 DrawImage second_draw_image( | 1242 DrawImage second_draw_image( |
| 1204 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), | 1243 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 1205 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable)); | 1244 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 1245 DefaultColorSpace()); |
| 1206 scoped_refptr<TileTask> second_task; | 1246 scoped_refptr<TileTask> second_task; |
| 1207 need_unref = cache.GetTaskForImageAndRef( | 1247 need_unref = cache.GetTaskForImageAndRef( |
| 1208 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); | 1248 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); |
| 1209 EXPECT_TRUE(need_unref); | 1249 EXPECT_TRUE(need_unref); |
| 1210 EXPECT_TRUE(second_task); | 1250 EXPECT_TRUE(second_task); |
| 1211 EXPECT_TRUE(first_task.get() != second_task.get()); | 1251 EXPECT_TRUE(first_task.get() != second_task.get()); |
| 1212 | 1252 |
| 1213 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); | 1253 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
| 1214 TestTileTaskRunner::ProcessTask(second_task.get()); | 1254 TestTileTaskRunner::ProcessTask(second_task.get()); |
| 1215 | 1255 |
| 1216 cache.UnrefImage(second_draw_image); | 1256 cache.UnrefImage(second_draw_image); |
| 1217 | 1257 |
| 1218 // The budget should account for exactly one image. | 1258 // The budget should account for exactly one image. |
| 1219 EXPECT_EQ(cache.GetBytesUsedForTesting(), | 1259 EXPECT_EQ(cache.GetBytesUsedForTesting(), |
| 1220 cache.GetDrawImageSizeForTesting(second_draw_image)); | 1260 cache.GetDrawImageSizeForTesting(second_draw_image)); |
| 1221 } | 1261 } |
| 1222 | 1262 |
| 1223 TEST(GpuImageDecodeCacheTest, QualityCappedAtMedium) { | 1263 TEST(GpuImageDecodeCacheTest, QualityCappedAtMedium) { |
| 1224 auto context_provider = TestContextProvider::Create(); | 1264 auto context_provider = TestContextProvider::Create(); |
| 1225 context_provider->BindToCurrentThread(); | 1265 context_provider->BindToCurrentThread(); |
| 1226 TestGpuImageDecodeCache cache(context_provider.get()); | 1266 TestGpuImageDecodeCache cache(context_provider.get()); |
| 1227 sk_sp<SkImage> image = CreateImage(100, 100); | 1267 sk_sp<SkImage> image = CreateImage(100, 100); |
| 1228 bool is_decomposable = true; | 1268 bool is_decomposable = true; |
| 1229 SkMatrix matrix = CreateMatrix(SkSize::Make(0.4f, 0.4f), is_decomposable); | 1269 SkMatrix matrix = CreateMatrix(SkSize::Make(0.4f, 0.4f), is_decomposable); |
| 1230 | 1270 |
| 1231 // Create an image with kLow_FilterQuality. | 1271 // Create an image with kLow_FilterQuality. |
| 1232 DrawImage low_draw_image(image, | 1272 DrawImage low_draw_image(image, |
| 1233 SkIRect::MakeWH(image->width(), image->height()), | 1273 SkIRect::MakeWH(image->width(), image->height()), |
| 1234 kLow_SkFilterQuality, matrix); | 1274 kLow_SkFilterQuality, matrix, DefaultColorSpace()); |
| 1235 scoped_refptr<TileTask> low_task; | 1275 scoped_refptr<TileTask> low_task; |
| 1236 bool need_unref = cache.GetTaskForImageAndRef( | 1276 bool need_unref = cache.GetTaskForImageAndRef( |
| 1237 low_draw_image, ImageDecodeCache::TracingInfo(), &low_task); | 1277 low_draw_image, ImageDecodeCache::TracingInfo(), &low_task); |
| 1238 EXPECT_TRUE(need_unref); | 1278 EXPECT_TRUE(need_unref); |
| 1239 EXPECT_TRUE(low_task); | 1279 EXPECT_TRUE(low_task); |
| 1240 | 1280 |
| 1241 // Get the same image at kMedium_FilterQuality. We can't re-use low, so we | 1281 // Get the same image at kMedium_FilterQuality. We can't re-use low, so we |
| 1242 // should get a new task/ref. | 1282 // should get a new task/ref. |
| 1243 DrawImage medium_draw_image(image, | 1283 DrawImage medium_draw_image( |
| 1244 SkIRect::MakeWH(image->width(), image->height()), | 1284 image, SkIRect::MakeWH(image->width(), image->height()), |
| 1245 kMedium_SkFilterQuality, matrix); | 1285 kMedium_SkFilterQuality, matrix, DefaultColorSpace()); |
| 1246 scoped_refptr<TileTask> medium_task; | 1286 scoped_refptr<TileTask> medium_task; |
| 1247 need_unref = cache.GetTaskForImageAndRef( | 1287 need_unref = cache.GetTaskForImageAndRef( |
| 1248 medium_draw_image, ImageDecodeCache::TracingInfo(), &medium_task); | 1288 medium_draw_image, ImageDecodeCache::TracingInfo(), &medium_task); |
| 1249 EXPECT_TRUE(need_unref); | 1289 EXPECT_TRUE(need_unref); |
| 1250 EXPECT_TRUE(medium_task.get()); | 1290 EXPECT_TRUE(medium_task.get()); |
| 1251 EXPECT_FALSE(low_task.get() == medium_task.get()); | 1291 EXPECT_FALSE(low_task.get() == medium_task.get()); |
| 1252 | 1292 |
| 1253 // Get the same image at kHigh_FilterQuality. We should re-use medium. | 1293 // Get the same image at kHigh_FilterQuality. We should re-use medium. |
| 1254 DrawImage large_draw_image(image, | 1294 DrawImage large_draw_image( |
| 1255 SkIRect::MakeWH(image->width(), image->height()), | 1295 image, SkIRect::MakeWH(image->width(), image->height()), |
| 1256 kHigh_SkFilterQuality, matrix); | 1296 kHigh_SkFilterQuality, matrix, DefaultColorSpace()); |
| 1257 scoped_refptr<TileTask> large_task; | 1297 scoped_refptr<TileTask> large_task; |
| 1258 need_unref = cache.GetTaskForImageAndRef( | 1298 need_unref = cache.GetTaskForImageAndRef( |
| 1259 large_draw_image, ImageDecodeCache::TracingInfo(), &large_task); | 1299 large_draw_image, ImageDecodeCache::TracingInfo(), &large_task); |
| 1260 EXPECT_TRUE(need_unref); | 1300 EXPECT_TRUE(need_unref); |
| 1261 EXPECT_TRUE(medium_task.get() == large_task.get()); | 1301 EXPECT_TRUE(medium_task.get() == large_task.get()); |
| 1262 | 1302 |
| 1263 TestTileTaskRunner::ProcessTask(low_task->dependencies()[0].get()); | 1303 TestTileTaskRunner::ProcessTask(low_task->dependencies()[0].get()); |
| 1264 TestTileTaskRunner::ProcessTask(low_task.get()); | 1304 TestTileTaskRunner::ProcessTask(low_task.get()); |
| 1265 TestTileTaskRunner::ProcessTask(medium_task->dependencies()[0].get()); | 1305 TestTileTaskRunner::ProcessTask(medium_task->dependencies()[0].get()); |
| 1266 TestTileTaskRunner::ProcessTask(medium_task.get()); | 1306 TestTileTaskRunner::ProcessTask(medium_task.get()); |
| 1267 | 1307 |
| 1268 cache.UnrefImage(low_draw_image); | 1308 cache.UnrefImage(low_draw_image); |
| 1269 cache.UnrefImage(medium_draw_image); | 1309 cache.UnrefImage(medium_draw_image); |
| 1270 cache.UnrefImage(large_draw_image); | 1310 cache.UnrefImage(large_draw_image); |
| 1271 } | 1311 } |
| 1272 | 1312 |
| 1273 // Ensure that switching to a mipped version of an image after the initial | 1313 // Ensure that switching to a mipped version of an image after the initial |
| 1274 // cache entry creation doesn't cause a buffer overflow/crash. | 1314 // cache entry creation doesn't cause a buffer overflow/crash. |
| 1275 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawMipUsageChange) { | 1315 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawMipUsageChange) { |
| 1276 auto context_provider = TestContextProvider::Create(); | 1316 auto context_provider = TestContextProvider::Create(); |
| 1277 context_provider->BindToCurrentThread(); | 1317 context_provider->BindToCurrentThread(); |
| 1278 TestGpuImageDecodeCache cache(context_provider.get()); | 1318 TestGpuImageDecodeCache cache(context_provider.get()); |
| 1279 bool is_decomposable = true; | 1319 bool is_decomposable = true; |
| 1280 SkFilterQuality quality = kHigh_SkFilterQuality; | 1320 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 1281 | 1321 |
| 1282 // Create an image decode task and cache entry that does not need mips. | 1322 // Create an image decode task and cache entry that does not need mips. |
| 1283 sk_sp<SkImage> image = CreateImage(4000, 4000); | 1323 sk_sp<SkImage> image = CreateImage(4000, 4000); |
| 1284 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1324 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 1285 quality, | 1325 quality, |
| 1286 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable)); | 1326 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 1327 DefaultColorSpace()); |
| 1287 scoped_refptr<TileTask> task; | 1328 scoped_refptr<TileTask> task; |
| 1288 bool need_unref = cache.GetTaskForImageAndRef( | 1329 bool need_unref = cache.GetTaskForImageAndRef( |
| 1289 draw_image, ImageDecodeCache::TracingInfo(), &task); | 1330 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 1290 EXPECT_TRUE(need_unref); | 1331 EXPECT_TRUE(need_unref); |
| 1291 EXPECT_TRUE(task); | 1332 EXPECT_TRUE(task); |
| 1292 | 1333 |
| 1293 // Cancel the task without ever using it. | 1334 // Cancel the task without ever using it. |
| 1294 TestTileTaskRunner::CancelTask(task->dependencies()[0].get()); | 1335 TestTileTaskRunner::CancelTask(task->dependencies()[0].get()); |
| 1295 TestTileTaskRunner::CompleteTask(task->dependencies()[0].get()); | 1336 TestTileTaskRunner::CompleteTask(task->dependencies()[0].get()); |
| 1296 TestTileTaskRunner::CancelTask(task.get()); | 1337 TestTileTaskRunner::CancelTask(task.get()); |
| 1297 TestTileTaskRunner::CompleteTask(task.get()); | 1338 TestTileTaskRunner::CompleteTask(task.get()); |
| 1298 | 1339 |
| 1299 cache.UnrefImage(draw_image); | 1340 cache.UnrefImage(draw_image); |
| 1300 | 1341 |
| 1301 // Must hold context lock before calling GetDecodedImageForDraw / | 1342 // Must hold context lock before calling GetDecodedImageForDraw / |
| 1302 // DrawWithImageFinished. | 1343 // DrawWithImageFinished. |
| 1303 ContextProvider::ScopedContextLock context_lock(context_provider.get()); | 1344 ContextProvider::ScopedContextLock context_lock(context_provider.get()); |
| 1304 | 1345 |
| 1305 // Do an at-raster decode of the above image that *does* require mips. | 1346 // Do an at-raster decode of the above image that *does* require mips. |
| 1306 DrawImage draw_image_mips( | 1347 DrawImage draw_image_mips( |
| 1307 image, SkIRect::MakeWH(image->width(), image->height()), quality, | 1348 image, SkIRect::MakeWH(image->width(), image->height()), quality, |
| 1308 CreateMatrix(SkSize::Make(0.6f, 0.6f), is_decomposable)); | 1349 CreateMatrix(SkSize::Make(0.6f, 0.6f), is_decomposable), |
| 1350 DefaultColorSpace()); |
| 1309 DecodedDrawImage decoded_draw_image = | 1351 DecodedDrawImage decoded_draw_image = |
| 1310 cache.GetDecodedImageForDraw(draw_image_mips); | 1352 cache.GetDecodedImageForDraw(draw_image_mips); |
| 1311 cache.DrawWithImageFinished(draw_image_mips, decoded_draw_image); | 1353 cache.DrawWithImageFinished(draw_image_mips, decoded_draw_image); |
| 1312 } | 1354 } |
| 1313 | 1355 |
| 1314 TEST(GpuImageDecodeCacheTest, MemoryStateSuspended) { | 1356 TEST(GpuImageDecodeCacheTest, MemoryStateSuspended) { |
| 1315 auto context_provider = TestContextProvider::Create(); | 1357 auto context_provider = TestContextProvider::Create(); |
| 1316 context_provider->BindToCurrentThread(); | 1358 context_provider->BindToCurrentThread(); |
| 1317 TestGpuImageDecodeCache cache(context_provider.get()); | 1359 TestGpuImageDecodeCache cache(context_provider.get()); |
| 1318 | 1360 |
| 1319 // First Insert an image into our cache. | 1361 // First Insert an image into our cache. |
| 1320 sk_sp<SkImage> image = CreateImage(1, 1); | 1362 sk_sp<SkImage> image = CreateImage(1, 1); |
| 1321 bool is_decomposable = true; | 1363 bool is_decomposable = true; |
| 1322 SkMatrix matrix = CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable); | 1364 SkMatrix matrix = CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable); |
| 1323 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1365 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 1324 kLow_SkFilterQuality, matrix); | 1366 kLow_SkFilterQuality, matrix, DefaultColorSpace()); |
| 1325 scoped_refptr<TileTask> task; | 1367 scoped_refptr<TileTask> task; |
| 1326 bool need_unref = cache.GetTaskForImageAndRef( | 1368 bool need_unref = cache.GetTaskForImageAndRef( |
| 1327 draw_image, ImageDecodeCache::TracingInfo(), &task); | 1369 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 1328 EXPECT_TRUE(need_unref); | 1370 EXPECT_TRUE(need_unref); |
| 1329 EXPECT_TRUE(task); | 1371 EXPECT_TRUE(task); |
| 1330 | 1372 |
| 1331 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 1373 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 1332 TestTileTaskRunner::ProcessTask(task.get()); | 1374 TestTileTaskRunner::ProcessTask(task.get()); |
| 1333 cache.UnrefImage(draw_image); | 1375 cache.UnrefImage(draw_image); |
| 1334 | 1376 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1383 | 1425 |
| 1384 TEST(GpuImageDecodeCacheTest, OutOfRasterDecodeTask) { | 1426 TEST(GpuImageDecodeCacheTest, OutOfRasterDecodeTask) { |
| 1385 auto context_provider = TestContextProvider::Create(); | 1427 auto context_provider = TestContextProvider::Create(); |
| 1386 context_provider->BindToCurrentThread(); | 1428 context_provider->BindToCurrentThread(); |
| 1387 TestGpuImageDecodeCache cache(context_provider.get()); | 1429 TestGpuImageDecodeCache cache(context_provider.get()); |
| 1388 | 1430 |
| 1389 sk_sp<SkImage> image = CreateImage(1, 1); | 1431 sk_sp<SkImage> image = CreateImage(1, 1); |
| 1390 bool is_decomposable = true; | 1432 bool is_decomposable = true; |
| 1391 SkMatrix matrix = CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable); | 1433 SkMatrix matrix = CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable); |
| 1392 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1434 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 1393 kLow_SkFilterQuality, matrix); | 1435 kLow_SkFilterQuality, matrix, DefaultColorSpace()); |
| 1394 | 1436 |
| 1395 scoped_refptr<TileTask> task; | 1437 scoped_refptr<TileTask> task; |
| 1396 bool need_unref = | 1438 bool need_unref = |
| 1397 cache.GetOutOfRasterDecodeTaskForImageAndRef(draw_image, &task); | 1439 cache.GetOutOfRasterDecodeTaskForImageAndRef(draw_image, &task); |
| 1398 EXPECT_TRUE(need_unref); | 1440 EXPECT_TRUE(need_unref); |
| 1399 EXPECT_TRUE(task); | 1441 EXPECT_TRUE(task); |
| 1400 EXPECT_TRUE(cache.IsInInUseCacheForTesting(draw_image)); | 1442 EXPECT_TRUE(cache.IsInInUseCacheForTesting(draw_image)); |
| 1401 | 1443 |
| 1402 // Run the decode task. | 1444 // Run the decode task. |
| 1403 TestTileTaskRunner::ProcessTask(task.get()); | 1445 TestTileTaskRunner::ProcessTask(task.get()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1414 GpuImageDecodeCache cache(context_provider.get(), ResourceFormat::RGBA_8888, | 1456 GpuImageDecodeCache cache(context_provider.get(), ResourceFormat::RGBA_8888, |
| 1415 kGpuMemoryLimitBytes, 0); | 1457 kGpuMemoryLimitBytes, 0); |
| 1416 bool is_decomposable = true; | 1458 bool is_decomposable = true; |
| 1417 SkFilterQuality quality = kHigh_SkFilterQuality; | 1459 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 1418 | 1460 |
| 1419 // Add an image to the cache. Due to normal working set, this should produce | 1461 // Add an image to the cache. Due to normal working set, this should produce |
| 1420 // a task and a ref. | 1462 // a task and a ref. |
| 1421 sk_sp<SkImage> image = CreateImage(100, 100); | 1463 sk_sp<SkImage> image = CreateImage(100, 100); |
| 1422 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1464 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 1423 quality, | 1465 quality, |
| 1424 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable)); | 1466 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 1467 DefaultColorSpace()); |
| 1425 scoped_refptr<TileTask> task; | 1468 scoped_refptr<TileTask> task; |
| 1426 bool need_unref = cache.GetTaskForImageAndRef( | 1469 bool need_unref = cache.GetTaskForImageAndRef( |
| 1427 draw_image, ImageDecodeCache::TracingInfo(), &task); | 1470 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 1428 EXPECT_TRUE(need_unref); | 1471 EXPECT_TRUE(need_unref); |
| 1429 EXPECT_TRUE(task); | 1472 EXPECT_TRUE(task); |
| 1430 EXPECT_EQ(task->dependencies().size(), 1u); | 1473 EXPECT_EQ(task->dependencies().size(), 1u); |
| 1431 EXPECT_TRUE(task->dependencies()[0]); | 1474 EXPECT_TRUE(task->dependencies()[0]); |
| 1432 | 1475 |
| 1433 // Run the task. | 1476 // Run the task. |
| 1434 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 1477 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1468 auto context_provider = TestContextProvider::Create(); | 1511 auto context_provider = TestContextProvider::Create(); |
| 1469 context_provider->BindToCurrentThread(); | 1512 context_provider->BindToCurrentThread(); |
| 1470 GpuImageDecodeCache cache(context_provider.get(), ResourceFormat::RGBA_8888, | 1513 GpuImageDecodeCache cache(context_provider.get(), ResourceFormat::RGBA_8888, |
| 1471 kGpuMemoryLimitBytes, cache_size); | 1514 kGpuMemoryLimitBytes, cache_size); |
| 1472 bool is_decomposable = true; | 1515 bool is_decomposable = true; |
| 1473 SkFilterQuality quality = kHigh_SkFilterQuality; | 1516 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 1474 | 1517 |
| 1475 sk_sp<SkImage> image = CreateImage(100, 100); | 1518 sk_sp<SkImage> image = CreateImage(100, 100); |
| 1476 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), | 1519 DrawImage draw_image(image, SkIRect::MakeWH(image->width(), image->height()), |
| 1477 quality, | 1520 quality, |
| 1478 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable)); | 1521 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 1522 DefaultColorSpace()); |
| 1479 | 1523 |
| 1480 sk_sp<SkImage> image2 = CreateImage(100, 100); | 1524 sk_sp<SkImage> image2 = CreateImage(100, 100); |
| 1481 DrawImage draw_image2( | 1525 DrawImage draw_image2( |
| 1482 image2, SkIRect::MakeWH(image2->width(), image2->height()), quality, | 1526 image2, SkIRect::MakeWH(image2->width(), image2->height()), quality, |
| 1483 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable)); | 1527 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 1528 DefaultColorSpace()); |
| 1484 | 1529 |
| 1485 // Add an image to the cache and un-ref it. | 1530 // Add an image to the cache and un-ref it. |
| 1486 { | 1531 { |
| 1487 scoped_refptr<TileTask> task; | 1532 scoped_refptr<TileTask> task; |
| 1488 bool need_unref = cache.GetTaskForImageAndRef( | 1533 bool need_unref = cache.GetTaskForImageAndRef( |
| 1489 draw_image, ImageDecodeCache::TracingInfo(), &task); | 1534 draw_image, ImageDecodeCache::TracingInfo(), &task); |
| 1490 EXPECT_TRUE(need_unref); | 1535 EXPECT_TRUE(need_unref); |
| 1491 EXPECT_TRUE(task); | 1536 EXPECT_TRUE(task); |
| 1492 EXPECT_EQ(task->dependencies().size(), 1u); | 1537 EXPECT_EQ(task->dependencies().size(), 1u); |
| 1493 EXPECT_TRUE(task->dependencies()[0]); | 1538 EXPECT_TRUE(task->dependencies()[0]); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1545 EXPECT_EQ(task->dependencies().size(), 1u); | 1590 EXPECT_EQ(task->dependencies().size(), 1u); |
| 1546 EXPECT_TRUE(task->dependencies()[0]); | 1591 EXPECT_TRUE(task->dependencies()[0]); |
| 1547 | 1592 |
| 1548 // Run the task and unref the image. | 1593 // Run the task and unref the image. |
| 1549 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 1594 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
| 1550 TestTileTaskRunner::ProcessTask(task.get()); | 1595 TestTileTaskRunner::ProcessTask(task.get()); |
| 1551 cache.UnrefImage(draw_image); | 1596 cache.UnrefImage(draw_image); |
| 1552 } | 1597 } |
| 1553 } | 1598 } |
| 1554 | 1599 |
| 1600 TEST(GpuImageDecodeCacheTest, GetTaskForImageDifferentColorSpace) { |
| 1601 auto context_provider = TestContextProvider::Create(); |
| 1602 context_provider->BindToCurrentThread(); |
| 1603 TestGpuImageDecodeCache cache(context_provider.get()); |
| 1604 bool is_decomposable = true; |
| 1605 SkFilterQuality quality = kHigh_SkFilterQuality; |
| 1606 gfx::ColorSpace color_space_a = gfx::ColorSpace::CreateSRGB(); |
| 1607 gfx::ColorSpace color_space_b = gfx::ColorSpace::CreateXYZD50(); |
| 1608 |
| 1609 sk_sp<SkImage> first_image = CreateImage(100, 100); |
| 1610 DrawImage first_draw_image( |
| 1611 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 1612 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 1613 color_space_a); |
| 1614 scoped_refptr<TileTask> first_task; |
| 1615 bool need_unref = cache.GetTaskForImageAndRef( |
| 1616 first_draw_image, ImageDecodeCache::TracingInfo(), &first_task); |
| 1617 EXPECT_TRUE(need_unref); |
| 1618 EXPECT_TRUE(first_task); |
| 1619 |
| 1620 DrawImage second_draw_image( |
| 1621 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 1622 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 1623 color_space_b); |
| 1624 scoped_refptr<TileTask> second_task; |
| 1625 need_unref = cache.GetTaskForImageAndRef( |
| 1626 second_draw_image, ImageDecodeCache::TracingInfo(), &second_task); |
| 1627 EXPECT_TRUE(need_unref); |
| 1628 EXPECT_TRUE(second_task); |
| 1629 EXPECT_TRUE(first_task.get() != second_task.get()); |
| 1630 |
| 1631 DrawImage third_draw_image( |
| 1632 first_image, SkIRect::MakeWH(first_image->width(), first_image->height()), |
| 1633 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
| 1634 color_space_a); |
| 1635 scoped_refptr<TileTask> third_task; |
| 1636 need_unref = cache.GetTaskForImageAndRef( |
| 1637 third_draw_image, ImageDecodeCache::TracingInfo(), &third_task); |
| 1638 EXPECT_TRUE(need_unref); |
| 1639 EXPECT_TRUE(third_task.get() == first_task.get()); |
| 1640 |
| 1641 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); |
| 1642 TestTileTaskRunner::ProcessTask(first_task.get()); |
| 1643 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
| 1644 TestTileTaskRunner::ProcessTask(second_task.get()); |
| 1645 |
| 1646 cache.UnrefImage(first_draw_image); |
| 1647 cache.UnrefImage(second_draw_image); |
| 1648 cache.UnrefImage(third_draw_image); |
| 1649 } |
| 1650 |
| 1555 } // namespace | 1651 } // namespace |
| 1556 } // namespace cc | 1652 } // namespace cc |
| OLD | NEW |