| 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..df092e8fa786f52a65945dd28114ebbd603243d0 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(ActiveCompositor());
|
| }
|
|
|
| void DidDrawOnRT() override { EndTest(); }
|
| @@ -29,12 +29,105 @@ 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), new_compositor_(nullptr) {}
|
| + void StartTest() override {
|
| + browser_view_renderer_->PostInvalidate(ActiveCompositor());
|
| + }
|
| +
|
| + 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(ActiveCompositor());
|
| + break;
|
| + case 2:
|
| + // The 2nd ondraw is skipped because there is no active compositor at
|
| + // the moment.
|
| + EXPECT_FALSE(success);
|
| + new_compositor_.reset(new content::TestSynchronousCompositor(0, 1));
|
| + new_compositor_->SetClient(browser_view_renderer_.get());
|
| + EXPECT_EQ(ActiveCompositor(), new_compositor_.get());
|
| + browser_view_renderer_->PostInvalidate(ActiveCompositor());
|
| + break;
|
| + case 3:
|
| + EXPECT_TRUE(success);
|
| + compositor_ = std::move(new_compositor_);
|
| +
|
| + EXPECT_EQ(ActiveCompositor(), compositor_.get());
|
| + browser_view_renderer_->PostInvalidate(ActiveCompositor());
|
| + break;
|
| + case 4:
|
| + EXPECT_TRUE(success);
|
| + EndTest();
|
| + }
|
| + }
|
| +
|
| + private:
|
| + int on_draw_count_;
|
| + std::unique_ptr<content::TestSynchronousCompositor> new_compositor_;
|
| +};
|
| +
|
| +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), new_compositor_(nullptr) {}
|
| + void StartTest() override {
|
| + browser_view_renderer_->PostInvalidate(ActiveCompositor());
|
| + }
|
| +
|
| + 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.
|
| + new_compositor_.reset(new content::TestSynchronousCompositor(0, 1));
|
| + new_compositor_->SetClient(browser_view_renderer_.get());
|
| + browser_view_renderer_->SetActiveCompositorID(CompositorID(0, 1));
|
| +
|
| + EXPECT_EQ(ActiveCompositor(), new_compositor_.get());
|
| + browser_view_renderer_->PostInvalidate(ActiveCompositor());
|
| + break;
|
| + case 2:
|
| + EXPECT_TRUE(success);
|
| + compositor_ = std::move(new_compositor_);
|
| +
|
| + EXPECT_EQ(ActiveCompositor(), compositor_.get());
|
| + browser_view_renderer_->PostInvalidate(ActiveCompositor());
|
| + break;
|
| + case 3:
|
| + EXPECT_TRUE(success);
|
| + EndTest();
|
| + }
|
| + }
|
| +
|
| + private:
|
| + int on_draw_count_;
|
| + std::unique_ptr<content::TestSynchronousCompositor> new_compositor_;
|
| +};
|
| +
|
| +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(ActiveCompositor());
|
| browser_view_renderer_->ClearView();
|
| }
|
|
|
| @@ -44,8 +137,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());
|
| + ActiveCompositor()); // Unset ClearView.
|
| + browser_view_renderer_->PostInvalidate(ActiveCompositor());
|
| } else {
|
| // Following OnDraws should succeed.
|
| EXPECT_TRUE(success);
|
| @@ -68,7 +161,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(ActiveCompositor());
|
| }
|
|
|
| void WillOnDraw() override {
|
| @@ -160,7 +253,7 @@ class CompositorNoFrameTest : public RenderingTest {
|
| CompositorNoFrameTest() : on_draw_count_(0) {}
|
|
|
| void StartTest() override {
|
| - browser_view_renderer_->PostInvalidate(compositor_.get());
|
| + browser_view_renderer_->PostInvalidate(ActiveCompositor());
|
| }
|
|
|
| void WillOnDraw() override {
|
| @@ -178,11 +271,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(ActiveCompositor());
|
| } 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(ActiveCompositor());
|
| } else if (2 == on_draw_count_) {
|
| // Should still succeed with last frame, even if no frame from compositor.
|
| EXPECT_TRUE(success);
|
| @@ -245,7 +338,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(ActiveCompositor());
|
| return true;
|
| }
|
| return false;
|
|
|