| Index: cc/trees/layer_tree_host_impl_unittest.cc
|
| diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
|
| index 91f98aef8ff21df340b05ab07a209d788038bb9f..e45f645ca7d8e15268cf6acffcc29329ab187239 100644
|
| --- a/cc/trees/layer_tree_host_impl_unittest.cc
|
| +++ b/cc/trees/layer_tree_host_impl_unittest.cc
|
| @@ -1641,8 +1641,7 @@ TEST_F(LayerTreeHostImplTest, CompositorFrameMetadata) {
|
| }
|
| }
|
|
|
| -// TODO(enne): Convert this to PictureLayerImpl
|
| -class DidDrawCheckLayer : public TiledLayerImpl {
|
| +class DidDrawCheckLayer : public LayerImpl {
|
| public:
|
| static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
|
| return scoped_ptr<LayerImpl>(new DidDrawCheckLayer(tree_impl, id));
|
| @@ -1653,18 +1652,18 @@ class DidDrawCheckLayer : public TiledLayerImpl {
|
| will_draw_called_ = true;
|
| if (will_draw_returns_false_)
|
| return false;
|
| - return TiledLayerImpl::WillDraw(draw_mode, provider);
|
| + return LayerImpl::WillDraw(draw_mode, provider);
|
| }
|
|
|
| virtual void AppendQuads(QuadSink* quad_sink,
|
| AppendQuadsData* append_quads_data) OVERRIDE {
|
| append_quads_called_ = true;
|
| - TiledLayerImpl::AppendQuads(quad_sink, append_quads_data);
|
| + LayerImpl::AppendQuads(quad_sink, append_quads_data);
|
| }
|
|
|
| virtual void DidDraw(ResourceProvider* provider) OVERRIDE {
|
| did_draw_called_ = true;
|
| - TiledLayerImpl::DidDraw(provider);
|
| + LayerImpl::DidDraw(provider);
|
| }
|
|
|
| bool will_draw_called() const { return will_draw_called_; }
|
| @@ -1681,7 +1680,7 @@ class DidDrawCheckLayer : public TiledLayerImpl {
|
|
|
| protected:
|
| DidDrawCheckLayer(LayerTreeImpl* tree_impl, int id)
|
| - : TiledLayerImpl(tree_impl, id),
|
| + : LayerImpl(tree_impl, id),
|
| will_draw_returns_false_(false),
|
| will_draw_called_(false),
|
| append_quads_called_(false),
|
| @@ -1689,14 +1688,7 @@ class DidDrawCheckLayer : public TiledLayerImpl {
|
| SetBounds(gfx::Size(10, 10));
|
| SetContentBounds(gfx::Size(10, 10));
|
| SetDrawsContent(true);
|
| - set_skips_draw(false);
|
| draw_properties().visible_content_rect = gfx::Rect(0, 0, 10, 10);
|
| -
|
| - scoped_ptr<LayerTilingData> tiler =
|
| - LayerTilingData::Create(gfx::Size(100, 100),
|
| - LayerTilingData::HAS_BORDER_TEXELS);
|
| - tiler->SetTilingRect(gfx::Rect(content_bounds()));
|
| - SetTilingData(*tiler.get());
|
| }
|
|
|
| private:
|
| @@ -1872,69 +1864,59 @@ class MissingTextureAnimatingLayer : public DidDrawCheckLayer {
|
| static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl,
|
| int id,
|
| bool tile_missing,
|
| - bool skips_draw,
|
| + bool had_incomplete_tile,
|
| bool animating,
|
| ResourceProvider* resource_provider) {
|
| - return scoped_ptr<LayerImpl>(new MissingTextureAnimatingLayer(
|
| - tree_impl,
|
| - id,
|
| - tile_missing,
|
| - skips_draw,
|
| - animating,
|
| - resource_provider));
|
| + return scoped_ptr<LayerImpl>(
|
| + new MissingTextureAnimatingLayer(tree_impl,
|
| + id,
|
| + tile_missing,
|
| + had_incomplete_tile,
|
| + animating,
|
| + resource_provider));
|
| }
|
|
|
| virtual void AppendQuads(QuadSink* quad_sink,
|
| AppendQuadsData* append_quads_data) OVERRIDE {
|
| - TiledLayerImpl::AppendQuads(quad_sink, append_quads_data);
|
| - if (tile_missing_)
|
| + LayerImpl::AppendQuads(quad_sink, append_quads_data);
|
| + if (had_incomplete_tile_)
|
| append_quads_data->had_incomplete_tile = true;
|
| + if (tile_missing_)
|
| + append_quads_data->num_missing_tiles++;
|
| }
|
|
|
| private:
|
| MissingTextureAnimatingLayer(LayerTreeImpl* tree_impl,
|
| int id,
|
| bool tile_missing,
|
| - bool skips_draw,
|
| + bool had_incomplete_tile,
|
| bool animating,
|
| ResourceProvider* resource_provider)
|
| - : DidDrawCheckLayer(tree_impl, id), tile_missing_(tile_missing) {
|
| - scoped_ptr<LayerTilingData> tiling_data =
|
| - LayerTilingData::Create(gfx::Size(10, 10),
|
| - LayerTilingData::NO_BORDER_TEXELS);
|
| - tiling_data->SetTilingRect(gfx::Rect(bounds()));
|
| - SetTilingData(*tiling_data.get());
|
| - set_skips_draw(skips_draw);
|
| - if (!tile_missing) {
|
| - ResourceProvider::ResourceId resource =
|
| - resource_provider->CreateResource(gfx::Size(1, 1),
|
| - GL_CLAMP_TO_EDGE,
|
| - ResourceProvider::TextureUsageAny,
|
| - RGBA_8888);
|
| - resource_provider->AllocateForTesting(resource);
|
| - PushTileProperties(0, 0, resource, gfx::Rect(), false);
|
| - }
|
| + : DidDrawCheckLayer(tree_impl, id),
|
| + tile_missing_(tile_missing),
|
| + had_incomplete_tile_(had_incomplete_tile) {
|
| if (animating)
|
| AddAnimatedTransformToLayer(this, 10.0, 3, 0);
|
| }
|
|
|
| bool tile_missing_;
|
| + bool had_incomplete_tile_;
|
| };
|
|
|
| -TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWhenNoTexturesMissing) {
|
| +TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsOnDefault) {
|
| host_impl_->active_tree()->SetRootLayer(
|
| DidDrawCheckLayer::Create(host_impl_->active_tree(), 1));
|
| DidDrawCheckLayer* root =
|
| static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
|
|
|
| bool tile_missing = false;
|
| - bool skips_draw = false;
|
| + bool had_incomplete_tile = false;
|
| bool is_animating = false;
|
| root->AddChild(
|
| MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
|
| 2,
|
| tile_missing,
|
| - skips_draw,
|
| + had_incomplete_tile,
|
| is_animating,
|
| host_impl_->resource_provider()));
|
|
|
| @@ -1951,13 +1933,13 @@ TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithAnimatedLayer) {
|
| DidDrawCheckLayer* root =
|
| static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
|
| bool tile_missing = false;
|
| - bool skips_draw = false;
|
| + bool had_incomplete_tile = false;
|
| bool is_animating = true;
|
| root->AddChild(
|
| MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
|
| 2,
|
| tile_missing,
|
| - skips_draw,
|
| + had_incomplete_tile,
|
| is_animating,
|
| host_impl_->resource_provider()));
|
|
|
| @@ -1968,23 +1950,20 @@ TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithAnimatedLayer) {
|
| host_impl_->DidDrawAllLayers(frame);
|
| }
|
|
|
| -TEST_F(LayerTreeHostImplTest,
|
| - PrepareToDrawSucceedsWithNonAnimatedMissingTexture) {
|
| - // When a texture is missing and we're not animating, we draw as usual with
|
| - // checkerboarding.
|
| +TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithMissingTiles) {
|
| host_impl_->active_tree()->SetRootLayer(
|
| DidDrawCheckLayer::Create(host_impl_->active_tree(), 3));
|
| DidDrawCheckLayer* root =
|
| static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
|
|
|
| bool tile_missing = true;
|
| - bool skips_draw = false;
|
| + bool had_incomplete_tile = false;
|
| bool is_animating = false;
|
| root->AddChild(
|
| MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
|
| 4,
|
| tile_missing,
|
| - skips_draw,
|
| + had_incomplete_tile,
|
| is_animating,
|
| host_impl_->resource_provider()));
|
| LayerTreeHostImpl::FrameData frame;
|
| @@ -1993,21 +1972,42 @@ TEST_F(LayerTreeHostImplTest,
|
| host_impl_->DidDrawAllLayers(frame);
|
| }
|
|
|
| -TEST_F(LayerTreeHostImplTest, PrepareToDrawFailsWhenAnimationUsesCheckerboard) {
|
| - // When a texture is missing and we're animating, we don't want to draw
|
| - // anything.
|
| +TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithIncompleteTile) {
|
| + host_impl_->active_tree()->SetRootLayer(
|
| + DidDrawCheckLayer::Create(host_impl_->active_tree(), 3));
|
| + DidDrawCheckLayer* root =
|
| + static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
|
| +
|
| + bool tile_missing = false;
|
| + bool had_incomplete_tile = true;
|
| + bool is_animating = false;
|
| + root->AddChild(
|
| + MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
|
| + 4,
|
| + tile_missing,
|
| + had_incomplete_tile,
|
| + is_animating,
|
| + host_impl_->resource_provider()));
|
| + LayerTreeHostImpl::FrameData frame;
|
| + EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
|
| + host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
|
| + host_impl_->DidDrawAllLayers(frame);
|
| +}
|
| +
|
| +TEST_F(LayerTreeHostImplTest,
|
| + PrepareToDrawFailsWithAnimationAndMissingTilesUsesCheckerboard) {
|
| host_impl_->active_tree()->SetRootLayer(
|
| DidDrawCheckLayer::Create(host_impl_->active_tree(), 5));
|
| DidDrawCheckLayer* root =
|
| static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
|
| bool tile_missing = true;
|
| - bool skips_draw = false;
|
| + bool had_incomplete_tile = false;
|
| bool is_animating = true;
|
| root->AddChild(
|
| MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
|
| 6,
|
| tile_missing,
|
| - skips_draw,
|
| + had_incomplete_tile,
|
| is_animating,
|
| host_impl_->resource_provider()));
|
| LayerTreeHostImpl::FrameData frame;
|
| @@ -2018,20 +2018,19 @@ TEST_F(LayerTreeHostImplTest, PrepareToDrawFailsWhenAnimationUsesCheckerboard) {
|
| }
|
|
|
| TEST_F(LayerTreeHostImplTest,
|
| - PrepareToDrawSucceedsWithMissingSkippedAnimatedLayer) {
|
| - // When the layer skips draw and we're animating, we still draw the frame.
|
| + PrepareToDrawSucceedsWithAnimationAndIncompleteTiles) {
|
| host_impl_->active_tree()->SetRootLayer(
|
| - DidDrawCheckLayer::Create(host_impl_->active_tree(), 7));
|
| + DidDrawCheckLayer::Create(host_impl_->active_tree(), 5));
|
| DidDrawCheckLayer* root =
|
| static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
|
| bool tile_missing = false;
|
| - bool skips_draw = true;
|
| + bool had_incomplete_tile = true;
|
| bool is_animating = true;
|
| root->AddChild(
|
| MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
|
| - 8,
|
| + 6,
|
| tile_missing,
|
| - skips_draw,
|
| + had_incomplete_tile,
|
| is_animating,
|
| host_impl_->resource_provider()));
|
| LayerTreeHostImpl::FrameData frame;
|
| @@ -2040,21 +2039,19 @@ TEST_F(LayerTreeHostImplTest,
|
| host_impl_->DidDrawAllLayers(frame);
|
| }
|
|
|
| -TEST_F(LayerTreeHostImplTest,
|
| - PrepareToDrawSucceedsWhenHighResRequiredButNoMissingTextures) {
|
| - // When the layer skips draw and we're animating, we still draw the frame.
|
| +TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWhenHighResRequired) {
|
| host_impl_->active_tree()->SetRootLayer(
|
| DidDrawCheckLayer::Create(host_impl_->active_tree(), 7));
|
| DidDrawCheckLayer* root =
|
| static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
|
| bool tile_missing = false;
|
| - bool skips_draw = false;
|
| + bool had_incomplete_tile = false;
|
| bool is_animating = false;
|
| root->AddChild(
|
| MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
|
| 8,
|
| tile_missing,
|
| - skips_draw,
|
| + had_incomplete_tile,
|
| is_animating,
|
| host_impl_->resource_provider()));
|
| host_impl_->active_tree()->SetRequiresHighResToDraw();
|
| @@ -2065,20 +2062,19 @@ TEST_F(LayerTreeHostImplTest,
|
| }
|
|
|
| TEST_F(LayerTreeHostImplTest,
|
| - PrepareToDrawFailsWhenHighResRequiredAndMissingTextures) {
|
| - // When the layer skips draw and we're animating, we still draw the frame.
|
| + PrepareToDrawFailsWhenHighResRequiredAndIncompleteTiles) {
|
| host_impl_->active_tree()->SetRootLayer(
|
| DidDrawCheckLayer::Create(host_impl_->active_tree(), 7));
|
| DidDrawCheckLayer* root =
|
| static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
|
| - bool tile_missing = true;
|
| - bool skips_draw = false;
|
| + bool tile_missing = false;
|
| + bool had_incomplete_tile = true;
|
| bool is_animating = false;
|
| root->AddChild(
|
| MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
|
| 8,
|
| tile_missing,
|
| - skips_draw,
|
| + had_incomplete_tile,
|
| is_animating,
|
| host_impl_->resource_provider()));
|
| host_impl_->active_tree()->SetRequiresHighResToDraw();
|
| @@ -2089,6 +2085,29 @@ TEST_F(LayerTreeHostImplTest,
|
| host_impl_->DidDrawAllLayers(frame);
|
| }
|
|
|
| +TEST_F(LayerTreeHostImplTest,
|
| + PrepareToDrawSucceedsWhenHighResRequiredAndMissingTile) {
|
| + host_impl_->active_tree()->SetRootLayer(
|
| + DidDrawCheckLayer::Create(host_impl_->active_tree(), 7));
|
| + DidDrawCheckLayer* root =
|
| + static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
|
| + bool tile_missing = true;
|
| + bool had_incomplete_tile = false;
|
| + bool is_animating = false;
|
| + root->AddChild(
|
| + MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
|
| + 8,
|
| + tile_missing,
|
| + had_incomplete_tile,
|
| + is_animating,
|
| + host_impl_->resource_provider()));
|
| + host_impl_->active_tree()->SetRequiresHighResToDraw();
|
| + LayerTreeHostImpl::FrameData frame;
|
| + EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
|
| + host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
|
| + host_impl_->DidDrawAllLayers(frame);
|
| +}
|
| +
|
| TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) {
|
| scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1);
|
| root->SetScrollClipLayer(Layer::INVALID_ID);
|
|
|