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

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

Issue 1682803003: cc: ImageDecodes: handle low quality filters. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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/image_decode_controller.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/image_decode_controller.h" 5 #include "cc/tiles/image_decode_controller.h"
6 6
7 #include "cc/playback/draw_image.h" 7 #include "cc/playback/draw_image.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace cc { 10 namespace cc {
(...skipping 12 matching lines...) Expand all
23 bool is_decomposable = true; 23 bool is_decomposable = true;
24 SkFilterQuality qualities[] = {kNone_SkFilterQuality, kLow_SkFilterQuality}; 24 SkFilterQuality qualities[] = {kNone_SkFilterQuality, kLow_SkFilterQuality};
25 for (auto quality : qualities) { 25 for (auto quality : qualities) {
26 DrawImage draw_image( 26 DrawImage draw_image(
27 image.get(), SkIRect::MakeWH(image->width(), image->height()), 27 image.get(), SkIRect::MakeWH(image->width(), image->height()),
28 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 28 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
29 29
30 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 30 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
31 EXPECT_EQ(image->uniqueID(), key.image_id()); 31 EXPECT_EQ(image->uniqueID(), key.image_id());
32 EXPECT_EQ(quality, key.filter_quality()); 32 EXPECT_EQ(quality, key.filter_quality());
33 EXPECT_EQ(50, key.target_size().width()); 33 EXPECT_EQ(100, key.target_size().width());
34 EXPECT_EQ(150, key.target_size().height()); 34 EXPECT_EQ(100, key.target_size().height());
35 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 35 EXPECT_TRUE(key.can_use_original_decode());
36 // Since the original decode will be used, the locked_bytes is that of the
37 // original image.
38 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
36 } 39 }
37 } 40 }
38 41
39 TEST(ImageDecodeControllerTest, ImageKeyMediumQuality) { 42 TEST(ImageDecodeControllerTest, ImageKeyMediumQuality) {
40 skia::RefPtr<SkImage> image = CreateImage(100, 100); 43 skia::RefPtr<SkImage> image = CreateImage(100, 100);
41 bool has_perspective = false; 44 bool has_perspective = false;
42 bool is_decomposable = true; 45 bool is_decomposable = true;
43 SkFilterQuality quality = kMedium_SkFilterQuality; 46 SkFilterQuality quality = kMedium_SkFilterQuality;
44 47
45 DrawImage draw_image( 48 DrawImage draw_image(
46 image.get(), SkIRect::MakeWH(image->width(), image->height()), 49 image.get(), SkIRect::MakeWH(image->width(), image->height()),
47 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 50 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
48 51
49 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 52 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
50 EXPECT_EQ(image->uniqueID(), key.image_id()); 53 EXPECT_EQ(image->uniqueID(), key.image_id());
51 EXPECT_EQ(quality, key.filter_quality()); 54 EXPECT_EQ(quality, key.filter_quality());
52 EXPECT_EQ(50, key.target_size().width()); 55 EXPECT_EQ(50, key.target_size().width());
53 EXPECT_EQ(150, key.target_size().height()); 56 EXPECT_EQ(150, key.target_size().height());
54 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 57 EXPECT_FALSE(key.can_use_original_decode());
58 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes());
55 } 59 }
56 60
57 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityEvenWithPerspective) { 61 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityEvenWithPerspective) {
58 skia::RefPtr<SkImage> image = CreateImage(100, 100); 62 skia::RefPtr<SkImage> image = CreateImage(100, 100);
59 bool has_perspective = true; 63 bool has_perspective = true;
60 bool is_decomposable = true; 64 bool is_decomposable = true;
61 SkFilterQuality quality = kMedium_SkFilterQuality; 65 SkFilterQuality quality = kMedium_SkFilterQuality;
62 66
63 DrawImage draw_image( 67 DrawImage draw_image(
64 image.get(), SkIRect::MakeWH(image->width(), image->height()), 68 image.get(), SkIRect::MakeWH(image->width(), image->height()),
65 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 69 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
66 70
67 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 71 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
68 EXPECT_EQ(image->uniqueID(), key.image_id()); 72 EXPECT_EQ(image->uniqueID(), key.image_id());
69 EXPECT_EQ(quality, key.filter_quality()); 73 EXPECT_EQ(quality, key.filter_quality());
70 EXPECT_EQ(50, key.target_size().width()); 74 EXPECT_EQ(50, key.target_size().width());
71 EXPECT_EQ(150, key.target_size().height()); 75 EXPECT_EQ(150, key.target_size().height());
72 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 76 EXPECT_FALSE(key.can_use_original_decode());
77 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes());
73 } 78 }
74 79
75 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityDropToLowIfEnlarging) { 80 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityDropToLowIfEnlarging) {
76 skia::RefPtr<SkImage> image = CreateImage(100, 100); 81 skia::RefPtr<SkImage> image = CreateImage(100, 100);
77 bool has_perspective = false; 82 bool has_perspective = false;
78 bool is_decomposable = true; 83 bool is_decomposable = true;
79 SkFilterQuality quality = kMedium_SkFilterQuality; 84 SkFilterQuality quality = kMedium_SkFilterQuality;
80 85
81 DrawImage draw_image( 86 DrawImage draw_image(
82 image.get(), SkIRect::MakeWH(image->width(), image->height()), 87 image.get(), SkIRect::MakeWH(image->width(), image->height()),
83 SkSize::Make(1.5f, 1.5f), quality, has_perspective, is_decomposable); 88 SkSize::Make(1.5f, 1.5f), quality, has_perspective, is_decomposable);
84 89
85 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 90 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
86 EXPECT_EQ(image->uniqueID(), key.image_id()); 91 EXPECT_EQ(image->uniqueID(), key.image_id());
87 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 92 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
88 EXPECT_EQ(150, key.target_size().width()); 93 EXPECT_EQ(100, key.target_size().width());
89 EXPECT_EQ(150, key.target_size().height()); 94 EXPECT_EQ(100, key.target_size().height());
90 EXPECT_EQ(150u * 150u * 4u, key.target_bytes()); 95 EXPECT_TRUE(key.can_use_original_decode());
96 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
91 } 97 }
92 98
93 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityDropToLowIfIdentity) { 99 TEST(ImageDecodeControllerTest, ImageKeyMediumQualityDropToLowIfIdentity) {
94 skia::RefPtr<SkImage> image = CreateImage(100, 100); 100 skia::RefPtr<SkImage> image = CreateImage(100, 100);
95 bool has_perspective = false; 101 bool has_perspective = false;
96 bool is_decomposable = true; 102 bool is_decomposable = true;
97 SkFilterQuality quality = kMedium_SkFilterQuality; 103 SkFilterQuality quality = kMedium_SkFilterQuality;
98 104
99 DrawImage draw_image( 105 DrawImage draw_image(
100 image.get(), SkIRect::MakeWH(image->width(), image->height()), 106 image.get(), SkIRect::MakeWH(image->width(), image->height()),
101 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable); 107 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable);
102 108
103 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 109 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
104 EXPECT_EQ(image->uniqueID(), key.image_id()); 110 EXPECT_EQ(image->uniqueID(), key.image_id());
105 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 111 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
106 EXPECT_EQ(100, key.target_size().width()); 112 EXPECT_EQ(100, key.target_size().width());
107 EXPECT_EQ(100, key.target_size().height()); 113 EXPECT_EQ(100, key.target_size().height());
108 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); 114 EXPECT_TRUE(key.can_use_original_decode());
115 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
109 } 116 }
110 117
111 TEST(ImageDecodeControllerTest, 118 TEST(ImageDecodeControllerTest,
112 ImageKeyMediumQualityDropToLowIfNearlyIdentity) { 119 ImageKeyMediumQualityDropToLowIfNearlyIdentity) {
113 skia::RefPtr<SkImage> image = CreateImage(100, 100); 120 skia::RefPtr<SkImage> image = CreateImage(100, 100);
114 bool has_perspective = false; 121 bool has_perspective = false;
115 bool is_decomposable = true; 122 bool is_decomposable = true;
116 SkFilterQuality quality = kMedium_SkFilterQuality; 123 SkFilterQuality quality = kMedium_SkFilterQuality;
117 124
118 DrawImage draw_image( 125 DrawImage draw_image(
119 image.get(), SkIRect::MakeWH(image->width(), image->height()), 126 image.get(), SkIRect::MakeWH(image->width(), image->height()),
120 SkSize::Make(1.001f, 1.001f), quality, has_perspective, is_decomposable); 127 SkSize::Make(1.001f, 1.001f), quality, has_perspective, is_decomposable);
121 128
122 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 129 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
123 EXPECT_EQ(image->uniqueID(), key.image_id()); 130 EXPECT_EQ(image->uniqueID(), key.image_id());
124 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 131 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
125 EXPECT_EQ(100, key.target_size().width()); 132 EXPECT_EQ(100, key.target_size().width());
126 EXPECT_EQ(100, key.target_size().height()); 133 EXPECT_EQ(100, key.target_size().height());
127 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); 134 EXPECT_TRUE(key.can_use_original_decode());
135 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
128 } 136 }
129 137
130 TEST(ImageDecodeControllerTest, 138 TEST(ImageDecodeControllerTest,
131 ImageKeyMediumQualityDropToLowIfNearlyIdentity2) { 139 ImageKeyMediumQualityDropToLowIfNearlyIdentity2) {
132 skia::RefPtr<SkImage> image = CreateImage(100, 100); 140 skia::RefPtr<SkImage> image = CreateImage(100, 100);
133 bool has_perspective = false; 141 bool has_perspective = false;
134 bool is_decomposable = true; 142 bool is_decomposable = true;
135 SkFilterQuality quality = kMedium_SkFilterQuality; 143 SkFilterQuality quality = kMedium_SkFilterQuality;
136 144
137 DrawImage draw_image( 145 DrawImage draw_image(
138 image.get(), SkIRect::MakeWH(image->width(), image->height()), 146 image.get(), SkIRect::MakeWH(image->width(), image->height()),
139 SkSize::Make(0.999f, 0.999f), quality, has_perspective, is_decomposable); 147 SkSize::Make(0.999f, 0.999f), quality, has_perspective, is_decomposable);
140 148
141 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 149 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
142 EXPECT_EQ(image->uniqueID(), key.image_id()); 150 EXPECT_EQ(image->uniqueID(), key.image_id());
143 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 151 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
144 EXPECT_EQ(100, key.target_size().width()); 152 EXPECT_EQ(100, key.target_size().width());
145 EXPECT_EQ(100, key.target_size().height()); 153 EXPECT_EQ(100, key.target_size().height());
146 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); 154 EXPECT_TRUE(key.can_use_original_decode());
155 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
147 } 156 }
148 157
149 TEST(ImageDecodeControllerTest, 158 TEST(ImageDecodeControllerTest,
150 ImageKeyMediumQualityDropToLowIfNotDecomposable) { 159 ImageKeyMediumQualityDropToLowIfNotDecomposable) {
151 skia::RefPtr<SkImage> image = CreateImage(100, 100); 160 skia::RefPtr<SkImage> image = CreateImage(100, 100);
152 bool has_perspective = false; 161 bool has_perspective = false;
153 bool is_decomposable = false; 162 bool is_decomposable = false;
154 SkFilterQuality quality = kMedium_SkFilterQuality; 163 SkFilterQuality quality = kMedium_SkFilterQuality;
155 164
156 DrawImage draw_image( 165 DrawImage draw_image(
157 image.get(), SkIRect::MakeWH(image->width(), image->height()), 166 image.get(), SkIRect::MakeWH(image->width(), image->height()),
158 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 167 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
159 168
160 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 169 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
161 EXPECT_EQ(image->uniqueID(), key.image_id()); 170 EXPECT_EQ(image->uniqueID(), key.image_id());
162 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 171 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
163 EXPECT_EQ(50, key.target_size().width()); 172 EXPECT_EQ(100, key.target_size().width());
164 EXPECT_EQ(150, key.target_size().height()); 173 EXPECT_EQ(100, key.target_size().height());
165 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 174 EXPECT_TRUE(key.can_use_original_decode());
175 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
166 } 176 }
167 177
168 TEST(ImageDecodeControllerTest, ImageKeyHighQuality) { 178 TEST(ImageDecodeControllerTest, ImageKeyHighQuality) {
169 skia::RefPtr<SkImage> image = CreateImage(100, 100); 179 skia::RefPtr<SkImage> image = CreateImage(100, 100);
170 bool has_perspective = false; 180 bool has_perspective = false;
171 bool is_decomposable = true; 181 bool is_decomposable = true;
172 SkFilterQuality quality = kHigh_SkFilterQuality; 182 SkFilterQuality quality = kHigh_SkFilterQuality;
173 183
174 DrawImage draw_image( 184 DrawImage draw_image(
175 image.get(), SkIRect::MakeWH(image->width(), image->height()), 185 image.get(), SkIRect::MakeWH(image->width(), image->height()),
176 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 186 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
177 187
178 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 188 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
179 EXPECT_EQ(image->uniqueID(), key.image_id()); 189 EXPECT_EQ(image->uniqueID(), key.image_id());
180 EXPECT_EQ(quality, key.filter_quality()); 190 EXPECT_EQ(quality, key.filter_quality());
181 EXPECT_EQ(50, key.target_size().width()); 191 EXPECT_EQ(50, key.target_size().width());
182 EXPECT_EQ(150, key.target_size().height()); 192 EXPECT_EQ(150, key.target_size().height());
183 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 193 EXPECT_FALSE(key.can_use_original_decode());
194 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes());
184 } 195 }
185 196
186 TEST(ImageDecodeControllerTest, 197 TEST(ImageDecodeControllerTest,
187 ImageKeyHighQualityDropToMediumWithPerspective) { 198 ImageKeyHighQualityDropToMediumWithPerspective) {
188 skia::RefPtr<SkImage> image = CreateImage(100, 100); 199 skia::RefPtr<SkImage> image = CreateImage(100, 100);
189 bool has_perspective = true; 200 bool has_perspective = true;
190 bool is_decomposable = true; 201 bool is_decomposable = true;
191 SkFilterQuality quality = kHigh_SkFilterQuality; 202 SkFilterQuality quality = kHigh_SkFilterQuality;
192 203
193 DrawImage draw_image( 204 DrawImage draw_image(
194 image.get(), SkIRect::MakeWH(image->width(), image->height()), 205 image.get(), SkIRect::MakeWH(image->width(), image->height()),
195 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 206 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
196 207
197 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 208 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
198 EXPECT_EQ(image->uniqueID(), key.image_id()); 209 EXPECT_EQ(image->uniqueID(), key.image_id());
199 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); 210 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality());
200 EXPECT_EQ(50, key.target_size().width()); 211 EXPECT_EQ(50, key.target_size().width());
201 EXPECT_EQ(150, key.target_size().height()); 212 EXPECT_EQ(150, key.target_size().height());
202 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 213 EXPECT_FALSE(key.can_use_original_decode());
214 EXPECT_EQ(50u * 150u * 4u, key.locked_bytes());
203 } 215 }
204 216
205 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToMediumIfTooLarge) { 217 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToMediumIfTooLarge) {
206 // Just over 64MB when scaled. 218 // Just over 64MB when scaled.
207 skia::RefPtr<SkImage> image = CreateImage(4555, 2048); 219 skia::RefPtr<SkImage> image = CreateImage(4555, 2048);
208 bool has_perspective = false; 220 bool has_perspective = false;
209 bool is_decomposable = true; 221 bool is_decomposable = true;
210 SkFilterQuality quality = kHigh_SkFilterQuality; 222 SkFilterQuality quality = kHigh_SkFilterQuality;
211 223
212 // At least one dimension should scale down, so that medium quality doesn't 224 // At least one dimension should scale down, so that medium quality doesn't
213 // become low. 225 // become low.
214 DrawImage draw_image( 226 DrawImage draw_image(
215 image.get(), SkIRect::MakeWH(image->width(), image->height()), 227 image.get(), SkIRect::MakeWH(image->width(), image->height()),
216 SkSize::Make(0.9f, 2.f), quality, has_perspective, is_decomposable); 228 SkSize::Make(0.9f, 2.f), quality, has_perspective, is_decomposable);
217 229
218 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 230 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
219 EXPECT_EQ(image->uniqueID(), key.image_id()); 231 EXPECT_EQ(image->uniqueID(), key.image_id());
220 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality()); 232 EXPECT_EQ(kMedium_SkFilterQuality, key.filter_quality());
221 EXPECT_EQ(4100, key.target_size().width()); 233 EXPECT_EQ(4100, key.target_size().width());
222 EXPECT_EQ(4096, key.target_size().height()); 234 EXPECT_EQ(4096, key.target_size().height());
223 EXPECT_EQ(4100u * 4096u * 4u, key.target_bytes()); 235 EXPECT_FALSE(key.can_use_original_decode());
236 EXPECT_EQ(4100u * 4096u * 4u, key.locked_bytes());
224 } 237 }
225 238
226 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNotDecomposable) { 239 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNotDecomposable) {
227 skia::RefPtr<SkImage> image = CreateImage(100, 100); 240 skia::RefPtr<SkImage> image = CreateImage(100, 100);
228 bool has_perspective = false; 241 bool has_perspective = false;
229 bool is_decomposable = false; 242 bool is_decomposable = false;
230 SkFilterQuality quality = kHigh_SkFilterQuality; 243 SkFilterQuality quality = kHigh_SkFilterQuality;
231 244
232 DrawImage draw_image( 245 DrawImage draw_image(
233 image.get(), SkIRect::MakeWH(image->width(), image->height()), 246 image.get(), SkIRect::MakeWH(image->width(), image->height()),
234 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable); 247 SkSize::Make(0.5f, 1.5f), quality, has_perspective, is_decomposable);
235 248
236 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 249 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
237 EXPECT_EQ(image->uniqueID(), key.image_id()); 250 EXPECT_EQ(image->uniqueID(), key.image_id());
238 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 251 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
239 EXPECT_EQ(50, key.target_size().width()); 252 EXPECT_EQ(100, key.target_size().width());
240 EXPECT_EQ(150, key.target_size().height()); 253 EXPECT_EQ(100, key.target_size().height());
241 EXPECT_EQ(50u * 150u * 4u, key.target_bytes()); 254 EXPECT_TRUE(key.can_use_original_decode());
255 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
242 } 256 }
243 257
244 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfIdentity) { 258 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfIdentity) {
245 skia::RefPtr<SkImage> image = CreateImage(100, 100); 259 skia::RefPtr<SkImage> image = CreateImage(100, 100);
246 bool has_perspective = false; 260 bool has_perspective = false;
247 bool is_decomposable = true; 261 bool is_decomposable = true;
248 SkFilterQuality quality = kHigh_SkFilterQuality; 262 SkFilterQuality quality = kHigh_SkFilterQuality;
249 263
250 DrawImage draw_image( 264 DrawImage draw_image(
251 image.get(), SkIRect::MakeWH(image->width(), image->height()), 265 image.get(), SkIRect::MakeWH(image->width(), image->height()),
252 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable); 266 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable);
253 267
254 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 268 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
255 EXPECT_EQ(image->uniqueID(), key.image_id()); 269 EXPECT_EQ(image->uniqueID(), key.image_id());
256 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 270 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
257 EXPECT_EQ(100, key.target_size().width()); 271 EXPECT_EQ(100, key.target_size().width());
258 EXPECT_EQ(100, key.target_size().height()); 272 EXPECT_EQ(100, key.target_size().height());
259 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); 273 EXPECT_TRUE(key.can_use_original_decode());
274 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
260 } 275 }
261 276
262 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNearlyIdentity) { 277 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNearlyIdentity) {
263 skia::RefPtr<SkImage> image = CreateImage(100, 100); 278 skia::RefPtr<SkImage> image = CreateImage(100, 100);
264 bool has_perspective = false; 279 bool has_perspective = false;
265 bool is_decomposable = true; 280 bool is_decomposable = true;
266 SkFilterQuality quality = kHigh_SkFilterQuality; 281 SkFilterQuality quality = kHigh_SkFilterQuality;
267 282
268 DrawImage draw_image( 283 DrawImage draw_image(
269 image.get(), SkIRect::MakeWH(image->width(), image->height()), 284 image.get(), SkIRect::MakeWH(image->width(), image->height()),
270 SkSize::Make(1.001f, 1.001f), quality, has_perspective, is_decomposable); 285 SkSize::Make(1.001f, 1.001f), quality, has_perspective, is_decomposable);
271 286
272 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 287 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
273 EXPECT_EQ(image->uniqueID(), key.image_id()); 288 EXPECT_EQ(image->uniqueID(), key.image_id());
274 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 289 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
275 EXPECT_EQ(100, key.target_size().width()); 290 EXPECT_EQ(100, key.target_size().width());
276 EXPECT_EQ(100, key.target_size().height()); 291 EXPECT_EQ(100, key.target_size().height());
277 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); 292 EXPECT_TRUE(key.can_use_original_decode());
293 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
278 } 294 }
279 295
280 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNearlyIdentity2) { 296 TEST(ImageDecodeControllerTest, ImageKeyHighQualityDropToLowIfNearlyIdentity2) {
281 skia::RefPtr<SkImage> image = CreateImage(100, 100); 297 skia::RefPtr<SkImage> image = CreateImage(100, 100);
282 bool has_perspective = false; 298 bool has_perspective = false;
283 bool is_decomposable = true; 299 bool is_decomposable = true;
284 SkFilterQuality quality = kHigh_SkFilterQuality; 300 SkFilterQuality quality = kHigh_SkFilterQuality;
285 301
286 DrawImage draw_image( 302 DrawImage draw_image(
287 image.get(), SkIRect::MakeWH(image->width(), image->height()), 303 image.get(), SkIRect::MakeWH(image->width(), image->height()),
288 SkSize::Make(0.999f, 0.999f), quality, has_perspective, is_decomposable); 304 SkSize::Make(0.999f, 0.999f), quality, has_perspective, is_decomposable);
289 305
290 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 306 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
291 EXPECT_EQ(image->uniqueID(), key.image_id()); 307 EXPECT_EQ(image->uniqueID(), key.image_id());
292 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 308 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
293 EXPECT_EQ(100, key.target_size().width()); 309 EXPECT_EQ(100, key.target_size().width());
294 EXPECT_EQ(100, key.target_size().height()); 310 EXPECT_EQ(100, key.target_size().height());
295 EXPECT_EQ(100u * 100u * 4u, key.target_bytes()); 311 EXPECT_TRUE(key.can_use_original_decode());
312 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
313 }
314
315 TEST(ImageDecodeControllerTest, OriginalDecodesAreEqual) {
316 skia::RefPtr<SkImage> image = CreateImage(100, 100);
317 bool has_perspective = false;
318 bool is_decomposable = true;
319 SkFilterQuality quality = kLow_SkFilterQuality;
320
321 DrawImage draw_image(
322 image.get(), SkIRect::MakeWH(image->width(), image->height()),
323 SkSize::Make(0.5f, 0.5), quality, has_perspective, is_decomposable);
324
325 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
326 EXPECT_EQ(image->uniqueID(), key.image_id());
327 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
328 EXPECT_EQ(100, key.target_size().width());
329 EXPECT_EQ(100, key.target_size().height());
330 EXPECT_TRUE(key.can_use_original_decode());
331 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
332
333 DrawImage another_draw_image(
334 image.get(), SkIRect::MakeWH(image->width(), image->height()),
335 SkSize::Make(1.5f, 1.5), quality, has_perspective, is_decomposable);
336
337 auto another_key =
338 ImageDecodeControllerKey::FromDrawImage(another_draw_image);
339 EXPECT_EQ(image->uniqueID(), another_key.image_id());
340 EXPECT_EQ(kLow_SkFilterQuality, another_key.filter_quality());
341 EXPECT_EQ(100, another_key.target_size().width());
342 EXPECT_EQ(100, another_key.target_size().height());
343 EXPECT_TRUE(another_key.can_use_original_decode());
344 EXPECT_EQ(100u * 100u * 4u, another_key.locked_bytes());
345
346 EXPECT_TRUE(key == another_key);
296 } 347 }
297 348
298 TEST(ImageDecodeControllerTest, ImageRectDoesNotContainSrcRect) { 349 TEST(ImageDecodeControllerTest, ImageRectDoesNotContainSrcRect) {
299 skia::RefPtr<SkImage> image = CreateImage(100, 100); 350 skia::RefPtr<SkImage> image = CreateImage(100, 100);
300 bool has_perspective = false; 351 bool has_perspective = false;
301 bool is_decomposable = true; 352 bool is_decomposable = true;
302 SkFilterQuality quality = kHigh_SkFilterQuality; 353 SkFilterQuality quality = kHigh_SkFilterQuality;
303 354
304 DrawImage draw_image( 355 DrawImage draw_image(
305 image.get(), SkIRect::MakeXYWH(25, 35, image->width(), image->height()), 356 image.get(), SkIRect::MakeXYWH(25, 35, image->width(), image->height()),
306 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable); 357 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable);
307 358
308 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 359 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
309 EXPECT_EQ(image->uniqueID(), key.image_id()); 360 EXPECT_EQ(image->uniqueID(), key.image_id());
310 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality()); 361 EXPECT_EQ(kLow_SkFilterQuality, key.filter_quality());
311 EXPECT_EQ(75, key.target_size().width()); 362 EXPECT_EQ(100, key.target_size().width());
312 EXPECT_EQ(65, key.target_size().height()); 363 EXPECT_EQ(100, key.target_size().height());
313 EXPECT_EQ(gfx::Rect(25, 35, 75, 65), key.src_rect()); 364 EXPECT_EQ(gfx::Rect(25, 35, 75, 65), key.src_rect());
314 EXPECT_EQ(75u * 65u * 4u, key.target_bytes()); 365 EXPECT_EQ(100u * 100u * 4u, key.locked_bytes());
315 } 366 }
316 367
317 TEST(ImageDecodeControllerTest, ImageRectDoesNotContainSrcRectWithScale) { 368 TEST(ImageDecodeControllerTest, ImageRectDoesNotContainSrcRectWithScale) {
318 skia::RefPtr<SkImage> image = CreateImage(100, 100); 369 skia::RefPtr<SkImage> image = CreateImage(100, 100);
319 bool has_perspective = false; 370 bool has_perspective = false;
320 bool is_decomposable = true; 371 bool is_decomposable = true;
321 SkFilterQuality quality = kHigh_SkFilterQuality; 372 SkFilterQuality quality = kHigh_SkFilterQuality;
322 373
323 DrawImage draw_image( 374 DrawImage draw_image(
324 image.get(), SkIRect::MakeXYWH(20, 30, image->width(), image->height()), 375 image.get(), SkIRect::MakeXYWH(20, 30, image->width(), image->height()),
325 SkSize::Make(0.5f, 0.5f), quality, has_perspective, is_decomposable); 376 SkSize::Make(0.5f, 0.5f), quality, has_perspective, is_decomposable);
326 377
327 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image); 378 auto key = ImageDecodeControllerKey::FromDrawImage(draw_image);
328 EXPECT_EQ(image->uniqueID(), key.image_id()); 379 EXPECT_EQ(image->uniqueID(), key.image_id());
329 EXPECT_EQ(kHigh_SkFilterQuality, key.filter_quality()); 380 EXPECT_EQ(kHigh_SkFilterQuality, key.filter_quality());
330 EXPECT_EQ(40, key.target_size().width()); 381 EXPECT_EQ(40, key.target_size().width());
331 EXPECT_EQ(35, key.target_size().height()); 382 EXPECT_EQ(35, key.target_size().height());
332 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect()); 383 EXPECT_EQ(gfx::Rect(20, 30, 80, 70), key.src_rect());
333 EXPECT_EQ(40u * 35u * 4u, key.target_bytes()); 384 EXPECT_EQ(40u * 35u * 4u, key.locked_bytes());
334 } 385 }
335 386
336 TEST(ImageDecodeControllerTest, GetTaskForImageSameImage) { 387 TEST(ImageDecodeControllerTest, GetTaskForImageSameImage) {
337 ImageDecodeController controller; 388 ImageDecodeController controller;
338 skia::RefPtr<SkImage> image = CreateImage(100, 100); 389 skia::RefPtr<SkImage> image = CreateImage(100, 100);
339 bool has_perspective = false; 390 bool has_perspective = false;
340 bool is_decomposable = true; 391 bool is_decomposable = true;
341 SkFilterQuality quality = kHigh_SkFilterQuality; 392 SkFilterQuality quality = kHigh_SkFilterQuality;
342 uint64_t prepare_tiles_id = 1; 393 uint64_t prepare_tiles_id = 1;
343 394
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 EXPECT_TRUE(medium_quality_task); 445 EXPECT_TRUE(medium_quality_task);
395 EXPECT_TRUE(high_quality_task.get() != medium_quality_task.get()); 446 EXPECT_TRUE(high_quality_task.get() != medium_quality_task.get());
396 447
397 DrawImage low_quality_draw_image( 448 DrawImage low_quality_draw_image(
398 image.get(), SkIRect::MakeWH(image->width(), image->height()), 449 image.get(), SkIRect::MakeWH(image->width(), image->height()),
399 SkSize::Make(0.5f, 0.5f), kLow_SkFilterQuality, has_perspective, 450 SkSize::Make(0.5f, 0.5f), kLow_SkFilterQuality, has_perspective,
400 is_decomposable); 451 is_decomposable);
401 scoped_refptr<ImageDecodeTask> low_quality_task; 452 scoped_refptr<ImageDecodeTask> low_quality_task;
402 need_unref = controller.GetTaskForImageAndRef( 453 need_unref = controller.GetTaskForImageAndRef(
403 low_quality_draw_image, prepare_tiles_id, &low_quality_task); 454 low_quality_draw_image, prepare_tiles_id, &low_quality_task);
404 // Note that when we pin the original decode, we might ref low quality images 455 EXPECT_TRUE(need_unref);
405 // too, but we don't support that right now.
406 EXPECT_FALSE(need_unref);
407 EXPECT_TRUE(low_quality_task); 456 EXPECT_TRUE(low_quality_task);
408 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get()); 457 EXPECT_TRUE(high_quality_task.get() != low_quality_task.get());
409 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get()); 458 EXPECT_TRUE(medium_quality_task.get() != low_quality_task.get());
410 459
411 controller.UnrefImage(high_quality_draw_image); 460 controller.UnrefImage(high_quality_draw_image);
461 controller.UnrefImage(low_quality_draw_image);
412 } 462 }
413 463
414 TEST(ImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) { 464 TEST(ImageDecodeControllerTest, GetTaskForImageSameImageDifferentSize) {
415 ImageDecodeController controller; 465 ImageDecodeController controller;
416 skia::RefPtr<SkImage> image = CreateImage(100, 100); 466 skia::RefPtr<SkImage> image = CreateImage(100, 100);
417 bool has_perspective = false; 467 bool has_perspective = false;
418 bool is_decomposable = true; 468 bool is_decomposable = true;
419 uint64_t prepare_tiles_id = 1; 469 uint64_t prepare_tiles_id = 1;
420 SkFilterQuality quality = kHigh_SkFilterQuality; 470 SkFilterQuality quality = kHigh_SkFilterQuality;
421 471
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 uint64_t prepare_tiles_id = 1; 569 uint64_t prepare_tiles_id = 1;
520 SkFilterQuality quality = kLow_SkFilterQuality; 570 SkFilterQuality quality = kLow_SkFilterQuality;
521 571
522 skia::RefPtr<SkImage> image = CreateImage(100, 100); 572 skia::RefPtr<SkImage> image = CreateImage(100, 100);
523 DrawImage draw_image( 573 DrawImage draw_image(
524 image.get(), SkIRect::MakeWH(image->width(), image->height()), 574 image.get(), SkIRect::MakeWH(image->width(), image->height()),
525 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable); 575 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable);
526 scoped_refptr<ImageDecodeTask> task; 576 scoped_refptr<ImageDecodeTask> task;
527 bool need_unref = 577 bool need_unref =
528 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task); 578 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task);
529 // We're not currently locking original scale or low quality images. 579 EXPECT_TRUE(need_unref);
530 EXPECT_FALSE(need_unref);
531 EXPECT_TRUE(task); 580 EXPECT_TRUE(task);
532 581
533 task->WillSchedule(); 582 task->WillSchedule();
534 task->ScheduleOnOriginThread(nullptr); 583 task->ScheduleOnOriginThread(nullptr);
535 task->DidSchedule(); 584 task->DidSchedule();
536 task->RunOnWorkerThread(); 585 task->RunOnWorkerThread();
537 586
538 scoped_refptr<ImageDecodeTask> another_task; 587 scoped_refptr<ImageDecodeTask> another_task;
539 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, 588 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id,
540 &another_task); 589 &another_task);
541 EXPECT_FALSE(need_unref); 590 EXPECT_TRUE(need_unref);
542 EXPECT_FALSE(another_task); 591 EXPECT_FALSE(another_task);
543 592
544 task->WillComplete(); 593 task->WillComplete();
545 task->CompleteOnOriginThread(nullptr); 594 task->CompleteOnOriginThread(nullptr);
546 task->DidComplete(); 595 task->DidComplete();
547 596
548 scoped_refptr<ImageDecodeTask> third_task; 597 scoped_refptr<ImageDecodeTask> third_task;
549 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, 598 need_unref = controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id,
550 &third_task); 599 &third_task);
551 EXPECT_FALSE(need_unref); 600 EXPECT_TRUE(need_unref);
552 EXPECT_FALSE(third_task); 601 EXPECT_FALSE(third_task);
602
603 controller.UnrefImage(draw_image);
604 controller.UnrefImage(draw_image);
605 controller.UnrefImage(draw_image);
553 } 606 }
554 607
555 TEST(ImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) { 608 TEST(ImageDecodeControllerTest, GetTaskForImageCanceledGetsNewTask) {
556 ImageDecodeController controller; 609 ImageDecodeController controller;
557 bool has_perspective = false; 610 bool has_perspective = false;
558 bool is_decomposable = true; 611 bool is_decomposable = true;
559 uint64_t prepare_tiles_id = 1; 612 uint64_t prepare_tiles_id = 1;
560 SkFilterQuality quality = kHigh_SkFilterQuality; 613 SkFilterQuality quality = kHigh_SkFilterQuality;
561 614
562 skia::RefPtr<SkImage> image = CreateImage(100, 100); 615 skia::RefPtr<SkImage> image = CreateImage(100, 100);
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
941 EXPECT_FALSE(task); 994 EXPECT_FALSE(task);
942 EXPECT_FALSE(need_unref); 995 EXPECT_FALSE(need_unref);
943 996
944 DecodedDrawImage decoded_draw_image = 997 DecodedDrawImage decoded_draw_image =
945 controller.GetDecodedImageForDraw(draw_image); 998 controller.GetDecodedImageForDraw(draw_image);
946 EXPECT_FALSE(decoded_draw_image.image()); 999 EXPECT_FALSE(decoded_draw_image.image());
947 1000
948 controller.DrawWithImageFinished(draw_image, decoded_draw_image); 1001 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
949 } 1002 }
950 1003
1004 TEST(ImageDecodeControllerTest, LowQualityFilterIsHandled) {
1005 ImageDecodeController controller;
1006 bool has_perspective = false;
1007 bool is_decomposable = true;
1008 uint64_t prepare_tiles_id = 1;
1009 SkFilterQuality quality = kLow_SkFilterQuality;
1010
1011 skia::RefPtr<SkImage> image = CreateImage(100, 100);
1012 DrawImage draw_image(
1013 image.get(), SkIRect::MakeWH(image->width(), image->height()),
1014 SkSize::Make(1.f, 1.f), quality, has_perspective, is_decomposable);
1015
1016 scoped_refptr<ImageDecodeTask> task;
1017 bool need_unref =
1018 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task);
1019 EXPECT_TRUE(task);
1020 EXPECT_TRUE(need_unref);
1021
1022 DecodedDrawImage decoded_draw_image =
1023 controller.GetDecodedImageForDraw(draw_image);
1024 EXPECT_TRUE(decoded_draw_image.image());
1025 // If we decoded the image and cached it, it would be stored in a different
1026 // SkImage object.
1027 EXPECT_TRUE(decoded_draw_image.image() != image.get());
1028
1029 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
1030 controller.UnrefImage(draw_image);
1031 }
1032
1033 TEST(ImageDecodeControllerTest, LowQualityScaledSubrectIsHandled) {
1034 ImageDecodeController controller;
1035 bool has_perspective = false;
1036 bool is_decomposable = true;
1037 uint64_t prepare_tiles_id = 1;
1038 SkFilterQuality quality = kLow_SkFilterQuality;
1039
1040 skia::RefPtr<SkImage> image = CreateImage(100, 100);
1041 DrawImage draw_image(image.get(), SkIRect::MakeXYWH(10, 10, 80, 80),
1042 SkSize::Make(0.5f, 0.5f), quality, has_perspective,
1043 is_decomposable);
1044
1045 scoped_refptr<ImageDecodeTask> task;
1046 bool need_unref =
1047 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task);
1048 EXPECT_TRUE(task);
1049 EXPECT_TRUE(need_unref);
1050
1051 DecodedDrawImage decoded_draw_image =
1052 controller.GetDecodedImageForDraw(draw_image);
1053 EXPECT_TRUE(decoded_draw_image.image());
1054 // If we decoded the image and cached it, it would be stored in a different
1055 // SkImage object.
1056 EXPECT_TRUE(decoded_draw_image.image() != image.get());
1057 EXPECT_EQ(kLow_SkFilterQuality, decoded_draw_image.filter_quality());
1058 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity());
1059
1060 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
1061 controller.UnrefImage(draw_image);
1062 }
1063
1064 TEST(ImageDecodeControllerTest, NoneQualityScaledSubrectIsHandled) {
1065 ImageDecodeController controller;
1066 bool has_perspective = false;
1067 bool is_decomposable = true;
1068 uint64_t prepare_tiles_id = 1;
1069 SkFilterQuality quality = kNone_SkFilterQuality;
1070
1071 skia::RefPtr<SkImage> image = CreateImage(100, 100);
1072 DrawImage draw_image(image.get(), SkIRect::MakeXYWH(10, 10, 80, 80),
1073 SkSize::Make(0.5f, 0.5f), quality, has_perspective,
1074 is_decomposable);
1075
1076 scoped_refptr<ImageDecodeTask> task;
1077 bool need_unref =
1078 controller.GetTaskForImageAndRef(draw_image, prepare_tiles_id, &task);
1079 EXPECT_TRUE(task);
1080 EXPECT_TRUE(need_unref);
1081
1082 DecodedDrawImage decoded_draw_image =
1083 controller.GetDecodedImageForDraw(draw_image);
1084 EXPECT_TRUE(decoded_draw_image.image());
1085 // If we decoded the image and cached it, it would be stored in a different
1086 // SkImage object.
1087 EXPECT_TRUE(decoded_draw_image.image() != image.get());
1088 EXPECT_EQ(kNone_SkFilterQuality, decoded_draw_image.filter_quality());
1089 EXPECT_TRUE(decoded_draw_image.is_scale_adjustment_identity());
1090
1091 controller.DrawWithImageFinished(draw_image, decoded_draw_image);
1092 controller.UnrefImage(draw_image);
1093 }
951 } // namespace 1094 } // namespace
952 } // namespace cc 1095 } // namespace cc
OLDNEW
« no previous file with comments | « cc/tiles/image_decode_controller.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698