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

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

Issue 2949303002: Handle RGBA_4444 scales in > max texture size images (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/tiles/gpu_image_decode_cache.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/tiles/gpu_image_decode_cache.h" 5 #include "cc/tiles/gpu_image_decode_cache.h"
6 6
7 #include "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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/tiles/gpu_image_decode_cache.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698