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

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: 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
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;

Powered by Google App Engine
This is Rietveld 408576698