| OLD | NEW |
| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
| 8 #include "cc/base/region.h" | 8 #include "cc/base/region.h" |
| 9 #include "cc/playback/raster_source.h" | 9 #include "cc/playback/raster_source.h" |
| 10 #include "cc/test/fake_client_picture_cache.h" | 10 #include "cc/test/fake_client_picture_cache.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 recording_source->Rerecord(); | 71 recording_source->Rerecord(); |
| 72 | 72 |
| 73 bool can_use_lcd_text = true; | 73 bool can_use_lcd_text = true; |
| 74 scoped_refptr<RasterSource> raster_source = | 74 scoped_refptr<RasterSource> raster_source = |
| 75 RasterSource::CreateFromRecordingSource(recording_source.get(), | 75 RasterSource::CreateFromRecordingSource(recording_source.get(), |
| 76 can_use_lcd_text); | 76 can_use_lcd_text); |
| 77 | 77 |
| 78 // Tile sized iterators. These should find only one pixel ref. | 78 // Tile sized iterators. These should find only one pixel ref. |
| 79 { | 79 { |
| 80 std::vector<DrawImage> images; | 80 std::vector<DrawImage> images; |
| 81 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), | 81 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), 1.f, |
| 82 gfx::SizeF(1.f, 1.f), &images); | 82 &images); |
| 83 EXPECT_EQ(2u, images.size()); | 83 EXPECT_EQ(2u, images.size()); |
| 84 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); | 84 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); |
| 85 EXPECT_TRUE(images[1].image() == discardable_image[1][1]); | 85 EXPECT_TRUE(images[1].image() == discardable_image[1][1]); |
| 86 } | 86 } |
| 87 | 87 |
| 88 // Shifted tile sized iterators. These should find only one pixel ref. | 88 // Shifted tile sized iterators. These should find only one pixel ref. |
| 89 { | 89 { |
| 90 std::vector<DrawImage> images; | 90 std::vector<DrawImage> images; |
| 91 raster_source->GetDiscardableImagesInRect(gfx::Rect(130, 140, 128, 128), | 91 raster_source->GetDiscardableImagesInRect(gfx::Rect(130, 140, 128, 128), |
| 92 gfx::SizeF(1.f, 1.f), &images); | 92 1.f, &images); |
| 93 EXPECT_EQ(1u, images.size()); | 93 EXPECT_EQ(1u, images.size()); |
| 94 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); | 94 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); |
| 95 } | 95 } |
| 96 | 96 |
| 97 // The rotated bitmap would still be in the top right tile. | 97 // The rotated bitmap would still be in the top right tile. |
| 98 { | 98 { |
| 99 std::vector<DrawImage> images; | 99 std::vector<DrawImage> images; |
| 100 raster_source->GetDiscardableImagesInRect(gfx::Rect(130, 0, 128, 128), | 100 raster_source->GetDiscardableImagesInRect(gfx::Rect(130, 0, 128, 128), 1.f, |
| 101 gfx::SizeF(1.f, 1.f), &images); | 101 &images); |
| 102 EXPECT_EQ(1u, images.size()); | 102 EXPECT_EQ(1u, images.size()); |
| 103 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); | 103 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); |
| 104 } | 104 } |
| 105 | 105 |
| 106 // Layer sized iterators. These should find all pixel refs. | 106 // Layer sized iterators. These should find all pixel refs. |
| 107 { | 107 { |
| 108 std::vector<DrawImage> images; | 108 std::vector<DrawImage> images; |
| 109 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), | 109 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, |
| 110 gfx::SizeF(1.f, 1.f), &images); | 110 &images); |
| 111 EXPECT_EQ(3u, images.size()); | 111 EXPECT_EQ(3u, images.size()); |
| 112 // Top left tile with bitmap[0][0] and bitmap[1][1]. | 112 // Top left tile with bitmap[0][0] and bitmap[1][1]. |
| 113 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); | 113 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); |
| 114 EXPECT_TRUE(images[1].image() == discardable_image[1][0]); | 114 EXPECT_TRUE(images[1].image() == discardable_image[1][0]); |
| 115 EXPECT_TRUE(images[2].image() == discardable_image[1][1]); | 115 EXPECT_TRUE(images[2].image() == discardable_image[1][1]); |
| 116 } | 116 } |
| 117 | 117 |
| 118 // Verify different raster scales | 118 // Verify different raster scales |
| 119 for (float x_scale = 1.f; x_scale <= 5.f; x_scale += 0.5f) { | 119 for (float scale = 1.f; scale <= 5.f; scale += 0.5f) { |
| 120 for (float y_scale = 1.f; y_scale <= 5.f; y_scale += 0.5f) { | 120 std::vector<DrawImage> images; |
| 121 std::vector<DrawImage> images; | 121 raster_source->GetDiscardableImagesInRect(gfx::Rect(130, 0, 128, 128), |
| 122 raster_source->GetDiscardableImagesInRect( | 122 scale, &images); |
| 123 gfx::Rect(130, 0, 128, 128), gfx::SizeF(x_scale, y_scale), &images); | 123 EXPECT_EQ(1u, images.size()); |
| 124 EXPECT_EQ(1u, images.size()); | 124 EXPECT_FLOAT_EQ(scale, images[0].scale().width()); |
| 125 EXPECT_FLOAT_EQ(x_scale, images[0].scale().width()); | 125 EXPECT_FLOAT_EQ(scale, images[0].scale().height()); |
| 126 EXPECT_FLOAT_EQ(y_scale, images[0].scale().height()); | |
| 127 } | |
| 128 } | 126 } |
| 129 } | 127 } |
| 130 | 128 |
| 131 TEST(RecordingSourceTest, NoGatherImageEmptyImages) { | 129 TEST(RecordingSourceTest, NoGatherImageEmptyImages) { |
| 132 gfx::Rect recorded_viewport(0, 0, 256, 256); | 130 gfx::Rect recorded_viewport(0, 0, 256, 256); |
| 133 | 131 |
| 134 std::unique_ptr<FakeRecordingSource> recording_source = | 132 std::unique_ptr<FakeRecordingSource> recording_source = |
| 135 CreateRecordingSource(recorded_viewport); | 133 CreateRecordingSource(recorded_viewport); |
| 136 recording_source->SetGenerateDiscardableImagesMetadata(false); | 134 recording_source->SetGenerateDiscardableImagesMetadata(false); |
| 137 recording_source->Rerecord(); | 135 recording_source->Rerecord(); |
| 138 | 136 |
| 139 scoped_refptr<RasterSource> raster_source = | 137 scoped_refptr<RasterSource> raster_source = |
| 140 CreateRasterSource(recording_source.get()); | 138 CreateRasterSource(recording_source.get()); |
| 141 | 139 |
| 142 // If recording source do not gather images, raster source is not going to | 140 // If recording source do not gather images, raster source is not going to |
| 143 // get images. | 141 // get images. |
| 144 { | 142 { |
| 145 std::vector<DrawImage> images; | 143 std::vector<DrawImage> images; |
| 146 raster_source->GetDiscardableImagesInRect(recorded_viewport, | 144 raster_source->GetDiscardableImagesInRect(recorded_viewport, 1.f, &images); |
| 147 gfx::SizeF(1.f, 1.f), &images); | |
| 148 EXPECT_TRUE(images.empty()); | 145 EXPECT_TRUE(images.empty()); |
| 149 } | 146 } |
| 150 } | 147 } |
| 151 | 148 |
| 152 TEST(RecordingSourceTest, EmptyImages) { | 149 TEST(RecordingSourceTest, EmptyImages) { |
| 153 gfx::Rect recorded_viewport(0, 0, 256, 256); | 150 gfx::Rect recorded_viewport(0, 0, 256, 256); |
| 154 | 151 |
| 155 std::unique_ptr<FakeRecordingSource> recording_source = | 152 std::unique_ptr<FakeRecordingSource> recording_source = |
| 156 CreateRecordingSource(recorded_viewport); | 153 CreateRecordingSource(recorded_viewport); |
| 157 recording_source->SetGenerateDiscardableImagesMetadata(true); | 154 recording_source->SetGenerateDiscardableImagesMetadata(true); |
| 158 recording_source->Rerecord(); | 155 recording_source->Rerecord(); |
| 159 | 156 |
| 160 scoped_refptr<RasterSource> raster_source = | 157 scoped_refptr<RasterSource> raster_source = |
| 161 CreateRasterSource(recording_source.get()); | 158 CreateRasterSource(recording_source.get()); |
| 162 | 159 |
| 163 // Tile sized iterators. | 160 // Tile sized iterators. |
| 164 { | 161 { |
| 165 std::vector<DrawImage> images; | 162 std::vector<DrawImage> images; |
| 166 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), | 163 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), 1.f, |
| 167 gfx::SizeF(1.f, 1.f), &images); | 164 &images); |
| 168 EXPECT_TRUE(images.empty()); | 165 EXPECT_TRUE(images.empty()); |
| 169 } | 166 } |
| 170 // Shifted tile sized iterators. | 167 // Shifted tile sized iterators. |
| 171 { | 168 { |
| 172 std::vector<DrawImage> images; | 169 std::vector<DrawImage> images; |
| 173 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 140, 128, 128), | 170 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 140, 128, 128), |
| 174 gfx::SizeF(1.f, 1.f), &images); | 171 1.f, &images); |
| 175 EXPECT_TRUE(images.empty()); | 172 EXPECT_TRUE(images.empty()); |
| 176 } | 173 } |
| 177 // Layer sized iterators. | 174 // Layer sized iterators. |
| 178 { | 175 { |
| 179 std::vector<DrawImage> images; | 176 std::vector<DrawImage> images; |
| 180 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), | 177 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, |
| 181 gfx::SizeF(1.f, 1.f), &images); | 178 &images); |
| 182 EXPECT_TRUE(images.empty()); | 179 EXPECT_TRUE(images.empty()); |
| 183 } | 180 } |
| 184 } | 181 } |
| 185 | 182 |
| 186 TEST(RecordingSourceTest, NoDiscardableImages) { | 183 TEST(RecordingSourceTest, NoDiscardableImages) { |
| 187 gfx::Rect recorded_viewport(0, 0, 256, 256); | 184 gfx::Rect recorded_viewport(0, 0, 256, 256); |
| 188 | 185 |
| 189 std::unique_ptr<FakeRecordingSource> recording_source = | 186 std::unique_ptr<FakeRecordingSource> recording_source = |
| 190 CreateRecordingSource(recorded_viewport); | 187 CreateRecordingSource(recorded_viewport); |
| 191 | 188 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 211 recording_source->add_draw_image(non_discardable_image, gfx::Point(150, 150)); | 208 recording_source->add_draw_image(non_discardable_image, gfx::Point(150, 150)); |
| 212 recording_source->SetGenerateDiscardableImagesMetadata(true); | 209 recording_source->SetGenerateDiscardableImagesMetadata(true); |
| 213 recording_source->Rerecord(); | 210 recording_source->Rerecord(); |
| 214 | 211 |
| 215 scoped_refptr<RasterSource> raster_source = | 212 scoped_refptr<RasterSource> raster_source = |
| 216 CreateRasterSource(recording_source.get()); | 213 CreateRasterSource(recording_source.get()); |
| 217 | 214 |
| 218 // Tile sized iterators. | 215 // Tile sized iterators. |
| 219 { | 216 { |
| 220 std::vector<DrawImage> images; | 217 std::vector<DrawImage> images; |
| 221 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), | 218 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), 1.f, |
| 222 gfx::SizeF(1.f, 1.f), &images); | 219 &images); |
| 223 EXPECT_TRUE(images.empty()); | 220 EXPECT_TRUE(images.empty()); |
| 224 } | 221 } |
| 225 // Shifted tile sized iterators. | 222 // Shifted tile sized iterators. |
| 226 { | 223 { |
| 227 std::vector<DrawImage> images; | 224 std::vector<DrawImage> images; |
| 228 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 140, 128, 128), | 225 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 140, 128, 128), |
| 229 gfx::SizeF(1.f, 1.f), &images); | 226 1.f, &images); |
| 230 EXPECT_TRUE(images.empty()); | 227 EXPECT_TRUE(images.empty()); |
| 231 } | 228 } |
| 232 // Layer sized iterators. | 229 // Layer sized iterators. |
| 233 { | 230 { |
| 234 std::vector<DrawImage> images; | 231 std::vector<DrawImage> images; |
| 235 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), | 232 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, |
| 236 gfx::SizeF(1.f, 1.f), &images); | 233 &images); |
| 237 EXPECT_TRUE(images.empty()); | 234 EXPECT_TRUE(images.empty()); |
| 238 } | 235 } |
| 239 } | 236 } |
| 240 | 237 |
| 241 TEST(RecordingSourceTest, DiscardableImages) { | 238 TEST(RecordingSourceTest, DiscardableImages) { |
| 242 gfx::Rect recorded_viewport(0, 0, 256, 256); | 239 gfx::Rect recorded_viewport(0, 0, 256, 256); |
| 243 | 240 |
| 244 std::unique_ptr<FakeRecordingSource> recording_source = | 241 std::unique_ptr<FakeRecordingSource> recording_source = |
| 245 CreateRecordingSource(recorded_viewport); | 242 CreateRecordingSource(recorded_viewport); |
| 246 | 243 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 261 gfx::Point(140, 140)); | 258 gfx::Point(140, 140)); |
| 262 recording_source->SetGenerateDiscardableImagesMetadata(true); | 259 recording_source->SetGenerateDiscardableImagesMetadata(true); |
| 263 recording_source->Rerecord(); | 260 recording_source->Rerecord(); |
| 264 | 261 |
| 265 scoped_refptr<RasterSource> raster_source = | 262 scoped_refptr<RasterSource> raster_source = |
| 266 CreateRasterSource(recording_source.get()); | 263 CreateRasterSource(recording_source.get()); |
| 267 | 264 |
| 268 // Tile sized iterators. These should find only one image. | 265 // Tile sized iterators. These should find only one image. |
| 269 { | 266 { |
| 270 std::vector<DrawImage> images; | 267 std::vector<DrawImage> images; |
| 271 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), | 268 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 128, 128), 1.f, |
| 272 gfx::SizeF(1.f, 1.f), &images); | 269 &images); |
| 273 EXPECT_EQ(1u, images.size()); | 270 EXPECT_EQ(1u, images.size()); |
| 274 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); | 271 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); |
| 275 } | 272 } |
| 276 | 273 |
| 277 // Shifted tile sized iterators. These should find only one image. | 274 // Shifted tile sized iterators. These should find only one image. |
| 278 { | 275 { |
| 279 std::vector<DrawImage> images; | 276 std::vector<DrawImage> images; |
| 280 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 140, 128, 128), | 277 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 140, 128, 128), |
| 281 gfx::SizeF(1.f, 1.f), &images); | 278 1.f, &images); |
| 282 EXPECT_EQ(1u, images.size()); | 279 EXPECT_EQ(1u, images.size()); |
| 283 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); | 280 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); |
| 284 } | 281 } |
| 285 | 282 |
| 286 // Ensure there's no discardable images in the empty cell | 283 // Ensure there's no discardable images in the empty cell |
| 287 { | 284 { |
| 288 std::vector<DrawImage> images; | 285 std::vector<DrawImage> images; |
| 289 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 0, 128, 128), | 286 raster_source->GetDiscardableImagesInRect(gfx::Rect(140, 0, 128, 128), 1.f, |
| 290 gfx::SizeF(1.f, 1.f), &images); | 287 &images); |
| 291 EXPECT_TRUE(images.empty()); | 288 EXPECT_TRUE(images.empty()); |
| 292 } | 289 } |
| 293 | 290 |
| 294 // Layer sized iterators. These should find all 3 images. | 291 // Layer sized iterators. These should find all 3 images. |
| 295 { | 292 { |
| 296 std::vector<DrawImage> images; | 293 std::vector<DrawImage> images; |
| 297 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), | 294 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, |
| 298 gfx::SizeF(1.f, 1.f), &images); | 295 &images); |
| 299 EXPECT_EQ(3u, images.size()); | 296 EXPECT_EQ(3u, images.size()); |
| 300 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); | 297 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); |
| 301 EXPECT_TRUE(images[1].image() == discardable_image[1][0]); | 298 EXPECT_TRUE(images[1].image() == discardable_image[1][0]); |
| 302 EXPECT_TRUE(images[2].image() == discardable_image[1][1]); | 299 EXPECT_TRUE(images[2].image() == discardable_image[1][1]); |
| 303 } | 300 } |
| 304 } | 301 } |
| 305 | 302 |
| 306 TEST(RecordingSourceTest, DiscardableImagesBaseNonDiscardable) { | 303 TEST(RecordingSourceTest, DiscardableImagesBaseNonDiscardable) { |
| 307 gfx::Rect recorded_viewport(0, 0, 512, 512); | 304 gfx::Rect recorded_viewport(0, 0, 512, 512); |
| 308 | 305 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 334 gfx::Point(260, 260)); | 331 gfx::Point(260, 260)); |
| 335 recording_source->SetGenerateDiscardableImagesMetadata(true); | 332 recording_source->SetGenerateDiscardableImagesMetadata(true); |
| 336 recording_source->Rerecord(); | 333 recording_source->Rerecord(); |
| 337 | 334 |
| 338 scoped_refptr<RasterSource> raster_source = | 335 scoped_refptr<RasterSource> raster_source = |
| 339 CreateRasterSource(recording_source.get()); | 336 CreateRasterSource(recording_source.get()); |
| 340 | 337 |
| 341 // Tile sized iterators. These should find only one image. | 338 // Tile sized iterators. These should find only one image. |
| 342 { | 339 { |
| 343 std::vector<DrawImage> images; | 340 std::vector<DrawImage> images; |
| 344 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), | 341 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 256, 256), 1.f, |
| 345 gfx::SizeF(1.f, 1.f), &images); | 342 &images); |
| 346 EXPECT_EQ(1u, images.size()); | 343 EXPECT_EQ(1u, images.size()); |
| 347 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); | 344 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); |
| 348 } | 345 } |
| 349 // Shifted tile sized iterators. These should find only one image. | 346 // Shifted tile sized iterators. These should find only one image. |
| 350 { | 347 { |
| 351 std::vector<DrawImage> images; | 348 std::vector<DrawImage> images; |
| 352 raster_source->GetDiscardableImagesInRect(gfx::Rect(260, 260, 256, 256), | 349 raster_source->GetDiscardableImagesInRect(gfx::Rect(260, 260, 256, 256), |
| 353 gfx::SizeF(1.f, 1.f), &images); | 350 1.f, &images); |
| 354 EXPECT_EQ(1u, images.size()); | 351 EXPECT_EQ(1u, images.size()); |
| 355 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); | 352 EXPECT_TRUE(images[0].image() == discardable_image[1][1]); |
| 356 } | 353 } |
| 357 // Ensure there's no discardable images in the empty cell | 354 // Ensure there's no discardable images in the empty cell |
| 358 { | 355 { |
| 359 std::vector<DrawImage> images; | 356 std::vector<DrawImage> images; |
| 360 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 256, 256, 256), | 357 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 256, 256, 256), 1.f, |
| 361 gfx::SizeF(1.f, 1.f), &images); | 358 &images); |
| 362 EXPECT_TRUE(images.empty()); | 359 EXPECT_TRUE(images.empty()); |
| 363 } | 360 } |
| 364 // Layer sized iterators. These should find three images. | 361 // Layer sized iterators. These should find three images. |
| 365 { | 362 { |
| 366 std::vector<DrawImage> images; | 363 std::vector<DrawImage> images; |
| 367 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 512, 512), | 364 raster_source->GetDiscardableImagesInRect(gfx::Rect(0, 0, 512, 512), 1.f, |
| 368 gfx::SizeF(1.f, 1.f), &images); | 365 &images); |
| 369 EXPECT_EQ(3u, images.size()); | 366 EXPECT_EQ(3u, images.size()); |
| 370 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); | 367 EXPECT_TRUE(images[0].image() == discardable_image[0][0]); |
| 371 EXPECT_TRUE(images[1].image() == discardable_image[0][1]); | 368 EXPECT_TRUE(images[1].image() == discardable_image[0][1]); |
| 372 EXPECT_TRUE(images[2].image() == discardable_image[1][1]); | 369 EXPECT_TRUE(images[2].image() == discardable_image[1][1]); |
| 373 } | 370 } |
| 374 } | 371 } |
| 375 | 372 |
| 376 } // namespace | 373 } // namespace |
| 377 } // namespace cc | 374 } // namespace cc |
| OLD | NEW |