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

Unified Diff: android_webview/browser/browser_view_renderer_unittest.cc

Issue 2078383004: Add a BrowserViewRenderer unittest for compositor switch logic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comment Created 4 years, 6 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 | « android_webview/browser/browser_view_renderer.h ('k') | android_webview/browser/test/rendering_test.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « android_webview/browser/browser_view_renderer.h ('k') | android_webview/browser/test/rendering_test.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698