Index: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
index 11a59b6b65e2b073ee1d08376c8a96a01546e277..3aac52c5376e608add3de68a2c23e38f7a543c9c 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc |
@@ -229,6 +229,13 @@ class TestWindowObserver : public aura::WindowObserver { |
DISALLOW_COPY_AND_ASSIGN(TestWindowObserver); |
}; |
+class FakeSurfaceDamageObserver : public cc::SurfaceDamageObserver { |
+ public: |
+ void OnSurfaceDamaged(const cc::SurfaceId& id, bool* changed) override { |
+ *changed = true; |
+ } |
+}; |
+ |
class FakeFrameSubscriber : public RenderWidgetHostViewFrameSubscriber { |
public: |
FakeFrameSubscriber(gfx::Size size, base::Callback<void(bool)> callback) |
@@ -348,6 +355,12 @@ class FakeRenderWidgetHostViewAura : public RenderWidgetHostViewAura { |
return GetDelegatedFrameHost()->ReleasedFrontLockActiveForTesting(); |
} |
+ void ReturnResources(const cc::ReturnedResourceArray& resources) { |
+ GetDelegatedFrameHost()->ReturnResources(resources); |
+ } |
+ |
+ void ResetCompositor() { GetDelegatedFrameHost()->ResetCompositor(); } |
+ |
// A lock that doesn't actually do anything to the compositor, and does not |
// time out. |
class FakeResizeLock : public ResizeLock { |
@@ -1599,9 +1612,143 @@ cc::CompositorFrame MakeDelegatedFrame(float scale_factor, |
pass->SetNew( |
cc::RenderPassId(1, 1), gfx::Rect(size), damage, gfx::Transform()); |
frame.delegated_frame_data->render_pass_list.push_back(std::move(pass)); |
+ cc::TransferableResource resource; |
+ resource.id = 1; |
+ frame.delegated_frame_data->resource_list.push_back(std::move(resource)); |
return frame; |
} |
+// If the ui::Compositor has been reset then resources are returned back to the |
+// client in response to the swap. This test verifies that the returned |
+// resources are indeed reported as being in response to a swap. |
+TEST_F(RenderWidgetHostViewAuraTest, ResettingCompositorReturnsResources) { |
+ FakeSurfaceDamageObserver damage_observer; |
+ ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
+ cc::SurfaceManager* manager = factory->GetSurfaceManager(); |
+ manager->AddObserver(&damage_observer); |
+ |
+ gfx::Size view_size(100, 100); |
+ gfx::Rect view_rect(view_size); |
+ |
+ view_->InitAsChild(NULL); |
danakj
2016/07/14 19:55:44
nullptr
Fady Samuel
2016/07/14 23:17:04
Done. I just did a s/NULL/nullptr
|
+ aura::client::ParentWindowWithContext( |
+ view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), |
+ gfx::Rect()); |
+ view_->SetSize(view_size); |
+ view_->Show(); |
+ sink_->ClearMessages(); |
+ |
+ view_->ResetCompositor(); |
+ |
+ // Swappinga frame should trigger a swap ACK IPC because we have reset the |
danakj
2016/07/14 19:55:44
Swapping a frame
Fady Samuel
2016/07/14 23:17:04
Done.
|
+ // compositor. |
+ view_->OnSwapCompositorFrame(0, |
+ MakeDelegatedFrame(1.f, view_size, view_rect)); |
+ EXPECT_EQ(1u, sink_->message_count()); |
+ { |
+ const IPC::Message* msg = sink_->GetMessageAt(0); |
+ EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, msg->type()); |
+ ViewMsg_ReclaimCompositorResources::Param params; |
+ ViewMsg_ReclaimCompositorResources::Read(msg, ¶ms); |
+ EXPECT_EQ(0u, std::get<0>(params)); // output_surface_id |
+ EXPECT_EQ(true, std::get<1>(params)); // is_swap_ack |
danakj
2016/07/14 19:55:44
EXPECT_TRUE (i've seen EQ(true/false) fail to comp
Fady Samuel
2016/07/14 23:17:04
Done.
|
+ } |
+ manager->RemoveObserver(&damage_observer); |
+} |
+ |
+// This test verifies that returned resources do not require a pending ack. |
+TEST_F(RenderWidgetHostViewAuraTest, ReturnedResources) { |
+ gfx::Size view_size(100, 100); |
+ gfx::Rect view_rect(view_size); |
+ |
+ view_->InitAsChild(NULL); |
+ aura::client::ParentWindowWithContext( |
+ view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), |
+ gfx::Rect()); |
+ view_->SetSize(view_size); |
+ view_->Show(); |
+ sink_->ClearMessages(); |
+ |
+ // Accumulate some returned resources. This should not trigger an IPC. |
+ cc::ReturnedResourceArray resources; |
+ cc::ReturnedResource resource; |
+ resource.id = 1; |
+ resources.push_back(resource); |
+ view_->ReturnResources(resources); |
+ EXPECT_EQ(1u, sink_->message_count()); |
+ { |
+ const IPC::Message* msg = sink_->GetMessageAt(0); |
+ EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, msg->type()); |
+ ViewMsg_ReclaimCompositorResources::Param params; |
+ ViewMsg_ReclaimCompositorResources::Read(msg, ¶ms); |
+ EXPECT_EQ(0u, std::get<0>(params)); // output_surface_id |
+ EXPECT_EQ(false, std::get<1>(params)); // is_swap_ack |
danakj
2016/07/14 19:55:44
EXPECT_FALSE
Fady Samuel
2016/07/14 23:17:04
Done.
|
+ } |
+} |
+ |
+// This test verifies that when the output_surface_id changes, then |
+// DelegateFrameHost |
danakj
2016/07/14 19:55:44
weird line wrapping
Fady Samuel
2016/07/14 23:17:04
Done.
|
+// returns compositor resources without a swap ack. |
+TEST_F(RenderWidgetHostViewAuraTest, TwoOutputSurfaces) { |
+ FakeSurfaceDamageObserver damage_observer; |
+ ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
+ cc::SurfaceManager* manager = factory->GetSurfaceManager(); |
+ manager->AddObserver(&damage_observer); |
+ |
+ gfx::Size view_size(100, 100); |
+ gfx::Rect view_rect(view_size); |
+ |
+ view_->InitAsChild(NULL); |
+ aura::client::ParentWindowWithContext( |
+ view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), |
+ gfx::Rect()); |
+ view_->SetSize(view_size); |
+ view_->Show(); |
+ sink_->ClearMessages(); |
+ |
+ view_->OnSwapCompositorFrame(0, |
+ MakeDelegatedFrame(1.f, view_size, view_rect)); |
+ |
+ // Accumulate some returned resources. This should not trigger an IPC. |
+ cc::ReturnedResourceArray resources; |
+ cc::ReturnedResource resource; |
+ resource.id = 1; |
+ resources.push_back(resource); |
+ view_->ReturnResources(resources); |
+ EXPECT_EQ(0u, sink_->message_count()); |
+ |
+ // Swap another CompositorFrame but this time from another output_surface_id. |
+ // This should trigger a non-ACK ReclaimCompositorResources IPC. |
+ view_->OnSwapCompositorFrame(1, |
+ MakeDelegatedFrame(1.f, view_size, view_rect)); |
+ EXPECT_EQ(1u, sink_->message_count()); |
+ { |
+ const IPC::Message* msg = sink_->GetMessageAt(0); |
+ EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, msg->type()); |
+ ViewMsg_ReclaimCompositorResources::Param params; |
+ ViewMsg_ReclaimCompositorResources::Read(msg, ¶ms); |
+ EXPECT_EQ(0u, std::get<0>(params)); // output_surface_id |
+ EXPECT_EQ(false, std::get<1>(params)); // is_swap_ack |
+ } |
+ sink_->ClearMessages(); |
+ |
+ // Report that the surface is drawn to trigger an ACK. |
+ cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id()); |
+ EXPECT_TRUE(surface); |
+ surface->RunDrawCallbacks(cc::SurfaceDrawStatus::DRAWN); |
+ EXPECT_EQ(1u, sink_->message_count()); |
+ { |
+ const IPC::Message* msg = sink_->GetMessageAt(0); |
+ EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, msg->type()); |
+ ViewMsg_ReclaimCompositorResources::Param params; |
+ ViewMsg_ReclaimCompositorResources::Read(msg, ¶ms); |
+ EXPECT_EQ(1u, std::get<0>(params)); // output_surface_id |
+ EXPECT_EQ(true, std::get<1>(params)); // is_swap_ack |
+ } |
+ |
+ manager->RemoveObserver(&damage_observer); |
+} |
+ |
// Resizing in fullscreen mode should send the up-to-date screen info. |
// http://crbug.com/324350 |
TEST_F(RenderWidgetHostViewAuraTest, DISABLED_FullscreenResize) { |
@@ -1822,7 +1969,8 @@ TEST_F(RenderWidgetHostViewAuraTest, Resize) { |
0, MakeDelegatedFrame(1.f, size3, gfx::Rect(size3))); |
// Expect the frame ack; |
EXPECT_EQ(1u, sink_->message_count()); |
- EXPECT_EQ(ViewMsg_SwapCompositorFrameAck::ID, sink_->GetMessageAt(0)->type()); |
+ EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, |
+ sink_->GetMessageAt(0)->type()); |
sink_->ClearMessages(); |
EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
@@ -1861,7 +2009,7 @@ TEST_F(RenderWidgetHostViewAuraTest, Resize) { |
EXPECT_EQ(blink::WebInputEvent::MouseMove, event->type); |
break; |
} |
- case ViewMsg_SwapCompositorFrameAck::ID: |
+ case ViewMsg_ReclaimCompositorResources::ID: |
break; |
case ViewMsg_Resize::ID: { |
EXPECT_FALSE(has_resize); |