OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/tiles/gpu_image_decode_cache.h" | 5 #include "cc/tiles/gpu_image_decode_cache.h" |
6 | 6 |
7 #include "cc/paint/draw_image.h" | 7 #include "cc/paint/draw_image.h" |
8 #include "cc/test/test_context_provider.h" | 8 #include "cc/test/test_context_provider.h" |
9 #include "cc/test/test_tile_task_runner.h" | 9 #include "cc/test/test_tile_task_runner.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include "third_party/skia/include/core/SkImageGenerator.h" |
11 #include "third_party/skia/include/core/SkRefCnt.h" | 12 #include "third_party/skia/include/core/SkRefCnt.h" |
12 | 13 |
13 namespace cc { | 14 namespace cc { |
14 namespace { | 15 namespace { |
15 | 16 |
16 gfx::ColorSpace DefaultColorSpace() { | 17 gfx::ColorSpace DefaultColorSpace() { |
17 return gfx::ColorSpace::CreateSRGB(); | 18 return gfx::ColorSpace::CreateSRGB(); |
18 } | 19 } |
19 | 20 |
20 PaintImage::Id s_paint_image_id = PaintImage::GetNextId(); | 21 PaintImage::Id s_paint_image_id = PaintImage::GetNextId(); |
21 | 22 |
22 PaintImage CreatePaintImage(sk_sp<SkImage> image) { | 23 PaintImage CreatePaintImage(sk_sp<SkImage> image) { |
23 return PaintImage(s_paint_image_id, image); | 24 return PaintImage(s_paint_image_id, image); |
24 } | 25 } |
25 | 26 |
26 size_t kGpuMemoryLimitBytes = 96 * 1024 * 1024; | 27 size_t kGpuMemoryLimitBytes = 96 * 1024 * 1024; |
27 class TestGpuImageDecodeCache : public GpuImageDecodeCache { | 28 class TestGpuImageDecodeCache : public GpuImageDecodeCache { |
28 public: | 29 public: |
29 explicit TestGpuImageDecodeCache(ContextProvider* context) | 30 explicit TestGpuImageDecodeCache(ContextProvider* context, |
| 31 ResourceFormat format) |
30 : GpuImageDecodeCache(context, | 32 : GpuImageDecodeCache(context, |
31 ResourceFormat::RGBA_8888, | 33 format, |
32 kGpuMemoryLimitBytes, | 34 kGpuMemoryLimitBytes, |
33 kGpuMemoryLimitBytes) {} | 35 kGpuMemoryLimitBytes) {} |
34 }; | 36 }; |
35 | 37 |
| 38 class TestImageGenerator : public SkImageGenerator { |
| 39 public: |
| 40 explicit TestImageGenerator(const SkImageInfo& info) |
| 41 : SkImageGenerator(info), |
| 42 image_backing_memory_(info.getSafeSize(info.minRowBytes()), 0), |
| 43 image_pixmap_(info, image_backing_memory_.data(), info.minRowBytes()) {} |
| 44 |
| 45 protected: |
| 46 bool onGetPixels(const SkImageInfo& info, |
| 47 void* pixels, |
| 48 size_t rowBytes, |
| 49 const Options&) override { |
| 50 return image_pixmap_.readPixels(info, pixels, rowBytes, 0, 0); |
| 51 } |
| 52 |
| 53 private: |
| 54 std::vector<uint8_t> image_backing_memory_; |
| 55 SkPixmap image_pixmap_; |
| 56 }; |
| 57 |
36 sk_sp<SkImage> CreateImage(int width, int height) { | 58 sk_sp<SkImage> CreateImage(int width, int height) { |
37 SkBitmap bitmap; | |
38 gfx::ColorSpace color_space = gfx::ColorSpace::CreateSRGB(); | 59 gfx::ColorSpace color_space = gfx::ColorSpace::CreateSRGB(); |
39 bitmap.allocPixels( | 60 std::unique_ptr<TestImageGenerator> generator(new TestImageGenerator( |
40 SkImageInfo::MakeN32Premul(width, height, color_space.ToSkColorSpace())); | 61 SkImageInfo::MakeN32Premul(width, height, color_space.ToSkColorSpace()))); |
41 bitmap.eraseColor(0); | 62 return SkImage::MakeFromGenerator(std::move(generator)); |
42 return SkImage::MakeFromBitmap(bitmap); | |
43 } | 63 } |
44 | 64 |
45 SkMatrix CreateMatrix(const SkSize& scale, bool is_decomposable) { | 65 SkMatrix CreateMatrix(const SkSize& scale, bool is_decomposable) { |
46 SkMatrix matrix; | 66 SkMatrix matrix; |
47 matrix.setScale(scale.width(), scale.height()); | 67 matrix.setScale(scale.width(), scale.height()); |
48 | 68 |
49 if (!is_decomposable) { | 69 if (!is_decomposable) { |
50 // Perspective is not decomposable, add it. | 70 // Perspective is not decomposable, add it. |
51 matrix[SkMatrix::kMPersp0] = 0.1f; | 71 matrix[SkMatrix::kMPersp0] = 0.1f; |
52 } | 72 } |
53 | 73 |
54 return matrix; | 74 return matrix; |
55 } | 75 } |
56 | 76 |
57 TEST(GpuImageDecodeCacheTest, GetTaskForImageSameImage) { | 77 using GpuImageDecodeCacheTest = ::testing::TestWithParam<ResourceFormat>; |
| 78 |
| 79 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageSameImage) { |
58 auto context_provider = TestContextProvider::Create(); | 80 auto context_provider = TestContextProvider::Create(); |
59 context_provider->BindToCurrentThread(); | 81 context_provider->BindToCurrentThread(); |
60 TestGpuImageDecodeCache cache(context_provider.get()); | 82 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
61 sk_sp<SkImage> image = CreateImage(100, 100); | 83 sk_sp<SkImage> image = CreateImage(100, 100); |
62 bool is_decomposable = true; | 84 bool is_decomposable = true; |
63 SkFilterQuality quality = kHigh_SkFilterQuality; | 85 SkFilterQuality quality = kHigh_SkFilterQuality; |
64 | 86 |
65 DrawImage draw_image( | 87 DrawImage draw_image( |
66 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 88 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
67 quality, CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable), | 89 quality, CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable), |
68 DefaultColorSpace()); | 90 DefaultColorSpace()); |
69 scoped_refptr<TileTask> task; | 91 scoped_refptr<TileTask> task; |
70 bool need_unref = cache.GetTaskForImageAndRef( | 92 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 11 matching lines...) Expand all Loading... |
82 EXPECT_TRUE(need_unref); | 104 EXPECT_TRUE(need_unref); |
83 EXPECT_TRUE(task.get() == another_task.get()); | 105 EXPECT_TRUE(task.get() == another_task.get()); |
84 | 106 |
85 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 107 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
86 TestTileTaskRunner::ProcessTask(task.get()); | 108 TestTileTaskRunner::ProcessTask(task.get()); |
87 | 109 |
88 cache.UnrefImage(draw_image); | 110 cache.UnrefImage(draw_image); |
89 cache.UnrefImage(draw_image); | 111 cache.UnrefImage(draw_image); |
90 } | 112 } |
91 | 113 |
92 TEST(GpuImageDecodeCacheTest, GetTaskForImageSmallerScale) { | 114 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageSmallerScale) { |
93 auto context_provider = TestContextProvider::Create(); | 115 auto context_provider = TestContextProvider::Create(); |
94 context_provider->BindToCurrentThread(); | 116 context_provider->BindToCurrentThread(); |
95 TestGpuImageDecodeCache cache(context_provider.get()); | 117 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
96 sk_sp<SkImage> image = CreateImage(100, 100); | 118 sk_sp<SkImage> image = CreateImage(100, 100); |
97 bool is_decomposable = true; | 119 bool is_decomposable = true; |
98 SkFilterQuality quality = kHigh_SkFilterQuality; | 120 SkFilterQuality quality = kHigh_SkFilterQuality; |
99 | 121 |
100 DrawImage draw_image( | 122 DrawImage draw_image( |
101 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 123 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
102 quality, CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable), | 124 quality, CreateMatrix(SkSize::Make(1.5f, 1.5f), is_decomposable), |
103 DefaultColorSpace()); | 125 DefaultColorSpace()); |
104 scoped_refptr<TileTask> task; | 126 scoped_refptr<TileTask> task; |
105 bool need_unref = cache.GetTaskForImageAndRef( | 127 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 11 matching lines...) Expand all Loading... |
117 EXPECT_TRUE(need_unref); | 139 EXPECT_TRUE(need_unref); |
118 EXPECT_TRUE(task.get() == another_task.get()); | 140 EXPECT_TRUE(task.get() == another_task.get()); |
119 | 141 |
120 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 142 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
121 TestTileTaskRunner::ProcessTask(task.get()); | 143 TestTileTaskRunner::ProcessTask(task.get()); |
122 | 144 |
123 cache.UnrefImage(draw_image); | 145 cache.UnrefImage(draw_image); |
124 cache.UnrefImage(another_draw_image); | 146 cache.UnrefImage(another_draw_image); |
125 } | 147 } |
126 | 148 |
127 TEST(GpuImageDecodeCacheTest, GetTaskForImageLowerQuality) { | 149 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageLowerQuality) { |
128 auto context_provider = TestContextProvider::Create(); | 150 auto context_provider = TestContextProvider::Create(); |
129 context_provider->BindToCurrentThread(); | 151 context_provider->BindToCurrentThread(); |
130 TestGpuImageDecodeCache cache(context_provider.get()); | 152 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
131 sk_sp<SkImage> image = CreateImage(100, 100); | 153 sk_sp<SkImage> image = CreateImage(100, 100); |
132 bool is_decomposable = true; | 154 bool is_decomposable = true; |
133 SkMatrix matrix = CreateMatrix(SkSize::Make(0.4f, 0.4f), is_decomposable); | 155 SkMatrix matrix = CreateMatrix(SkSize::Make(0.4f, 0.4f), is_decomposable); |
134 | 156 |
135 DrawImage draw_image(CreatePaintImage(image), | 157 DrawImage draw_image(CreatePaintImage(image), |
136 SkIRect::MakeWH(image->width(), image->height()), | 158 SkIRect::MakeWH(image->width(), image->height()), |
137 kHigh_SkFilterQuality, matrix, DefaultColorSpace()); | 159 kHigh_SkFilterQuality, matrix, DefaultColorSpace()); |
138 scoped_refptr<TileTask> task; | 160 scoped_refptr<TileTask> task; |
139 bool need_unref = cache.GetTaskForImageAndRef( | 161 bool need_unref = cache.GetTaskForImageAndRef( |
140 draw_image, ImageDecodeCache::TracingInfo(), &task); | 162 draw_image, ImageDecodeCache::TracingInfo(), &task); |
141 EXPECT_TRUE(need_unref); | 163 EXPECT_TRUE(need_unref); |
142 EXPECT_TRUE(task); | 164 EXPECT_TRUE(task); |
143 | 165 |
144 DrawImage another_draw_image( | 166 DrawImage another_draw_image( |
145 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 167 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
146 kLow_SkFilterQuality, matrix, DefaultColorSpace()); | 168 kLow_SkFilterQuality, matrix, DefaultColorSpace()); |
147 scoped_refptr<TileTask> another_task; | 169 scoped_refptr<TileTask> another_task; |
148 need_unref = cache.GetTaskForImageAndRef( | 170 need_unref = cache.GetTaskForImageAndRef( |
149 another_draw_image, ImageDecodeCache::TracingInfo(), &another_task); | 171 another_draw_image, ImageDecodeCache::TracingInfo(), &another_task); |
150 EXPECT_TRUE(need_unref); | 172 EXPECT_TRUE(need_unref); |
151 EXPECT_TRUE(task.get() == another_task.get()); | 173 EXPECT_TRUE(task.get() == another_task.get()); |
152 | 174 |
153 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 175 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
154 TestTileTaskRunner::ProcessTask(task.get()); | 176 TestTileTaskRunner::ProcessTask(task.get()); |
155 | 177 |
156 cache.UnrefImage(draw_image); | 178 cache.UnrefImage(draw_image); |
157 cache.UnrefImage(another_draw_image); | 179 cache.UnrefImage(another_draw_image); |
158 } | 180 } |
159 | 181 |
160 TEST(GpuImageDecodeCacheTest, GetTaskForImageDifferentImage) { | 182 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageDifferentImage) { |
161 auto context_provider = TestContextProvider::Create(); | 183 auto context_provider = TestContextProvider::Create(); |
162 context_provider->BindToCurrentThread(); | 184 context_provider->BindToCurrentThread(); |
163 TestGpuImageDecodeCache cache(context_provider.get()); | 185 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
164 bool is_decomposable = true; | 186 bool is_decomposable = true; |
165 SkFilterQuality quality = kHigh_SkFilterQuality; | 187 SkFilterQuality quality = kHigh_SkFilterQuality; |
166 | 188 |
167 sk_sp<SkImage> first_image = CreateImage(100, 100); | 189 sk_sp<SkImage> first_image = CreateImage(100, 100); |
168 DrawImage first_draw_image( | 190 DrawImage first_draw_image( |
169 CreatePaintImage(first_image), | 191 CreatePaintImage(first_image), |
170 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, | 192 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, |
171 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 193 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
172 DefaultColorSpace()); | 194 DefaultColorSpace()); |
173 scoped_refptr<TileTask> first_task; | 195 scoped_refptr<TileTask> first_task; |
(...skipping 17 matching lines...) Expand all Loading... |
191 | 213 |
192 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); | 214 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); |
193 TestTileTaskRunner::ProcessTask(first_task.get()); | 215 TestTileTaskRunner::ProcessTask(first_task.get()); |
194 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); | 216 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
195 TestTileTaskRunner::ProcessTask(second_task.get()); | 217 TestTileTaskRunner::ProcessTask(second_task.get()); |
196 | 218 |
197 cache.UnrefImage(first_draw_image); | 219 cache.UnrefImage(first_draw_image); |
198 cache.UnrefImage(second_draw_image); | 220 cache.UnrefImage(second_draw_image); |
199 } | 221 } |
200 | 222 |
201 TEST(GpuImageDecodeCacheTest, GetTaskForImageLargerScale) { | 223 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageLargerScale) { |
202 auto context_provider = TestContextProvider::Create(); | 224 auto context_provider = TestContextProvider::Create(); |
203 context_provider->BindToCurrentThread(); | 225 context_provider->BindToCurrentThread(); |
204 TestGpuImageDecodeCache cache(context_provider.get()); | 226 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
205 bool is_decomposable = true; | 227 bool is_decomposable = true; |
206 SkFilterQuality quality = kHigh_SkFilterQuality; | 228 SkFilterQuality quality = kHigh_SkFilterQuality; |
207 | 229 |
208 sk_sp<SkImage> first_image = CreateImage(100, 100); | 230 sk_sp<SkImage> first_image = CreateImage(100, 100); |
209 DrawImage first_draw_image( | 231 DrawImage first_draw_image( |
210 CreatePaintImage(first_image), | 232 CreatePaintImage(first_image), |
211 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, | 233 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, |
212 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 234 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
213 DefaultColorSpace()); | 235 DefaultColorSpace()); |
214 scoped_refptr<TileTask> first_task; | 236 scoped_refptr<TileTask> first_task; |
(...skipping 30 matching lines...) Expand all Loading... |
245 EXPECT_TRUE(need_unref); | 267 EXPECT_TRUE(need_unref); |
246 EXPECT_TRUE(third_task.get() == second_task.get()); | 268 EXPECT_TRUE(third_task.get() == second_task.get()); |
247 | 269 |
248 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); | 270 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
249 TestTileTaskRunner::ProcessTask(second_task.get()); | 271 TestTileTaskRunner::ProcessTask(second_task.get()); |
250 | 272 |
251 cache.UnrefImage(second_draw_image); | 273 cache.UnrefImage(second_draw_image); |
252 cache.UnrefImage(third_draw_image); | 274 cache.UnrefImage(third_draw_image); |
253 } | 275 } |
254 | 276 |
255 TEST(GpuImageDecodeCacheTest, GetTaskForImageLargerScaleNoReuse) { | 277 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageLargerScaleNoReuse) { |
256 auto context_provider = TestContextProvider::Create(); | 278 auto context_provider = TestContextProvider::Create(); |
257 context_provider->BindToCurrentThread(); | 279 context_provider->BindToCurrentThread(); |
258 TestGpuImageDecodeCache cache(context_provider.get()); | 280 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
259 bool is_decomposable = true; | 281 bool is_decomposable = true; |
260 SkFilterQuality quality = kHigh_SkFilterQuality; | 282 SkFilterQuality quality = kHigh_SkFilterQuality; |
261 | 283 |
262 sk_sp<SkImage> first_image = CreateImage(100, 100); | 284 sk_sp<SkImage> first_image = CreateImage(100, 100); |
263 DrawImage first_draw_image( | 285 DrawImage first_draw_image( |
264 CreatePaintImage(first_image), | 286 CreatePaintImage(first_image), |
265 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, | 287 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, |
266 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 288 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
267 DefaultColorSpace()); | 289 DefaultColorSpace()); |
268 scoped_refptr<TileTask> first_task; | 290 scoped_refptr<TileTask> first_task; |
(...skipping 28 matching lines...) Expand all Loading... |
297 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); | 319 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); |
298 TestTileTaskRunner::ProcessTask(first_task.get()); | 320 TestTileTaskRunner::ProcessTask(first_task.get()); |
299 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); | 321 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
300 TestTileTaskRunner::ProcessTask(second_task.get()); | 322 TestTileTaskRunner::ProcessTask(second_task.get()); |
301 | 323 |
302 cache.UnrefImage(first_draw_image); | 324 cache.UnrefImage(first_draw_image); |
303 cache.UnrefImage(second_draw_image); | 325 cache.UnrefImage(second_draw_image); |
304 cache.UnrefImage(third_draw_image); | 326 cache.UnrefImage(third_draw_image); |
305 } | 327 } |
306 | 328 |
307 TEST(GpuImageDecodeCacheTest, GetTaskForImageHigherQuality) { | 329 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageHigherQuality) { |
308 auto context_provider = TestContextProvider::Create(); | 330 auto context_provider = TestContextProvider::Create(); |
309 context_provider->BindToCurrentThread(); | 331 context_provider->BindToCurrentThread(); |
310 TestGpuImageDecodeCache cache(context_provider.get()); | 332 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
311 bool is_decomposable = true; | 333 bool is_decomposable = true; |
312 SkMatrix matrix = CreateMatrix(SkSize::Make(0.4f, 0.4f), is_decomposable); | 334 SkMatrix matrix = CreateMatrix(SkSize::Make(0.4f, 0.4f), is_decomposable); |
313 | 335 |
314 sk_sp<SkImage> first_image = CreateImage(100, 100); | 336 sk_sp<SkImage> first_image = CreateImage(100, 100); |
315 DrawImage first_draw_image( | 337 DrawImage first_draw_image( |
316 CreatePaintImage(first_image), | 338 CreatePaintImage(first_image), |
317 SkIRect::MakeWH(first_image->width(), first_image->height()), | 339 SkIRect::MakeWH(first_image->width(), first_image->height()), |
318 kLow_SkFilterQuality, matrix, DefaultColorSpace()); | 340 kLow_SkFilterQuality, matrix, DefaultColorSpace()); |
319 scoped_refptr<TileTask> first_task; | 341 scoped_refptr<TileTask> first_task; |
320 bool need_unref = cache.GetTaskForImageAndRef( | 342 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 16 matching lines...) Expand all Loading... |
337 EXPECT_TRUE(need_unref); | 359 EXPECT_TRUE(need_unref); |
338 EXPECT_TRUE(second_task); | 360 EXPECT_TRUE(second_task); |
339 EXPECT_TRUE(first_task.get() != second_task.get()); | 361 EXPECT_TRUE(first_task.get() != second_task.get()); |
340 | 362 |
341 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); | 363 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
342 TestTileTaskRunner::ProcessTask(second_task.get()); | 364 TestTileTaskRunner::ProcessTask(second_task.get()); |
343 | 365 |
344 cache.UnrefImage(second_draw_image); | 366 cache.UnrefImage(second_draw_image); |
345 } | 367 } |
346 | 368 |
347 TEST(GpuImageDecodeCacheTest, GetTaskForImageAlreadyDecodedAndLocked) { | 369 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageAlreadyDecodedAndLocked) { |
348 auto context_provider = TestContextProvider::Create(); | 370 auto context_provider = TestContextProvider::Create(); |
349 context_provider->BindToCurrentThread(); | 371 context_provider->BindToCurrentThread(); |
350 TestGpuImageDecodeCache cache(context_provider.get()); | 372 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
351 bool is_decomposable = true; | 373 bool is_decomposable = true; |
352 SkFilterQuality quality = kHigh_SkFilterQuality; | 374 SkFilterQuality quality = kHigh_SkFilterQuality; |
353 | 375 |
354 sk_sp<SkImage> image = CreateImage(100, 100); | 376 sk_sp<SkImage> image = CreateImage(100, 100); |
355 DrawImage draw_image( | 377 DrawImage draw_image( |
356 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 378 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
357 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 379 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
358 DefaultColorSpace()); | 380 DefaultColorSpace()); |
359 scoped_refptr<TileTask> task; | 381 scoped_refptr<TileTask> task; |
360 bool need_unref = cache.GetTaskForImageAndRef( | 382 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 22 matching lines...) Expand all Loading... |
383 | 405 |
384 TestTileTaskRunner::ProcessTask(another_task.get()); | 406 TestTileTaskRunner::ProcessTask(another_task.get()); |
385 | 407 |
386 // Finally, complete the original decode task. | 408 // Finally, complete the original decode task. |
387 TestTileTaskRunner::CompleteTask(task->dependencies()[0].get()); | 409 TestTileTaskRunner::CompleteTask(task->dependencies()[0].get()); |
388 | 410 |
389 cache.UnrefImage(draw_image); | 411 cache.UnrefImage(draw_image); |
390 cache.UnrefImage(draw_image); | 412 cache.UnrefImage(draw_image); |
391 } | 413 } |
392 | 414 |
393 TEST(GpuImageDecodeCacheTest, GetTaskForImageAlreadyDecodedNotLocked) { | 415 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageAlreadyDecodedNotLocked) { |
394 auto context_provider = TestContextProvider::Create(); | 416 auto context_provider = TestContextProvider::Create(); |
395 context_provider->BindToCurrentThread(); | 417 context_provider->BindToCurrentThread(); |
396 TestGpuImageDecodeCache cache(context_provider.get()); | 418 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
397 bool is_decomposable = true; | 419 bool is_decomposable = true; |
398 SkFilterQuality quality = kHigh_SkFilterQuality; | 420 SkFilterQuality quality = kHigh_SkFilterQuality; |
399 | 421 |
400 sk_sp<SkImage> image = CreateImage(100, 100); | 422 sk_sp<SkImage> image = CreateImage(100, 100); |
401 DrawImage draw_image( | 423 DrawImage draw_image( |
402 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 424 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
403 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 425 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
404 DefaultColorSpace()); | 426 DefaultColorSpace()); |
405 scoped_refptr<TileTask> task; | 427 scoped_refptr<TileTask> task; |
406 bool need_unref = cache.GetTaskForImageAndRef( | 428 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 22 matching lines...) Expand all Loading... |
429 EXPECT_TRUE(another_task); | 451 EXPECT_TRUE(another_task); |
430 EXPECT_EQ(another_task->dependencies().size(), 1u); | 452 EXPECT_EQ(another_task->dependencies().size(), 1u); |
431 EXPECT_TRUE(task->dependencies()[0]); | 453 EXPECT_TRUE(task->dependencies()[0]); |
432 | 454 |
433 TestTileTaskRunner::ProcessTask(another_task->dependencies()[0].get()); | 455 TestTileTaskRunner::ProcessTask(another_task->dependencies()[0].get()); |
434 TestTileTaskRunner::ProcessTask(another_task.get()); | 456 TestTileTaskRunner::ProcessTask(another_task.get()); |
435 | 457 |
436 cache.UnrefImage(draw_image); | 458 cache.UnrefImage(draw_image); |
437 } | 459 } |
438 | 460 |
439 TEST(GpuImageDecodeCacheTest, GetTaskForImageAlreadyUploaded) { | 461 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageAlreadyUploaded) { |
440 auto context_provider = TestContextProvider::Create(); | 462 auto context_provider = TestContextProvider::Create(); |
441 context_provider->BindToCurrentThread(); | 463 context_provider->BindToCurrentThread(); |
442 TestGpuImageDecodeCache cache(context_provider.get()); | 464 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
443 bool is_decomposable = true; | 465 bool is_decomposable = true; |
444 SkFilterQuality quality = kHigh_SkFilterQuality; | 466 SkFilterQuality quality = kHigh_SkFilterQuality; |
445 | 467 |
446 sk_sp<SkImage> image = CreateImage(100, 100); | 468 sk_sp<SkImage> image = CreateImage(100, 100); |
447 DrawImage draw_image( | 469 DrawImage draw_image( |
448 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 470 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
449 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 471 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
450 DefaultColorSpace()); | 472 DefaultColorSpace()); |
451 scoped_refptr<TileTask> task; | 473 scoped_refptr<TileTask> task; |
452 bool need_unref = cache.GetTaskForImageAndRef( | 474 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 12 matching lines...) Expand all Loading... |
465 draw_image, ImageDecodeCache::TracingInfo(), &another_task); | 487 draw_image, ImageDecodeCache::TracingInfo(), &another_task); |
466 EXPECT_TRUE(need_unref); | 488 EXPECT_TRUE(need_unref); |
467 EXPECT_FALSE(another_task); | 489 EXPECT_FALSE(another_task); |
468 | 490 |
469 TestTileTaskRunner::CompleteTask(task.get()); | 491 TestTileTaskRunner::CompleteTask(task.get()); |
470 | 492 |
471 cache.UnrefImage(draw_image); | 493 cache.UnrefImage(draw_image); |
472 cache.UnrefImage(draw_image); | 494 cache.UnrefImage(draw_image); |
473 } | 495 } |
474 | 496 |
475 TEST(GpuImageDecodeCacheTest, GetTaskForImageCanceledGetsNewTask) { | 497 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageCanceledGetsNewTask) { |
476 auto context_provider = TestContextProvider::Create(); | 498 auto context_provider = TestContextProvider::Create(); |
477 context_provider->BindToCurrentThread(); | 499 context_provider->BindToCurrentThread(); |
478 TestGpuImageDecodeCache cache(context_provider.get()); | 500 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
479 bool is_decomposable = true; | 501 bool is_decomposable = true; |
480 SkFilterQuality quality = kHigh_SkFilterQuality; | 502 SkFilterQuality quality = kHigh_SkFilterQuality; |
481 | 503 |
482 sk_sp<SkImage> image = CreateImage(100, 100); | 504 sk_sp<SkImage> image = CreateImage(100, 100); |
483 DrawImage draw_image( | 505 DrawImage draw_image( |
484 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 506 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
485 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 507 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
486 DefaultColorSpace()); | 508 DefaultColorSpace()); |
487 scoped_refptr<TileTask> task; | 509 scoped_refptr<TileTask> task; |
488 bool need_unref = cache.GetTaskForImageAndRef( | 510 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 24 matching lines...) Expand all Loading... |
513 EXPECT_TRUE(need_unref); | 535 EXPECT_TRUE(need_unref); |
514 EXPECT_TRUE(third_task); | 536 EXPECT_TRUE(third_task); |
515 EXPECT_FALSE(third_task.get() == task.get()); | 537 EXPECT_FALSE(third_task.get() == task.get()); |
516 | 538 |
517 TestTileTaskRunner::ProcessTask(third_task->dependencies()[0].get()); | 539 TestTileTaskRunner::ProcessTask(third_task->dependencies()[0].get()); |
518 TestTileTaskRunner::ProcessTask(third_task.get()); | 540 TestTileTaskRunner::ProcessTask(third_task.get()); |
519 | 541 |
520 cache.UnrefImage(draw_image); | 542 cache.UnrefImage(draw_image); |
521 } | 543 } |
522 | 544 |
523 TEST(GpuImageDecodeCacheTest, GetTaskForImageCanceledWhileReffedGetsNewTask) { | 545 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageCanceledWhileReffedGetsNewTask) { |
524 auto context_provider = TestContextProvider::Create(); | 546 auto context_provider = TestContextProvider::Create(); |
525 context_provider->BindToCurrentThread(); | 547 context_provider->BindToCurrentThread(); |
526 TestGpuImageDecodeCache cache(context_provider.get()); | 548 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
527 bool is_decomposable = true; | 549 bool is_decomposable = true; |
528 SkFilterQuality quality = kHigh_SkFilterQuality; | 550 SkFilterQuality quality = kHigh_SkFilterQuality; |
529 | 551 |
530 sk_sp<SkImage> image = CreateImage(100, 100); | 552 sk_sp<SkImage> image = CreateImage(100, 100); |
531 DrawImage draw_image( | 553 DrawImage draw_image( |
532 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 554 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
533 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 555 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
534 DefaultColorSpace()); | 556 DefaultColorSpace()); |
535 scoped_refptr<TileTask> task; | 557 scoped_refptr<TileTask> task; |
536 bool need_unref = cache.GetTaskForImageAndRef( | 558 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 28 matching lines...) Expand all Loading... |
565 EXPECT_FALSE(third_task.get() == task.get()); | 587 EXPECT_FALSE(third_task.get() == task.get()); |
566 | 588 |
567 ASSERT_GT(third_task->dependencies().size(), 0u); | 589 ASSERT_GT(third_task->dependencies().size(), 0u); |
568 TestTileTaskRunner::ProcessTask(third_task->dependencies()[0].get()); | 590 TestTileTaskRunner::ProcessTask(third_task->dependencies()[0].get()); |
569 TestTileTaskRunner::ProcessTask(third_task.get()); | 591 TestTileTaskRunner::ProcessTask(third_task.get()); |
570 | 592 |
571 // Unref! | 593 // Unref! |
572 cache.UnrefImage(draw_image); | 594 cache.UnrefImage(draw_image); |
573 } | 595 } |
574 | 596 |
575 TEST(GpuImageDecodeCacheTest, NoTaskForImageAlreadyFailedDecoding) { | 597 TEST_P(GpuImageDecodeCacheTest, NoTaskForImageAlreadyFailedDecoding) { |
576 auto context_provider = TestContextProvider::Create(); | 598 auto context_provider = TestContextProvider::Create(); |
577 context_provider->BindToCurrentThread(); | 599 context_provider->BindToCurrentThread(); |
578 TestGpuImageDecodeCache cache(context_provider.get()); | 600 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
579 bool is_decomposable = true; | 601 bool is_decomposable = true; |
580 SkFilterQuality quality = kHigh_SkFilterQuality; | 602 SkFilterQuality quality = kHigh_SkFilterQuality; |
581 | 603 |
582 sk_sp<SkImage> image = CreateImage(100, 100); | 604 sk_sp<SkImage> image = CreateImage(100, 100); |
583 DrawImage draw_image( | 605 DrawImage draw_image( |
584 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 606 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
585 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 607 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
586 DefaultColorSpace()); | 608 DefaultColorSpace()); |
587 scoped_refptr<TileTask> task; | 609 scoped_refptr<TileTask> task; |
588 bool need_unref = cache.GetTaskForImageAndRef( | 610 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 10 matching lines...) Expand all Loading... |
599 | 621 |
600 scoped_refptr<TileTask> another_task; | 622 scoped_refptr<TileTask> another_task; |
601 need_unref = cache.GetTaskForImageAndRef( | 623 need_unref = cache.GetTaskForImageAndRef( |
602 draw_image, ImageDecodeCache::TracingInfo(), &another_task); | 624 draw_image, ImageDecodeCache::TracingInfo(), &another_task); |
603 EXPECT_FALSE(need_unref); | 625 EXPECT_FALSE(need_unref); |
604 EXPECT_EQ(another_task.get(), nullptr); | 626 EXPECT_EQ(another_task.get(), nullptr); |
605 | 627 |
606 cache.UnrefImage(draw_image); | 628 cache.UnrefImage(draw_image); |
607 } | 629 } |
608 | 630 |
609 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDraw) { | 631 TEST_P(GpuImageDecodeCacheTest, GetDecodedImageForDraw) { |
610 auto context_provider = TestContextProvider::Create(); | 632 auto context_provider = TestContextProvider::Create(); |
611 context_provider->BindToCurrentThread(); | 633 context_provider->BindToCurrentThread(); |
612 TestGpuImageDecodeCache cache(context_provider.get()); | 634 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
613 bool is_decomposable = true; | 635 bool is_decomposable = true; |
614 SkFilterQuality quality = kHigh_SkFilterQuality; | 636 SkFilterQuality quality = kHigh_SkFilterQuality; |
615 | 637 |
616 sk_sp<SkImage> image = CreateImage(100, 100); | 638 sk_sp<SkImage> image = CreateImage(100, 100); |
617 DrawImage draw_image( | 639 DrawImage draw_image( |
618 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 640 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
619 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 641 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
620 DefaultColorSpace()); | 642 DefaultColorSpace()); |
621 scoped_refptr<TileTask> task; | 643 scoped_refptr<TileTask> task; |
622 bool need_unref = cache.GetTaskForImageAndRef( | 644 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 11 matching lines...) Expand all Loading... |
634 cache.GetDecodedImageForDraw(draw_image); | 656 cache.GetDecodedImageForDraw(draw_image); |
635 EXPECT_TRUE(decoded_draw_image.image()); | 657 EXPECT_TRUE(decoded_draw_image.image()); |
636 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); | 658 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); |
637 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); | 659 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); |
638 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); | 660 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); |
639 | 661 |
640 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 662 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
641 cache.UnrefImage(draw_image); | 663 cache.UnrefImage(draw_image); |
642 } | 664 } |
643 | 665 |
644 TEST(GpuImageDecodeCacheTest, GetLargeDecodedImageForDraw) { | 666 TEST_P(GpuImageDecodeCacheTest, GetLargeDecodedImageForDraw) { |
645 auto context_provider = TestContextProvider::Create(); | 667 auto context_provider = TestContextProvider::Create(); |
646 context_provider->BindToCurrentThread(); | 668 context_provider->BindToCurrentThread(); |
647 TestGpuImageDecodeCache cache(context_provider.get()); | 669 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
648 bool is_decomposable = true; | 670 bool is_decomposable = true; |
649 SkFilterQuality quality = kHigh_SkFilterQuality; | 671 SkFilterQuality quality = kHigh_SkFilterQuality; |
650 | 672 |
651 sk_sp<SkImage> image = CreateImage(1, 24000); | 673 sk_sp<SkImage> image = CreateImage(1, 24000); |
652 DrawImage draw_image( | 674 DrawImage draw_image( |
653 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 675 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
654 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), | 676 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
655 DefaultColorSpace()); | 677 DefaultColorSpace()); |
656 scoped_refptr<TileTask> task; | 678 scoped_refptr<TileTask> task; |
657 bool need_unref = cache.GetTaskForImageAndRef( | 679 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 12 matching lines...) Expand all Loading... |
670 EXPECT_TRUE(decoded_draw_image.image()); | 692 EXPECT_TRUE(decoded_draw_image.image()); |
671 EXPECT_FALSE(decoded_draw_image.image()->isTextureBacked()); | 693 EXPECT_FALSE(decoded_draw_image.image()->isTextureBacked()); |
672 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); | 694 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); |
673 EXPECT_TRUE(cache.DiscardableIsLockedForTesting(draw_image)); | 695 EXPECT_TRUE(cache.DiscardableIsLockedForTesting(draw_image)); |
674 | 696 |
675 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 697 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
676 cache.UnrefImage(draw_image); | 698 cache.UnrefImage(draw_image); |
677 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); | 699 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); |
678 } | 700 } |
679 | 701 |
680 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawAtRasterDecode) { | 702 TEST_P(GpuImageDecodeCacheTest, GetDecodedImageForDrawAtRasterDecode) { |
681 auto context_provider = TestContextProvider::Create(); | 703 auto context_provider = TestContextProvider::Create(); |
682 context_provider->BindToCurrentThread(); | 704 context_provider->BindToCurrentThread(); |
683 TestGpuImageDecodeCache cache(context_provider.get()); | 705 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
684 bool is_decomposable = true; | 706 bool is_decomposable = true; |
685 SkFilterQuality quality = kHigh_SkFilterQuality; | 707 SkFilterQuality quality = kHigh_SkFilterQuality; |
686 | 708 |
687 cache.SetAllByteLimitsForTesting(0); | 709 cache.SetAllByteLimitsForTesting(0); |
688 | 710 |
689 sk_sp<SkImage> image = CreateImage(100, 100); | 711 sk_sp<SkImage> image = CreateImage(100, 100); |
690 DrawImage draw_image( | 712 DrawImage draw_image( |
691 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 713 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
692 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), | 714 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
693 DefaultColorSpace()); | 715 DefaultColorSpace()); |
(...skipping 10 matching lines...) Expand all Loading... |
704 DecodedDrawImage decoded_draw_image = | 726 DecodedDrawImage decoded_draw_image = |
705 cache.GetDecodedImageForDraw(draw_image); | 727 cache.GetDecodedImageForDraw(draw_image); |
706 EXPECT_TRUE(decoded_draw_image.image()); | 728 EXPECT_TRUE(decoded_draw_image.image()); |
707 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); | 729 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); |
708 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); | 730 EXPECT_TRUE(decoded_draw_image.is_at_raster_decode()); |
709 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); | 731 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); |
710 | 732 |
711 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 733 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
712 } | 734 } |
713 | 735 |
714 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawLargerScale) { | 736 TEST_P(GpuImageDecodeCacheTest, GetDecodedImageForDrawLargerScale) { |
715 auto context_provider = TestContextProvider::Create(); | 737 auto context_provider = TestContextProvider::Create(); |
716 context_provider->BindToCurrentThread(); | 738 context_provider->BindToCurrentThread(); |
717 TestGpuImageDecodeCache cache(context_provider.get()); | 739 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
718 bool is_decomposable = true; | 740 bool is_decomposable = true; |
719 SkFilterQuality quality = kHigh_SkFilterQuality; | 741 SkFilterQuality quality = kHigh_SkFilterQuality; |
720 | 742 |
721 sk_sp<SkImage> image = CreateImage(100, 100); | 743 sk_sp<SkImage> image = CreateImage(100, 100); |
722 DrawImage draw_image( | 744 DrawImage draw_image( |
723 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 745 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
724 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 746 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
725 DefaultColorSpace()); | 747 DefaultColorSpace()); |
726 scoped_refptr<TileTask> task; | 748 scoped_refptr<TileTask> task; |
727 bool need_unref = cache.GetTaskForImageAndRef( | 749 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
763 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); | 785 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); |
764 | 786 |
765 EXPECT_FALSE(decoded_draw_image.image() == larger_decoded_draw_image.image()); | 787 EXPECT_FALSE(decoded_draw_image.image() == larger_decoded_draw_image.image()); |
766 | 788 |
767 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 789 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
768 cache.UnrefImage(draw_image); | 790 cache.UnrefImage(draw_image); |
769 cache.DrawWithImageFinished(larger_draw_image, larger_decoded_draw_image); | 791 cache.DrawWithImageFinished(larger_draw_image, larger_decoded_draw_image); |
770 cache.UnrefImage(larger_draw_image); | 792 cache.UnrefImage(larger_draw_image); |
771 } | 793 } |
772 | 794 |
773 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawHigherQuality) { | 795 TEST_P(GpuImageDecodeCacheTest, GetDecodedImageForDrawHigherQuality) { |
774 auto context_provider = TestContextProvider::Create(); | 796 auto context_provider = TestContextProvider::Create(); |
775 context_provider->BindToCurrentThread(); | 797 context_provider->BindToCurrentThread(); |
776 TestGpuImageDecodeCache cache(context_provider.get()); | 798 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
777 bool is_decomposable = true; | 799 bool is_decomposable = true; |
778 SkMatrix matrix = CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable); | 800 SkMatrix matrix = CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable); |
779 | 801 |
780 sk_sp<SkImage> image = CreateImage(100, 100); | 802 sk_sp<SkImage> image = CreateImage(100, 100); |
781 DrawImage draw_image(CreatePaintImage(image), | 803 DrawImage draw_image(CreatePaintImage(image), |
782 SkIRect::MakeWH(image->width(), image->height()), | 804 SkIRect::MakeWH(image->width(), image->height()), |
783 kLow_SkFilterQuality, matrix, DefaultColorSpace()); | 805 kLow_SkFilterQuality, matrix, DefaultColorSpace()); |
784 scoped_refptr<TileTask> task; | 806 scoped_refptr<TileTask> task; |
785 bool need_unref = cache.GetTaskForImageAndRef( | 807 bool need_unref = cache.GetTaskForImageAndRef( |
786 draw_image, ImageDecodeCache::TracingInfo(), &task); | 808 draw_image, ImageDecodeCache::TracingInfo(), &task); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 | 843 |
822 EXPECT_FALSE(decoded_draw_image.image() == larger_decoded_draw_image.image()); | 844 EXPECT_FALSE(decoded_draw_image.image() == larger_decoded_draw_image.image()); |
823 | 845 |
824 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 846 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
825 cache.UnrefImage(draw_image); | 847 cache.UnrefImage(draw_image); |
826 cache.DrawWithImageFinished(higher_quality_draw_image, | 848 cache.DrawWithImageFinished(higher_quality_draw_image, |
827 larger_decoded_draw_image); | 849 larger_decoded_draw_image); |
828 cache.UnrefImage(higher_quality_draw_image); | 850 cache.UnrefImage(higher_quality_draw_image); |
829 } | 851 } |
830 | 852 |
831 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawNegative) { | 853 TEST_P(GpuImageDecodeCacheTest, GetDecodedImageForDrawNegative) { |
832 auto context_provider = TestContextProvider::Create(); | 854 auto context_provider = TestContextProvider::Create(); |
833 context_provider->BindToCurrentThread(); | 855 context_provider->BindToCurrentThread(); |
834 TestGpuImageDecodeCache cache(context_provider.get()); | 856 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
835 bool is_decomposable = true; | 857 bool is_decomposable = true; |
836 SkFilterQuality quality = kHigh_SkFilterQuality; | 858 SkFilterQuality quality = kHigh_SkFilterQuality; |
837 | 859 |
838 sk_sp<SkImage> image = CreateImage(100, 100); | 860 sk_sp<SkImage> image = CreateImage(100, 100); |
839 DrawImage draw_image( | 861 DrawImage draw_image( |
840 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 862 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
841 quality, CreateMatrix(SkSize::Make(-0.5f, 0.5f), is_decomposable), | 863 quality, CreateMatrix(SkSize::Make(-0.5f, 0.5f), is_decomposable), |
842 DefaultColorSpace()); | 864 DefaultColorSpace()); |
843 scoped_refptr<TileTask> task; | 865 scoped_refptr<TileTask> task; |
844 bool need_unref = cache.GetTaskForImageAndRef( | 866 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 13 matching lines...) Expand all Loading... |
858 EXPECT_EQ(decoded_draw_image.image()->width(), 50); | 880 EXPECT_EQ(decoded_draw_image.image()->width(), 50); |
859 EXPECT_EQ(decoded_draw_image.image()->height(), 50); | 881 EXPECT_EQ(decoded_draw_image.image()->height(), 50); |
860 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); | 882 EXPECT_TRUE(decoded_draw_image.image()->isTextureBacked()); |
861 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); | 883 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); |
862 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); | 884 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); |
863 | 885 |
864 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 886 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
865 cache.UnrefImage(draw_image); | 887 cache.UnrefImage(draw_image); |
866 } | 888 } |
867 | 889 |
868 TEST(GpuImageDecodeCacheTest, GetLargeScaledDecodedImageForDraw) { | 890 TEST_P(GpuImageDecodeCacheTest, GetLargeScaledDecodedImageForDraw) { |
869 auto context_provider = TestContextProvider::Create(); | 891 auto context_provider = TestContextProvider::Create(); |
870 context_provider->BindToCurrentThread(); | 892 context_provider->BindToCurrentThread(); |
871 TestGpuImageDecodeCache cache(context_provider.get()); | 893 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
872 bool is_decomposable = true; | 894 bool is_decomposable = true; |
873 SkFilterQuality quality = kHigh_SkFilterQuality; | 895 SkFilterQuality quality = kHigh_SkFilterQuality; |
874 | 896 |
875 sk_sp<SkImage> image = CreateImage(1, 48000); | 897 sk_sp<SkImage> image = CreateImage(1, 48000); |
876 DrawImage draw_image( | 898 DrawImage draw_image( |
877 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 899 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
878 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 900 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
879 DefaultColorSpace()); | 901 DefaultColorSpace()); |
880 scoped_refptr<TileTask> task; | 902 scoped_refptr<TileTask> task; |
881 bool need_unref = cache.GetTaskForImageAndRef( | 903 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 15 matching lines...) Expand all Loading... |
897 EXPECT_EQ(24000, decoded_draw_image.image()->height()); | 919 EXPECT_EQ(24000, decoded_draw_image.image()->height()); |
898 EXPECT_FALSE(decoded_draw_image.image()->isTextureBacked()); | 920 EXPECT_FALSE(decoded_draw_image.image()->isTextureBacked()); |
899 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); | 921 EXPECT_FALSE(decoded_draw_image.is_at_raster_decode()); |
900 EXPECT_TRUE(cache.DiscardableIsLockedForTesting(draw_image)); | 922 EXPECT_TRUE(cache.DiscardableIsLockedForTesting(draw_image)); |
901 | 923 |
902 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 924 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
903 cache.UnrefImage(draw_image); | 925 cache.UnrefImage(draw_image); |
904 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); | 926 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); |
905 } | 927 } |
906 | 928 |
907 TEST(GpuImageDecodeCacheTest, AtRasterUsedDirectlyIfSpaceAllows) { | 929 TEST_P(GpuImageDecodeCacheTest, AtRasterUsedDirectlyIfSpaceAllows) { |
908 auto context_provider = TestContextProvider::Create(); | 930 auto context_provider = TestContextProvider::Create(); |
909 context_provider->BindToCurrentThread(); | 931 context_provider->BindToCurrentThread(); |
910 TestGpuImageDecodeCache cache(context_provider.get()); | 932 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
911 bool is_decomposable = true; | 933 bool is_decomposable = true; |
912 SkFilterQuality quality = kHigh_SkFilterQuality; | 934 SkFilterQuality quality = kHigh_SkFilterQuality; |
913 | 935 |
914 cache.SetAllByteLimitsForTesting(0); | 936 cache.SetAllByteLimitsForTesting(0); |
915 | 937 |
916 sk_sp<SkImage> image = CreateImage(100, 100); | 938 sk_sp<SkImage> image = CreateImage(100, 100); |
917 DrawImage draw_image( | 939 DrawImage draw_image( |
918 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 940 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
919 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 941 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
920 DefaultColorSpace()); | 942 DefaultColorSpace()); |
(...skipping 21 matching lines...) Expand all Loading... |
942 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 964 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
943 | 965 |
944 scoped_refptr<TileTask> another_task; | 966 scoped_refptr<TileTask> another_task; |
945 bool another_task_needs_unref = cache.GetTaskForImageAndRef( | 967 bool another_task_needs_unref = cache.GetTaskForImageAndRef( |
946 draw_image, ImageDecodeCache::TracingInfo(), &task); | 968 draw_image, ImageDecodeCache::TracingInfo(), &task); |
947 EXPECT_TRUE(another_task_needs_unref); | 969 EXPECT_TRUE(another_task_needs_unref); |
948 EXPECT_FALSE(another_task); | 970 EXPECT_FALSE(another_task); |
949 cache.UnrefImage(draw_image); | 971 cache.UnrefImage(draw_image); |
950 } | 972 } |
951 | 973 |
952 TEST(GpuImageDecodeCacheTest, | 974 TEST_P(GpuImageDecodeCacheTest, |
953 GetDecodedImageForDrawAtRasterDecodeMultipleTimes) { | 975 GetDecodedImageForDrawAtRasterDecodeMultipleTimes) { |
954 auto context_provider = TestContextProvider::Create(); | 976 auto context_provider = TestContextProvider::Create(); |
955 context_provider->BindToCurrentThread(); | 977 context_provider->BindToCurrentThread(); |
956 TestGpuImageDecodeCache cache(context_provider.get()); | 978 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
957 bool is_decomposable = true; | 979 bool is_decomposable = true; |
958 SkFilterQuality quality = kHigh_SkFilterQuality; | 980 SkFilterQuality quality = kHigh_SkFilterQuality; |
959 | 981 |
960 cache.SetAllByteLimitsForTesting(0); | 982 cache.SetAllByteLimitsForTesting(0); |
961 | 983 |
962 sk_sp<SkImage> image = CreateImage(100, 100); | 984 sk_sp<SkImage> image = CreateImage(100, 100); |
963 DrawImage draw_image( | 985 DrawImage draw_image( |
964 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 986 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
965 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 987 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
966 DefaultColorSpace()); | 988 DefaultColorSpace()); |
(...skipping 10 matching lines...) Expand all Loading... |
977 | 999 |
978 DecodedDrawImage another_decoded_draw_image = | 1000 DecodedDrawImage another_decoded_draw_image = |
979 cache.GetDecodedImageForDraw(draw_image); | 1001 cache.GetDecodedImageForDraw(draw_image); |
980 EXPECT_EQ(decoded_draw_image.image()->uniqueID(), | 1002 EXPECT_EQ(decoded_draw_image.image()->uniqueID(), |
981 another_decoded_draw_image.image()->uniqueID()); | 1003 another_decoded_draw_image.image()->uniqueID()); |
982 | 1004 |
983 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 1005 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
984 cache.DrawWithImageFinished(draw_image, another_decoded_draw_image); | 1006 cache.DrawWithImageFinished(draw_image, another_decoded_draw_image); |
985 } | 1007 } |
986 | 1008 |
987 TEST(GpuImageDecodeCacheTest, | 1009 TEST_P(GpuImageDecodeCacheTest, |
988 GetLargeDecodedImageForDrawAtRasterDecodeMultipleTimes) { | 1010 GetLargeDecodedImageForDrawAtRasterDecodeMultipleTimes) { |
989 auto context_provider = TestContextProvider::Create(); | 1011 auto context_provider = TestContextProvider::Create(); |
990 context_provider->BindToCurrentThread(); | 1012 context_provider->BindToCurrentThread(); |
991 TestGpuImageDecodeCache cache(context_provider.get()); | 1013 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
992 bool is_decomposable = true; | 1014 bool is_decomposable = true; |
993 SkFilterQuality quality = kHigh_SkFilterQuality; | 1015 SkFilterQuality quality = kHigh_SkFilterQuality; |
994 | 1016 |
995 sk_sp<SkImage> image = CreateImage(1, 24000); | 1017 sk_sp<SkImage> image = CreateImage(1, 24000); |
996 DrawImage draw_image( | 1018 DrawImage draw_image( |
997 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 1019 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
998 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), | 1020 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
999 DefaultColorSpace()); | 1021 DefaultColorSpace()); |
1000 | 1022 |
1001 // Must hold context lock before calling GetDecodedImageForDraw / | 1023 // Must hold context lock before calling GetDecodedImageForDraw / |
(...skipping 13 matching lines...) Expand all Loading... |
1015 cache.GetDecodedImageForDraw(draw_image); | 1037 cache.GetDecodedImageForDraw(draw_image); |
1016 EXPECT_TRUE(second_decoded_draw_image.image()); | 1038 EXPECT_TRUE(second_decoded_draw_image.image()); |
1017 EXPECT_FALSE(second_decoded_draw_image.image()->isTextureBacked()); | 1039 EXPECT_FALSE(second_decoded_draw_image.image()->isTextureBacked()); |
1018 EXPECT_TRUE(second_decoded_draw_image.is_at_raster_decode()); | 1040 EXPECT_TRUE(second_decoded_draw_image.is_at_raster_decode()); |
1019 EXPECT_TRUE(cache.DiscardableIsLockedForTesting(draw_image)); | 1041 EXPECT_TRUE(cache.DiscardableIsLockedForTesting(draw_image)); |
1020 | 1042 |
1021 cache.DrawWithImageFinished(draw_image, second_decoded_draw_image); | 1043 cache.DrawWithImageFinished(draw_image, second_decoded_draw_image); |
1022 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); | 1044 EXPECT_FALSE(cache.DiscardableIsLockedForTesting(draw_image)); |
1023 } | 1045 } |
1024 | 1046 |
1025 TEST(GpuImageDecodeCacheTest, ZeroSizedImagesAreSkipped) { | 1047 TEST_P(GpuImageDecodeCacheTest, ZeroSizedImagesAreSkipped) { |
1026 auto context_provider = TestContextProvider::Create(); | 1048 auto context_provider = TestContextProvider::Create(); |
1027 context_provider->BindToCurrentThread(); | 1049 context_provider->BindToCurrentThread(); |
1028 TestGpuImageDecodeCache cache(context_provider.get()); | 1050 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
1029 bool is_decomposable = true; | 1051 bool is_decomposable = true; |
1030 SkFilterQuality quality = kHigh_SkFilterQuality; | 1052 SkFilterQuality quality = kHigh_SkFilterQuality; |
1031 | 1053 |
1032 sk_sp<SkImage> image = CreateImage(100, 100); | 1054 sk_sp<SkImage> image = CreateImage(100, 100); |
1033 DrawImage draw_image( | 1055 DrawImage draw_image( |
1034 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 1056 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
1035 quality, CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable), | 1057 quality, CreateMatrix(SkSize::Make(0.f, 0.f), is_decomposable), |
1036 DefaultColorSpace()); | 1058 DefaultColorSpace()); |
1037 | 1059 |
1038 scoped_refptr<TileTask> task; | 1060 scoped_refptr<TileTask> task; |
1039 bool need_unref = cache.GetTaskForImageAndRef( | 1061 bool need_unref = cache.GetTaskForImageAndRef( |
1040 draw_image, ImageDecodeCache::TracingInfo(), &task); | 1062 draw_image, ImageDecodeCache::TracingInfo(), &task); |
1041 EXPECT_FALSE(task); | 1063 EXPECT_FALSE(task); |
1042 EXPECT_FALSE(need_unref); | 1064 EXPECT_FALSE(need_unref); |
1043 | 1065 |
1044 // Must hold context lock before calling GetDecodedImageForDraw / | 1066 // Must hold context lock before calling GetDecodedImageForDraw / |
1045 // DrawWithImageFinished. | 1067 // DrawWithImageFinished. |
1046 ContextProvider::ScopedContextLock context_lock(context_provider.get()); | 1068 ContextProvider::ScopedContextLock context_lock(context_provider.get()); |
1047 DecodedDrawImage decoded_draw_image = | 1069 DecodedDrawImage decoded_draw_image = |
1048 cache.GetDecodedImageForDraw(draw_image); | 1070 cache.GetDecodedImageForDraw(draw_image); |
1049 EXPECT_FALSE(decoded_draw_image.image()); | 1071 EXPECT_FALSE(decoded_draw_image.image()); |
1050 | 1072 |
1051 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 1073 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
1052 } | 1074 } |
1053 | 1075 |
1054 TEST(GpuImageDecodeCacheTest, NonOverlappingSrcRectImagesAreSkipped) { | 1076 TEST_P(GpuImageDecodeCacheTest, NonOverlappingSrcRectImagesAreSkipped) { |
1055 auto context_provider = TestContextProvider::Create(); | 1077 auto context_provider = TestContextProvider::Create(); |
1056 context_provider->BindToCurrentThread(); | 1078 context_provider->BindToCurrentThread(); |
1057 TestGpuImageDecodeCache cache(context_provider.get()); | 1079 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
1058 bool is_decomposable = true; | 1080 bool is_decomposable = true; |
1059 SkFilterQuality quality = kHigh_SkFilterQuality; | 1081 SkFilterQuality quality = kHigh_SkFilterQuality; |
1060 | 1082 |
1061 sk_sp<SkImage> image = CreateImage(100, 100); | 1083 sk_sp<SkImage> image = CreateImage(100, 100); |
1062 DrawImage draw_image( | 1084 DrawImage draw_image( |
1063 CreatePaintImage(image), | 1085 CreatePaintImage(image), |
1064 SkIRect::MakeXYWH(150, 150, image->width(), image->height()), quality, | 1086 SkIRect::MakeXYWH(150, 150, image->width(), image->height()), quality, |
1065 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), | 1087 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), |
1066 DefaultColorSpace()); | 1088 DefaultColorSpace()); |
1067 | 1089 |
1068 scoped_refptr<TileTask> task; | 1090 scoped_refptr<TileTask> task; |
1069 bool need_unref = cache.GetTaskForImageAndRef( | 1091 bool need_unref = cache.GetTaskForImageAndRef( |
1070 draw_image, ImageDecodeCache::TracingInfo(), &task); | 1092 draw_image, ImageDecodeCache::TracingInfo(), &task); |
1071 EXPECT_FALSE(task); | 1093 EXPECT_FALSE(task); |
1072 EXPECT_FALSE(need_unref); | 1094 EXPECT_FALSE(need_unref); |
1073 | 1095 |
1074 // Must hold context lock before calling GetDecodedImageForDraw / | 1096 // Must hold context lock before calling GetDecodedImageForDraw / |
1075 // DrawWithImageFinished. | 1097 // DrawWithImageFinished. |
1076 ContextProvider::ScopedContextLock context_lock(context_provider.get()); | 1098 ContextProvider::ScopedContextLock context_lock(context_provider.get()); |
1077 DecodedDrawImage decoded_draw_image = | 1099 DecodedDrawImage decoded_draw_image = |
1078 cache.GetDecodedImageForDraw(draw_image); | 1100 cache.GetDecodedImageForDraw(draw_image); |
1079 EXPECT_FALSE(decoded_draw_image.image()); | 1101 EXPECT_FALSE(decoded_draw_image.image()); |
1080 | 1102 |
1081 cache.DrawWithImageFinished(draw_image, decoded_draw_image); | 1103 cache.DrawWithImageFinished(draw_image, decoded_draw_image); |
1082 } | 1104 } |
1083 | 1105 |
1084 TEST(GpuImageDecodeCacheTest, CanceledTasksDoNotCountAgainstBudget) { | 1106 TEST_P(GpuImageDecodeCacheTest, CanceledTasksDoNotCountAgainstBudget) { |
1085 auto context_provider = TestContextProvider::Create(); | 1107 auto context_provider = TestContextProvider::Create(); |
1086 context_provider->BindToCurrentThread(); | 1108 context_provider->BindToCurrentThread(); |
1087 TestGpuImageDecodeCache cache(context_provider.get()); | 1109 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
1088 bool is_decomposable = true; | 1110 bool is_decomposable = true; |
1089 SkFilterQuality quality = kHigh_SkFilterQuality; | 1111 SkFilterQuality quality = kHigh_SkFilterQuality; |
1090 | 1112 |
1091 sk_sp<SkImage> image = CreateImage(100, 100); | 1113 sk_sp<SkImage> image = CreateImage(100, 100); |
1092 DrawImage draw_image(CreatePaintImage(image), | 1114 DrawImage draw_image(CreatePaintImage(image), |
1093 SkIRect::MakeXYWH(0, 0, image->width(), image->height()), | 1115 SkIRect::MakeXYWH(0, 0, image->width(), image->height()), |
1094 quality, | 1116 quality, |
1095 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), | 1117 CreateMatrix(SkSize::Make(1.f, 1.f), is_decomposable), |
1096 DefaultColorSpace()); | 1118 DefaultColorSpace()); |
1097 | 1119 |
1098 scoped_refptr<TileTask> task; | 1120 scoped_refptr<TileTask> task; |
1099 bool need_unref = cache.GetTaskForImageAndRef( | 1121 bool need_unref = cache.GetTaskForImageAndRef( |
1100 draw_image, ImageDecodeCache::TracingInfo(), &task); | 1122 draw_image, ImageDecodeCache::TracingInfo(), &task); |
1101 EXPECT_NE(0u, cache.GetBytesUsedForTesting()); | 1123 EXPECT_NE(0u, cache.GetBytesUsedForTesting()); |
1102 EXPECT_TRUE(task); | 1124 EXPECT_TRUE(task); |
1103 EXPECT_TRUE(need_unref); | 1125 EXPECT_TRUE(need_unref); |
1104 | 1126 |
1105 TestTileTaskRunner::CancelTask(task->dependencies()[0].get()); | 1127 TestTileTaskRunner::CancelTask(task->dependencies()[0].get()); |
1106 TestTileTaskRunner::CompleteTask(task->dependencies()[0].get()); | 1128 TestTileTaskRunner::CompleteTask(task->dependencies()[0].get()); |
1107 TestTileTaskRunner::CancelTask(task.get()); | 1129 TestTileTaskRunner::CancelTask(task.get()); |
1108 TestTileTaskRunner::CompleteTask(task.get()); | 1130 TestTileTaskRunner::CompleteTask(task.get()); |
1109 | 1131 |
1110 cache.UnrefImage(draw_image); | 1132 cache.UnrefImage(draw_image); |
1111 EXPECT_EQ(0u, cache.GetBytesUsedForTesting()); | 1133 EXPECT_EQ(0u, cache.GetBytesUsedForTesting()); |
1112 } | 1134 } |
1113 | 1135 |
1114 TEST(GpuImageDecodeCacheTest, ShouldAggressivelyFreeResources) { | 1136 TEST_P(GpuImageDecodeCacheTest, ShouldAggressivelyFreeResources) { |
1115 auto context_provider = TestContextProvider::Create(); | 1137 auto context_provider = TestContextProvider::Create(); |
1116 context_provider->BindToCurrentThread(); | 1138 context_provider->BindToCurrentThread(); |
1117 TestGpuImageDecodeCache cache(context_provider.get()); | 1139 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
1118 bool is_decomposable = true; | 1140 bool is_decomposable = true; |
1119 SkFilterQuality quality = kHigh_SkFilterQuality; | 1141 SkFilterQuality quality = kHigh_SkFilterQuality; |
1120 | 1142 |
1121 sk_sp<SkImage> image = CreateImage(100, 100); | 1143 sk_sp<SkImage> image = CreateImage(100, 100); |
1122 DrawImage draw_image( | 1144 DrawImage draw_image( |
1123 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 1145 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
1124 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 1146 quality, CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
1125 DefaultColorSpace()); | 1147 DefaultColorSpace()); |
1126 scoped_refptr<TileTask> task; | 1148 scoped_refptr<TileTask> task; |
1127 { | 1149 { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1168 EXPECT_TRUE(task); | 1190 EXPECT_TRUE(task); |
1169 | 1191 |
1170 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 1192 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
1171 TestTileTaskRunner::ProcessTask(task.get()); | 1193 TestTileTaskRunner::ProcessTask(task.get()); |
1172 cache.UnrefImage(draw_image); | 1194 cache.UnrefImage(draw_image); |
1173 | 1195 |
1174 EXPECT_GT(cache.GetBytesUsedForTesting(), 0u); | 1196 EXPECT_GT(cache.GetBytesUsedForTesting(), 0u); |
1175 } | 1197 } |
1176 } | 1198 } |
1177 | 1199 |
1178 TEST(GpuImageDecodeCacheTest, OrphanedImagesFreeOnReachingZeroRefs) { | 1200 TEST_P(GpuImageDecodeCacheTest, OrphanedImagesFreeOnReachingZeroRefs) { |
1179 auto context_provider = TestContextProvider::Create(); | 1201 auto context_provider = TestContextProvider::Create(); |
1180 context_provider->BindToCurrentThread(); | 1202 context_provider->BindToCurrentThread(); |
1181 TestGpuImageDecodeCache cache(context_provider.get()); | 1203 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
1182 bool is_decomposable = true; | 1204 bool is_decomposable = true; |
1183 SkFilterQuality quality = kHigh_SkFilterQuality; | 1205 SkFilterQuality quality = kHigh_SkFilterQuality; |
1184 | 1206 |
1185 // Create a downscaled image. | 1207 // Create a downscaled image. |
1186 sk_sp<SkImage> first_image = CreateImage(100, 100); | 1208 sk_sp<SkImage> first_image = CreateImage(100, 100); |
1187 DrawImage first_draw_image( | 1209 DrawImage first_draw_image( |
1188 CreatePaintImage(first_image), | 1210 CreatePaintImage(first_image), |
1189 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, | 1211 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, |
1190 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 1212 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
1191 DefaultColorSpace()); | 1213 DefaultColorSpace()); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1227 // deleted. | 1249 // deleted. |
1228 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); | 1250 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); |
1229 TestTileTaskRunner::ProcessTask(first_task.get()); | 1251 TestTileTaskRunner::ProcessTask(first_task.get()); |
1230 cache.UnrefImage(first_draw_image); | 1252 cache.UnrefImage(first_draw_image); |
1231 | 1253 |
1232 // The budget should account for exactly one image. | 1254 // The budget should account for exactly one image. |
1233 EXPECT_EQ(cache.GetBytesUsedForTesting(), | 1255 EXPECT_EQ(cache.GetBytesUsedForTesting(), |
1234 cache.GetDrawImageSizeForTesting(second_draw_image)); | 1256 cache.GetDrawImageSizeForTesting(second_draw_image)); |
1235 } | 1257 } |
1236 | 1258 |
1237 TEST(GpuImageDecodeCacheTest, OrphanedZeroRefImagesImmediatelyDeleted) { | 1259 TEST_P(GpuImageDecodeCacheTest, OrphanedZeroRefImagesImmediatelyDeleted) { |
1238 auto context_provider = TestContextProvider::Create(); | 1260 auto context_provider = TestContextProvider::Create(); |
1239 context_provider->BindToCurrentThread(); | 1261 context_provider->BindToCurrentThread(); |
1240 TestGpuImageDecodeCache cache(context_provider.get()); | 1262 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
1241 bool is_decomposable = true; | 1263 bool is_decomposable = true; |
1242 SkFilterQuality quality = kHigh_SkFilterQuality; | 1264 SkFilterQuality quality = kHigh_SkFilterQuality; |
1243 | 1265 |
1244 // Create a downscaled image. | 1266 // Create a downscaled image. |
1245 sk_sp<SkImage> first_image = CreateImage(100, 100); | 1267 sk_sp<SkImage> first_image = CreateImage(100, 100); |
1246 DrawImage first_draw_image( | 1268 DrawImage first_draw_image( |
1247 CreatePaintImage(first_image), | 1269 CreatePaintImage(first_image), |
1248 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, | 1270 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, |
1249 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), | 1271 CreateMatrix(SkSize::Make(0.5f, 0.5f), is_decomposable), |
1250 DefaultColorSpace()); | 1272 DefaultColorSpace()); |
(...skipping 28 matching lines...) Expand all Loading... |
1279 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); | 1301 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
1280 TestTileTaskRunner::ProcessTask(second_task.get()); | 1302 TestTileTaskRunner::ProcessTask(second_task.get()); |
1281 | 1303 |
1282 cache.UnrefImage(second_draw_image); | 1304 cache.UnrefImage(second_draw_image); |
1283 | 1305 |
1284 // The budget should account for exactly one image. | 1306 // The budget should account for exactly one image. |
1285 EXPECT_EQ(cache.GetBytesUsedForTesting(), | 1307 EXPECT_EQ(cache.GetBytesUsedForTesting(), |
1286 cache.GetDrawImageSizeForTesting(second_draw_image)); | 1308 cache.GetDrawImageSizeForTesting(second_draw_image)); |
1287 } | 1309 } |
1288 | 1310 |
1289 TEST(GpuImageDecodeCacheTest, QualityCappedAtMedium) { | 1311 TEST_P(GpuImageDecodeCacheTest, QualityCappedAtMedium) { |
1290 auto context_provider = TestContextProvider::Create(); | 1312 auto context_provider = TestContextProvider::Create(); |
1291 context_provider->BindToCurrentThread(); | 1313 context_provider->BindToCurrentThread(); |
1292 TestGpuImageDecodeCache cache(context_provider.get()); | 1314 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
1293 sk_sp<SkImage> image = CreateImage(100, 100); | 1315 sk_sp<SkImage> image = CreateImage(100, 100); |
1294 bool is_decomposable = true; | 1316 bool is_decomposable = true; |
1295 SkMatrix matrix = CreateMatrix(SkSize::Make(0.4f, 0.4f), is_decomposable); | 1317 SkMatrix matrix = CreateMatrix(SkSize::Make(0.4f, 0.4f), is_decomposable); |
1296 | 1318 |
1297 // Create an image with kLow_FilterQuality. | 1319 // Create an image with kLow_FilterQuality. |
1298 DrawImage low_draw_image(CreatePaintImage(image), | 1320 DrawImage low_draw_image(CreatePaintImage(image), |
1299 SkIRect::MakeWH(image->width(), image->height()), | 1321 SkIRect::MakeWH(image->width(), image->height()), |
1300 kLow_SkFilterQuality, matrix, DefaultColorSpace()); | 1322 kLow_SkFilterQuality, matrix, DefaultColorSpace()); |
1301 scoped_refptr<TileTask> low_task; | 1323 scoped_refptr<TileTask> low_task; |
1302 bool need_unref = cache.GetTaskForImageAndRef( | 1324 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 28 matching lines...) Expand all Loading... |
1331 TestTileTaskRunner::ProcessTask(medium_task->dependencies()[0].get()); | 1353 TestTileTaskRunner::ProcessTask(medium_task->dependencies()[0].get()); |
1332 TestTileTaskRunner::ProcessTask(medium_task.get()); | 1354 TestTileTaskRunner::ProcessTask(medium_task.get()); |
1333 | 1355 |
1334 cache.UnrefImage(low_draw_image); | 1356 cache.UnrefImage(low_draw_image); |
1335 cache.UnrefImage(medium_draw_image); | 1357 cache.UnrefImage(medium_draw_image); |
1336 cache.UnrefImage(large_draw_image); | 1358 cache.UnrefImage(large_draw_image); |
1337 } | 1359 } |
1338 | 1360 |
1339 // Ensure that switching to a mipped version of an image after the initial | 1361 // Ensure that switching to a mipped version of an image after the initial |
1340 // cache entry creation doesn't cause a buffer overflow/crash. | 1362 // cache entry creation doesn't cause a buffer overflow/crash. |
1341 TEST(GpuImageDecodeCacheTest, GetDecodedImageForDrawMipUsageChange) { | 1363 TEST_P(GpuImageDecodeCacheTest, GetDecodedImageForDrawMipUsageChange) { |
1342 auto context_provider = TestContextProvider::Create(); | 1364 auto context_provider = TestContextProvider::Create(); |
1343 context_provider->BindToCurrentThread(); | 1365 context_provider->BindToCurrentThread(); |
1344 TestGpuImageDecodeCache cache(context_provider.get()); | 1366 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
1345 bool is_decomposable = true; | 1367 bool is_decomposable = true; |
1346 SkFilterQuality quality = kHigh_SkFilterQuality; | 1368 SkFilterQuality quality = kHigh_SkFilterQuality; |
1347 | 1369 |
1348 // Create an image decode task and cache entry that does not need mips. | 1370 // Create an image decode task and cache entry that does not need mips. |
1349 sk_sp<SkImage> image = CreateImage(4000, 4000); | 1371 sk_sp<SkImage> image = CreateImage(4000, 4000); |
1350 DrawImage draw_image( | 1372 DrawImage draw_image( |
1351 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 1373 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
1352 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), | 1374 quality, CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
1353 DefaultColorSpace()); | 1375 DefaultColorSpace()); |
1354 scoped_refptr<TileTask> task; | 1376 scoped_refptr<TileTask> task; |
(...skipping 17 matching lines...) Expand all Loading... |
1372 // Do an at-raster decode of the above image that *does* require mips. | 1394 // Do an at-raster decode of the above image that *does* require mips. |
1373 DrawImage draw_image_mips( | 1395 DrawImage draw_image_mips( |
1374 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), | 1396 CreatePaintImage(image), SkIRect::MakeWH(image->width(), image->height()), |
1375 quality, CreateMatrix(SkSize::Make(0.6f, 0.6f), is_decomposable), | 1397 quality, CreateMatrix(SkSize::Make(0.6f, 0.6f), is_decomposable), |
1376 DefaultColorSpace()); | 1398 DefaultColorSpace()); |
1377 DecodedDrawImage decoded_draw_image = | 1399 DecodedDrawImage decoded_draw_image = |
1378 cache.GetDecodedImageForDraw(draw_image_mips); | 1400 cache.GetDecodedImageForDraw(draw_image_mips); |
1379 cache.DrawWithImageFinished(draw_image_mips, decoded_draw_image); | 1401 cache.DrawWithImageFinished(draw_image_mips, decoded_draw_image); |
1380 } | 1402 } |
1381 | 1403 |
1382 TEST(GpuImageDecodeCacheTest, MemoryStateSuspended) { | 1404 TEST_P(GpuImageDecodeCacheTest, MemoryStateSuspended) { |
1383 auto context_provider = TestContextProvider::Create(); | 1405 auto context_provider = TestContextProvider::Create(); |
1384 context_provider->BindToCurrentThread(); | 1406 context_provider->BindToCurrentThread(); |
1385 TestGpuImageDecodeCache cache(context_provider.get()); | 1407 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
1386 | 1408 |
1387 // First Insert an image into our cache. | 1409 // First Insert an image into our cache. |
1388 sk_sp<SkImage> image = CreateImage(1, 1); | 1410 sk_sp<SkImage> image = CreateImage(1, 1); |
1389 bool is_decomposable = true; | 1411 bool is_decomposable = true; |
1390 SkMatrix matrix = CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable); | 1412 SkMatrix matrix = CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable); |
1391 DrawImage draw_image(CreatePaintImage(image), | 1413 DrawImage draw_image(CreatePaintImage(image), |
1392 SkIRect::MakeWH(image->width(), image->height()), | 1414 SkIRect::MakeWH(image->width(), image->height()), |
1393 kLow_SkFilterQuality, matrix, DefaultColorSpace()); | 1415 kLow_SkFilterQuality, matrix, DefaultColorSpace()); |
1394 scoped_refptr<TileTask> task; | 1416 scoped_refptr<TileTask> task; |
1395 bool need_unref = cache.GetTaskForImageAndRef( | 1417 bool need_unref = cache.GetTaskForImageAndRef( |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1443 need_unref = cache.GetTaskForImageAndRef( | 1465 need_unref = cache.GetTaskForImageAndRef( |
1444 draw_image, ImageDecodeCache::TracingInfo(), &task); | 1466 draw_image, ImageDecodeCache::TracingInfo(), &task); |
1445 EXPECT_TRUE(need_unref); | 1467 EXPECT_TRUE(need_unref); |
1446 EXPECT_TRUE(task); | 1468 EXPECT_TRUE(task); |
1447 | 1469 |
1448 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 1470 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
1449 TestTileTaskRunner::ProcessTask(task.get()); | 1471 TestTileTaskRunner::ProcessTask(task.get()); |
1450 cache.UnrefImage(draw_image); | 1472 cache.UnrefImage(draw_image); |
1451 } | 1473 } |
1452 | 1474 |
1453 TEST(GpuImageDecodeCacheTest, OutOfRasterDecodeTask) { | 1475 TEST_P(GpuImageDecodeCacheTest, OutOfRasterDecodeTask) { |
1454 auto context_provider = TestContextProvider::Create(); | 1476 auto context_provider = TestContextProvider::Create(); |
1455 context_provider->BindToCurrentThread(); | 1477 context_provider->BindToCurrentThread(); |
1456 TestGpuImageDecodeCache cache(context_provider.get()); | 1478 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
1457 | 1479 |
1458 sk_sp<SkImage> image = CreateImage(1, 1); | 1480 sk_sp<SkImage> image = CreateImage(1, 1); |
1459 bool is_decomposable = true; | 1481 bool is_decomposable = true; |
1460 SkMatrix matrix = CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable); | 1482 SkMatrix matrix = CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable); |
1461 DrawImage draw_image(CreatePaintImage(image), | 1483 DrawImage draw_image(CreatePaintImage(image), |
1462 SkIRect::MakeWH(image->width(), image->height()), | 1484 SkIRect::MakeWH(image->width(), image->height()), |
1463 kLow_SkFilterQuality, matrix, DefaultColorSpace()); | 1485 kLow_SkFilterQuality, matrix, DefaultColorSpace()); |
1464 | 1486 |
1465 scoped_refptr<TileTask> task; | 1487 scoped_refptr<TileTask> task; |
1466 bool need_unref = | 1488 bool need_unref = |
1467 cache.GetOutOfRasterDecodeTaskForImageAndRef(draw_image, &task); | 1489 cache.GetOutOfRasterDecodeTaskForImageAndRef(draw_image, &task); |
1468 EXPECT_TRUE(need_unref); | 1490 EXPECT_TRUE(need_unref); |
1469 EXPECT_TRUE(task); | 1491 EXPECT_TRUE(task); |
1470 EXPECT_TRUE(cache.IsInInUseCacheForTesting(draw_image)); | 1492 EXPECT_TRUE(cache.IsInInUseCacheForTesting(draw_image)); |
1471 | 1493 |
1472 // Run the decode task. | 1494 // Run the decode task. |
1473 TestTileTaskRunner::ProcessTask(task.get()); | 1495 TestTileTaskRunner::ProcessTask(task.get()); |
1474 | 1496 |
1475 // The image should remain in the cache till we unref it. | 1497 // The image should remain in the cache till we unref it. |
1476 EXPECT_TRUE(cache.IsInInUseCacheForTesting(draw_image)); | 1498 EXPECT_TRUE(cache.IsInInUseCacheForTesting(draw_image)); |
1477 cache.UnrefImage(draw_image); | 1499 cache.UnrefImage(draw_image); |
1478 } | 1500 } |
1479 | 1501 |
1480 TEST(GpuImageDecodeCacheTest, ZeroCacheNormalWorkingSet) { | 1502 TEST_P(GpuImageDecodeCacheTest, ZeroCacheNormalWorkingSet) { |
1481 // Setup - Image cache has a normal working set, but zero cache size. | 1503 // Setup - Image cache has a normal working set, but zero cache size. |
1482 auto context_provider = TestContextProvider::Create(); | 1504 auto context_provider = TestContextProvider::Create(); |
1483 context_provider->BindToCurrentThread(); | 1505 context_provider->BindToCurrentThread(); |
1484 GpuImageDecodeCache cache(context_provider.get(), ResourceFormat::RGBA_8888, | 1506 GpuImageDecodeCache cache(context_provider.get(), ResourceFormat::RGBA_8888, |
1485 kGpuMemoryLimitBytes, 0); | 1507 kGpuMemoryLimitBytes, 0); |
1486 bool is_decomposable = true; | 1508 bool is_decomposable = true; |
1487 SkFilterQuality quality = kHigh_SkFilterQuality; | 1509 SkFilterQuality quality = kHigh_SkFilterQuality; |
1488 | 1510 |
1489 // Add an image to the cache. Due to normal working set, this should produce | 1511 // Add an image to the cache. Due to normal working set, this should produce |
1490 // a task and a ref. | 1512 // a task and a ref. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1525 EXPECT_TRUE(task3); | 1547 EXPECT_TRUE(task3); |
1526 EXPECT_EQ(task3->dependencies().size(), 1u); | 1548 EXPECT_EQ(task3->dependencies().size(), 1u); |
1527 EXPECT_TRUE(task->dependencies()[0]); | 1549 EXPECT_TRUE(task->dependencies()[0]); |
1528 | 1550 |
1529 TestTileTaskRunner::ProcessTask(task3->dependencies()[0].get()); | 1551 TestTileTaskRunner::ProcessTask(task3->dependencies()[0].get()); |
1530 TestTileTaskRunner::ProcessTask(task3.get()); | 1552 TestTileTaskRunner::ProcessTask(task3.get()); |
1531 | 1553 |
1532 cache.UnrefImage(draw_image); | 1554 cache.UnrefImage(draw_image); |
1533 } | 1555 } |
1534 | 1556 |
1535 TEST(GpuImageDecodeCacheTest, SmallCacheNormalWorkingSet) { | 1557 TEST_P(GpuImageDecodeCacheTest, SmallCacheNormalWorkingSet) { |
1536 // Cache will fit one (but not two) 100x100 images. | 1558 // Cache will fit one (but not two) 100x100 images. |
1537 size_t cache_size = 190 * 100 * 4; | 1559 size_t cache_size = 190 * 100 * 4; |
1538 | 1560 |
1539 auto context_provider = TestContextProvider::Create(); | 1561 auto context_provider = TestContextProvider::Create(); |
1540 context_provider->BindToCurrentThread(); | 1562 context_provider->BindToCurrentThread(); |
1541 GpuImageDecodeCache cache(context_provider.get(), ResourceFormat::RGBA_8888, | 1563 GpuImageDecodeCache cache(context_provider.get(), ResourceFormat::RGBA_8888, |
1542 kGpuMemoryLimitBytes, cache_size); | 1564 kGpuMemoryLimitBytes, cache_size); |
1543 bool is_decomposable = true; | 1565 bool is_decomposable = true; |
1544 SkFilterQuality quality = kHigh_SkFilterQuality; | 1566 SkFilterQuality quality = kHigh_SkFilterQuality; |
1545 | 1567 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1619 EXPECT_EQ(task->dependencies().size(), 1u); | 1641 EXPECT_EQ(task->dependencies().size(), 1u); |
1620 EXPECT_TRUE(task->dependencies()[0]); | 1642 EXPECT_TRUE(task->dependencies()[0]); |
1621 | 1643 |
1622 // Run the task and unref the image. | 1644 // Run the task and unref the image. |
1623 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); | 1645 TestTileTaskRunner::ProcessTask(task->dependencies()[0].get()); |
1624 TestTileTaskRunner::ProcessTask(task.get()); | 1646 TestTileTaskRunner::ProcessTask(task.get()); |
1625 cache.UnrefImage(draw_image); | 1647 cache.UnrefImage(draw_image); |
1626 } | 1648 } |
1627 } | 1649 } |
1628 | 1650 |
1629 TEST(GpuImageDecodeCacheTest, ClearCache) { | 1651 TEST_P(GpuImageDecodeCacheTest, ClearCache) { |
1630 auto context_provider = TestContextProvider::Create(); | 1652 auto context_provider = TestContextProvider::Create(); |
1631 context_provider->BindToCurrentThread(); | 1653 context_provider->BindToCurrentThread(); |
1632 TestGpuImageDecodeCache cache(context_provider.get()); | 1654 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
1633 bool is_decomposable = true; | 1655 bool is_decomposable = true; |
1634 SkFilterQuality quality = kHigh_SkFilterQuality; | 1656 SkFilterQuality quality = kHigh_SkFilterQuality; |
1635 | 1657 |
1636 for (int i = 0; i < 10; ++i) { | 1658 for (int i = 0; i < 10; ++i) { |
1637 sk_sp<SkImage> image = CreateImage(100, 100); | 1659 sk_sp<SkImage> image = CreateImage(100, 100); |
1638 DrawImage draw_image( | 1660 DrawImage draw_image( |
1639 CreatePaintImage(image), | 1661 CreatePaintImage(image), |
1640 SkIRect::MakeWH(image->width(), image->height()), quality, | 1662 SkIRect::MakeWH(image->width(), image->height()), quality, |
1641 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), | 1663 CreateMatrix(SkSize::Make(1.0f, 1.0f), is_decomposable), |
1642 DefaultColorSpace()); | 1664 DefaultColorSpace()); |
(...skipping 12 matching lines...) Expand all Loading... |
1655 EXPECT_EQ(cache.GetNumCacheEntriesForTesting(), 10u); | 1677 EXPECT_EQ(cache.GetNumCacheEntriesForTesting(), 10u); |
1656 | 1678 |
1657 // Tell our cache to clear resources. | 1679 // Tell our cache to clear resources. |
1658 cache.ClearCache(); | 1680 cache.ClearCache(); |
1659 | 1681 |
1660 // We should now have nothing in our cache. | 1682 // We should now have nothing in our cache. |
1661 EXPECT_EQ(cache.GetBytesUsedForTesting(), 0u); | 1683 EXPECT_EQ(cache.GetBytesUsedForTesting(), 0u); |
1662 EXPECT_EQ(cache.GetNumCacheEntriesForTesting(), 0u); | 1684 EXPECT_EQ(cache.GetNumCacheEntriesForTesting(), 0u); |
1663 } | 1685 } |
1664 | 1686 |
1665 TEST(GpuImageDecodeCacheTest, GetTaskForImageDifferentColorSpace) { | 1687 TEST_P(GpuImageDecodeCacheTest, GetTaskForImageDifferentColorSpace) { |
1666 auto context_provider = TestContextProvider::Create(); | 1688 auto context_provider = TestContextProvider::Create(); |
1667 context_provider->BindToCurrentThread(); | 1689 context_provider->BindToCurrentThread(); |
1668 TestGpuImageDecodeCache cache(context_provider.get()); | 1690 TestGpuImageDecodeCache cache(context_provider.get(), GetParam()); |
1669 bool is_decomposable = true; | 1691 bool is_decomposable = true; |
1670 SkFilterQuality quality = kHigh_SkFilterQuality; | 1692 SkFilterQuality quality = kHigh_SkFilterQuality; |
1671 | 1693 |
1672 gfx::ColorSpace color_space_a = gfx::ColorSpace::CreateSRGB(); | 1694 gfx::ColorSpace color_space_a = gfx::ColorSpace::CreateSRGB(); |
1673 gfx::ColorSpace color_space_b = gfx::ColorSpace::CreateXYZD50(); | 1695 gfx::ColorSpace color_space_b = gfx::ColorSpace::CreateXYZD50(); |
1674 | 1696 |
1675 sk_sp<SkImage> first_image = CreateImage(100, 100); | 1697 sk_sp<SkImage> first_image = CreateImage(100, 100); |
1676 DrawImage first_draw_image( | 1698 DrawImage first_draw_image( |
1677 CreatePaintImage(first_image), | 1699 CreatePaintImage(first_image), |
1678 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, | 1700 SkIRect::MakeWH(first_image->width(), first_image->height()), quality, |
(...skipping 28 matching lines...) Expand all Loading... |
1707 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); | 1729 TestTileTaskRunner::ProcessTask(first_task->dependencies()[0].get()); |
1708 TestTileTaskRunner::ProcessTask(first_task.get()); | 1730 TestTileTaskRunner::ProcessTask(first_task.get()); |
1709 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); | 1731 TestTileTaskRunner::ProcessTask(second_task->dependencies()[0].get()); |
1710 TestTileTaskRunner::ProcessTask(second_task.get()); | 1732 TestTileTaskRunner::ProcessTask(second_task.get()); |
1711 | 1733 |
1712 cache.UnrefImage(first_draw_image); | 1734 cache.UnrefImage(first_draw_image); |
1713 cache.UnrefImage(second_draw_image); | 1735 cache.UnrefImage(second_draw_image); |
1714 cache.UnrefImage(third_draw_image); | 1736 cache.UnrefImage(third_draw_image); |
1715 } | 1737 } |
1716 | 1738 |
| 1739 INSTANTIATE_TEST_CASE_P(GpuImageDecodeCacheTests, |
| 1740 GpuImageDecodeCacheTest, |
| 1741 ::testing::Values(ResourceFormat::RGBA_8888, |
| 1742 ResourceFormat::RGBA_4444)); |
| 1743 |
1717 } // namespace | 1744 } // namespace |
1718 } // namespace cc | 1745 } // namespace cc |
OLD | NEW |