| Index: android_webview/browser/browser_view_renderer_unittest.cc
|
| diff --git a/android_webview/browser/browser_view_renderer_unittest.cc b/android_webview/browser/browser_view_renderer_unittest.cc
|
| index b4a9d42227241cef82d61d71a47608eb57d52001..04c7d6b9e3651080dfe0168f5cf19ae1445ae638 100644
|
| --- a/android_webview/browser/browser_view_renderer_unittest.cc
|
| +++ b/android_webview/browser/browser_view_renderer_unittest.cc
|
| @@ -59,4 +59,80 @@ class ClearViewTest : public RenderingTest {
|
|
|
| RENDERING_TEST_F(ClearViewTest);
|
|
|
| +// - The first ondraw is onscreen. It reads the default draw constraints. The
|
| +// first DrawGL will post the new constraints to UI thread.
|
| +// - The second onDraw is offscreen with an empty global visible rect. It reads
|
| +// the new draw constraints. The second DrawGL will be skipped because the
|
| +// WebView is offscreen.
|
| +// - The third onDraw is the result of force invalidate from the second onDraw.
|
| +// It reads the same draw constraints as the second onDraw does.
|
| +class TestAnimateInAndOutOfScreen : public RenderingTest {
|
| + public:
|
| + TestAnimateInAndOutOfScreen()
|
| + : on_draw_count_(0u), draw_constraints_updated_count_(0u) {
|
| + new_transform_.Scale(2.0, 2.0);
|
| + }
|
| +
|
| + void StartTest() override {
|
| + browser_view_renderer_->SetContinuousInvalidate(true);
|
| + }
|
| +
|
| + void WillOnDraw() override {
|
| + on_draw_count_++;
|
| + if (on_draw_count_ == 2u) {
|
| + browser_view_renderer_->PrepareToDraw(gfx::Vector2d(), gfx::Rect());
|
| + browser_view_renderer_->SetContinuousInvalidate(false);
|
| + }
|
| + }
|
| +
|
| + void DidOnDraw(bool success) override { EXPECT_TRUE(success); }
|
| +
|
| + bool WillDrawOnRT(SharedRendererState* functor,
|
| + AwDrawGLInfo& draw_info) override {
|
| + if (browser_view_renderer_->global_visible_rect_for_testing().IsEmpty())
|
| + return false;
|
| +
|
| + draw_info.width = window_->surface_size().width();
|
| + draw_info.height = window_->surface_size().height();
|
| + draw_info.is_layer = false;
|
| +
|
| + gfx::Transform transform;
|
| + if (draw_constraints_updated_count_ == 1u)
|
| + transform = new_transform_;
|
| +
|
| + transform.matrix().asColMajorf(draw_info.transform);
|
| + return true;
|
| + }
|
| +
|
| + void ParentDrawConstraintsUpdated() override {
|
| + draw_constraints_updated_count_++;
|
| + ParentCompositorDrawConstraints initial_constraints;
|
| + ParentCompositorDrawConstraints new_constraints(
|
| + false, new_transform_, gfx::Rect(window_->surface_size()));
|
| + if (draw_constraints_updated_count_ == 1u) {
|
| + EXPECT_TRUE(initial_constraints.Equals(
|
| + browser_view_renderer_->parent_draw_constraints_for_testing()));
|
| + }
|
| +
|
| + if (draw_constraints_updated_count_ == 2u) {
|
| + EXPECT_TRUE(new_constraints.Equals(
|
| + browser_view_renderer_->parent_draw_constraints_for_testing()));
|
| + }
|
| + if (draw_constraints_updated_count_ == 3u) {
|
| + EXPECT_TRUE(new_constraints.Equals(
|
| + browser_view_renderer_->parent_draw_constraints_for_testing()));
|
| + EndTest();
|
| + }
|
| + // Add test to assert the next time parent draw constraints will be the
|
| + // initial constraints.
|
| + }
|
| +
|
| + private:
|
| + size_t on_draw_count_;
|
| + size_t draw_constraints_updated_count_;
|
| + gfx::Transform new_transform_;
|
| +};
|
| +
|
| +RENDERING_TEST_F(TestAnimateInAndOutOfScreen);
|
| +
|
| } // namespace android_webview
|
|
|