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 0eba0a82c17b8268e9e38db6ec8c1f22b9e7dbfa..49f87b9ebc29c3b97a4402819daa72211d94705c 100644 |
| --- a/android_webview/browser/browser_view_renderer_unittest.cc |
| +++ b/android_webview/browser/browser_view_renderer_unittest.cc |
| @@ -13,6 +13,7 @@ |
| #include "android_webview/browser/test/rendering_test.h" |
| #include "base/location.h" |
| #include "base/single_thread_task_runner.h" |
| +#include "base/thread_task_runner_handle.h" |
| #include "cc/output/compositor_frame.h" |
| #include "content/public/test/test_synchronous_compositor_android.h" |
| @@ -123,6 +124,9 @@ class TestAnimateInAndOutOfScreen : public RenderingTest { |
| ParentCompositorDrawConstraints constraints = |
| GetCompositorFrameConsumer()->GetParentDrawConstraintsOnUI(); |
| switch (on_draw_count_) { |
| + case 0u: |
| + EXPECT_TRUE(DrawConstraintsEquals(constraints, initial_constraints_)); |
| + break; |
| case 1u: |
| EXPECT_TRUE(DrawConstraintsEquals(constraints, new_constraints_)); |
| break; |
| @@ -248,6 +252,7 @@ class ResourceRenderingTest : public RenderingTest { |
| }; |
| class SwitchOutputSurfaceIdTest : public ResourceRenderingTest { |
| + public: |
|
boliu
2016/05/10 15:18:19
are these new public calls needed? Are there subcl
Tobias Sargeant
2016/05/13 13:23:56
No they don't need to be; I was just aligning thes
|
| struct FrameInfo { |
| uint32_t output_surface_id; |
| cc::ResourceId resource_id; // Each frame contains a single resource. |
| @@ -314,6 +319,7 @@ class SwitchOutputSurfaceIdTest : public ResourceRenderingTest { |
| RENDERING_TEST_F(SwitchOutputSurfaceIdTest); |
| class RenderThreadManagerDeletionTest : public ResourceRenderingTest { |
| + public: |
| std::unique_ptr<content::SynchronousCompositor::Frame> GetFrame( |
| int frame_number) override { |
| if (frame_number > 0) { |
| @@ -334,7 +340,7 @@ class RenderThreadManagerDeletionTest : public ResourceRenderingTest { |
| void CheckResults() override { |
| OutputSurfaceResourceCountMap resource_counts; |
| - render_thread_manager_.reset(); |
| + functor_.reset(); |
| // Make sure resources for the last frame are returned. |
| EXPECT_EQ(expected_return_count_, GetReturnedResourceCounts()); |
| EndTest(); |
| @@ -346,4 +352,64 @@ class RenderThreadManagerDeletionTest : public ResourceRenderingTest { |
| RENDERING_TEST_F(RenderThreadManagerDeletionTest); |
| +class RenderThreadManagerSwitchTest : public ResourceRenderingTest { |
| + public: |
| + std::unique_ptr<content::SynchronousCompositor::Frame> GetFrame( |
| + int frame_number) override { |
| + switch (frame_number) { |
| + case 0: |
| + // Draw a frame with initial RTM. |
| + break; |
| + case 1: |
| + // Switch to new RTM. |
| + saved_functor_ = std::move(functor_); |
| + functor_.reset( |
| + new Functor(base::Bind(&RenderingTest::CreateRenderThreadManager, |
| + base::Unretained(this)))); |
| + browser_view_renderer_->SetCurrentCompositorFrameConsumer( |
| + functor_->GetCompositorFrameConsumer()); |
| + window_->SetDrawFunctor(functor_.get()); |
| + break; |
| + case 2: |
| + // Draw a frame with the new RTM, but also redraw the initial RTM. |
| + window_->RequestDrawGL(saved_functor_.get()); |
| + break; |
| + case 3: |
| + // Switch back to the initial RTM, allowing the new RTM to be destroyed. |
| + functor_ = std::move(saved_functor_); |
| + browser_view_renderer_->SetCurrentCompositorFrameConsumer( |
| + functor_->GetCompositorFrameConsumer()); |
| + window_->SetDrawFunctor(functor_.get()); |
| + break; |
| + default: |
| + return nullptr; |
| + } |
| + |
| + const uint32_t output_surface_id = 0u; |
| + const cc::ResourceId resource_id = |
| + static_cast<cc::ResourceId>(frame_number); |
| + |
| + std::unique_ptr<content::SynchronousCompositor::Frame> frame( |
| + new content::SynchronousCompositor::Frame); |
| + frame->output_surface_id = output_surface_id; |
| + frame->frame = ConstructFrame(resource_id); |
| + ++expected_return_count_[output_surface_id][resource_id]; |
| + return frame; |
| + } |
| + |
| + void CheckResults() override { |
| + OutputSurfaceResourceCountMap resource_counts; |
| + functor_.reset(); |
| + // Make sure resources for all frames are returned. |
| + EXPECT_EQ(expected_return_count_, GetReturnedResourceCounts()); |
| + EndTest(); |
| + } |
| + |
| + private: |
| + std::unique_ptr<Functor> saved_functor_; |
| + OutputSurfaceResourceCountMap expected_return_count_; |
| +}; |
| + |
| +RENDERING_TEST_F(RenderThreadManagerSwitchTest); |
| + |
| } // namespace android_webview |