Chromium Code Reviews| 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 b3640f278add6c0452bb32f1276206c066783431..7b970b562765dd6bb059e029202c03bb1e7fce17 100644 |
| --- a/android_webview/browser/browser_view_renderer_unittest.cc |
| +++ b/android_webview/browser/browser_view_renderer_unittest.cc |
| @@ -21,7 +21,7 @@ namespace android_webview { |
| class SmokeTest : public RenderingTest { |
| void StartTest() override { |
| - browser_view_renderer_->PostInvalidate(compositor_.get()); |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| } |
| void DidDrawOnRT() override { EndTest(); } |
| @@ -29,12 +29,90 @@ class SmokeTest : public RenderingTest { |
| RENDERING_TEST_F(SmokeTest); |
| +// Test the case where SynchronousCompositor is constructed after the RVH that |
| +// owns it is switched to be active. |
| +class ActiveCompositorSwitchBeforeConstructionTest : public RenderingTest { |
| + public: |
| + ActiveCompositorSwitchBeforeConstructionTest() : on_draw_count_(0) {} |
| + void StartTest() override { |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| + } |
| + |
| + void DidOnDraw(bool success) override { |
| + on_draw_count_++; |
| + switch (on_draw_count_) { |
| + case 1: |
| + EXPECT_TRUE(success); |
| + // Change compositor here. And do another ondraw. |
| + // The previous active compositor id is 0, 0, now change it to 0, 1. |
| + browser_view_renderer_->SetActiveCompositorID(CompositorID(0, 1)); |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| + break; |
| + case 2: |
| + // The 2nd ondraw is skipped because there is no active compositor at |
| + // the moment. |
| + EXPECT_FALSE(success); |
| + compositor_.reset(new content::TestSynchronousCompositor(0, 1)); |
|
boliu
2016/06/21 17:29:47
this also destroyes the old one, can we have exerc
hush (inactive)
2016/06/21 21:27:25
Done.
|
| + compositor_->SetClient(browser_view_renderer_.get()); |
| + |
| + EXPECT_EQ(compositor(), compositor_.get()); |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| + break; |
| + case 3: |
| + EXPECT_TRUE(success); |
| + EXPECT_EQ(compositor(), compositor_.get()); |
| + EndTest(); |
| + } |
| + } |
| + |
| + private: |
| + int on_draw_count_; |
| +}; |
| + |
| +RENDERING_TEST_F(ActiveCompositorSwitchBeforeConstructionTest); |
| + |
| +// Test the case where SynchronousCompositor is constructed before the RVH that |
| +// owns it is switched to be active. |
| +class ActiveCompositorSwitchAfterConstructionTest : public RenderingTest { |
| + public: |
| + ActiveCompositorSwitchAfterConstructionTest() : on_draw_count_(0) {} |
| + void StartTest() override { |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| + } |
| + |
| + void DidOnDraw(bool success) override { |
| + on_draw_count_++; |
| + switch (on_draw_count_) { |
| + case 1: |
| + EXPECT_TRUE(success); |
| + // Create a new compositor here. And switch it to be active. And then |
| + // do another ondraw. |
| + compositor_.reset(new content::TestSynchronousCompositor(0, 1)); |
|
boliu
2016/06/21 17:29:47
ditto
hush (inactive)
2016/06/21 21:27:25
Done.
|
| + compositor_->SetClient(browser_view_renderer_.get()); |
| + browser_view_renderer_->SetActiveCompositorID(CompositorID(0, 1)); |
| + |
| + EXPECT_EQ(compositor(), compositor_.get()); |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| + break; |
| + case 2: |
| + EXPECT_TRUE(success); |
| + EXPECT_EQ(compositor(), compositor_.get()); |
| + EndTest(); |
| + } |
| + } |
| + |
| + private: |
| + int on_draw_count_; |
| +}; |
| + |
| +RENDERING_TEST_F(ActiveCompositorSwitchAfterConstructionTest); |
| + |
| class ClearViewTest : public RenderingTest { |
| public: |
| ClearViewTest() : on_draw_count_(0) {} |
| void StartTest() override { |
| - browser_view_renderer_->PostInvalidate(compositor_.get()); |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| browser_view_renderer_->ClearView(); |
| } |
| @@ -44,8 +122,8 @@ class ClearViewTest : public RenderingTest { |
| // First OnDraw should be skipped due to ClearView. |
| EXPECT_FALSE(success); |
| browser_view_renderer_->DidUpdateContent( |
| - compositor_.get()); // Unset ClearView. |
| - browser_view_renderer_->PostInvalidate(compositor_.get()); |
| + compositor()); // Unset ClearView. |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| } else { |
| // Following OnDraws should succeed. |
| EXPECT_TRUE(success); |
| @@ -68,7 +146,7 @@ class TestAnimateInAndOutOfScreen : public RenderingTest { |
| new_constraints_ = ParentCompositorDrawConstraints( |
| false, gfx::Transform(), window_->surface_size().IsEmpty()); |
| new_constraints_.transform.Scale(2.0, 2.0); |
| - browser_view_renderer_->PostInvalidate(compositor_.get()); |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| } |
| void WillOnDraw() override { |
| @@ -160,7 +238,7 @@ class CompositorNoFrameTest : public RenderingTest { |
| CompositorNoFrameTest() : on_draw_count_(0) {} |
| void StartTest() override { |
| - browser_view_renderer_->PostInvalidate(compositor_.get()); |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| } |
| void WillOnDraw() override { |
| @@ -178,11 +256,11 @@ class CompositorNoFrameTest : public RenderingTest { |
| if (0 == on_draw_count_) { |
| // Should fail as there has been no frames from compositor. |
| EXPECT_FALSE(success); |
| - browser_view_renderer_->PostInvalidate(compositor_.get()); |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| } else if (1 == on_draw_count_) { |
| // Should succeed with frame from compositor. |
| EXPECT_TRUE(success); |
| - browser_view_renderer_->PostInvalidate(compositor_.get()); |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| } else if (2 == on_draw_count_) { |
| // Should still succeed with last frame, even if no frame from compositor. |
| EXPECT_TRUE(success); |
| @@ -245,7 +323,7 @@ class ResourceRenderingTest : public RenderingTest { |
| bool AdvanceFrame() { |
| next_frame_ = GetFrame(frame_number_++); |
| if (next_frame_) { |
| - browser_view_renderer_->PostInvalidate(compositor_.get()); |
| + browser_view_renderer_->PostInvalidate(compositor()); |
| return true; |
| } |
| return false; |