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