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

Unified Diff: cc/trees/layer_tree_host_impl_unittest.cc

Issue 1001833005: Update from https://crrev.com/320343 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Supress Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/layer_tree_host_pixeltest_filters.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 7ffa6831a92d75042bbcd3437802578bf00ed521..4e3230b32fb9afda7ca53428105e19b6074efd6a 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -1558,192 +1558,160 @@ class LayerTreeHostImplOverridePhysicalTime : public LayerTreeHostImpl {
base::TimeTicks fake_current_physical_time_;
};
-#define SETUP_LAYERS_FOR_SCROLLBAR_ANIMATION_TEST() \
- gfx::Size viewport_size(10, 10); \
- gfx::Size content_size(100, 100); \
- \
- LayerTreeHostImplOverridePhysicalTime* host_impl_override_time = \
- new LayerTreeHostImplOverridePhysicalTime(settings, this, &proxy_, \
- shared_bitmap_manager_.get(), \
- &stats_instrumentation_); \
- host_impl_ = make_scoped_ptr(host_impl_override_time); \
- host_impl_->InitializeRenderer(CreateOutputSurface()); \
- host_impl_->SetViewportSize(viewport_size); \
- \
- scoped_ptr<LayerImpl> root = \
- LayerImpl::Create(host_impl_->active_tree(), 1); \
- root->SetBounds(viewport_size); \
- \
- scoped_ptr<LayerImpl> scroll = \
- LayerImpl::Create(host_impl_->active_tree(), 2); \
- scroll->SetScrollClipLayer(root->id()); \
- scroll->PushScrollOffsetFromMainThread(gfx::ScrollOffset()); \
- root->SetBounds(viewport_size); \
- scroll->SetBounds(content_size); \
- scroll->SetContentBounds(content_size); \
- scroll->SetIsContainerForFixedPositionLayers(true); \
- \
- scoped_ptr<LayerImpl> contents = \
- LayerImpl::Create(host_impl_->active_tree(), 3); \
- contents->SetDrawsContent(true); \
- contents->SetBounds(content_size); \
- contents->SetContentBounds(content_size); \
- \
- scoped_ptr<SolidColorScrollbarLayerImpl> scrollbar = \
- SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), 4, \
- VERTICAL, 10, 0, false, true); \
- EXPECT_FLOAT_EQ(0.f, scrollbar->opacity()); \
- \
- scroll->AddChild(contents.Pass()); \
- root->AddChild(scroll.Pass()); \
- root->SetHasRenderSurface(true); \
- scrollbar->SetScrollLayerAndClipLayerByIds(2, 1); \
- root->AddChild(scrollbar.Pass()); \
- \
- host_impl_->active_tree()->SetRootLayer(root.Pass()); \
- host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 2, \
- Layer::INVALID_ID); \
- host_impl_->active_tree()->DidBecomeActive(); \
- DrawFrame();
-
-TEST_F(LayerTreeHostImplTest, ScrollbarLinearFadeScheduling) {
- LayerTreeSettings settings;
- settings.scrollbar_animator = LayerTreeSettings::LINEAR_FADE;
- settings.scrollbar_fade_delay_ms = 20;
- settings.scrollbar_fade_duration_ms = 20;
-
- SETUP_LAYERS_FOR_SCROLLBAR_ANIMATION_TEST();
+class LayerTreeHostImplTestScrollbarAnimation : public LayerTreeHostImplTest {
+ protected:
+ void SetupLayers(LayerTreeSettings settings) {
+ gfx::Size viewport_size(10, 10);
+ gfx::Size content_size(100, 100);
+
+ LayerTreeHostImplOverridePhysicalTime* host_impl_override_time =
+ new LayerTreeHostImplOverridePhysicalTime(settings, this, &proxy_,
+ shared_bitmap_manager_.get(),
+ &stats_instrumentation_);
+ host_impl_ = make_scoped_ptr(host_impl_override_time);
+ host_impl_->InitializeRenderer(CreateOutputSurface());
+ host_impl_->SetViewportSize(viewport_size);
- base::TimeTicks fake_now = gfx::FrameTime::Now();
+ scoped_ptr<LayerImpl> root =
+ LayerImpl::Create(host_impl_->active_tree(), 1);
+ root->SetBounds(viewport_size);
- EXPECT_FALSE(did_request_animate_);
- EXPECT_FALSE(did_request_redraw_);
- EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
- EXPECT_TRUE(animation_task_.Equals(base::Closure()));
+ scoped_ptr<LayerImpl> scroll =
+ LayerImpl::Create(host_impl_->active_tree(), 2);
+ scroll->SetScrollClipLayer(root->id());
+ scroll->PushScrollOffsetFromMainThread(gfx::ScrollOffset());
+ root->SetBounds(viewport_size);
+ scroll->SetBounds(content_size);
+ scroll->SetContentBounds(content_size);
+ scroll->SetIsContainerForFixedPositionLayers(true);
- // If no scroll happened during a scroll gesture, it should have no effect.
- host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL);
- host_impl_->ScrollEnd();
- EXPECT_FALSE(did_request_animate_);
- EXPECT_FALSE(did_request_redraw_);
- EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
- EXPECT_TRUE(animation_task_.Equals(base::Closure()));
+ scoped_ptr<LayerImpl> contents =
+ LayerImpl::Create(host_impl_->active_tree(), 3);
+ contents->SetDrawsContent(true);
+ contents->SetBounds(content_size);
+ contents->SetContentBounds(content_size);
- // After a scroll, a fade animation should be scheduled about 20ms from now.
- host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL);
- host_impl_->ScrollBy(gfx::Point(), gfx::Vector2dF(0, 5));
- EXPECT_FALSE(did_request_animate_);
- EXPECT_TRUE(did_request_redraw_);
- did_request_redraw_ = false;
- EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
- EXPECT_TRUE(animation_task_.Equals(base::Closure()));
+ scoped_ptr<SolidColorScrollbarLayerImpl> scrollbar =
+ SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), 4,
+ VERTICAL, 10, 0, false, true);
+ EXPECT_FLOAT_EQ(0.f, scrollbar->opacity());
- host_impl_->ScrollEnd();
- EXPECT_FALSE(did_request_animate_);
- EXPECT_FALSE(did_request_redraw_);
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(20), requested_animation_delay_);
- EXPECT_FALSE(animation_task_.Equals(base::Closure()));
-
- fake_now += requested_animation_delay_;
- requested_animation_delay_ = base::TimeDelta();
- animation_task_.Run();
- animation_task_ = base::Closure();
- EXPECT_TRUE(did_request_animate_);
- did_request_animate_ = false;
- EXPECT_FALSE(did_request_redraw_);
+ scroll->AddChild(contents.Pass());
+ root->AddChild(scroll.Pass());
+ root->SetHasRenderSurface(true);
+ scrollbar->SetScrollLayerAndClipLayerByIds(2, 1);
+ root->AddChild(scrollbar.Pass());
- // After the fade begins, we should start getting redraws instead of a
- // scheduled animation.
- host_impl_->Animate(fake_now);
- EXPECT_TRUE(did_request_animate_);
- did_request_animate_ = false;
- EXPECT_TRUE(did_request_redraw_);
- did_request_redraw_ = false;
- EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
- EXPECT_TRUE(animation_task_.Equals(base::Closure()));
+ host_impl_->active_tree()->SetRootLayer(root.Pass());
+ host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 2,
+ Layer::INVALID_ID);
+ host_impl_->active_tree()->DidBecomeActive();
+ DrawFrame();
+ }
- // Setting the scroll offset outside a scroll should also cause the scrollbar
- // to appear and to schedule a fade.
- host_impl_->InnerViewportScrollLayer()->PushScrollOffsetFromMainThread(
- gfx::ScrollOffset(5, 5));
- EXPECT_FALSE(did_request_animate_);
- EXPECT_FALSE(did_request_redraw_);
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(20), requested_animation_delay_);
- EXPECT_FALSE(animation_task_.Equals(base::Closure()));
- requested_animation_delay_ = base::TimeDelta();
- animation_task_ = base::Closure();
-
- // Unnecessarily Fade animation of solid color scrollbar is not triggered.
- host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL);
- host_impl_->ScrollBy(gfx::Point(), gfx::Vector2dF(5, 0));
- EXPECT_FALSE(did_request_animate_);
- EXPECT_TRUE(did_request_redraw_);
- did_request_redraw_ = false;
- EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
- EXPECT_TRUE(animation_task_.Equals(base::Closure()));
+ void RunTest(LayerTreeSettings::ScrollbarAnimator animator) {
+ LayerTreeSettings settings;
+ settings.scrollbar_animator = animator;
+ settings.scrollbar_fade_delay_ms = 20;
+ settings.scrollbar_fade_duration_ms = 20;
- host_impl_->ScrollEnd();
- EXPECT_FALSE(did_request_animate_);
- EXPECT_FALSE(did_request_redraw_);
- EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
- EXPECT_TRUE(animation_task_.Equals(base::Closure()));
-}
+ SetupLayers(settings);
-TEST_F(LayerTreeHostImplTest, ScrollbarFadePinchZoomScrollbars) {
- LayerTreeSettings settings;
- settings.scrollbar_animator = LayerTreeSettings::LINEAR_FADE;
- settings.scrollbar_fade_delay_ms = 20;
- settings.scrollbar_fade_duration_ms = 20;
- settings.use_pinch_zoom_scrollbars = true;
+ base::TimeTicks fake_now = gfx::FrameTime::Now();
- SETUP_LAYERS_FOR_SCROLLBAR_ANIMATION_TEST();
+ EXPECT_FALSE(did_request_animate_);
+ EXPECT_FALSE(did_request_redraw_);
+ EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
+ EXPECT_TRUE(animation_task_.Equals(base::Closure()));
- base::TimeTicks fake_now = gfx::FrameTime::Now();
+ // If no scroll happened during a scroll gesture, it should have no effect.
+ host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL);
+ host_impl_->ScrollEnd();
+ EXPECT_FALSE(did_request_animate_);
+ EXPECT_FALSE(did_request_redraw_);
+ EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
+ EXPECT_TRUE(animation_task_.Equals(base::Closure()));
- host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 4.f);
+ // After a scroll, a scrollbar animation should be scheduled about 20ms from
+ // now.
+ host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL);
+ host_impl_->ScrollBy(gfx::Point(), gfx::Vector2dF(0, 5));
+ EXPECT_FALSE(did_request_animate_);
+ EXPECT_TRUE(did_request_redraw_);
+ did_request_redraw_ = false;
+ EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
+ EXPECT_TRUE(animation_task_.Equals(base::Closure()));
- EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
- EXPECT_FALSE(did_request_animate_);
+ host_impl_->ScrollEnd();
+ EXPECT_FALSE(did_request_animate_);
+ EXPECT_FALSE(did_request_redraw_);
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(20),
+ requested_animation_delay_);
+ EXPECT_FALSE(animation_task_.Equals(base::Closure()));
+
+ fake_now += requested_animation_delay_;
+ requested_animation_delay_ = base::TimeDelta();
+ animation_task_.Run();
+ animation_task_ = base::Closure();
+ EXPECT_TRUE(did_request_animate_);
+ did_request_animate_ = false;
+ EXPECT_FALSE(did_request_redraw_);
- // If no scroll happened during a scroll gesture, it should have no effect.
- host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL);
- host_impl_->ScrollEnd();
- EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
- EXPECT_FALSE(did_request_animate_);
- EXPECT_TRUE(animation_task_.Equals(base::Closure()));
+ // After the scrollbar animation begins, we should start getting redraws.
+ host_impl_->Animate(fake_now);
+ EXPECT_TRUE(did_request_animate_);
+ did_request_animate_ = false;
+ EXPECT_TRUE(did_request_redraw_);
+ did_request_redraw_ = false;
+ EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
+ EXPECT_TRUE(animation_task_.Equals(base::Closure()));
- // After a scroll, no fade animation should be scheduled.
- host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL);
- host_impl_->ScrollBy(gfx::Point(), gfx::Vector2dF(5, 0));
- host_impl_->ScrollEnd();
- did_request_redraw_ = false;
- EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
- EXPECT_FALSE(did_request_animate_);
- requested_animation_delay_ = base::TimeDelta();
+ // Setting the scroll offset outside a scroll should also cause the
+ // scrollbar to appear and to schedule a scrollbar animation.
+ host_impl_->InnerViewportScrollLayer()->PushScrollOffsetFromMainThread(
+ gfx::ScrollOffset(5, 5));
+ EXPECT_FALSE(did_request_animate_);
+ EXPECT_FALSE(did_request_redraw_);
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(20),
+ requested_animation_delay_);
+ EXPECT_FALSE(animation_task_.Equals(base::Closure()));
+ requested_animation_delay_ = base::TimeDelta();
+ animation_task_ = base::Closure();
+
+ // Scrollbar animation is not triggered unnecessarily.
+ host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL);
+ host_impl_->ScrollBy(gfx::Point(), gfx::Vector2dF(5, 0));
+ EXPECT_FALSE(did_request_animate_);
+ EXPECT_TRUE(did_request_redraw_);
+ did_request_redraw_ = false;
+ EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
+ EXPECT_TRUE(animation_task_.Equals(base::Closure()));
- // We should not see any draw requests.
- fake_now += base::TimeDelta::FromMilliseconds(25);
- EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
- EXPECT_FALSE(did_request_animate_);
+ host_impl_->ScrollEnd();
+ EXPECT_FALSE(did_request_animate_);
+ EXPECT_FALSE(did_request_redraw_);
+ EXPECT_EQ(base::TimeDelta(), requested_animation_delay_);
+ EXPECT_TRUE(animation_task_.Equals(base::Closure()));
- // Make page scale > min so that subsequent scrolls will trigger fades.
- host_impl_->SetPageScaleOnActiveTree(1.1f);
+ // Changing page scale triggers scrollbar animation.
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 4.f);
+ host_impl_->SetPageScaleOnActiveTree(1.1f);
+ EXPECT_FALSE(did_request_animate_);
+ EXPECT_FALSE(did_request_redraw_);
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(20),
+ requested_animation_delay_);
+ EXPECT_FALSE(animation_task_.Equals(base::Closure()));
+ requested_animation_delay_ = base::TimeDelta();
+ animation_task_ = base::Closure();
+ }
+};
- // After a scroll, a fade animation should be scheduled about 20ms from now.
- host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL);
- host_impl_->ScrollBy(gfx::Point(), gfx::Vector2dF(5, 0));
- host_impl_->ScrollEnd();
- did_request_redraw_ = false;
- EXPECT_LT(base::TimeDelta::FromMilliseconds(19), requested_animation_delay_);
- EXPECT_FALSE(did_request_animate_);
- requested_animation_delay_ = base::TimeDelta();
- animation_task_.Run();
+TEST_F(LayerTreeHostImplTestScrollbarAnimation, LinearFade) {
+ RunTest(LayerTreeSettings::LINEAR_FADE);
+}
- // After the fade begins, we should start getting redraws instead of a
- // scheduled animation.
- fake_now += base::TimeDelta::FromMilliseconds(25);
- host_impl_->Animate(fake_now);
- EXPECT_TRUE(did_request_animate_);
+TEST_F(LayerTreeHostImplTestScrollbarAnimation, Thinning) {
+ RunTest(LayerTreeSettings::THINNING);
}
void LayerTreeHostImplTest::SetupMouseMoveAtWithDeviceScale(
@@ -1960,6 +1928,16 @@ class DidDrawCheckLayer : public LayerImpl {
did_draw_called_ = false;
}
+ static void IgnoreResult(scoped_ptr<CopyOutputResult> result) {}
+
+ void AddCopyRequest() {
+ ScopedPtrVector<CopyOutputRequest> requests;
+ requests.push_back(
+ CopyOutputRequest::CreateRequest(base::Bind(&IgnoreResult)));
+ SetHasRenderSurface(true);
+ PassCopyRequests(&requests);
+ }
+
protected:
DidDrawCheckLayer(LayerTreeImpl* tree_impl, int id)
: LayerImpl(tree_impl, id),
@@ -2189,89 +2167,132 @@ class MissingTextureAnimatingLayer : public DidDrawCheckLayer {
bool had_incomplete_tile_;
};
-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());
- root->SetHasRenderSurface(true);
- bool tile_missing = false;
- bool had_incomplete_tile = false;
- bool is_animating = false;
- root->AddChild(
- MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
- 2,
- tile_missing,
- had_incomplete_tile,
- is_animating,
- host_impl_->resource_provider()));
-
- LayerTreeHostImpl::FrameData frame;
+struct PrepareToDrawSuccessTestCase {
+ struct State {
+ bool has_missing_tile = false;
+ bool has_incomplete_tile = false;
+ bool is_animating = false;
+ bool has_copy_request = false;
+ };
+ bool high_res_required = false;
+ State layer_before;
+ State layer_between;
+ State layer_after;
+ DrawResult expected_result;
+
+ explicit PrepareToDrawSuccessTestCase(DrawResult result)
+ : expected_result(result) {}
+};
- EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
- host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame);
-}
+TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsAndFails) {
+ std::vector<PrepareToDrawSuccessTestCase> cases;
+
+ // 0. Default case.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ // 1. Animated layer first.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_before.is_animating = true;
+ // 2. Animated layer between.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_between.is_animating = true;
+ // 3. Animated layer last.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_after.is_animating = true;
+ // 4. Missing tile first.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_before.has_missing_tile = true;
+ // 5. Missing tile between.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_between.has_missing_tile = true;
+ // 6. Missing tile last.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_after.has_missing_tile = true;
+ // 7. Incomplete tile first.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_before.has_incomplete_tile = true;
+ // 8. Incomplete tile between.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_between.has_incomplete_tile = true;
+ // 9. Incomplete tile last.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_after.has_incomplete_tile = true;
+ // 10. Animation with missing tile.
+ cases.push_back(
+ PrepareToDrawSuccessTestCase(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS));
+ cases.back().layer_between.has_missing_tile = true;
+ cases.back().layer_between.is_animating = true;
+ // 11. Animation with missing tile and copy request after. Must succeed
+ // because the animation checkerboard means we'll get a new frame and the copy
+ // request's layer may be destroyed.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_between.has_missing_tile = true;
+ cases.back().layer_between.is_animating = true;
+ cases.back().layer_after.has_copy_request = true;
+ // 12. Animation with missing tile and copy request before. Must succeed
+ // because the animation checkerboard means we'll get a new frame and the copy
+ // request's layer may be destroyed.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_between.has_missing_tile = true;
+ cases.back().layer_between.is_animating = true;
+ cases.back().layer_before.has_copy_request = true;
+ // 13. Animation with incomplete tile.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_between.has_incomplete_tile = true;
+ cases.back().layer_between.is_animating = true;
+
+ // 14. High res required.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().high_res_required = true;
+ // 15. High res required with incomplete tile.
+ cases.push_back(
+ PrepareToDrawSuccessTestCase(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT));
+ cases.back().high_res_required = true;
+ cases.back().layer_between.has_incomplete_tile = true;
+ // 16. High res required with missing tile.
+ cases.push_back(
+ PrepareToDrawSuccessTestCase(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT));
+ cases.back().high_res_required = true;
+ cases.back().layer_between.has_missing_tile = true;
+
+ // 17. High res required is higher priority than animating missing tiles.
+ cases.push_back(
+ PrepareToDrawSuccessTestCase(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT));
+ cases.back().high_res_required = true;
+ cases.back().layer_between.has_missing_tile = true;
+ cases.back().layer_after.has_missing_tile = true;
+ cases.back().layer_after.is_animating = true;
+ // 18. High res required is higher priority than animating missing tiles.
+ cases.push_back(
+ PrepareToDrawSuccessTestCase(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT));
+ cases.back().high_res_required = true;
+ cases.back().layer_between.has_missing_tile = true;
+ cases.back().layer_before.has_missing_tile = true;
+ cases.back().layer_before.is_animating = true;
+
+ // 19. High res required is higher priority than copy requests.
+ cases.push_back(
+ PrepareToDrawSuccessTestCase(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT));
+ cases.back().high_res_required = true;
+ cases.back().layer_between.has_missing_tile = true;
+ cases.back().layer_after.has_copy_request = true;
+ // 20. High res required is higher priority than copy requests.
+ cases.push_back(
+ PrepareToDrawSuccessTestCase(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT));
+ cases.back().high_res_required = true;
+ cases.back().layer_between.has_missing_tile = true;
+ cases.back().layer_before.has_copy_request = true;
+ // 21. High res required is higher priority than copy requests.
+ cases.push_back(
+ PrepareToDrawSuccessTestCase(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT));
+ cases.back().high_res_required = true;
+ cases.back().layer_between.has_missing_tile = true;
+ cases.back().layer_between.has_copy_request = true;
-TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithAnimatedLayer) {
host_impl_->active_tree()->SetRootLayer(
DidDrawCheckLayer::Create(host_impl_->active_tree(), 1));
DidDrawCheckLayer* root =
static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
root->SetHasRenderSurface(true);
- bool tile_missing = false;
- bool had_incomplete_tile = false;
- bool is_animating = true;
- root->AddChild(
- MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
- 2,
- 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, PrepareToDrawSucceedsWithMissingTiles) {
- host_impl_->active_tree()->SetRootLayer(
- DidDrawCheckLayer::Create(host_impl_->active_tree(), 3));
- DidDrawCheckLayer* root =
- static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
- root->SetHasRenderSurface(true);
-
- LayerTreeHostImpl::FrameData frame;
- EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
- host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame);
- host_impl_->SwapBuffers(frame);
-
- bool tile_missing = true;
- bool had_incomplete_tile = false;
- 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 frame2;
- EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame2));
- host_impl_->DrawLayers(&frame2, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame2);
-}
-
-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());
- root->SetHasRenderSurface(true);
LayerTreeHostImpl::FrameData frame;
EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
@@ -2279,117 +2300,83 @@ TEST_F(LayerTreeHostImplTest, PrepareToDrawSucceedsWithIncompleteTile) {
host_impl_->DidDrawAllLayers(frame);
host_impl_->SwapBuffers(frame);
- 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 frame2;
- EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame2));
- host_impl_->DrawLayers(&frame2, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame2);
-}
+ for (size_t i = 0; i < cases.size(); ++i) {
+ const auto& testcase = cases[i];
+ std::vector<LayerImpl*> to_remove;
+ for (auto* child : root->children())
+ to_remove.push_back(child);
+ for (auto* child : to_remove)
+ root->RemoveChild(child);
+
+ std::ostringstream scope;
+ scope << "Test case: " << i;
+ SCOPED_TRACE(scope.str());
+
+ root->AddChild(MissingTextureAnimatingLayer::Create(
+ host_impl_->active_tree(), 2, testcase.layer_before.has_missing_tile,
+ testcase.layer_before.has_incomplete_tile,
+ testcase.layer_before.is_animating, host_impl_->resource_provider()));
+ DidDrawCheckLayer* before =
+ static_cast<DidDrawCheckLayer*>(root->children().back());
+ if (testcase.layer_before.has_copy_request)
+ before->AddCopyRequest();
+
+ root->AddChild(MissingTextureAnimatingLayer::Create(
+ host_impl_->active_tree(), 3, testcase.layer_between.has_missing_tile,
+ testcase.layer_between.has_incomplete_tile,
+ testcase.layer_between.is_animating, host_impl_->resource_provider()));
+ DidDrawCheckLayer* between =
+ static_cast<DidDrawCheckLayer*>(root->children().back());
+ if (testcase.layer_between.has_copy_request)
+ between->AddCopyRequest();
+
+ root->AddChild(MissingTextureAnimatingLayer::Create(
+ host_impl_->active_tree(), 4, testcase.layer_after.has_missing_tile,
+ testcase.layer_after.has_incomplete_tile,
+ testcase.layer_after.is_animating, host_impl_->resource_provider()));
+ DidDrawCheckLayer* after =
+ static_cast<DidDrawCheckLayer*>(root->children().back());
+ if (testcase.layer_after.has_copy_request)
+ after->AddCopyRequest();
+
+ if (testcase.high_res_required)
+ host_impl_->SetRequiresHighResToDraw();
-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());
- root->SetHasRenderSurface(true);
-
- LayerTreeHostImpl::FrameData frame;
- EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
- host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame);
- host_impl_->SwapBuffers(frame);
-
- bool tile_missing = true;
- bool had_incomplete_tile = false;
- bool is_animating = true;
- root->AddChild(
- MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
- 6,
- tile_missing,
- had_incomplete_tile,
- is_animating,
- host_impl_->resource_provider()));
- LayerTreeHostImpl::FrameData frame2;
- EXPECT_EQ(DRAW_ABORTED_CHECKERBOARD_ANIMATIONS,
- host_impl_->PrepareToDraw(&frame2));
- host_impl_->DrawLayers(&frame2, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame2);
+ LayerTreeHostImpl::FrameData frame;
+ EXPECT_EQ(testcase.expected_result, host_impl_->PrepareToDraw(&frame));
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
+ host_impl_->DidDrawAllLayers(frame);
+ host_impl_->SwapBuffers(frame);
+ }
}
TEST_F(LayerTreeHostImplTest,
- PrepareToDrawSucceedsWithAnimationAndIncompleteTiles) {
- host_impl_->active_tree()->SetRootLayer(
- DidDrawCheckLayer::Create(host_impl_->active_tree(), 5));
- DidDrawCheckLayer* root =
- static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
- root->SetHasRenderSurface(true);
-
- LayerTreeHostImpl::FrameData frame;
- EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
- host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame);
- host_impl_->SwapBuffers(frame);
-
- bool tile_missing = false;
- bool had_incomplete_tile = true;
- bool is_animating = true;
- root->AddChild(
- MissingTextureAnimatingLayer::Create(host_impl_->active_tree(),
- 6,
- tile_missing,
- had_incomplete_tile,
- is_animating,
- host_impl_->resource_provider()));
- LayerTreeHostImpl::FrameData frame2;
- EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame2));
- host_impl_->DrawLayers(&frame2, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame2);
-}
-
-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());
- root->SetHasRenderSurface(true);
-
- LayerTreeHostImpl::FrameData frame;
- EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
- host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame);
- host_impl_->SwapBuffers(frame);
-
- bool tile_missing = false;
- 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_->SetRequiresHighResToDraw();
- LayerTreeHostImpl::FrameData frame2;
- EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame2));
- host_impl_->DrawLayers(&frame2, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame2);
-}
+ PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) {
+ CreateHostImpl(DefaultSettings(),
+ FakeOutputSurface::CreateAlwaysDrawAndSwap3d());
+ EXPECT_TRUE(host_impl_->output_surface()
+ ->capabilities()
+ .draw_and_swap_full_viewport_every_frame);
+
+ std::vector<PrepareToDrawSuccessTestCase> cases;
+
+ // 0. Default case.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ // 1. Animation with missing tile.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().layer_between.has_missing_tile = true;
+ cases.back().layer_between.is_animating = true;
+ // 2. High res required with incomplete tile.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().high_res_required = true;
+ cases.back().layer_between.has_incomplete_tile = true;
+ // 3. High res required with missing tile.
+ cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS));
+ cases.back().high_res_required = true;
+ cases.back().layer_between.has_missing_tile = true;
-TEST_F(LayerTreeHostImplTest,
- PrepareToDrawFailsWhenHighResRequiredAndIncompleteTiles) {
host_impl_->active_tree()->SetRootLayer(
- DidDrawCheckLayer::Create(host_impl_->active_tree(), 7));
+ DidDrawCheckLayer::Create(host_impl_->active_tree(), 1));
DidDrawCheckLayer* root =
static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
root->SetHasRenderSurface(true);
@@ -2400,54 +2387,54 @@ TEST_F(LayerTreeHostImplTest,
host_impl_->DidDrawAllLayers(frame);
host_impl_->SwapBuffers(frame);
- bool tile_missing = false;
- bool had_incomplete_tile = true;
- 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_->SetRequiresHighResToDraw();
- LayerTreeHostImpl::FrameData frame2;
- EXPECT_EQ(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT,
- host_impl_->PrepareToDraw(&frame2));
- host_impl_->DrawLayers(&frame2, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame2);
-}
+ for (size_t i = 0; i < cases.size(); ++i) {
+ const auto& testcase = cases[i];
+ std::vector<LayerImpl*> to_remove;
+ for (auto* child : root->children())
+ to_remove.push_back(child);
+ for (auto* child : to_remove)
+ root->RemoveChild(child);
+
+ std::ostringstream scope;
+ scope << "Test case: " << i;
+ SCOPED_TRACE(scope.str());
+
+ root->AddChild(MissingTextureAnimatingLayer::Create(
+ host_impl_->active_tree(), 2, testcase.layer_before.has_missing_tile,
+ testcase.layer_before.has_incomplete_tile,
+ testcase.layer_before.is_animating, host_impl_->resource_provider()));
+ DidDrawCheckLayer* before =
+ static_cast<DidDrawCheckLayer*>(root->children().back());
+ if (testcase.layer_before.has_copy_request)
+ before->AddCopyRequest();
+
+ root->AddChild(MissingTextureAnimatingLayer::Create(
+ host_impl_->active_tree(), 3, testcase.layer_between.has_missing_tile,
+ testcase.layer_between.has_incomplete_tile,
+ testcase.layer_between.is_animating, host_impl_->resource_provider()));
+ DidDrawCheckLayer* between =
+ static_cast<DidDrawCheckLayer*>(root->children().back());
+ if (testcase.layer_between.has_copy_request)
+ between->AddCopyRequest();
+
+ root->AddChild(MissingTextureAnimatingLayer::Create(
+ host_impl_->active_tree(), 4, testcase.layer_after.has_missing_tile,
+ testcase.layer_after.has_incomplete_tile,
+ testcase.layer_after.is_animating, host_impl_->resource_provider()));
+ DidDrawCheckLayer* after =
+ static_cast<DidDrawCheckLayer*>(root->children().back());
+ if (testcase.layer_after.has_copy_request)
+ after->AddCopyRequest();
+
+ if (testcase.high_res_required)
+ host_impl_->SetRequiresHighResToDraw();
-TEST_F(LayerTreeHostImplTest,
- PrepareToDrawFailsWhenHighResRequiredAndMissingTile) {
- host_impl_->active_tree()->SetRootLayer(
- DidDrawCheckLayer::Create(host_impl_->active_tree(), 7));
- DidDrawCheckLayer* root =
- static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer());
- root->SetHasRenderSurface(true);
-
- LayerTreeHostImpl::FrameData frame;
- EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame));
- host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame);
- host_impl_->SwapBuffers(frame);
-
- 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_->SetRequiresHighResToDraw();
- LayerTreeHostImpl::FrameData frame2;
- EXPECT_EQ(DRAW_ABORTED_MISSING_HIGH_RES_CONTENT,
- host_impl_->PrepareToDraw(&frame2));
- host_impl_->DrawLayers(&frame2, gfx::FrameTime::Now());
- host_impl_->DidDrawAllLayers(frame2);
+ LayerTreeHostImpl::FrameData frame;
+ EXPECT_EQ(testcase.expected_result, host_impl_->PrepareToDraw(&frame));
+ host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
+ host_impl_->DidDrawAllLayers(frame);
+ host_impl_->SwapBuffers(frame);
+ }
}
TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) {
@@ -6530,9 +6517,10 @@ TEST_F(LayerTreeHostImplTest, ForcedDrawToSoftwareDeviceBasicRender) {
EXPECT_EQ(1, software_device->frames_began_);
EXPECT_EQ(1, software_device->frames_ended_);
- // Call other API methods that are likely to hit NULL pointer in this mode.
- EXPECT_TRUE(host_impl_->AsValue().get());
- EXPECT_TRUE(host_impl_->ActivationStateAsValue().get());
+ // Call another API method that is likely to hit nullptr in this mode.
+ scoped_refptr<base::trace_event::TracedValue> state =
+ make_scoped_refptr(new base::trace_event::TracedValue());
+ host_impl_->ActivationStateAsValueInto(state.get());
}
TEST_F(LayerTreeHostImplTest,
@@ -7117,7 +7105,7 @@ TEST_F(LayerTreeHostImplTest, ScrollUnknownScrollAncestorMismatch) {
host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL));
}
-TEST_F(LayerTreeHostImplTest, ScrollInvisibleScroller) {
+TEST_F(LayerTreeHostImplTest, NotScrollInvisibleScroller) {
gfx::Size content_size(100, 100);
SetupScrollAndContentsLayers(content_size);
@@ -7141,13 +7129,50 @@ TEST_F(LayerTreeHostImplTest, ScrollInvisibleScroller) {
// any layer that is a drawn RSLL member, then we can ignore the hit.
//
// Why SCROLL_STARTED? In this case, it's because we've bubbled out and
- // started overscrolling the inner viewport.
+ // started scrolling the inner viewport.
EXPECT_EQ(InputHandler::SCROLL_STARTED,
host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL));
EXPECT_EQ(2, host_impl_->CurrentlyScrollingLayer()->id());
}
+TEST_F(LayerTreeHostImplTest, ScrollInvisibleScrollerWithVisibleDescendent) {
+ gfx::Size content_size(100, 100);
+ SetupScrollAndContentsLayers(content_size);
+
+ LayerImpl* root = host_impl_->active_tree()->LayerById(1);
+ LayerImpl* root_scroll_layer = host_impl_->active_tree()->LayerById(2);
+
+ scoped_ptr<LayerImpl> invisible_scroll_layer =
+ CreateScrollableLayer(7, content_size, root);
+ invisible_scroll_layer->SetDrawsContent(false);
+
+ scoped_ptr<LayerImpl> child_layer =
+ LayerImpl::Create(host_impl_->active_tree(), 8);
+ child_layer->SetDrawsContent(false);
+
+ scoped_ptr<LayerImpl> grand_child_layer =
+ LayerImpl::Create(host_impl_->active_tree(), 9);
+ grand_child_layer->SetDrawsContent(true);
+ grand_child_layer->SetBounds(content_size);
+ grand_child_layer->SetContentBounds(content_size);
+ // Move the grand child so it's not hit by our test point.
+ grand_child_layer->SetPosition(gfx::PointF(10.f, 10.f));
+
+ child_layer->AddChild(grand_child_layer.Pass());
+ invisible_scroll_layer->AddChild(child_layer.Pass());
+ root_scroll_layer->AddChild(invisible_scroll_layer.Pass());
+
+ DrawFrame();
+
+ // We should have scrolled |invisible_scroll_layer| as it was hit and it has
+ // a descendant which is a drawn RSLL member.
+ EXPECT_EQ(InputHandler::SCROLL_STARTED,
+ host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL));
+
+ EXPECT_EQ(7, host_impl_->CurrentlyScrollingLayer()->id());
+}
+
TEST_F(LayerTreeHostImplTest, ScrollInvisibleScrollerWithVisibleScrollChild) {
// This test case is very similar to the one above with one key difference:
// the invisible scroller has a scroll child that is indeed draw contents.
@@ -7193,12 +7218,9 @@ TEST_F(LayerTreeHostImplTest, ScrollInvisibleScrollerWithVisibleScrollChild) {
DrawFrame();
- // We should not have scrolled |child_scroll| even though we technically "hit"
- // it. The reason for this is that if the scrolling the scroll would not move
- // any layer that is a drawn RSLL member, then we can ignore the hit.
- //
- // Why SCROLL_STARTED? In this case, it's because we've bubbled out and
- // started overscrolling the inner viewport.
+ // We should have scrolled |child_scroll| even though it is invisible.
+ // The reason for this is that if the scrolling the scroll would move a layer
+ // that is a drawn RSLL member, then we should accept this hit.
EXPECT_EQ(InputHandler::SCROLL_STARTED,
host_impl_->ScrollBegin(gfx::Point(), InputHandler::WHEEL));
@@ -7495,7 +7517,8 @@ TEST_F(LayerTreeHostImplWithTopControlsTest, ScrollHandledByTopControls) {
float offset = top_controls_height_ - residue;
EXPECT_TRUE(
host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
- EXPECT_EQ(-offset, host_impl_->top_controls_manager()->ControlsTopOffset());
+ EXPECT_FLOAT_EQ(-offset,
+ host_impl_->top_controls_manager()->ControlsTopOffset());
EXPECT_EQ(gfx::Vector2dF().ToString(),
scroll_layer->CurrentScrollOffset().ToString());
@@ -7554,7 +7577,8 @@ TEST_F(LayerTreeHostImplWithTopControlsTest, TopControlsAnimationAtOrigin) {
float offset = top_controls_height_ - residue;
EXPECT_TRUE(
host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
- EXPECT_EQ(-offset, host_impl_->top_controls_manager()->ControlsTopOffset());
+ EXPECT_FLOAT_EQ(-offset,
+ host_impl_->top_controls_manager()->ControlsTopOffset());
EXPECT_EQ(gfx::Vector2dF().ToString(),
scroll_layer->CurrentScrollOffset().ToString());
@@ -7624,7 +7648,8 @@ TEST_F(LayerTreeHostImplWithTopControlsTest, TopControlsAnimationAfterScroll) {
float offset = top_controls_height_ - residue;
EXPECT_TRUE(
host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
- EXPECT_EQ(-offset, host_impl_->top_controls_manager()->ControlsTopOffset());
+ EXPECT_FLOAT_EQ(-offset,
+ host_impl_->top_controls_manager()->ControlsTopOffset());
EXPECT_EQ(gfx::Vector2dF(0, initial_scroll_offset).ToString(),
scroll_layer->CurrentScrollOffset().ToString());
@@ -7687,7 +7712,8 @@ TEST_F(LayerTreeHostImplWithTopControlsTest,
float offset = top_controls_height_ - residue;
EXPECT_TRUE(
host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, offset)).did_scroll);
- EXPECT_EQ(-offset, host_impl_->top_controls_manager()->ControlsTopOffset());
+ EXPECT_FLOAT_EQ(-offset,
+ host_impl_->top_controls_manager()->ControlsTopOffset());
EXPECT_EQ(gfx::Vector2dF(0, initial_scroll_offset).ToString(),
scroll_layer->CurrentScrollOffset().ToString());
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/layer_tree_host_pixeltest_filters.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698