| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include "TiledLayerChromium.h" | 7 #include "TiledLayerChromium.h" |
| 8 | 8 |
| 9 #include "BitmapCanvasLayerTextureUpdater.h" | 9 #include "BitmapCanvasLayerTextureUpdater.h" |
| 10 #include "CCAnimationTestCommon.h" | 10 #include "CCAnimationTestCommon.h" |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); | 174 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); |
| 175 ScopedFakeCCTiledLayerImpl layerImpl(1); | 175 ScopedFakeCCTiledLayerImpl layerImpl(1); |
| 176 | 176 |
| 177 // The tile size is 100x100, so this invalidates and then paints two tiles. | 177 // The tile size is 100x100, so this invalidates and then paints two tiles. |
| 178 layer->setBounds(IntSize(100, 200)); | 178 layer->setBounds(IntSize(100, 200)); |
| 179 layer->setVisibleContentRect(IntRect(0, 0, 100, 200)); | 179 layer->setVisibleContentRect(IntRect(0, 0, 100, 200)); |
| 180 layer->invalidateContentRect(IntRect(0, 0, 100, 200)); | 180 layer->invalidateContentRect(IntRect(0, 0, 100, 200)); |
| 181 updateAndPush(layer.get(), layerImpl.get()); | 181 updateAndPush(layer.get(), layerImpl.get()); |
| 182 | 182 |
| 183 // We should have both tiles on the impl side. | 183 // We should have both tiles on the impl side. |
| 184 EXPECT_TRUE(layerImpl->hasTileAt(0, 0)); | 184 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 185 EXPECT_TRUE(layerImpl->hasTileAt(0, 1)); | 185 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 186 | 186 |
| 187 // Invalidates both tiles, but then only update one of them. | 187 // Invalidates both tiles, but then only update one of them. |
| 188 layer->setBounds(IntSize(100, 200)); | 188 layer->setBounds(IntSize(100, 200)); |
| 189 layer->setVisibleContentRect(IntRect(0, 0, 100, 100)); | 189 layer->setVisibleContentRect(IntRect(0, 0, 100, 100)); |
| 190 layer->invalidateContentRect(IntRect(0, 0, 100, 200)); | 190 layer->invalidateContentRect(IntRect(0, 0, 100, 200)); |
| 191 updateAndPush(layer.get(), layerImpl.get()); | 191 updateAndPush(layer.get(), layerImpl.get()); |
| 192 | 192 |
| 193 // We should only have the first tile since the other tile was invalidated b
ut not painted. | 193 // We should only have the first tile since the other tile was invalidated b
ut not painted. |
| 194 EXPECT_TRUE(layerImpl->hasTileAt(0, 0)); | 194 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 195 EXPECT_FALSE(layerImpl->hasTileAt(0, 1)); | 195 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 196 } | 196 } |
| 197 | 197 |
| 198 TEST_F(TiledLayerChromiumTest, pushOccludedDirtyTiles) | 198 TEST_F(TiledLayerChromiumTest, pushOccludedDirtyTiles) |
| 199 { | 199 { |
| 200 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); | 200 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); |
| 201 ScopedFakeCCTiledLayerImpl layerImpl(1); | 201 ScopedFakeCCTiledLayerImpl layerImpl(1); |
| 202 TestCCOcclusionTracker occluded; | 202 TestCCOcclusionTracker occluded; |
| 203 m_occlusion = &occluded; | 203 m_occlusion = &occluded; |
| 204 | 204 |
| 205 // The tile size is 100x100, so this invalidates and then paints two tiles. | 205 // The tile size is 100x100, so this invalidates and then paints two tiles. |
| 206 layer->setBounds(IntSize(100, 200)); | 206 layer->setBounds(IntSize(100, 200)); |
| 207 layer->setVisibleContentRect(IntRect(0, 0, 100, 200)); | 207 layer->setVisibleContentRect(IntRect(0, 0, 100, 200)); |
| 208 layer->invalidateContentRect(IntRect(0, 0, 100, 200)); | 208 layer->invalidateContentRect(IntRect(0, 0, 100, 200)); |
| 209 updateAndPush(layer.get(), layerImpl.get()); | 209 updateAndPush(layer.get(), layerImpl.get()); |
| 210 | 210 |
| 211 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 211 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 212 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000, 1
); | 212 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000, 1
); |
| 213 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 213 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 214 | 214 |
| 215 // We should have both tiles on the impl side. | 215 // We should have both tiles on the impl side. |
| 216 EXPECT_TRUE(layerImpl->hasTileAt(0, 0)); | 216 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 217 EXPECT_TRUE(layerImpl->hasTileAt(0, 1)); | 217 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 218 | 218 |
| 219 // Invalidates part of the top tile... | 219 // Invalidates part of the top tile... |
| 220 layer->invalidateContentRect(IntRect(0, 0, 50, 50)); | 220 layer->invalidateContentRect(IntRect(0, 0, 50, 50)); |
| 221 // ....but the area is occluded. | 221 // ....but the area is occluded. |
| 222 occluded.setOcclusion(IntRect(0, 0, 50, 50)); | 222 occluded.setOcclusion(IntRect(0, 0, 50, 50)); |
| 223 updateAndPush(layer.get(), layerImpl.get()); | 223 updateAndPush(layer.get(), layerImpl.get()); |
| 224 | 224 |
| 225 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); | 225 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1); |
| 226 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
2500, 1); | 226 EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 +
2500, 1); |
| 227 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); | 227 EXPECT_EQ(0, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 228 | 228 |
| 229 // We should still have both tiles, as part of the top tile is still unocclu
ded. | 229 // We should still have both tiles, as part of the top tile is still unocclu
ded. |
| 230 EXPECT_TRUE(layerImpl->hasTileAt(0, 0)); | 230 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 231 EXPECT_TRUE(layerImpl->hasTileAt(0, 1)); | 231 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 232 } | 232 } |
| 233 | 233 |
| 234 TEST_F(TiledLayerChromiumTest, pushDeletedTiles) | 234 TEST_F(TiledLayerChromiumTest, pushDeletedTiles) |
| 235 { | 235 { |
| 236 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); | 236 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); |
| 237 ScopedFakeCCTiledLayerImpl layerImpl(1); | 237 ScopedFakeCCTiledLayerImpl layerImpl(1); |
| 238 | 238 |
| 239 // The tile size is 100x100, so this invalidates and then paints two tiles. | 239 // The tile size is 100x100, so this invalidates and then paints two tiles. |
| 240 layer->setBounds(IntSize(100, 200)); | 240 layer->setBounds(IntSize(100, 200)); |
| 241 layer->setVisibleContentRect(IntRect(0, 0, 100, 200)); | 241 layer->setVisibleContentRect(IntRect(0, 0, 100, 200)); |
| 242 layer->invalidateContentRect(IntRect(0, 0, 100, 200)); | 242 layer->invalidateContentRect(IntRect(0, 0, 100, 200)); |
| 243 updateAndPush(layer.get(), layerImpl.get()); | 243 updateAndPush(layer.get(), layerImpl.get()); |
| 244 | 244 |
| 245 // We should have both tiles on the impl side. | 245 // We should have both tiles on the impl side. |
| 246 EXPECT_TRUE(layerImpl->hasTileAt(0, 0)); | 246 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 247 EXPECT_TRUE(layerImpl->hasTileAt(0, 1)); | 247 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 248 | 248 |
| 249 m_textureManager->clearPriorities(); | 249 m_textureManager->clearPriorities(); |
| 250 textureManagerClearAllMemory(m_textureManager.get(), m_resourceProvider.get(
)); | 250 textureManagerClearAllMemory(m_textureManager.get(), m_resourceProvider.get(
)); |
| 251 m_textureManager->setMaxMemoryLimitBytes(4*1024*1024); | 251 m_textureManager->setMaxMemoryLimitBytes(4*1024*1024); |
| 252 | 252 |
| 253 // This should drop the tiles on the impl thread. | 253 // This should drop the tiles on the impl thread. |
| 254 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 254 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
| 255 | 255 |
| 256 // We should now have no textures on the impl thread. | 256 // We should now have no textures on the impl thread. |
| 257 EXPECT_FALSE(layerImpl->hasTileAt(0, 0)); | 257 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 258 EXPECT_FALSE(layerImpl->hasTileAt(0, 1)); | 258 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 259 | 259 |
| 260 // This should recreate and update one of the deleted textures. | 260 // This should recreate and update one of the deleted textures. |
| 261 layer->setVisibleContentRect(IntRect(0, 0, 100, 100)); | 261 layer->setVisibleContentRect(IntRect(0, 0, 100, 100)); |
| 262 updateAndPush(layer.get(), layerImpl.get()); | 262 updateAndPush(layer.get(), layerImpl.get()); |
| 263 | 263 |
| 264 // We should have one tiles on the impl side. | 264 // We should have one tiles on the impl side. |
| 265 EXPECT_TRUE(layerImpl->hasTileAt(0, 0)); | 265 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 266 EXPECT_FALSE(layerImpl->hasTileAt(0, 1)); | 266 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 267 } | 267 } |
| 268 | 268 |
| 269 TEST_F(TiledLayerChromiumTest, pushIdlePaintTiles) | 269 TEST_F(TiledLayerChromiumTest, pushIdlePaintTiles) |
| 270 { | 270 { |
| 271 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); | 271 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); |
| 272 ScopedFakeCCTiledLayerImpl layerImpl(1); | 272 ScopedFakeCCTiledLayerImpl layerImpl(1); |
| 273 | 273 |
| 274 // The tile size is 100x100. Setup 5x5 tiles with one visible tile in the ce
nter. | 274 // The tile size is 100x100. Setup 5x5 tiles with one visible tile in the ce
nter. |
| 275 // This paints 1 visible of the 25 invalid tiles. | 275 // This paints 1 visible of the 25 invalid tiles. |
| 276 layer->setBounds(IntSize(500, 500)); | 276 layer->setBounds(IntSize(500, 500)); |
| 277 layer->setVisibleContentRect(IntRect(200, 200, 100, 100)); | 277 layer->setVisibleContentRect(IntRect(200, 200, 100, 100)); |
| 278 layer->invalidateContentRect(IntRect(0, 0, 500, 500)); | 278 layer->invalidateContentRect(IntRect(0, 0, 500, 500)); |
| 279 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 279 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); |
| 280 // We should need idle-painting for surrounding tiles. | 280 // We should need idle-painting for surrounding tiles. |
| 281 EXPECT_TRUE(needsUpdate); | 281 EXPECT_TRUE(needsUpdate); |
| 282 | 282 |
| 283 // We should have one tile on the impl side. | 283 // We should have one tile on the impl side. |
| 284 EXPECT_TRUE(layerImpl->hasTileAt(2, 2)); | 284 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(2, 2)); |
| 285 | 285 |
| 286 // For the next four updates, we should detect we still need idle painting. | 286 // For the next four updates, we should detect we still need idle painting. |
| 287 for (int i = 0; i < 4; i++) { | 287 for (int i = 0; i < 4; i++) { |
| 288 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 288 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); |
| 289 EXPECT_TRUE(needsUpdate); | 289 EXPECT_TRUE(needsUpdate); |
| 290 } | 290 } |
| 291 | 291 |
| 292 // We should have one tile surrounding the visible tile on all sides, but no
other tiles. | 292 // We should have one tile surrounding the visible tile on all sides, but no
other tiles. |
| 293 IntRect idlePaintTiles(1, 1, 3, 3); | 293 IntRect idlePaintTiles(1, 1, 3, 3); |
| 294 for (int i = 0; i < 5; i++) { | 294 for (int i = 0; i < 5; i++) { |
| 295 for (int j = 0; j < 5; j++) | 295 for (int j = 0; j < 5; j++) |
| 296 EXPECT_EQ(layerImpl->hasTileAt(i, j), idlePaintTiles.contains(i, j))
; | 296 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(i, j), idlePaintTiles.co
ntains(i, j)); |
| 297 } | 297 } |
| 298 | 298 |
| 299 // We should always finish painting eventually. | 299 // We should always finish painting eventually. |
| 300 for (int i = 0; i < 20; i++) | 300 for (int i = 0; i < 20; i++) |
| 301 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 301 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); |
| 302 EXPECT_FALSE(needsUpdate); | 302 EXPECT_FALSE(needsUpdate); |
| 303 } | 303 } |
| 304 | 304 |
| 305 TEST_F(TiledLayerChromiumTest, pushTilesAfterIdlePaintFailed) | 305 TEST_F(TiledLayerChromiumTest, pushTilesAfterIdlePaintFailed) |
| 306 { | 306 { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 335 m_textureManager->setMaxMemoryLimitBytes(1024 * 1024); | 335 m_textureManager->setMaxMemoryLimitBytes(1024 * 1024); |
| 336 | 336 |
| 337 // Now idle paint layer2. We are going to run out of memory though! | 337 // Now idle paint layer2. We are going to run out of memory though! |
| 338 // Oh well, commit the frame and push. | 338 // Oh well, commit the frame and push. |
| 339 for (int i = 0; i < 4; i++) { | 339 for (int i = 0; i < 4; i++) { |
| 340 needsUpdate = updateAndPush(layer1.get(), layerImpl1.get(), | 340 needsUpdate = updateAndPush(layer1.get(), layerImpl1.get(), |
| 341 layer2.get(), layerImpl2.get()); | 341 layer2.get(), layerImpl2.get()); |
| 342 } | 342 } |
| 343 | 343 |
| 344 // Sanity check, we should have textures for the big layer. | 344 // Sanity check, we should have textures for the big layer. |
| 345 EXPECT_TRUE(layerImpl1->hasTextureIdForTileAt(0, 0)); | 345 EXPECT_TRUE(layerImpl1->hasResourceIdForTileAt(0, 0)); |
| 346 EXPECT_TRUE(layerImpl1->hasTextureIdForTileAt(0, 23)); | 346 EXPECT_TRUE(layerImpl1->hasResourceIdForTileAt(0, 23)); |
| 347 | 347 |
| 348 // We should only have the first two tiles from layer2 since | 348 // We should only have the first two tiles from layer2 since |
| 349 // it failed to idle update the last tile. | 349 // it failed to idle update the last tile. |
| 350 EXPECT_TRUE(layerImpl2->hasTileAt(0, 0)); | 350 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 0)); |
| 351 EXPECT_TRUE(layerImpl2->hasTextureIdForTileAt(0, 0)); | 351 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 0)); |
| 352 EXPECT_TRUE(layerImpl2->hasTileAt(0, 1)); | 352 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 1)); |
| 353 EXPECT_TRUE(layerImpl2->hasTextureIdForTileAt(0, 1)); | 353 EXPECT_TRUE(layerImpl2->hasResourceIdForTileAt(0, 1)); |
| 354 | 354 |
| 355 EXPECT_FALSE(needsUpdate); | 355 EXPECT_FALSE(needsUpdate); |
| 356 EXPECT_FALSE(layerImpl2->hasTileAt(0, 2)); | 356 EXPECT_FALSE(layerImpl2->hasResourceIdForTileAt(0, 2)); |
| 357 } | 357 } |
| 358 | 358 |
| 359 TEST_F(TiledLayerChromiumTest, pushIdlePaintedOccludedTiles) | 359 TEST_F(TiledLayerChromiumTest, pushIdlePaintedOccludedTiles) |
| 360 { | 360 { |
| 361 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); | 361 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); |
| 362 ScopedFakeCCTiledLayerImpl layerImpl(1); | 362 ScopedFakeCCTiledLayerImpl layerImpl(1); |
| 363 TestCCOcclusionTracker occluded; | 363 TestCCOcclusionTracker occluded; |
| 364 m_occlusion = &occluded; | 364 m_occlusion = &occluded; |
| 365 | 365 |
| 366 // The tile size is 100x100, so this invalidates one occluded tile, culls it
during paint, but prepaints it. | 366 // The tile size is 100x100, so this invalidates one occluded tile, culls it
during paint, but prepaints it. |
| 367 occluded.setOcclusion(IntRect(0, 0, 100, 100)); | 367 occluded.setOcclusion(IntRect(0, 0, 100, 100)); |
| 368 | 368 |
| 369 layer->setBounds(IntSize(100, 100)); | 369 layer->setBounds(IntSize(100, 100)); |
| 370 layer->setVisibleContentRect(IntRect(0, 0, 100, 100)); | 370 layer->setVisibleContentRect(IntRect(0, 0, 100, 100)); |
| 371 updateAndPush(layer.get(), layerImpl.get()); | 371 updateAndPush(layer.get(), layerImpl.get()); |
| 372 | 372 |
| 373 // We should have the prepainted tile on the impl side, but culled it during
paint. | 373 // We should have the prepainted tile on the impl side, but culled it during
paint. |
| 374 EXPECT_TRUE(layerImpl->hasTileAt(0, 0)); | 374 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 375 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); | 375 EXPECT_EQ(1, occluded.overdrawMetrics().tilesCulledForUpload()); |
| 376 } | 376 } |
| 377 | 377 |
| 378 TEST_F(TiledLayerChromiumTest, pushTilesMarkedDirtyDuringPaint) | 378 TEST_F(TiledLayerChromiumTest, pushTilesMarkedDirtyDuringPaint) |
| 379 { | 379 { |
| 380 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); | 380 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); |
| 381 ScopedFakeCCTiledLayerImpl layerImpl(1); | 381 ScopedFakeCCTiledLayerImpl layerImpl(1); |
| 382 | 382 |
| 383 // The tile size is 100x100, so this invalidates and then paints two tiles. | 383 // The tile size is 100x100, so this invalidates and then paints two tiles. |
| 384 // However, during the paint, we invalidate one of the tiles. This should | 384 // However, during the paint, we invalidate one of the tiles. This should |
| 385 // not prevent the tile from being pushed. | 385 // not prevent the tile from being pushed. |
| 386 layer->fakeLayerTextureUpdater()->setRectToInvalidate(IntRect(0, 50, 100, 50
), layer.get()); | 386 layer->fakeLayerTextureUpdater()->setRectToInvalidate(IntRect(0, 50, 100, 50
), layer.get()); |
| 387 layer->setBounds(IntSize(100, 200)); | 387 layer->setBounds(IntSize(100, 200)); |
| 388 layer->setVisibleContentRect(IntRect(0, 0, 100, 200)); | 388 layer->setVisibleContentRect(IntRect(0, 0, 100, 200)); |
| 389 updateAndPush(layer.get(), layerImpl.get()); | 389 updateAndPush(layer.get(), layerImpl.get()); |
| 390 | 390 |
| 391 // We should have both tiles on the impl side. | 391 // We should have both tiles on the impl side. |
| 392 EXPECT_TRUE(layerImpl->hasTileAt(0, 0)); | 392 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 393 EXPECT_TRUE(layerImpl->hasTileAt(0, 1)); | 393 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 394 } | 394 } |
| 395 | 395 |
| 396 TEST_F(TiledLayerChromiumTest, pushTilesLayerMarkedDirtyDuringPaintOnNextLayer) | 396 TEST_F(TiledLayerChromiumTest, pushTilesLayerMarkedDirtyDuringPaintOnNextLayer) |
| 397 { | 397 { |
| 398 RefPtr<FakeTiledLayerChromium> layer1 = adoptRef(new FakeTiledLayerChromium(
m_textureManager.get())); | 398 RefPtr<FakeTiledLayerChromium> layer1 = adoptRef(new FakeTiledLayerChromium(
m_textureManager.get())); |
| 399 RefPtr<FakeTiledLayerChromium> layer2 = adoptRef(new FakeTiledLayerChromium(
m_textureManager.get())); | 399 RefPtr<FakeTiledLayerChromium> layer2 = adoptRef(new FakeTiledLayerChromium(
m_textureManager.get())); |
| 400 ScopedFakeCCTiledLayerImpl layer1Impl(1); | 400 ScopedFakeCCTiledLayerImpl layer1Impl(1); |
| 401 ScopedFakeCCTiledLayerImpl layer2Impl(2); | 401 ScopedFakeCCTiledLayerImpl layer2Impl(2); |
| 402 | 402 |
| 403 // Invalidate a tile on layer1, during update of layer 2. | 403 // Invalidate a tile on layer1, during update of layer 2. |
| 404 layer2->fakeLayerTextureUpdater()->setRectToInvalidate(IntRect(0, 50, 100, 5
0), layer1.get()); | 404 layer2->fakeLayerTextureUpdater()->setRectToInvalidate(IntRect(0, 50, 100, 5
0), layer1.get()); |
| 405 layer1->setBounds(IntSize(100, 200)); | 405 layer1->setBounds(IntSize(100, 200)); |
| 406 layer1->setVisibleContentRect(IntRect(0, 0, 100, 200)); | 406 layer1->setVisibleContentRect(IntRect(0, 0, 100, 200)); |
| 407 layer2->setBounds(IntSize(100, 200)); | 407 layer2->setBounds(IntSize(100, 200)); |
| 408 layer2->setVisibleContentRect(IntRect(0, 0, 100, 200)); | 408 layer2->setVisibleContentRect(IntRect(0, 0, 100, 200)); |
| 409 updateAndPush(layer1.get(), layer1Impl.get(), | 409 updateAndPush(layer1.get(), layer1Impl.get(), |
| 410 layer2.get(), layer2Impl.get()); | 410 layer2.get(), layer2Impl.get()); |
| 411 | 411 |
| 412 // We should have both tiles on the impl side for all layers. | 412 // We should have both tiles on the impl side for all layers. |
| 413 EXPECT_TRUE(layer1Impl->hasTileAt(0, 0)); | 413 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 0)); |
| 414 EXPECT_TRUE(layer1Impl->hasTileAt(0, 1)); | 414 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 1)); |
| 415 EXPECT_TRUE(layer2Impl->hasTileAt(0, 0)); | 415 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 0)); |
| 416 EXPECT_TRUE(layer2Impl->hasTileAt(0, 1)); | 416 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 1)); |
| 417 } | 417 } |
| 418 | 418 |
| 419 TEST_F(TiledLayerChromiumTest, pushTilesLayerMarkedDirtyDuringPaintOnPreviousLay
er) | 419 TEST_F(TiledLayerChromiumTest, pushTilesLayerMarkedDirtyDuringPaintOnPreviousLay
er) |
| 420 { | 420 { |
| 421 RefPtr<FakeTiledLayerChromium> layer1 = adoptRef(new FakeTiledLayerChromium(
m_textureManager.get())); | 421 RefPtr<FakeTiledLayerChromium> layer1 = adoptRef(new FakeTiledLayerChromium(
m_textureManager.get())); |
| 422 RefPtr<FakeTiledLayerChromium> layer2 = adoptRef(new FakeTiledLayerChromium(
m_textureManager.get())); | 422 RefPtr<FakeTiledLayerChromium> layer2 = adoptRef(new FakeTiledLayerChromium(
m_textureManager.get())); |
| 423 ScopedFakeCCTiledLayerImpl layer1Impl(1); | 423 ScopedFakeCCTiledLayerImpl layer1Impl(1); |
| 424 ScopedFakeCCTiledLayerImpl layer2Impl(2); | 424 ScopedFakeCCTiledLayerImpl layer2Impl(2); |
| 425 | 425 |
| 426 layer1->fakeLayerTextureUpdater()->setRectToInvalidate(IntRect(0, 50, 100, 5
0), layer2.get()); | 426 layer1->fakeLayerTextureUpdater()->setRectToInvalidate(IntRect(0, 50, 100, 5
0), layer2.get()); |
| 427 layer1->setBounds(IntSize(100, 200)); | 427 layer1->setBounds(IntSize(100, 200)); |
| 428 layer1->setVisibleContentRect(IntRect(0, 0, 100, 200)); | 428 layer1->setVisibleContentRect(IntRect(0, 0, 100, 200)); |
| 429 layer2->setBounds(IntSize(100, 200)); | 429 layer2->setBounds(IntSize(100, 200)); |
| 430 layer2->setVisibleContentRect(IntRect(0, 0, 100, 200)); | 430 layer2->setVisibleContentRect(IntRect(0, 0, 100, 200)); |
| 431 updateAndPush(layer1.get(), layer1Impl.get(), | 431 updateAndPush(layer1.get(), layer1Impl.get(), |
| 432 layer2.get(), layer2Impl.get()); | 432 layer2.get(), layer2Impl.get()); |
| 433 | 433 |
| 434 // We should have both tiles on the impl side for all layers. | 434 // We should have both tiles on the impl side for all layers. |
| 435 EXPECT_TRUE(layer1Impl->hasTileAt(0, 0)); | 435 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 0)); |
| 436 EXPECT_TRUE(layer1Impl->hasTileAt(0, 1)); | 436 EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 1)); |
| 437 EXPECT_TRUE(layer2Impl->hasTileAt(0, 0)); | 437 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 0)); |
| 438 EXPECT_TRUE(layer2Impl->hasTileAt(0, 1)); | 438 EXPECT_TRUE(layer2Impl->hasResourceIdForTileAt(0, 1)); |
| 439 } | 439 } |
| 440 | 440 |
| 441 TEST_F(TiledLayerChromiumTest, paintSmallAnimatedLayersImmediately) | 441 TEST_F(TiledLayerChromiumTest, paintSmallAnimatedLayersImmediately) |
| 442 { | 442 { |
| 443 // Create a CCLayerTreeHost that has the right viewportsize, | 443 // Create a CCLayerTreeHost that has the right viewportsize, |
| 444 // so the layer is considered small enough. | 444 // so the layer is considered small enough. |
| 445 FakeCCLayerTreeHostClient fakeCCLayerTreeHostClient; | 445 FakeCCLayerTreeHostClient fakeCCLayerTreeHostClient; |
| 446 OwnPtr<CCLayerTreeHost> ccLayerTreeHost = CCLayerTreeHost::create(&fakeCCLay
erTreeHostClient, CCLayerTreeSettings()); | 446 OwnPtr<CCLayerTreeHost> ccLayerTreeHost = CCLayerTreeHost::create(&fakeCCLay
erTreeHostClient, CCLayerTreeSettings()); |
| 447 | 447 |
| 448 bool runOutOfMemory[2] = {false, true}; | 448 bool runOutOfMemory[2] = {false, true}; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 layer->update(*m_queue.get(), 0, m_stats); | 482 layer->update(*m_queue.get(), 0, m_stats); |
| 483 updateTextures(); | 483 updateTextures(); |
| 484 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 484 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
| 485 | 485 |
| 486 // We should have all the tiles for the small animated layer. | 486 // We should have all the tiles for the small animated layer. |
| 487 // We should still have the visible tiles when we didn't | 487 // We should still have the visible tiles when we didn't |
| 488 // have enough memory for all the tiles. | 488 // have enough memory for all the tiles. |
| 489 if (!runOutOfMemory[i]) { | 489 if (!runOutOfMemory[i]) { |
| 490 for (int i = 0; i < 4; ++i) { | 490 for (int i = 0; i < 4; ++i) { |
| 491 for (int j = 0; j < 4; ++j) | 491 for (int j = 0; j < 4; ++j) |
| 492 EXPECT_TRUE(layerImpl->hasTileAt(i, j)); | 492 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(i, j)); |
| 493 } | 493 } |
| 494 } else { | 494 } else { |
| 495 for (int i = 0; i < 8; ++i) { | 495 for (int i = 0; i < 8; ++i) { |
| 496 for (int j = 0; j < 4; ++j) | 496 for (int j = 0; j < 4; ++j) |
| 497 EXPECT_EQ(layerImpl->hasTileAt(i, j), i < 4); | 497 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(i, j), i < 4); |
| 498 } | 498 } |
| 499 } | 499 } |
| 500 } | 500 } |
| 501 ccLayerTreeHost.clear(); | 501 ccLayerTreeHost.clear(); |
| 502 } | 502 } |
| 503 | 503 |
| 504 TEST_F(TiledLayerChromiumTest, idlePaintOutOfMemory) | 504 TEST_F(TiledLayerChromiumTest, idlePaintOutOfMemory) |
| 505 { | 505 { |
| 506 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); | 506 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); |
| 507 ScopedFakeCCTiledLayerImpl layerImpl(1); | 507 ScopedFakeCCTiledLayerImpl layerImpl(1); |
| 508 | 508 |
| 509 // We have enough memory for only the visible rect, so we will run out of me
mory in first idle paint. | 509 // We have enough memory for only the visible rect, so we will run out of me
mory in first idle paint. |
| 510 int memoryLimit = 4 * 100 * 100; // 1 tiles, 4 bytes per pixel. | 510 int memoryLimit = 4 * 100 * 100; // 1 tiles, 4 bytes per pixel. |
| 511 m_textureManager->setMaxMemoryLimitBytes(memoryLimit); | 511 m_textureManager->setMaxMemoryLimitBytes(memoryLimit); |
| 512 | 512 |
| 513 // The tile size is 100x100, so this invalidates and then paints two tiles. | 513 // The tile size is 100x100, so this invalidates and then paints two tiles. |
| 514 bool needsUpdate = false; | 514 bool needsUpdate = false; |
| 515 layer->setBounds(IntSize(300, 300)); | 515 layer->setBounds(IntSize(300, 300)); |
| 516 layer->setVisibleContentRect(IntRect(100, 100, 100, 100)); | 516 layer->setVisibleContentRect(IntRect(100, 100, 100, 100)); |
| 517 for (int i = 0; i < 2; i++) | 517 for (int i = 0; i < 2; i++) |
| 518 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 518 needsUpdate = updateAndPush(layer.get(), layerImpl.get()); |
| 519 | 519 |
| 520 // Idle-painting should see no more priority tiles for painting. | 520 // Idle-painting should see no more priority tiles for painting. |
| 521 EXPECT_FALSE(needsUpdate); | 521 EXPECT_FALSE(needsUpdate); |
| 522 | 522 |
| 523 // We should have one tile on the impl side. | 523 // We should have one tile on the impl side. |
| 524 EXPECT_TRUE(layerImpl->hasTileAt(1, 1)); | 524 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 1)); |
| 525 } | 525 } |
| 526 | 526 |
| 527 TEST_F(TiledLayerChromiumTest, idlePaintZeroSizedLayer) | 527 TEST_F(TiledLayerChromiumTest, idlePaintZeroSizedLayer) |
| 528 { | 528 { |
| 529 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); | 529 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); |
| 530 ScopedFakeCCTiledLayerImpl layerImpl(1); | 530 ScopedFakeCCTiledLayerImpl layerImpl(1); |
| 531 | 531 |
| 532 bool animating[2] = {false, true}; | 532 bool animating[2] = {false, true}; |
| 533 for (int i = 0; i < 2; i++) { | 533 for (int i = 0; i < 2; i++) { |
| 534 // Pretend the layer is animating. | 534 // Pretend the layer is animating. |
| 535 layer->setDrawTransformIsAnimating(animating[i]); | 535 layer->setDrawTransformIsAnimating(animating[i]); |
| 536 | 536 |
| 537 // The layer's bounds are empty. | 537 // The layer's bounds are empty. |
| 538 // Empty layers don't paint or idle-paint. | 538 // Empty layers don't paint or idle-paint. |
| 539 layer->setBounds(IntSize()); | 539 layer->setBounds(IntSize()); |
| 540 layer->setVisibleContentRect(IntRect()); | 540 layer->setVisibleContentRect(IntRect()); |
| 541 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 541 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); |
| 542 | 542 |
| 543 // Empty layers don't have tiles. | 543 // Empty layers don't have tiles. |
| 544 EXPECT_EQ(0u, layer->numPaintedTiles()); | 544 EXPECT_EQ(0u, layer->numPaintedTiles()); |
| 545 | 545 |
| 546 // Empty layers don't need prepaint. | 546 // Empty layers don't need prepaint. |
| 547 EXPECT_FALSE(needsUpdate); | 547 EXPECT_FALSE(needsUpdate); |
| 548 | 548 |
| 549 // Empty layers don't have tiles. | 549 // Empty layers don't have tiles. |
| 550 EXPECT_FALSE(layerImpl->hasTileAt(0, 0)); | 550 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 551 } | 551 } |
| 552 } | 552 } |
| 553 | 553 |
| 554 TEST_F(TiledLayerChromiumTest, idlePaintNonVisibleLayers) | 554 TEST_F(TiledLayerChromiumTest, idlePaintNonVisibleLayers) |
| 555 { | 555 { |
| 556 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); | 556 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); |
| 557 ScopedFakeCCTiledLayerImpl layerImpl(1); | 557 ScopedFakeCCTiledLayerImpl layerImpl(1); |
| 558 | 558 |
| 559 // Alternate between not visible and visible. | 559 // Alternate between not visible and visible. |
| 560 IntRect v(0, 0, 100, 100); | 560 IntRect v(0, 0, 100, 100); |
| 561 IntRect nv(0, 0, 0, 0); | 561 IntRect nv(0, 0, 0, 0); |
| 562 IntRect visibleRect[10] = {nv, nv, v, v, nv, nv, v, v, nv, nv}; | 562 IntRect visibleRect[10] = {nv, nv, v, v, nv, nv, v, v, nv, nv}; |
| 563 bool invalidate[10] = {true, true, true, true, true, true, true, true, fals
e, false }; | 563 bool invalidate[10] = {true, true, true, true, true, true, true, true, fals
e, false }; |
| 564 | 564 |
| 565 // We should not have any tiles except for when the layer was visible | 565 // We should not have any tiles except for when the layer was visible |
| 566 // or after the layer was visible and we didn't invalidate. | 566 // or after the layer was visible and we didn't invalidate. |
| 567 bool haveTile[10] = { false, false, true, true, false, false, true, true, tr
ue, true }; | 567 bool haveTile[10] = { false, false, true, true, false, false, true, true, tr
ue, true }; |
| 568 | 568 |
| 569 for (int i = 0; i < 10; i++) { | 569 for (int i = 0; i < 10; i++) { |
| 570 layer->setBounds(IntSize(100, 100)); | 570 layer->setBounds(IntSize(100, 100)); |
| 571 layer->setVisibleContentRect(visibleRect[i]); | 571 layer->setVisibleContentRect(visibleRect[i]); |
| 572 | 572 |
| 573 if (invalidate[i]) | 573 if (invalidate[i]) |
| 574 layer->invalidateContentRect(IntRect(0, 0, 100, 100)); | 574 layer->invalidateContentRect(IntRect(0, 0, 100, 100)); |
| 575 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); | 575 bool needsUpdate = updateAndPush(layer.get(), layerImpl.get()); |
| 576 | 576 |
| 577 // We should never signal idle paint, as we painted the entire layer | 577 // We should never signal idle paint, as we painted the entire layer |
| 578 // or the layer was not visible. | 578 // or the layer was not visible. |
| 579 EXPECT_FALSE(needsUpdate); | 579 EXPECT_FALSE(needsUpdate); |
| 580 EXPECT_EQ(layerImpl->hasTileAt(0, 0), haveTile[i]); | 580 EXPECT_EQ(layerImpl->hasResourceIdForTileAt(0, 0), haveTile[i]); |
| 581 } | 581 } |
| 582 } | 582 } |
| 583 | 583 |
| 584 TEST_F(TiledLayerChromiumTest, invalidateFromPrepare) | 584 TEST_F(TiledLayerChromiumTest, invalidateFromPrepare) |
| 585 { | 585 { |
| 586 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); | 586 RefPtr<FakeTiledLayerChromium> layer = adoptRef(new FakeTiledLayerChromium(m
_textureManager.get())); |
| 587 ScopedFakeCCTiledLayerImpl layerImpl(1); | 587 ScopedFakeCCTiledLayerImpl layerImpl(1); |
| 588 | 588 |
| 589 // The tile size is 100x100, so this invalidates and then paints two tiles. | 589 // The tile size is 100x100, so this invalidates and then paints two tiles. |
| 590 layer->setBounds(IntSize(100, 200)); | 590 layer->setBounds(IntSize(100, 200)); |
| 591 layer->setVisibleContentRect(IntRect(0, 0, 100, 200)); | 591 layer->setVisibleContentRect(IntRect(0, 0, 100, 200)); |
| 592 updateAndPush(layer.get(), layerImpl.get()); | 592 updateAndPush(layer.get(), layerImpl.get()); |
| 593 | 593 |
| 594 // We should have both tiles on the impl side. | 594 // We should have both tiles on the impl side. |
| 595 EXPECT_TRUE(layerImpl->hasTileAt(0, 0)); | 595 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 596 EXPECT_TRUE(layerImpl->hasTileAt(0, 1)); | 596 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 597 | 597 |
| 598 layer->fakeLayerTextureUpdater()->clearPrepareCount(); | 598 layer->fakeLayerTextureUpdater()->clearPrepareCount(); |
| 599 // Invoke update again. As the layer is valid update shouldn't be invoked on | 599 // Invoke update again. As the layer is valid update shouldn't be invoked on |
| 600 // the LayerTextureUpdater. | 600 // the LayerTextureUpdater. |
| 601 updateAndPush(layer.get(), layerImpl.get()); | 601 updateAndPush(layer.get(), layerImpl.get()); |
| 602 EXPECT_EQ(0, layer->fakeLayerTextureUpdater()->prepareCount()); | 602 EXPECT_EQ(0, layer->fakeLayerTextureUpdater()->prepareCount()); |
| 603 | 603 |
| 604 // setRectToInvalidate triggers invalidateContentRect() being invoked from u
pdate. | 604 // setRectToInvalidate triggers invalidateContentRect() being invoked from u
pdate. |
| 605 layer->fakeLayerTextureUpdater()->setRectToInvalidate(IntRect(25, 25, 50, 50
), layer.get()); | 605 layer->fakeLayerTextureUpdater()->setRectToInvalidate(IntRect(25, 25, 50, 50
), layer.get()); |
| 606 layer->fakeLayerTextureUpdater()->clearPrepareCount(); | 606 layer->fakeLayerTextureUpdater()->clearPrepareCount(); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 666 // Invalidate the entire layer. | 666 // Invalidate the entire layer. |
| 667 layer->setNeedsDisplay(); | 667 layer->setNeedsDisplay(); |
| 668 EXPECT_FLOAT_RECT_EQ(FloatRect(0, 0, 100, 100), layer->lastNeedsDisplayRect(
)); | 668 EXPECT_FLOAT_RECT_EQ(FloatRect(0, 0, 100, 100), layer->lastNeedsDisplayRect(
)); |
| 669 | 669 |
| 670 // Push the tiles to the impl side and check that there is exactly one. | 670 // Push the tiles to the impl side and check that there is exactly one. |
| 671 layer->setTexturePriorities(m_priorityCalculator); | 671 layer->setTexturePriorities(m_priorityCalculator); |
| 672 m_textureManager->prioritizeTextures(); | 672 m_textureManager->prioritizeTextures(); |
| 673 layer->update(*m_queue.get(), 0, m_stats); | 673 layer->update(*m_queue.get(), 0, m_stats); |
| 674 updateTextures(); | 674 updateTextures(); |
| 675 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 675 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
| 676 EXPECT_TRUE(layerImpl->hasTileAt(0, 0)); | 676 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 677 EXPECT_FALSE(layerImpl->hasTileAt(0, 1)); | 677 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 678 EXPECT_FALSE(layerImpl->hasTileAt(1, 0)); | 678 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 0)); |
| 679 EXPECT_FALSE(layerImpl->hasTileAt(1, 1)); | 679 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 1)); |
| 680 | 680 |
| 681 // Change the contents scale and verify that the content rectangle requiring
painting | 681 // Change the contents scale and verify that the content rectangle requiring
painting |
| 682 // is not scaled. | 682 // is not scaled. |
| 683 layer->setContentsScale(2); | 683 layer->setContentsScale(2); |
| 684 layer->setVisibleContentRect(IntRect(0, 0, 200, 200)); | 684 layer->setVisibleContentRect(IntRect(0, 0, 200, 200)); |
| 685 EXPECT_FLOAT_RECT_EQ(FloatRect(0, 0, 100, 100), layer->lastNeedsDisplayRect(
)); | 685 EXPECT_FLOAT_RECT_EQ(FloatRect(0, 0, 100, 100), layer->lastNeedsDisplayRect(
)); |
| 686 | 686 |
| 687 // The impl side should get 2x2 tiles now. | 687 // The impl side should get 2x2 tiles now. |
| 688 layer->setTexturePriorities(m_priorityCalculator); | 688 layer->setTexturePriorities(m_priorityCalculator); |
| 689 m_textureManager->prioritizeTextures(); | 689 m_textureManager->prioritizeTextures(); |
| 690 layer->update(*m_queue.get(), 0, m_stats); | 690 layer->update(*m_queue.get(), 0, m_stats); |
| 691 updateTextures(); | 691 updateTextures(); |
| 692 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 692 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
| 693 EXPECT_TRUE(layerImpl->hasTileAt(0, 0)); | 693 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 694 EXPECT_TRUE(layerImpl->hasTileAt(0, 1)); | 694 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 695 EXPECT_TRUE(layerImpl->hasTileAt(1, 0)); | 695 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 0)); |
| 696 EXPECT_TRUE(layerImpl->hasTileAt(1, 1)); | 696 EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(1, 1)); |
| 697 | 697 |
| 698 // Invalidate the entire layer again, but do not paint. All tiles should be
gone now from the | 698 // Invalidate the entire layer again, but do not paint. All tiles should be
gone now from the |
| 699 // impl side. | 699 // impl side. |
| 700 layer->setNeedsDisplay(); | 700 layer->setNeedsDisplay(); |
| 701 layer->setTexturePriorities(m_priorityCalculator); | 701 layer->setTexturePriorities(m_priorityCalculator); |
| 702 m_textureManager->prioritizeTextures(); | 702 m_textureManager->prioritizeTextures(); |
| 703 | 703 |
| 704 layerPushPropertiesTo(layer.get(), layerImpl.get()); | 704 layerPushPropertiesTo(layer.get(), layerImpl.get()); |
| 705 EXPECT_FALSE(layerImpl->hasTileAt(0, 0)); | 705 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 0)); |
| 706 EXPECT_FALSE(layerImpl->hasTileAt(0, 1)); | 706 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(0, 1)); |
| 707 EXPECT_FALSE(layerImpl->hasTileAt(1, 0)); | 707 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 0)); |
| 708 EXPECT_FALSE(layerImpl->hasTileAt(1, 1)); | 708 EXPECT_FALSE(layerImpl->hasResourceIdForTileAt(1, 1)); |
| 709 } | 709 } |
| 710 | 710 |
| 711 TEST_F(TiledLayerChromiumTest, skipsDrawGetsReset) | 711 TEST_F(TiledLayerChromiumTest, skipsDrawGetsReset) |
| 712 { | 712 { |
| 713 FakeCCLayerTreeHostClient fakeCCLayerTreeHostClient; | 713 FakeCCLayerTreeHostClient fakeCCLayerTreeHostClient; |
| 714 OwnPtr<CCLayerTreeHost> ccLayerTreeHost = CCLayerTreeHost::create(&fakeCCLay
erTreeHostClient, CCLayerTreeSettings()); | 714 OwnPtr<CCLayerTreeHost> ccLayerTreeHost = CCLayerTreeHost::create(&fakeCCLay
erTreeHostClient, CCLayerTreeSettings()); |
| 715 ASSERT_TRUE(ccLayerTreeHost->initializeRendererIfNeeded()); | 715 ASSERT_TRUE(ccLayerTreeHost->initializeRendererIfNeeded()); |
| 716 | 716 |
| 717 // Create two 300 x 300 tiled layers. | 717 // Create two 300 x 300 tiled layers. |
| 718 IntSize contentBounds(300, 300); | 718 IntSize contentBounds(300, 300); |
| (...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1368 | 1368 |
| 1369 ScopedFakeCCTiledLayerImpl rootImpl(root->id()); | 1369 ScopedFakeCCTiledLayerImpl rootImpl(root->id()); |
| 1370 ScopedFakeCCTiledLayerImpl childImpl(child->id()); | 1370 ScopedFakeCCTiledLayerImpl childImpl(child->id()); |
| 1371 ScopedFakeCCTiledLayerImpl child2Impl(child2->id()); | 1371 ScopedFakeCCTiledLayerImpl child2Impl(child2->id()); |
| 1372 layerPushPropertiesTo(root.get(), rootImpl.get()); | 1372 layerPushPropertiesTo(root.get(), rootImpl.get()); |
| 1373 layerPushPropertiesTo(child.get(), childImpl.get()); | 1373 layerPushPropertiesTo(child.get(), childImpl.get()); |
| 1374 layerPushPropertiesTo(child2.get(), child2Impl.get()); | 1374 layerPushPropertiesTo(child2.get(), child2Impl.get()); |
| 1375 | 1375 |
| 1376 for (unsigned i = 0; i < 3; ++i) { | 1376 for (unsigned i = 0; i < 3; ++i) { |
| 1377 for (unsigned j = 0; j < 2; ++j) | 1377 for (unsigned j = 0; j < 2; ++j) |
| 1378 EXPECT_TRUE(rootImpl->hasTextureIdForTileAt(i, j)); | 1378 EXPECT_TRUE(rootImpl->hasResourceIdForTileAt(i, j)); |
| 1379 EXPECT_TRUE(childImpl->hasTextureIdForTileAt(i, 0)); | 1379 EXPECT_TRUE(childImpl->hasResourceIdForTileAt(i, 0)); |
| 1380 EXPECT_TRUE(child2Impl->hasTextureIdForTileAt(i, 0)); | 1380 EXPECT_TRUE(child2Impl->hasResourceIdForTileAt(i, 0)); |
| 1381 } | 1381 } |
| 1382 } | 1382 } |
| 1383 ccLayerTreeHost->commitComplete(); | 1383 ccLayerTreeHost->commitComplete(); |
| 1384 | 1384 |
| 1385 // With a memory limit that includes only the root layer (3x2 tiles) and hal
f the surface that | 1385 // With a memory limit that includes only the root layer (3x2 tiles) and hal
f the surface that |
| 1386 // the child layers draw into, the child layers will not be allocated. If th
e surface isn't | 1386 // the child layers draw into, the child layers will not be allocated. If th
e surface isn't |
| 1387 // accounted for, then one of the children would fit within the memory limit
. | 1387 // accounted for, then one of the children would fit within the memory limit
. |
| 1388 root->invalidateContentRect(rootRect); | 1388 root->invalidateContentRect(rootRect); |
| 1389 child->invalidateContentRect(childRect); | 1389 child->invalidateContentRect(childRect); |
| 1390 child2->invalidateContentRect(child2Rect); | 1390 child2->invalidateContentRect(child2Rect); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1403 | 1403 |
| 1404 ScopedFakeCCTiledLayerImpl rootImpl(root->id()); | 1404 ScopedFakeCCTiledLayerImpl rootImpl(root->id()); |
| 1405 ScopedFakeCCTiledLayerImpl childImpl(child->id()); | 1405 ScopedFakeCCTiledLayerImpl childImpl(child->id()); |
| 1406 ScopedFakeCCTiledLayerImpl child2Impl(child2->id()); | 1406 ScopedFakeCCTiledLayerImpl child2Impl(child2->id()); |
| 1407 layerPushPropertiesTo(root.get(), rootImpl.get()); | 1407 layerPushPropertiesTo(root.get(), rootImpl.get()); |
| 1408 layerPushPropertiesTo(child.get(), childImpl.get()); | 1408 layerPushPropertiesTo(child.get(), childImpl.get()); |
| 1409 layerPushPropertiesTo(child2.get(), child2Impl.get()); | 1409 layerPushPropertiesTo(child2.get(), child2Impl.get()); |
| 1410 | 1410 |
| 1411 for (unsigned i = 0; i < 3; ++i) { | 1411 for (unsigned i = 0; i < 3; ++i) { |
| 1412 for (unsigned j = 0; j < 2; ++j) | 1412 for (unsigned j = 0; j < 2; ++j) |
| 1413 EXPECT_TRUE(rootImpl->hasTextureIdForTileAt(i, j)); | 1413 EXPECT_TRUE(rootImpl->hasResourceIdForTileAt(i, j)); |
| 1414 EXPECT_FALSE(childImpl->hasTextureIdForTileAt(i, 0)); | 1414 EXPECT_FALSE(childImpl->hasResourceIdForTileAt(i, 0)); |
| 1415 EXPECT_FALSE(child2Impl->hasTextureIdForTileAt(i, 0)); | 1415 EXPECT_FALSE(child2Impl->hasResourceIdForTileAt(i, 0)); |
| 1416 } | 1416 } |
| 1417 } | 1417 } |
| 1418 ccLayerTreeHost->commitComplete(); | 1418 ccLayerTreeHost->commitComplete(); |
| 1419 | 1419 |
| 1420 // With a memory limit that includes only half the root layer, no contents w
ill be | 1420 // With a memory limit that includes only half the root layer, no contents w
ill be |
| 1421 // allocated. If render surface memory wasn't accounted for, there is enough
space | 1421 // allocated. If render surface memory wasn't accounted for, there is enough
space |
| 1422 // for one of the children layers, but they draw into a surface that can't b
e | 1422 // for one of the children layers, but they draw into a surface that can't b
e |
| 1423 // allocated. | 1423 // allocated. |
| 1424 root->invalidateContentRect(rootRect); | 1424 root->invalidateContentRect(rootRect); |
| 1425 child->invalidateContentRect(childRect); | 1425 child->invalidateContentRect(childRect); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1439 | 1439 |
| 1440 ScopedFakeCCTiledLayerImpl rootImpl(root->id()); | 1440 ScopedFakeCCTiledLayerImpl rootImpl(root->id()); |
| 1441 ScopedFakeCCTiledLayerImpl childImpl(child->id()); | 1441 ScopedFakeCCTiledLayerImpl childImpl(child->id()); |
| 1442 ScopedFakeCCTiledLayerImpl child2Impl(child2->id()); | 1442 ScopedFakeCCTiledLayerImpl child2Impl(child2->id()); |
| 1443 layerPushPropertiesTo(root.get(), rootImpl.get()); | 1443 layerPushPropertiesTo(root.get(), rootImpl.get()); |
| 1444 layerPushPropertiesTo(child.get(), childImpl.get()); | 1444 layerPushPropertiesTo(child.get(), childImpl.get()); |
| 1445 layerPushPropertiesTo(child2.get(), child2Impl.get()); | 1445 layerPushPropertiesTo(child2.get(), child2Impl.get()); |
| 1446 | 1446 |
| 1447 for (unsigned i = 0; i < 3; ++i) { | 1447 for (unsigned i = 0; i < 3; ++i) { |
| 1448 for (unsigned j = 0; j < 2; ++j) | 1448 for (unsigned j = 0; j < 2; ++j) |
| 1449 EXPECT_FALSE(rootImpl->hasTextureIdForTileAt(i, j)); | 1449 EXPECT_FALSE(rootImpl->hasResourceIdForTileAt(i, j)); |
| 1450 EXPECT_FALSE(childImpl->hasTextureIdForTileAt(i, 0)); | 1450 EXPECT_FALSE(childImpl->hasResourceIdForTileAt(i, 0)); |
| 1451 EXPECT_FALSE(child2Impl->hasTextureIdForTileAt(i, 0)); | 1451 EXPECT_FALSE(child2Impl->hasResourceIdForTileAt(i, 0)); |
| 1452 } | 1452 } |
| 1453 } | 1453 } |
| 1454 ccLayerTreeHost->commitComplete(); | 1454 ccLayerTreeHost->commitComplete(); |
| 1455 | 1455 |
| 1456 textureManagerClearAllMemory(ccLayerTreeHost->contentsTextureManager(), m_re
sourceProvider.get()); | 1456 textureManagerClearAllMemory(ccLayerTreeHost->contentsTextureManager(), m_re
sourceProvider.get()); |
| 1457 ccLayerTreeHost->setRootLayer(0); | 1457 ccLayerTreeHost->setRootLayer(0); |
| 1458 ccLayerTreeHost.clear(); | 1458 ccLayerTreeHost.clear(); |
| 1459 } | 1459 } |
| 1460 | 1460 |
| 1461 class TrackingLayerPainter : public LayerPainterChromium { | 1461 class TrackingLayerPainter : public LayerPainterChromium { |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1552 updateTextures(); | 1552 updateTextures(); |
| 1553 | 1553 |
| 1554 // Invalidate the entire layer in layer space. When painting, the rect given
to webkit should match the layer's bounds. | 1554 // Invalidate the entire layer in layer space. When painting, the rect given
to webkit should match the layer's bounds. |
| 1555 layer->setNeedsDisplayRect(layerRect); | 1555 layer->setNeedsDisplayRect(layerRect); |
| 1556 layer->update(*m_queue.get(), 0, m_stats); | 1556 layer->update(*m_queue.get(), 0, m_stats); |
| 1557 | 1557 |
| 1558 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); | 1558 EXPECT_RECT_EQ(layerRect, layer->trackingLayerPainter()->paintedRect()); |
| 1559 } | 1559 } |
| 1560 | 1560 |
| 1561 } // namespace | 1561 } // namespace |
| OLD | NEW |