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