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

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

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

Powered by Google App Engine
This is Rietveld 408576698