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 2c164fbe461c2c257bb6dfabfebfec45d1398d82..4075f36f819795b693aa6cd21a67cf088e5a07e4 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 |
@@ -1645,7 +1645,7 @@ TEST_F(RenderWidgetHostViewAuraTest, ResettingCompositorReturnsResources) { |
// Swapping a frame should trigger a swap ACK IPC because we have reset the |
// compositor. |
- view_->OnSwapCompositorFrame(0, |
+ view_->OnSwapCompositorFrame(0, cc::SurfaceId(1, 1, 1), |
MakeDelegatedFrame(1.f, view_size, view_rect)); |
EXPECT_EQ(1u, sink_->message_count()); |
{ |
@@ -1697,6 +1697,15 @@ TEST_F(RenderWidgetHostViewAuraTest, TwoOutputSurfaces) { |
cc::SurfaceManager* manager = factory->GetSurfaceManager(); |
manager->AddObserver(&damage_observer); |
+ // Wait for the ui::Compositor to get an OutputSurface and a SurfaceFactory. |
+ // The surfaces system will then be able to install a destruction dependency |
+ // between the child client and the ui::Compositor ensuring that calling |
+ // SurfaceFactory::Destroy on a child surface does not immediately destroy |
+ // the surface. |
+ aura::Window* root_window = aura_test_helper_->root_window(); |
+ ui::DrawWaiterForTest::WaitForCompositingInitialized( |
+ root_window->GetHost()->compositor()); |
+ |
gfx::Size view_size(100, 100); |
gfx::Rect view_rect(view_size); |
@@ -1708,7 +1717,7 @@ TEST_F(RenderWidgetHostViewAuraTest, TwoOutputSurfaces) { |
view_->Show(); |
sink_->ClearMessages(); |
- view_->OnSwapCompositorFrame(0, |
+ view_->OnSwapCompositorFrame(0, cc::SurfaceId(1, 1, 1), |
MakeDelegatedFrame(1.f, view_size, view_rect)); |
// Accumulate some returned resources. This should not trigger an IPC. |
@@ -1721,7 +1730,7 @@ TEST_F(RenderWidgetHostViewAuraTest, TwoOutputSurfaces) { |
// Swap another CompositorFrame but this time from another output_surface_id. |
// This should trigger a non-ACK ReclaimCompositorResources IPC. |
- view_->OnSwapCompositorFrame(1, |
+ view_->OnSwapCompositorFrame(1, cc::SurfaceId(1, 2, 1), |
MakeDelegatedFrame(1.f, view_size, view_rect)); |
EXPECT_EQ(1u, sink_->message_count()); |
{ |
@@ -1776,8 +1785,9 @@ TEST_F(RenderWidgetHostViewAuraTest, DISABLED_FullscreenResize) { |
// Resizes are blocked until we swapped a frame of the correct size, and |
// we've committed it. |
view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, std::get<0>(params).new_size, |
- gfx::Rect(std::get<0>(params).new_size))); |
+ 0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, std::get<0>(params).new_size, |
+ gfx::Rect(std::get<0>(params).new_size))); |
ui::DrawWaiterForTest::WaitForCommit( |
root_window->GetHost()->compositor()); |
} |
@@ -1799,8 +1809,9 @@ TEST_F(RenderWidgetHostViewAuraTest, DISABLED_FullscreenResize) { |
gfx::Rect(std::get<0>(params).screen_info.availableRect).ToString()); |
EXPECT_EQ("1600x1200", std::get<0>(params).new_size.ToString()); |
view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, std::get<0>(params).new_size, |
- gfx::Rect(std::get<0>(params).new_size))); |
+ 0, cc::SurfaceId(1, 2, 1), |
+ MakeDelegatedFrame(1.f, std::get<0>(params).new_size, |
+ gfx::Rect(std::get<0>(params).new_size))); |
ui::DrawWaiterForTest::WaitForCommit( |
root_window->GetHost()->compositor()); |
} |
@@ -1824,14 +1835,15 @@ TEST_F(RenderWidgetHostViewAuraTest, SwapNotifiesWindow) { |
// Delegated renderer path |
EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
- view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, view_size, view_rect)); |
+ view_->OnSwapCompositorFrame(0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, view_size, view_rect)); |
testing::Mock::VerifyAndClearExpectations(&observer); |
EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, |
gfx::Rect(5, 5, 5, 5))); |
view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, view_size, gfx::Rect(5, 5, 5, 5))); |
+ 0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, view_size, gfx::Rect(5, 5, 5, 5))); |
testing::Mock::VerifyAndClearExpectations(&observer); |
view_->window_->RemoveObserver(&observer); |
@@ -1850,7 +1862,7 @@ TEST_F(RenderWidgetHostViewAuraTest, RecreateLayers) { |
view_->SetSize(view_size); |
view_->Show(); |
- view_->OnSwapCompositorFrame(0, |
+ view_->OnSwapCompositorFrame(0, cc::SurfaceId(1, 1, 1), |
MakeDelegatedFrame(1.f, view_size, view_rect)); |
std::unique_ptr<ui::LayerTreeOwner> cloned_owner( |
wm::RecreateLayers(view_->GetNativeView(), nullptr)); |
@@ -1885,7 +1897,7 @@ TEST_F(RenderWidgetHostViewAuraTest, DelegatedFrameGutter) { |
cc::CompositorFrame frame = |
MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size)); |
frame.metadata.root_background_color = SK_ColorRED; |
- view_->OnSwapCompositorFrame(0, std::move(frame)); |
+ view_->OnSwapCompositorFrame(0, cc::SurfaceId(1, 1, 1), std::move(frame)); |
ui::Layer* parent_layer = view_->GetNativeView()->layer(); |
@@ -1906,7 +1918,7 @@ TEST_F(RenderWidgetHostViewAuraTest, DelegatedFrameGutter) { |
EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color()); |
frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size)); |
- view_->OnSwapCompositorFrame(0, std::move(frame)); |
+ view_->OnSwapCompositorFrame(0, cc::SurfaceId(1, 1, 1), std::move(frame)); |
EXPECT_EQ(0u, parent_layer->children().size()); |
view_->SetSize(large_size); |
@@ -1930,7 +1942,8 @@ TEST_F(RenderWidgetHostViewAuraTest, Resize) { |
view_->Show(); |
view_->SetSize(size1); |
view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, size1, gfx::Rect(size1))); |
+ 0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, size1, gfx::Rect(size1))); |
ui::DrawWaiterForTest::WaitForCommit( |
root_window->GetHost()->compositor()); |
ViewHostMsg_UpdateRect_Params update_params; |
@@ -1968,7 +1981,8 @@ TEST_F(RenderWidgetHostViewAuraTest, Resize) { |
// Receive a frame of the new size, should be skipped and not produce a Resize |
// message. |
view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, size3, gfx::Rect(size3))); |
+ 0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, size3, gfx::Rect(size3))); |
// Expect the frame ack; |
EXPECT_EQ(1u, sink_->message_count()); |
EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, |
@@ -1979,7 +1993,8 @@ TEST_F(RenderWidgetHostViewAuraTest, Resize) { |
// Receive a frame of the correct size, should not be skipped and, and should |
// produce a Resize message after the commit. |
view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
+ 0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
cc::SurfaceId surface_id = view_->surface_id(); |
if (surface_id.is_null()) { |
// No frame ack yet. |
@@ -2050,8 +2065,8 @@ TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { |
// A full frame of damage. |
EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
- view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
+ view_->OnSwapCompositorFrame(0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, view_rect)); |
testing::Mock::VerifyAndClearExpectations(&observer); |
view_->RunOnCompositingDidCommit(); |
@@ -2060,7 +2075,8 @@ TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { |
EXPECT_CALL(observer, |
OnDelegatedFrameDamage(view_->window_, partial_view_rect)); |
view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); |
+ 0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); |
testing::Mock::VerifyAndClearExpectations(&observer); |
view_->RunOnCompositingDidCommit(); |
@@ -2072,14 +2088,16 @@ TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { |
gfx::Rect dropped_damage_rect_1(10, 20, 30, 40); |
EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); |
+ 0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); |
testing::Mock::VerifyAndClearExpectations(&observer); |
view_->RunOnCompositingDidCommit(); |
gfx::Rect dropped_damage_rect_2(40, 50, 10, 20); |
EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); |
+ 0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); |
testing::Mock::VerifyAndClearExpectations(&observer); |
view_->RunOnCompositingDidCommit(); |
@@ -2090,7 +2108,8 @@ TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { |
EXPECT_CALL(observer, |
OnDelegatedFrameDamage(view_->window_, view_rect)); |
view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, frame_size, new_damage_rect)); |
+ 0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, new_damage_rect)); |
testing::Mock::VerifyAndClearExpectations(&observer); |
view_->RunOnCompositingDidCommit(); |
@@ -2098,7 +2117,8 @@ TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { |
EXPECT_CALL(observer, |
OnDelegatedFrameDamage(view_->window_, partial_view_rect)); |
view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); |
+ 0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); |
testing::Mock::VerifyAndClearExpectations(&observer); |
view_->RunOnCompositingDidCommit(); |
@@ -2114,7 +2134,8 @@ TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { |
// This frame should not be dropped. |
EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, view_rect.size(), view_rect)); |
+ 0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, view_rect.size(), view_rect)); |
testing::Mock::VerifyAndClearExpectations(&observer); |
view_->RunOnCompositingDidCommit(); |
@@ -2137,27 +2158,28 @@ TEST_F(RenderWidgetHostViewAuraTest, OutputSurfaceIdChange) { |
// Swap a frame. |
EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
- view_->OnSwapCompositorFrame( |
- 0, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
+ view_->OnSwapCompositorFrame(0, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, view_rect)); |
testing::Mock::VerifyAndClearExpectations(&observer); |
view_->RunOnCompositingDidCommit(); |
// Swap a frame with a different surface id. |
EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
- view_->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
+ view_->OnSwapCompositorFrame(1, cc::SurfaceId(1, 2, 1), |
+ MakeDelegatedFrame(1.f, frame_size, view_rect)); |
testing::Mock::VerifyAndClearExpectations(&observer); |
view_->RunOnCompositingDidCommit(); |
// Swap an empty frame, with a different surface id. |
view_->OnSwapCompositorFrame( |
- 2, MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); |
+ 2, cc::SurfaceId(1, 3, 1), |
+ MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); |
testing::Mock::VerifyAndClearExpectations(&observer); |
view_->RunOnCompositingDidCommit(); |
// Swap another frame, with a different surface id. |
EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
- view_->OnSwapCompositorFrame(3, |
+ view_->OnSwapCompositorFrame(3, cc::SurfaceId(1, 4, 1), |
MakeDelegatedFrame(1.f, frame_size, view_rect)); |
testing::Mock::VerifyAndClearExpectations(&observer); |
view_->RunOnCompositingDidCommit(); |
@@ -2202,7 +2224,8 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { |
for (size_t i = 0; i < renderer_count; ++i) { |
views[i]->Show(); |
views[i]->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
+ 1, cc::SurfaceId(1 + i, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, view_rect)); |
EXPECT_TRUE(views[i]->HasFrameData()); |
views[i]->Hide(); |
} |
@@ -2223,7 +2246,8 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { |
// Swap a frame on it, it should evict the next LRU [1]. |
views[0]->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
+ 1, cc::SurfaceId(1, 2, 1), |
+ MakeDelegatedFrame(1.f, frame_size, view_rect)); |
EXPECT_TRUE(views[0]->HasFrameData()); |
EXPECT_FALSE(views[1]->HasFrameData()); |
// Now that [0] got a frame, it shouldn't be waiting any more. |
@@ -2233,7 +2257,8 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { |
// LRU renderer is [1], still hidden. Swap a frame on it, it should evict |
// the next LRU [2]. |
views[1]->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
+ 1, cc::SurfaceId(2, 2, 1), |
+ MakeDelegatedFrame(1.f, frame_size, view_rect)); |
EXPECT_TRUE(views[0]->HasFrameData()); |
EXPECT_TRUE(views[1]->HasFrameData()); |
EXPECT_FALSE(views[2]->HasFrameData()); |
@@ -2250,7 +2275,8 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { |
EXPECT_EQ(!views[i]->HasFrameData(), |
views[i]->released_front_lock_active()); |
views[i]->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
+ 1, cc::SurfaceId(1 + i, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, view_rect)); |
// Now everyone has a frame. |
EXPECT_FALSE(views[i]->released_front_lock_active()); |
EXPECT_TRUE(views[i]->HasFrameData()); |
@@ -2259,7 +2285,8 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { |
// Swap a frame on [0], it should be evicted immediately. |
views[0]->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
+ 1, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, view_rect)); |
EXPECT_FALSE(views[0]->HasFrameData()); |
// Make [0] visible, and swap a frame on it. Nothing should be evicted |
@@ -2268,7 +2295,8 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { |
// We don't have a frame, wait. |
EXPECT_TRUE(views[0]->released_front_lock_active()); |
views[0]->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
+ 1, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, view_rect)); |
EXPECT_FALSE(views[0]->released_front_lock_active()); |
for (size_t i = 0; i < renderer_count; ++i) |
EXPECT_TRUE(views[i]->HasFrameData()); |
@@ -2294,7 +2322,8 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { |
views[1]->Show(); |
EXPECT_TRUE(views[1]->released_front_lock_active()); |
views[1]->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
+ 1, cc::SurfaceId(2, 1, 1), |
+ MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
EXPECT_FALSE(views[1]->released_front_lock_active()); |
for (size_t i = 0; i < renderer_count - 1; ++i) |
@@ -2368,7 +2397,8 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFramesWithLocking) { |
for (size_t i = 0; i < renderer_count; ++i) { |
views[i]->Show(); |
views[i]->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
+ 1, cc::SurfaceId(i + 1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, view_rect)); |
EXPECT_TRUE(views[i]->HasFrameData()); |
} |
@@ -2379,7 +2409,8 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFramesWithLocking) { |
// If we lock [0] before hiding it, then [0] should not be evicted. |
views[0]->Show(); |
views[0]->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
+ 1, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, view_rect)); |
EXPECT_TRUE(views[0]->HasFrameData()); |
views[0]->GetDelegatedFrameHost()->LockResources(); |
views[0]->Hide(); |
@@ -2439,7 +2470,8 @@ TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFramesWithMemoryPressure) { |
for (size_t i = 0; i < renderer_count; ++i) { |
views[i]->Show(); |
views[i]->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
+ 1, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, view_rect)); |
EXPECT_TRUE(views[i]->HasFrameData()); |
} |
@@ -2482,14 +2514,16 @@ TEST_F(RenderWidgetHostViewAuraTest, SoftwareDPIChange) { |
// With a 1x DPI UI and 1x DPI Renderer. |
view_->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
+ 1, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
cc::SurfaceId surface_id = view_->surface_id(); |
// This frame will have the same number of physical pixels, but has a new |
// scale on it. |
view_->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(2.f, frame_size, gfx::Rect(frame_size))); |
+ 1, cc::SurfaceId(1, 2, 1), |
+ MakeDelegatedFrame(2.f, frame_size, gfx::Rect(frame_size))); |
// When we get a new frame with the same frame size in physical pixels, but |
// a different scale, we should generate a surface, as the final result will |
@@ -2550,7 +2584,8 @@ class RenderWidgetHostViewAuraCopyRequestTest |
void OnSwapCompositorFrame() { |
view_->OnSwapCompositorFrame( |
- 1, MakeDelegatedFrame(1.f, view_rect_.size(), view_rect_)); |
+ 1, cc::SurfaceId(1, 1, 1), |
+ MakeDelegatedFrame(1.f, view_rect_.size(), view_rect_)); |
cc::SurfaceId surface_id = |
view_->GetDelegatedFrameHost()->SurfaceIdForTesting(); |
if (!surface_id.is_null()) |
@@ -4024,7 +4059,7 @@ TEST_F(RenderWidgetHostViewAuraTest, SurfaceClientIdInitialized) { |
view_->InitAsChild(nullptr); |
view_->Show(); |
view_->SetSize(size); |
- view_->OnSwapCompositorFrame(0, |
+ view_->OnSwapCompositorFrame(0, cc::SurfaceId(1, 1, 1), |
MakeDelegatedFrame(1.f, size, gfx::Rect(size))); |
EXPECT_EQ(view_->GetSurfaceClientId(), std::get<0>(params)); |
} |