| Index: cc/tiled_layer_unittest.cc
|
| diff --git a/cc/tiled_layer_unittest.cc b/cc/tiled_layer_unittest.cc
|
| index 056127a985f137e1d9d6de536daa43bbf303cfe6..f6404e7877f3f03f41b901e922460ef8f9fd328a 100644
|
| --- a/cc/tiled_layer_unittest.cc
|
| +++ b/cc/tiled_layer_unittest.cc
|
| @@ -30,11 +30,15 @@ public:
|
| : OcclusionTracker(gfx::Rect(0, 0, 1000, 1000), true)
|
| , m_layerClipRectInTarget(gfx::Rect(0, 0, 1000, 1000))
|
| {
|
| - // Pretend we have visited a render surface.
|
| m_stack.push_back(StackObject());
|
| }
|
|
|
| - void setOcclusion(const Region& occlusion) { m_stack.back().occlusionInTarget = occlusion; }
|
| + void setRenderTarget(Layer* renderTarget)
|
| + {
|
| + m_stack.back().target = renderTarget;
|
| + }
|
| +
|
| + void setOcclusion(const Region& occlusion) { m_stack.back().occlusionFromInsideTarget = occlusion; }
|
|
|
| protected:
|
| virtual gfx::Rect layerClipRectInTarget(const Layer* layer) const OVERRIDE { return m_layerClipRectInTarget; }
|
| @@ -59,6 +63,8 @@ public:
|
| m_proxy = m_layerTreeHost->proxy();
|
| m_resourceManager = PrioritizedResourceManager::create(m_proxy);
|
| m_layerTreeHost->initializeRendererIfNeeded();
|
| + m_layerTreeHost->setRootLayer(Layer::create());
|
| +
|
| DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked(m_proxy);
|
| m_resourceProvider = ResourceProvider::create(m_outputSurface.get());
|
| m_hostImpl = make_scoped_ptr(new FakeLayerTreeHostImpl(m_proxy));
|
| @@ -67,32 +73,12 @@ public:
|
| virtual ~TiledLayerTest()
|
| {
|
| resourceManagerClearAllMemory(m_resourceManager.get(), m_resourceProvider.get());
|
| +
|
| DebugScopedSetImplThreadAndMainThreadBlocked implThreadAndMainThreadBlocked(m_proxy);
|
| m_resourceProvider.reset();
|
| m_hostImpl.reset();
|
| }
|
|
|
| - class ScopedFakeTiledLayerImpl {
|
| - public:
|
| - ScopedFakeTiledLayerImpl(LayerTreeImpl* treeImpl, int id)
|
| - {
|
| - m_layerImpl = new FakeTiledLayerImpl(treeImpl, id);
|
| - }
|
| - ~ScopedFakeTiledLayerImpl()
|
| - {
|
| - delete m_layerImpl;
|
| - }
|
| - FakeTiledLayerImpl* get()
|
| - {
|
| - return m_layerImpl;
|
| - }
|
| - FakeTiledLayerImpl* operator->()
|
| - {
|
| - return m_layerImpl;
|
| - }
|
| - private:
|
| - FakeTiledLayerImpl* m_layerImpl;
|
| - };
|
| void resourceManagerClearAllMemory(PrioritizedResourceManager* resourceManager, ResourceProvider* resourceProvider)
|
| {
|
| {
|
| @@ -127,17 +113,52 @@ public:
|
| layer->update(*m_queue.get(), occluded, m_stats);
|
| }
|
|
|
| - bool updateAndPush(FakeTiledLayer* layer1,
|
| - FakeTiledLayerImpl* layerImpl1,
|
| - FakeTiledLayer* layer2 = 0,
|
| - FakeTiledLayerImpl* layerImpl2 = 0)
|
| + void calcDrawProps(const scoped_refptr<FakeTiledLayer>& layer1)
|
| + {
|
| + scoped_refptr<FakeTiledLayer> layer2;
|
| + calcDrawProps(layer1, layer2);
|
| + }
|
| +
|
| + void calcDrawProps(const scoped_refptr<FakeTiledLayer>& layer1,
|
| + const scoped_refptr<FakeTiledLayer>& layer2)
|
| + {
|
| + if (layer1 && !layer1->parent())
|
| + m_layerTreeHost->rootLayer()->addChild(layer1);
|
| + if (layer2 && !layer1->parent())
|
| + m_layerTreeHost->rootLayer()->addChild(layer2);
|
| + if (m_occlusion)
|
| + m_occlusion->setRenderTarget(m_layerTreeHost->rootLayer());
|
| +
|
| + std::vector<scoped_refptr<Layer> > renderSurfaceLayerList;
|
| + LayerTreeHostCommon::calculateDrawProperties(
|
| + m_layerTreeHost->rootLayer(),
|
| + m_layerTreeHost->deviceViewportSize(),
|
| + m_layerTreeHost->deviceScaleFactor(),
|
| + 1, // page_scale_factor
|
| + m_layerTreeHost->rendererCapabilities().maxTextureSize,
|
| + false, // can_use_lcd_text
|
| + renderSurfaceLayerList);
|
| + }
|
| +
|
| + bool updateAndPush(const scoped_refptr<FakeTiledLayer>& layer1,
|
| + const scoped_ptr<FakeTiledLayerImpl>& layerImpl1)
|
| + {
|
| + scoped_refptr<FakeTiledLayer> layer2;
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl2;
|
| + return updateAndPush(layer1, layerImpl1, layer2, layerImpl2);
|
| + }
|
| +
|
| + bool updateAndPush(const scoped_refptr<FakeTiledLayer>& layer1,
|
| + const scoped_ptr<FakeTiledLayerImpl>& layerImpl1,
|
| + const scoped_refptr<FakeTiledLayer>& layer2,
|
| + const scoped_ptr<FakeTiledLayerImpl>& layerImpl2)
|
| {
|
| // Get textures
|
| m_resourceManager->clearPriorities();
|
| if (layer1)
|
| layer1->setTexturePriorities(m_priorityCalculator);
|
| if (layer2)
|
| - layer2->setTexturePriorities(m_priorityCalculator);
|
| + layer2->setTexturePriorities(m_priorityCalculator);
|
| m_resourceManager->prioritizeTextures();
|
|
|
| // Update content
|
| @@ -155,9 +176,9 @@ public:
|
| // Update textures and push.
|
| updateTextures();
|
| if (layer1)
|
| - layerPushPropertiesTo(layer1, layerImpl1);
|
| + layerPushPropertiesTo(layer1.get(), layerImpl1.get());
|
| if (layer2)
|
| - layerPushPropertiesTo(layer2, layerImpl2);
|
| + layerPushPropertiesTo(layer2.get(), layerImpl2.get());
|
|
|
| return needsUpdate;
|
| }
|
| @@ -180,13 +201,13 @@ public:
|
| TEST_F(TiledLayerTest, pushDirtyTiles)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
|
|
| // The tile size is 100x100, so this invalidates and then paints two tiles.
|
| layer->setBounds(gfx::Size(100, 200));
|
| layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200);
|
| layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200));
|
| - updateAndPush(layer.get(), layerImpl.get());
|
| + updateAndPush(layer, layerImpl);
|
|
|
| // We should have both tiles on the impl side.
|
| EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
|
| @@ -196,7 +217,7 @@ TEST_F(TiledLayerTest, pushDirtyTiles)
|
| layer->setBounds(gfx::Size(100, 200));
|
| layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100);
|
| layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200));
|
| - updateAndPush(layer.get(), layerImpl.get());
|
| + updateAndPush(layer, layerImpl);
|
|
|
| // We should only have the first tile since the other tile was invalidated but not painted.
|
| EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
|
| @@ -206,7 +227,7 @@ TEST_F(TiledLayerTest, pushDirtyTiles)
|
| TEST_F(TiledLayerTest, pushOccludedDirtyTiles)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
| TestOcclusionTracker occluded;
|
| m_occlusion = &occluded;
|
|
|
| @@ -215,7 +236,7 @@ TEST_F(TiledLayerTest, pushOccludedDirtyTiles)
|
| layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200);
|
| layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 100, 200);
|
| layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200));
|
| - updateAndPush(layer.get(), layerImpl.get());
|
| + updateAndPush(layer, layerImpl);
|
|
|
| EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
|
| EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000, 1);
|
| @@ -229,7 +250,7 @@ TEST_F(TiledLayerTest, pushOccludedDirtyTiles)
|
| layer->invalidateContentRect(gfx::Rect(0, 0, 50, 50));
|
| // ....but the area is occluded.
|
| occluded.setOcclusion(gfx::Rect(0, 0, 50, 50));
|
| - updateAndPush(layer.get(), layerImpl.get());
|
| + updateAndPush(layer, layerImpl);
|
|
|
| EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedOpaque(), 0, 1);
|
| EXPECT_NEAR(occluded.overdrawMetrics().pixelsUploadedTranslucent(), 20000 + 2500, 1);
|
| @@ -243,13 +264,13 @@ TEST_F(TiledLayerTest, pushOccludedDirtyTiles)
|
| TEST_F(TiledLayerTest, pushDeletedTiles)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
|
|
| // The tile size is 100x100, so this invalidates and then paints two tiles.
|
| layer->setBounds(gfx::Size(100, 200));
|
| layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200);
|
| layer->invalidateContentRect(gfx::Rect(0, 0, 100, 200));
|
| - updateAndPush(layer.get(), layerImpl.get());
|
| + updateAndPush(layer, layerImpl);
|
|
|
| // We should have both tiles on the impl side.
|
| EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
|
| @@ -268,7 +289,7 @@ TEST_F(TiledLayerTest, pushDeletedTiles)
|
|
|
| // This should recreate and update one of the deleted textures.
|
| layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100);
|
| - updateAndPush(layer.get(), layerImpl.get());
|
| + updateAndPush(layer, layerImpl);
|
|
|
| // We should have one tiles on the impl side.
|
| EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
|
| @@ -278,14 +299,14 @@ TEST_F(TiledLayerTest, pushDeletedTiles)
|
| TEST_F(TiledLayerTest, pushIdlePaintTiles)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
|
|
| // The tile size is 100x100. Setup 5x5 tiles with one visible tile in the center.
|
| // This paints 1 visible of the 25 invalid tiles.
|
| layer->setBounds(gfx::Size(500, 500));
|
| layer->drawProperties().visible_content_rect = gfx::Rect(200, 200, 100, 100);
|
| layer->invalidateContentRect(gfx::Rect(0, 0, 500, 500));
|
| - bool needsUpdate = updateAndPush(layer.get(), layerImpl.get());
|
| + bool needsUpdate = updateAndPush(layer, layerImpl);
|
| // We should need idle-painting for surrounding tiles.
|
| EXPECT_TRUE(needsUpdate);
|
|
|
| @@ -294,13 +315,13 @@ TEST_F(TiledLayerTest, pushIdlePaintTiles)
|
|
|
| // For the next four updates, we should detect we still need idle painting.
|
| for (int i = 0; i < 4; i++) {
|
| - needsUpdate = updateAndPush(layer.get(), layerImpl.get());
|
| + needsUpdate = updateAndPush(layer, layerImpl);
|
| EXPECT_TRUE(needsUpdate);
|
| }
|
|
|
| // We should always finish painting eventually.
|
| for (int i = 0; i < 20; i++)
|
| - needsUpdate = updateAndPush(layer.get(), layerImpl.get());
|
| + needsUpdate = updateAndPush(layer, layerImpl);
|
|
|
| // We should have pre-painted all of the surrounding tiles.
|
| for (int i = 0; i < 5; i++) {
|
| @@ -314,7 +335,7 @@ TEST_F(TiledLayerTest, pushIdlePaintTiles)
|
| TEST_F(TiledLayerTest, predictivePainting)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
|
|
| // Prepainting should occur in the scroll direction first, and the
|
| // visible rect should be extruded only along the dominant axis.
|
| @@ -352,13 +373,13 @@ TEST_F(TiledLayerTest, predictivePainting)
|
| layer->setBounds(contentBounds);
|
| layer->drawProperties().visible_content_rect = previousVisibleRect;
|
| layer->invalidateContentRect(contentRect);
|
| - bool needsUpdate = updateAndPush(layer.get(), layerImpl.get());
|
| + bool needsUpdate = updateAndPush(layer, layerImpl);
|
|
|
| // Invalidate and move the visibleRect in the scroll direction.
|
| // Check that the correct tiles have been painted in the visible pass.
|
| layer->invalidateContentRect(contentRect);
|
| layer->drawProperties().visible_content_rect = visibleRect;
|
| - needsUpdate = updateAndPush(layer.get(), layerImpl.get());
|
| + needsUpdate = updateAndPush(layer, layerImpl);
|
| for (int i = 0; i < 5; i++) {
|
| for (int j = 0; j < 5; j++)
|
| EXPECT_EQ(layerImpl->hasResourceIdForTileAt(i, j), pushedVisibleTiles[k].Contains(i, j));
|
| @@ -369,7 +390,7 @@ TEST_F(TiledLayerTest, predictivePainting)
|
| // Ignore diagonal scrolls here (k > 3) as these have new visible content now.
|
| if (k <= 3) {
|
| layer->drawProperties().visible_content_rect = nextVisibleRect;
|
| - needsUpdate = updateAndPush(layer.get(), layerImpl.get());
|
| + needsUpdate = updateAndPush(layer, layerImpl);
|
| for (int i = 0; i < 5; i++) {
|
| for (int j = 0; j < 5; j++)
|
| EXPECT_EQ(layerImpl->hasResourceIdForTileAt(i, j), pushedPrepaintTiles[k].Contains(i, j));
|
| @@ -378,7 +399,7 @@ TEST_F(TiledLayerTest, predictivePainting)
|
|
|
| // We should always finish painting eventually.
|
| for (int i = 0; i < 20; i++)
|
| - needsUpdate = updateAndPush(layer.get(), layerImpl.get());
|
| + needsUpdate = updateAndPush(layer, layerImpl);
|
| EXPECT_FALSE(needsUpdate);
|
| }
|
| }
|
| @@ -388,9 +409,9 @@ TEST_F(TiledLayerTest, pushTilesAfterIdlePaintFailed)
|
| // Start with 2mb of memory, but the test is going to try to use just more than 1mb, so we reduce to 1mb later.
|
| m_resourceManager->setMaxMemoryLimitBytes(2 * 1024 * 1024);
|
| scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl1(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl1 = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
| scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl2(m_hostImpl->activeTree(), 2);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl2 = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 2));
|
|
|
| // For this test we have two layers. layer1 exhausts most texture memory, leaving room for 2 more tiles from
|
| // layer2, but not all three tiles. First we paint layer1, and one tile from layer2. Then when we idle paint
|
| @@ -407,8 +428,8 @@ TEST_F(TiledLayerTest, pushTilesAfterIdlePaintFailed)
|
| layer1->drawProperties().visible_content_rect = layer1Rect;
|
| layer2->setBounds(layer2Rect.size());
|
| layer2->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100);
|
| - bool needsUpdate = updateAndPush(layer1.get(), layerImpl1.get(),
|
| - layer2.get(), layerImpl2.get());
|
| + bool needsUpdate = updateAndPush(layer1, layerImpl1,
|
| + layer2, layerImpl2);
|
| // We should need idle-painting for both remaining tiles in layer2.
|
| EXPECT_TRUE(needsUpdate);
|
|
|
| @@ -418,8 +439,8 @@ TEST_F(TiledLayerTest, pushTilesAfterIdlePaintFailed)
|
| // Now idle paint layer2. We are going to run out of memory though!
|
| // Oh well, commit the frame and push.
|
| for (int i = 0; i < 4; i++) {
|
| - needsUpdate = updateAndPush(layer1.get(), layerImpl1.get(),
|
| - layer2.get(), layerImpl2.get());
|
| + needsUpdate = updateAndPush(layer1, layerImpl1,
|
| + layer2, layerImpl2);
|
| }
|
|
|
| // Sanity check, we should have textures for the big layer.
|
| @@ -440,7 +461,7 @@ TEST_F(TiledLayerTest, pushTilesAfterIdlePaintFailed)
|
| TEST_F(TiledLayerTest, pushIdlePaintedOccludedTiles)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
| TestOcclusionTracker occluded;
|
| m_occlusion = &occluded;
|
|
|
| @@ -448,8 +469,9 @@ TEST_F(TiledLayerTest, pushIdlePaintedOccludedTiles)
|
| occluded.setOcclusion(gfx::Rect(0, 0, 100, 100));
|
|
|
| layer->setBounds(gfx::Size(100, 100));
|
| + calcDrawProps(layer);
|
| layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 100);
|
| - updateAndPush(layer.get(), layerImpl.get());
|
| + updateAndPush(layer, layerImpl);
|
|
|
| // We should have the prepainted tile on the impl side, but culled it during paint.
|
| EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
|
| @@ -459,15 +481,16 @@ TEST_F(TiledLayerTest, pushIdlePaintedOccludedTiles)
|
| TEST_F(TiledLayerTest, pushTilesMarkedDirtyDuringPaint)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
|
|
| // The tile size is 100x100, so this invalidates and then paints two tiles.
|
| // However, during the paint, we invalidate one of the tiles. This should
|
| // not prevent the tile from being pushed.
|
| layer->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), layer.get());
|
| layer->setBounds(gfx::Size(100, 200));
|
| + calcDrawProps(layer);
|
| layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200);
|
| - updateAndPush(layer.get(), layerImpl.get());
|
| + updateAndPush(layer, layerImpl);
|
|
|
| // We should have both tiles on the impl side.
|
| EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
|
| @@ -478,17 +501,18 @@ TEST_F(TiledLayerTest, pushTilesLayerMarkedDirtyDuringPaintOnNextLayer)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layer1Impl(m_hostImpl->activeTree(), 1);
|
| - ScopedFakeTiledLayerImpl layer2Impl(m_hostImpl->activeTree(), 2);
|
| + scoped_ptr<FakeTiledLayerImpl> layer1Impl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
| + scoped_ptr<FakeTiledLayerImpl> layer2Impl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 2));
|
|
|
| // Invalidate a tile on layer1, during update of layer 2.
|
| layer2->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), layer1.get());
|
| layer1->setBounds(gfx::Size(100, 200));
|
| - layer1->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200);
|
| layer2->setBounds(gfx::Size(100, 200));
|
| + calcDrawProps(layer1, layer2);
|
| + layer1->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200);
|
| layer2->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200);
|
| - updateAndPush(layer1.get(), layer1Impl.get(),
|
| - layer2.get(), layer2Impl.get());
|
| + updateAndPush(layer1, layer1Impl,
|
| + layer2, layer2Impl);
|
|
|
| // We should have both tiles on the impl side for all layers.
|
| EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 0));
|
| @@ -501,16 +525,17 @@ TEST_F(TiledLayerTest, pushTilesLayerMarkedDirtyDuringPaintOnPreviousLayer)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer1 = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| scoped_refptr<FakeTiledLayer> layer2 = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layer1Impl(m_hostImpl->activeTree(), 1);
|
| - ScopedFakeTiledLayerImpl layer2Impl(m_hostImpl->activeTree(), 2);
|
| + scoped_ptr<FakeTiledLayerImpl> layer1Impl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
| + scoped_ptr<FakeTiledLayerImpl> layer2Impl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 2));
|
|
|
| layer1->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(0, 50, 100, 50), layer2.get());
|
| layer1->setBounds(gfx::Size(100, 200));
|
| - layer1->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200);
|
| layer2->setBounds(gfx::Size(100, 200));
|
| + calcDrawProps(layer1, layer2);
|
| + layer1->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200);
|
| layer2->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200);
|
| - updateAndPush(layer1.get(), layer1Impl.get(),
|
| - layer2.get(), layer2Impl.get());
|
| + updateAndPush(layer1, layer1Impl,
|
| + layer2, layer2Impl);
|
|
|
| // We should have both tiles on the impl side for all layers.
|
| EXPECT_TRUE(layer1Impl->hasResourceIdForTileAt(0, 0));
|
| @@ -543,7 +568,7 @@ TEST_F(TiledLayerTest, paintSmallAnimatedLayersImmediately)
|
| m_resourceManager->setMaxMemoryLimitBytes(memoryForLayer);
|
|
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
|
|
| // Full size layer with half being visible.
|
| gfx::Size contentBounds(layerWidth, layerHeight);
|
| @@ -585,7 +610,7 @@ TEST_F(TiledLayerTest, paintSmallAnimatedLayersImmediately)
|
| TEST_F(TiledLayerTest, idlePaintOutOfMemory)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
|
|
| // We have enough memory for only the visible rect, so we will run out of memory in first idle paint.
|
| int memoryLimit = 4 * 100 * 100; // 1 tiles, 4 bytes per pixel.
|
| @@ -594,9 +619,10 @@ TEST_F(TiledLayerTest, idlePaintOutOfMemory)
|
| // The tile size is 100x100, so this invalidates and then paints two tiles.
|
| bool needsUpdate = false;
|
| layer->setBounds(gfx::Size(300, 300));
|
| + calcDrawProps(layer);
|
| layer->drawProperties().visible_content_rect = gfx::Rect(100, 100, 100, 100);
|
| for (int i = 0; i < 2; i++)
|
| - needsUpdate = updateAndPush(layer.get(), layerImpl.get());
|
| + needsUpdate = updateAndPush(layer, layerImpl);
|
|
|
| // Idle-painting should see no more priority tiles for painting.
|
| EXPECT_FALSE(needsUpdate);
|
| @@ -608,7 +634,7 @@ TEST_F(TiledLayerTest, idlePaintOutOfMemory)
|
| TEST_F(TiledLayerTest, idlePaintZeroSizedLayer)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
|
|
| bool animating[2] = {false, true};
|
| for (int i = 0; i < 2; i++) {
|
| @@ -618,8 +644,9 @@ TEST_F(TiledLayerTest, idlePaintZeroSizedLayer)
|
| // The layer's bounds are empty.
|
| // Empty layers don't paint or idle-paint.
|
| layer->setBounds(gfx::Size());
|
| + calcDrawProps(layer);
|
| layer->drawProperties().visible_content_rect = gfx::Rect();
|
| - bool needsUpdate = updateAndPush(layer.get(), layerImpl.get());
|
| + bool needsUpdate = updateAndPush(layer, layerImpl);
|
|
|
| // Empty layers don't have tiles.
|
| EXPECT_EQ(0u, layer->numPaintedTiles());
|
| @@ -635,7 +662,7 @@ TEST_F(TiledLayerTest, idlePaintZeroSizedLayer)
|
| TEST_F(TiledLayerTest, idlePaintNonVisibleLayers)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
|
|
| // Alternate between not visible and visible.
|
| gfx::Rect v(0, 0, 100, 100);
|
| @@ -649,11 +676,12 @@ TEST_F(TiledLayerTest, idlePaintNonVisibleLayers)
|
|
|
| for (int i = 0; i < 10; i++) {
|
| layer->setBounds(gfx::Size(100, 100));
|
| + calcDrawProps(layer);
|
| layer->drawProperties().visible_content_rect = visibleRect[i];
|
|
|
| if (invalidate[i])
|
| layer->invalidateContentRect(gfx::Rect(0, 0, 100, 100));
|
| - bool needsUpdate = updateAndPush(layer.get(), layerImpl.get());
|
| + bool needsUpdate = updateAndPush(layer, layerImpl);
|
|
|
| // We should never signal idle paint, as we painted the entire layer
|
| // or the layer was not visible.
|
| @@ -665,12 +693,13 @@ TEST_F(TiledLayerTest, idlePaintNonVisibleLayers)
|
| TEST_F(TiledLayerTest, invalidateFromPrepare)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
|
|
| // The tile size is 100x100, so this invalidates and then paints two tiles.
|
| layer->setBounds(gfx::Size(100, 200));
|
| + calcDrawProps(layer);
|
| layer->drawProperties().visible_content_rect = gfx::Rect(0, 0, 100, 200);
|
| - updateAndPush(layer.get(), layerImpl.get());
|
| + updateAndPush(layer, layerImpl);
|
|
|
| // We should have both tiles on the impl side.
|
| EXPECT_TRUE(layerImpl->hasResourceIdForTileAt(0, 0));
|
| @@ -679,19 +708,19 @@ TEST_F(TiledLayerTest, invalidateFromPrepare)
|
| layer->fakeLayerUpdater()->clearPrepareCount();
|
| // Invoke update again. As the layer is valid update shouldn't be invoked on
|
| // the LayerUpdater.
|
| - updateAndPush(layer.get(), layerImpl.get());
|
| + updateAndPush(layer, layerImpl);
|
| EXPECT_EQ(0, layer->fakeLayerUpdater()->prepareCount());
|
|
|
| // setRectToInvalidate triggers invalidateContentRect() being invoked from update.
|
| layer->fakeLayerUpdater()->setRectToInvalidate(gfx::Rect(25, 25, 50, 50), layer.get());
|
| layer->fakeLayerUpdater()->clearPrepareCount();
|
| layer->invalidateContentRect(gfx::Rect(0, 0, 50, 50));
|
| - updateAndPush(layer.get(), layerImpl.get());
|
| + updateAndPush(layer, layerImpl);
|
| EXPECT_EQ(1, layer->fakeLayerUpdater()->prepareCount());
|
| layer->fakeLayerUpdater()->clearPrepareCount();
|
|
|
| // The layer should still be invalid as update invoked invalidate.
|
| - updateAndPush(layer.get(), layerImpl.get()); // visible
|
| + updateAndPush(layer, layerImpl); // visible
|
| EXPECT_EQ(1, layer->fakeLayerUpdater()->prepareCount());
|
| }
|
|
|
| @@ -738,7 +767,7 @@ TEST_F(TiledLayerTest, verifyUpdateRectWhenContentBoundsAreScaled)
|
| TEST_F(TiledLayerTest, verifyInvalidationWhenContentsScaleChanges)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
|
|
| // Create a layer with one tile.
|
| layer->setBounds(gfx::Size(100, 100));
|
| @@ -890,7 +919,7 @@ TEST_F(TiledLayerPartialUpdateTest, partialUpdates)
|
| m_layerTreeHost->updateLayers(
|
| *m_queue.get(), std::numeric_limits<size_t>::max());
|
| {
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
| EXPECT_EQ(6, m_queue->fullUploadSize());
|
| EXPECT_EQ(0, m_queue->partialUploadSize());
|
| updateTextures();
|
| @@ -905,7 +934,7 @@ TEST_F(TiledLayerPartialUpdateTest, partialUpdates)
|
| layer->invalidateContentRect(gfx::Rect(0, 0, 300, 150));
|
| m_layerTreeHost->updateLayers(*m_queue.get(), std::numeric_limits<size_t>::max());
|
| {
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
| EXPECT_EQ(3, m_queue->fullUploadSize());
|
| EXPECT_EQ(3, m_queue->partialUploadSize());
|
| updateTextures();
|
| @@ -919,7 +948,7 @@ TEST_F(TiledLayerPartialUpdateTest, partialUpdates)
|
| // Partial update of 6 tiles.
|
| layer->invalidateContentRect(gfx::Rect(50, 50, 200, 100));
|
| {
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
| m_layerTreeHost->updateLayers(*m_queue.get(), std::numeric_limits<size_t>::max());
|
| EXPECT_EQ(2, m_queue->fullUploadSize());
|
| EXPECT_EQ(4, m_queue->partialUploadSize());
|
| @@ -934,7 +963,7 @@ TEST_F(TiledLayerPartialUpdateTest, partialUpdates)
|
| // Checkerboard all tiles.
|
| layer->invalidateContentRect(gfx::Rect(0, 0, 300, 200));
|
| {
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
| layerPushPropertiesTo(layer.get(), layerImpl.get());
|
| }
|
| m_layerTreeHost->commitComplete();
|
| @@ -942,7 +971,7 @@ TEST_F(TiledLayerPartialUpdateTest, partialUpdates)
|
| // Partial update of 6 checkerboard tiles.
|
| layer->invalidateContentRect(gfx::Rect(50, 50, 200, 100));
|
| {
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
| m_layerTreeHost->updateLayers(*m_queue.get(), std::numeric_limits<size_t>::max());
|
| EXPECT_EQ(6, m_queue->fullUploadSize());
|
| EXPECT_EQ(0, m_queue->partialUploadSize());
|
| @@ -957,7 +986,7 @@ TEST_F(TiledLayerPartialUpdateTest, partialUpdates)
|
| // Partial update of 4 tiles.
|
| layer->invalidateContentRect(gfx::Rect(50, 50, 100, 100));
|
| {
|
| - ScopedFakeTiledLayerImpl layerImpl(m_hostImpl->activeTree(), 1);
|
| + scoped_ptr<FakeTiledLayerImpl> layerImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), 1));
|
| m_layerTreeHost->updateLayers(*m_queue.get(), std::numeric_limits<size_t>::max());
|
| EXPECT_EQ(0, m_queue->fullUploadSize());
|
| EXPECT_EQ(4, m_queue->partialUploadSize());
|
| @@ -993,10 +1022,12 @@ TEST_F(TiledLayerTest, tilesPaintedWithOcclusion)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| TestOcclusionTracker occluded;
|
| + m_occlusion = &occluded;
|
|
|
| // The tile size is 100x100.
|
|
|
| layer->setBounds(gfx::Size(600, 600));
|
| + calcDrawProps(layer);
|
|
|
| occluded.setOcclusion(gfx::Rect(200, 200, 300, 100));
|
| layer->drawProperties().drawable_content_rect = gfx::Rect(gfx::Point(), layer->contentBounds());
|
| @@ -1043,10 +1074,12 @@ TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndVisiblityConstraints)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| TestOcclusionTracker occluded;
|
| + m_occlusion = &occluded;
|
|
|
| // The tile size is 100x100.
|
|
|
| layer->setBounds(gfx::Size(600, 600));
|
| + calcDrawProps(layer);
|
|
|
| // The partially occluded tiles (by the 150 occlusion height) are visible beyond the occlusion, so not culled.
|
| occluded.setOcclusion(gfx::Rect(200, 200, 300, 150));
|
| @@ -1101,10 +1134,12 @@ TEST_F(TiledLayerTest, tilesNotPaintedWithoutInvalidation)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| TestOcclusionTracker occluded;
|
| + m_occlusion = &occluded;
|
|
|
| // The tile size is 100x100.
|
|
|
| layer->setBounds(gfx::Size(600, 600));
|
| + calcDrawProps(layer);
|
|
|
| occluded.setOcclusion(gfx::Rect(200, 200, 300, 100));
|
| layer->drawProperties().drawable_content_rect = gfx::Rect(0, 0, 600, 600);
|
| @@ -1139,12 +1174,14 @@ TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndTransforms)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| TestOcclusionTracker occluded;
|
| + m_occlusion = &occluded;
|
|
|
| // The tile size is 100x100.
|
|
|
| // This makes sure the painting works when the occluded region (in screen space)
|
| // is transformed differently than the layer.
|
| layer->setBounds(gfx::Size(600, 600));
|
| + calcDrawProps(layer);
|
| gfx::Transform screenTransform;
|
| screenTransform.Scale(0.5, 0.5);
|
| layer->drawProperties().screen_space_transform = screenTransform;
|
| @@ -1168,15 +1205,17 @@ TEST_F(TiledLayerTest, tilesPaintedWithOcclusionAndScaling)
|
| {
|
| scoped_refptr<FakeTiledLayer> layer = make_scoped_refptr(new FakeTiledLayer(m_resourceManager.get()));
|
| TestOcclusionTracker occluded;
|
| + m_occlusion = &occluded;
|
|
|
| // The tile size is 100x100.
|
|
|
| // This makes sure the painting works when the content space is scaled to
|
| // a different layer space. In this case tiles are scaled to be 200x200
|
| // pixels, which means none should be occluded.
|
| - layer->updateContentsScale(0.5);
|
| - EXPECT_FLOAT_EQ(layer->contentsScaleX(), layer->contentsScaleY());
|
| layer->setBounds(gfx::Size(600, 600));
|
| + layer->setRasterScale(0.5);
|
| + calcDrawProps(layer);
|
| + EXPECT_FLOAT_EQ(layer->contentsScaleX(), layer->contentsScaleY());
|
| gfx::Transform drawTransform;
|
| double invScaleFactor = 1 / layer->contentsScaleX();
|
| drawTransform.Scale(invScaleFactor, invScaleFactor);
|
| @@ -1437,9 +1476,9 @@ TEST_F(TiledLayerTest, dontAllocateContentsWhenTargetSurfaceCantBeAllocated)
|
| child->fakeLayerUpdater()->clearUpdateCount();
|
| child2->fakeLayerUpdater()->clearUpdateCount();
|
|
|
| - ScopedFakeTiledLayerImpl rootImpl(m_hostImpl->activeTree(), root->id());
|
| - ScopedFakeTiledLayerImpl childImpl(m_hostImpl->activeTree(), child->id());
|
| - ScopedFakeTiledLayerImpl child2Impl(m_hostImpl->activeTree(), child2->id());
|
| + scoped_ptr<FakeTiledLayerImpl> rootImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), root->id()));
|
| + scoped_ptr<FakeTiledLayerImpl> childImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), child->id()));
|
| + scoped_ptr<FakeTiledLayerImpl> child2Impl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), child2->id()));
|
| layerPushPropertiesTo(root.get(), rootImpl.get());
|
| layerPushPropertiesTo(child.get(), childImpl.get());
|
| layerPushPropertiesTo(child2.get(), child2Impl.get());
|
| @@ -1472,9 +1511,9 @@ TEST_F(TiledLayerTest, dontAllocateContentsWhenTargetSurfaceCantBeAllocated)
|
| child->fakeLayerUpdater()->clearUpdateCount();
|
| child2->fakeLayerUpdater()->clearUpdateCount();
|
|
|
| - ScopedFakeTiledLayerImpl rootImpl(m_hostImpl->activeTree(), root->id());
|
| - ScopedFakeTiledLayerImpl childImpl(m_hostImpl->activeTree(), child->id());
|
| - ScopedFakeTiledLayerImpl child2Impl(m_hostImpl->activeTree(), child2->id());
|
| + scoped_ptr<FakeTiledLayerImpl> rootImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), root->id()));
|
| + scoped_ptr<FakeTiledLayerImpl> childImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), child->id()));
|
| + scoped_ptr<FakeTiledLayerImpl> child2Impl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), child2->id()));
|
| layerPushPropertiesTo(root.get(), rootImpl.get());
|
| layerPushPropertiesTo(child.get(), childImpl.get());
|
| layerPushPropertiesTo(child2.get(), child2Impl.get());
|
| @@ -1508,9 +1547,9 @@ TEST_F(TiledLayerTest, dontAllocateContentsWhenTargetSurfaceCantBeAllocated)
|
| child->fakeLayerUpdater()->clearUpdateCount();
|
| child2->fakeLayerUpdater()->clearUpdateCount();
|
|
|
| - ScopedFakeTiledLayerImpl rootImpl(m_hostImpl->activeTree(), root->id());
|
| - ScopedFakeTiledLayerImpl childImpl(m_hostImpl->activeTree(), child->id());
|
| - ScopedFakeTiledLayerImpl child2Impl(m_hostImpl->activeTree(), child2->id());
|
| + scoped_ptr<FakeTiledLayerImpl> rootImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), root->id()));
|
| + scoped_ptr<FakeTiledLayerImpl> childImpl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), child->id()));
|
| + scoped_ptr<FakeTiledLayerImpl> child2Impl = make_scoped_ptr(new FakeTiledLayerImpl(m_hostImpl->activeTree(), child2->id()));
|
| layerPushPropertiesTo(root.get(), rootImpl.get());
|
| layerPushPropertiesTo(child.get(), childImpl.get());
|
| layerPushPropertiesTo(child2.get(), child2Impl.get());
|
|
|