Index: cc/trees/layer_tree_host_unittest.cc |
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc |
index b62f4eec880ed7d71c7f12b3d4b7d963f18b4b68..706185e90de85246525eac4ea57e4cdb88c9f66f 100644 |
--- a/cc/trees/layer_tree_host_unittest.cc |
+++ b/cc/trees/layer_tree_host_unittest.cc |
@@ -46,6 +46,7 @@ |
#include "cc/test/geometry_test_utils.h" |
#include "cc/test/layer_internals_for_test.h" |
#include "cc/test/layer_tree_test.h" |
+#include "cc/test/render_pass_test_utils.h" |
#include "cc/test/skia_common.h" |
#include "cc/test/test_delegating_output_surface.h" |
#include "cc/test/test_shared_bitmap_manager.h" |
@@ -7045,5 +7046,90 @@ class GpuRasterizationSucceedsWithLargeImage : public LayerTreeHostTest { |
SINGLE_AND_MULTI_THREAD_TEST_F(GpuRasterizationSucceedsWithLargeImage); |
+class LayerTreeHostTestSubmitFrameMetadata : public LayerTreeHostTest { |
+ protected: |
+ void BeginTest() override { |
+ layer_tree()->SetPageScaleFactorAndLimits(1.f, 0.5f, 4.f); |
+ PostSetNeedsCommitToMainThread(); |
+ } |
+ |
+ DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
+ LayerTreeHostImpl::FrameData* frame_data, |
+ DrawResult draw_result) override { |
+ EXPECT_EQ(DRAW_SUCCESS, draw_result); |
+ EXPECT_EQ(0, num_swaps_); |
+ drawn_viewport_ = host_impl->DeviceViewport(); |
+ return draw_result; |
+ } |
+ |
+ void DisplayReceivedCompositorFrameOnThread( |
+ const CompositorFrame& frame) override { |
+ EXPECT_EQ(1, ++num_swaps_); |
+ |
+ DelegatedFrameData* last_frame_data = frame.delegated_frame_data.get(); |
+ ASSERT_TRUE(frame.delegated_frame_data); |
+ EXPECT_FALSE(frame.gl_frame_data); |
+ EXPECT_EQ(drawn_viewport_, |
+ last_frame_data->render_pass_list.back()->output_rect); |
+ EXPECT_EQ(0.5f, frame.metadata.min_page_scale_factor); |
+ EXPECT_EQ(4.f, frame.metadata.max_page_scale_factor); |
+ |
+ EXPECT_EQ(0u, frame.delegated_frame_data->resource_list.size()); |
+ EXPECT_EQ(1u, frame.delegated_frame_data->render_pass_list.size()); |
+ |
+ EndTest(); |
+ } |
+ |
+ void AfterTest() override {} |
+ |
+ int num_swaps_ = 0; |
+ gfx::Rect drawn_viewport_; |
+}; |
+ |
+SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSubmitFrameMetadata); |
+ |
+class LayerTreeHostTestSubmitFrameResources : public LayerTreeHostTest { |
+ protected: |
+ void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
+ |
+ DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
+ LayerTreeHostImpl::FrameData* frame, |
+ DrawResult draw_result) override { |
+ frame->render_passes.clear(); |
+ |
+ RenderPass* child_pass = |
+ AddRenderPass(&frame->render_passes, RenderPassId(2, 1), |
+ gfx::Rect(3, 3, 10, 10), gfx::Transform()); |
+ gpu::SyncToken mailbox_sync_token; |
+ AddOneOfEveryQuadType(child_pass, host_impl->resource_provider(), |
+ RenderPassId(0, 0), &mailbox_sync_token); |
+ |
+ RenderPass* pass = AddRenderPass(&frame->render_passes, RenderPassId(1, 1), |
+ gfx::Rect(3, 3, 10, 10), gfx::Transform()); |
+ AddOneOfEveryQuadType(pass, host_impl->resource_provider(), child_pass->id, |
+ &mailbox_sync_token); |
+ return draw_result; |
+ } |
+ |
+ void DisplayReceivedCompositorFrameOnThread( |
+ const CompositorFrame& frame) override { |
+ ASSERT_TRUE(frame.delegated_frame_data); |
+ |
+ EXPECT_EQ(2u, frame.delegated_frame_data->render_pass_list.size()); |
+ // Each render pass has 10 resources in it. And the root render pass has a |
+ // mask resource used when drawing the child render pass, as well as its |
+ // replica (it's added twice). The number 10 may change if |
+ // AppendOneOfEveryQuadType() is updated, and the value here should be |
+ // updated accordingly. |
+ EXPECT_EQ(22u, frame.delegated_frame_data->resource_list.size()); |
+ |
+ EndTest(); |
+ } |
+ |
+ void AfterTest() override {} |
+}; |
+ |
+SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSubmitFrameResources); |
+ |
} // namespace |
} // namespace cc |