OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <tuple> | 10 #include <tuple> |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 using ui::WebInputEventTraits; | 110 using ui::WebInputEventTraits; |
111 | 111 |
112 namespace content { | 112 namespace content { |
113 | 113 |
114 void InstallDelegatedFrameHostClient( | 114 void InstallDelegatedFrameHostClient( |
115 RenderWidgetHostViewAura* render_widget_host_view, | 115 RenderWidgetHostViewAura* render_widget_host_view, |
116 std::unique_ptr<DelegatedFrameHostClient> delegated_frame_host_client); | 116 std::unique_ptr<DelegatedFrameHostClient> delegated_frame_host_client); |
117 | 117 |
118 namespace { | 118 namespace { |
119 | 119 |
| 120 const cc::LocalSurfaceId kArbitraryLocalSurfaceId( |
| 121 1, |
| 122 base::UnguessableToken::Deserialize(2, 3)); |
| 123 |
| 124 cc::LocalSurfaceId CreateLocalSurfaceId() { |
| 125 return cc::LocalSurfaceId(1, base::UnguessableToken::Create()); |
| 126 } |
| 127 |
120 class TestOverscrollDelegate : public OverscrollControllerDelegate { | 128 class TestOverscrollDelegate : public OverscrollControllerDelegate { |
121 public: | 129 public: |
122 explicit TestOverscrollDelegate(RenderWidgetHostView* view) | 130 explicit TestOverscrollDelegate(RenderWidgetHostView* view) |
123 : view_(view), | 131 : view_(view), |
124 current_mode_(OVERSCROLL_NONE), | 132 current_mode_(OVERSCROLL_NONE), |
125 completed_mode_(OVERSCROLL_NONE), | 133 completed_mode_(OVERSCROLL_NONE), |
126 delta_x_(0.f), | 134 delta_x_(0.f), |
127 delta_y_(0.f) {} | 135 delta_y_(0.f) {} |
128 | 136 |
129 ~TestOverscrollDelegate() override {} | 137 ~TestOverscrollDelegate() override {} |
(...skipping 1769 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1899 gfx::Rect()); | 1907 gfx::Rect()); |
1900 view_->SetSize(view_size); | 1908 view_->SetSize(view_size); |
1901 view_->Show(); | 1909 view_->Show(); |
1902 sink_->ClearMessages(); | 1910 sink_->ClearMessages(); |
1903 | 1911 |
1904 // Submit a frame with resources. | 1912 // Submit a frame with resources. |
1905 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, view_size, view_rect); | 1913 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, view_size, view_rect); |
1906 cc::TransferableResource resource; | 1914 cc::TransferableResource resource; |
1907 resource.id = 1; | 1915 resource.id = 1; |
1908 frame.resource_list.push_back(resource); | 1916 frame.resource_list.push_back(resource); |
1909 view_->OnSwapCompositorFrame(0, std::move(frame)); | 1917 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame)); |
1910 EXPECT_EQ(0u, sink_->message_count()); | 1918 EXPECT_EQ(0u, sink_->message_count()); |
1911 | 1919 |
1912 // Swap another CompositorFrame but this time from another | 1920 // Swap another CompositorFrame but this time from another |
1913 // compositor_frame_sink_id. The resources for the previous frame are old and | 1921 // compositor_frame_sink_id. The resources for the previous frame are old and |
1914 // should not be returned. | 1922 // should not be returned. |
1915 view_->OnSwapCompositorFrame(1, | 1923 view_->OnSwapCompositorFrame(1, CreateLocalSurfaceId(), |
1916 MakeDelegatedFrame(1.f, view_size, view_rect)); | 1924 MakeDelegatedFrame(1.f, view_size, view_rect)); |
1917 EXPECT_EQ(0u, sink_->message_count()); | 1925 EXPECT_EQ(0u, sink_->message_count()); |
1918 | 1926 |
1919 // Report that the surface is drawn to trigger an ACK. | 1927 // Report that the surface is drawn to trigger an ACK. |
1920 cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id()); | 1928 cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id()); |
1921 EXPECT_TRUE(surface); | 1929 EXPECT_TRUE(surface); |
1922 surface->RunDrawCallbacks(); | 1930 surface->RunDrawCallbacks(); |
1923 EXPECT_EQ(1u, sink_->message_count()); | 1931 EXPECT_EQ(1u, sink_->message_count()); |
1924 { | 1932 { |
1925 const IPC::Message* msg = sink_->GetMessageAt(0); | 1933 const IPC::Message* msg = sink_->GetMessageAt(0); |
(...skipping 25 matching lines...) Expand all Loading... |
1951 EXPECT_EQ(ViewMsg_Resize::ID, msg->type()); | 1959 EXPECT_EQ(ViewMsg_Resize::ID, msg->type()); |
1952 ViewMsg_Resize::Param params; | 1960 ViewMsg_Resize::Param params; |
1953 ViewMsg_Resize::Read(msg, ¶ms); | 1961 ViewMsg_Resize::Read(msg, ¶ms); |
1954 EXPECT_EQ( | 1962 EXPECT_EQ( |
1955 "0,0 800x600", | 1963 "0,0 800x600", |
1956 std::get<0>(params).screen_info.available_rect.ToString()); | 1964 std::get<0>(params).screen_info.available_rect.ToString()); |
1957 EXPECT_EQ("800x600", std::get<0>(params).new_size.ToString()); | 1965 EXPECT_EQ("800x600", std::get<0>(params).new_size.ToString()); |
1958 // Resizes are blocked until we swapped a frame of the correct size, and | 1966 // Resizes are blocked until we swapped a frame of the correct size, and |
1959 // we've committed it. | 1967 // we've committed it. |
1960 view_->OnSwapCompositorFrame( | 1968 view_->OnSwapCompositorFrame( |
1961 0, MakeDelegatedFrame(1.f, std::get<0>(params).new_size, | 1969 0, kArbitraryLocalSurfaceId, |
1962 gfx::Rect(std::get<0>(params).new_size))); | 1970 MakeDelegatedFrame(1.f, std::get<0>(params).new_size, |
| 1971 gfx::Rect(std::get<0>(params).new_size))); |
1963 ui::DrawWaiterForTest::WaitForCommit( | 1972 ui::DrawWaiterForTest::WaitForCommit( |
1964 root_window->GetHost()->compositor()); | 1973 root_window->GetHost()->compositor()); |
1965 } | 1974 } |
1966 | 1975 |
1967 widget_host_->ResetSizeAndRepaintPendingFlags(); | 1976 widget_host_->ResetSizeAndRepaintPendingFlags(); |
1968 sink_->ClearMessages(); | 1977 sink_->ClearMessages(); |
1969 | 1978 |
1970 // Make sure the corrent screen size is set along in the resize | 1979 // Make sure the corrent screen size is set along in the resize |
1971 // request when the screen size has changed. | 1980 // request when the screen size has changed. |
1972 aura_test_helper_->test_screen()->SetUIScale(0.5); | 1981 aura_test_helper_->test_screen()->SetUIScale(0.5); |
1973 EXPECT_EQ(1u, sink_->message_count()); | 1982 EXPECT_EQ(1u, sink_->message_count()); |
1974 { | 1983 { |
1975 const IPC::Message* msg = sink_->GetMessageAt(0); | 1984 const IPC::Message* msg = sink_->GetMessageAt(0); |
1976 EXPECT_EQ(ViewMsg_Resize::ID, msg->type()); | 1985 EXPECT_EQ(ViewMsg_Resize::ID, msg->type()); |
1977 ViewMsg_Resize::Param params; | 1986 ViewMsg_Resize::Param params; |
1978 ViewMsg_Resize::Read(msg, ¶ms); | 1987 ViewMsg_Resize::Read(msg, ¶ms); |
1979 EXPECT_EQ( | 1988 EXPECT_EQ( |
1980 "0,0 1600x1200", | 1989 "0,0 1600x1200", |
1981 std::get<0>(params).screen_info.available_rect.ToString()); | 1990 std::get<0>(params).screen_info.available_rect.ToString()); |
1982 EXPECT_EQ("1600x1200", std::get<0>(params).new_size.ToString()); | 1991 EXPECT_EQ("1600x1200", std::get<0>(params).new_size.ToString()); |
1983 view_->OnSwapCompositorFrame( | 1992 view_->OnSwapCompositorFrame( |
1984 0, MakeDelegatedFrame(1.f, std::get<0>(params).new_size, | 1993 0, kArbitraryLocalSurfaceId, |
1985 gfx::Rect(std::get<0>(params).new_size))); | 1994 MakeDelegatedFrame(1.f, std::get<0>(params).new_size, |
| 1995 gfx::Rect(std::get<0>(params).new_size))); |
1986 ui::DrawWaiterForTest::WaitForCommit( | 1996 ui::DrawWaiterForTest::WaitForCommit( |
1987 root_window->GetHost()->compositor()); | 1997 root_window->GetHost()->compositor()); |
1988 } | 1998 } |
1989 } | 1999 } |
1990 | 2000 |
1991 // Swapping a frame should notify the window. | 2001 // Swapping a frame should notify the window. |
1992 TEST_F(RenderWidgetHostViewAuraTest, SwapNotifiesWindow) { | 2002 TEST_F(RenderWidgetHostViewAuraTest, SwapNotifiesWindow) { |
1993 gfx::Size view_size(100, 100); | 2003 gfx::Size view_size(100, 100); |
1994 gfx::Rect view_rect(view_size); | 2004 gfx::Rect view_rect(view_size); |
1995 | 2005 |
1996 view_->InitAsChild(nullptr); | 2006 view_->InitAsChild(nullptr); |
1997 aura::client::ParentWindowWithContext( | 2007 aura::client::ParentWindowWithContext( |
1998 view_->GetNativeView(), | 2008 view_->GetNativeView(), |
1999 parent_view_->GetNativeView()->GetRootWindow(), | 2009 parent_view_->GetNativeView()->GetRootWindow(), |
2000 gfx::Rect()); | 2010 gfx::Rect()); |
2001 view_->SetSize(view_size); | 2011 view_->SetSize(view_size); |
2002 view_->Show(); | 2012 view_->Show(); |
2003 | 2013 |
2004 MockWindowObserver observer; | 2014 MockWindowObserver observer; |
2005 view_->window_->AddObserver(&observer); | 2015 view_->window_->AddObserver(&observer); |
2006 | 2016 |
2007 // Delegated renderer path | 2017 // Delegated renderer path |
2008 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2018 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2009 view_->OnSwapCompositorFrame( | 2019 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, |
2010 0, MakeDelegatedFrame(1.f, view_size, view_rect)); | 2020 MakeDelegatedFrame(1.f, view_size, view_rect)); |
2011 testing::Mock::VerifyAndClearExpectations(&observer); | 2021 testing::Mock::VerifyAndClearExpectations(&observer); |
2012 | 2022 |
2013 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, | 2023 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, |
2014 gfx::Rect(5, 5, 5, 5))); | 2024 gfx::Rect(5, 5, 5, 5))); |
2015 view_->OnSwapCompositorFrame( | 2025 view_->OnSwapCompositorFrame( |
2016 0, MakeDelegatedFrame(1.f, view_size, gfx::Rect(5, 5, 5, 5))); | 2026 0, kArbitraryLocalSurfaceId, |
| 2027 MakeDelegatedFrame(1.f, view_size, gfx::Rect(5, 5, 5, 5))); |
2017 testing::Mock::VerifyAndClearExpectations(&observer); | 2028 testing::Mock::VerifyAndClearExpectations(&observer); |
2018 | 2029 |
2019 view_->window_->RemoveObserver(&observer); | 2030 view_->window_->RemoveObserver(&observer); |
2020 } | 2031 } |
2021 | 2032 |
2022 // Mirroring the layers for a window should cause Surface destruction to | 2033 // Mirroring the layers for a window should cause Surface destruction to |
2023 // depend on both layers. | 2034 // depend on both layers. |
2024 TEST_F(RenderWidgetHostViewAuraTest, MirrorLayers) { | 2035 TEST_F(RenderWidgetHostViewAuraTest, MirrorLayers) { |
2025 gfx::Size view_size(100, 100); | 2036 gfx::Size view_size(100, 100); |
2026 gfx::Rect view_rect(view_size); | 2037 gfx::Rect view_rect(view_size); |
2027 aura::Window* const root = parent_view_->GetNativeView()->GetRootWindow(); | 2038 aura::Window* const root = parent_view_->GetNativeView()->GetRootWindow(); |
2028 | 2039 |
2029 view_->InitAsChild(nullptr); | 2040 view_->InitAsChild(nullptr); |
2030 aura::client::ParentWindowWithContext( | 2041 aura::client::ParentWindowWithContext( |
2031 view_->GetNativeView(), root, gfx::Rect()); | 2042 view_->GetNativeView(), root, gfx::Rect()); |
2032 view_->SetSize(view_size); | 2043 view_->SetSize(view_size); |
2033 view_->Show(); | 2044 view_->Show(); |
2034 | 2045 |
2035 view_->OnSwapCompositorFrame(0, | 2046 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, |
2036 MakeDelegatedFrame(1.f, view_size, view_rect)); | 2047 MakeDelegatedFrame(1.f, view_size, view_rect)); |
2037 std::unique_ptr<ui::LayerTreeOwner> mirror(wm::MirrorLayers( | 2048 std::unique_ptr<ui::LayerTreeOwner> mirror(wm::MirrorLayers( |
2038 view_->GetNativeView(), false /* sync_bounds */)); | 2049 view_->GetNativeView(), false /* sync_bounds */)); |
2039 | 2050 |
2040 cc::SurfaceId id = view_->GetDelegatedFrameHost()->SurfaceIdForTesting(); | 2051 cc::SurfaceId id = view_->GetDelegatedFrameHost()->SurfaceIdForTesting(); |
2041 if (id.is_valid()) { | 2052 if (id.is_valid()) { |
2042 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); | 2053 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
2043 cc::SurfaceManager* manager = | 2054 cc::SurfaceManager* manager = |
2044 factory->GetContextFactoryPrivate()->GetSurfaceManager(); | 2055 factory->GetContextFactoryPrivate()->GetSurfaceManager(); |
2045 cc::Surface* surface = manager->GetSurfaceForId(id); | 2056 cc::Surface* surface = manager->GetSurfaceForId(id); |
(...skipping 22 matching lines...) Expand all Loading... |
2068 | 2079 |
2069 view_->InitAsChild(nullptr); | 2080 view_->InitAsChild(nullptr); |
2070 aura::client::ParentWindowWithContext( | 2081 aura::client::ParentWindowWithContext( |
2071 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), | 2082 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), |
2072 gfx::Rect()); | 2083 gfx::Rect()); |
2073 view_->SetSize(large_size); | 2084 view_->SetSize(large_size); |
2074 view_->Show(); | 2085 view_->Show(); |
2075 cc::CompositorFrame frame = | 2086 cc::CompositorFrame frame = |
2076 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size)); | 2087 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size)); |
2077 frame.metadata.root_background_color = SK_ColorRED; | 2088 frame.metadata.root_background_color = SK_ColorRED; |
2078 view_->OnSwapCompositorFrame(0, std::move(frame)); | 2089 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame)); |
2079 | 2090 |
2080 ui::Layer* parent_layer = view_->GetNativeView()->layer(); | 2091 ui::Layer* parent_layer = view_->GetNativeView()->layer(); |
2081 | 2092 |
2082 ASSERT_EQ(2u, parent_layer->children().size()); | 2093 ASSERT_EQ(2u, parent_layer->children().size()); |
2083 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds()); | 2094 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds()); |
2084 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color()); | 2095 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color()); |
2085 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds()); | 2096 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds()); |
2086 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color()); | 2097 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color()); |
2087 | 2098 |
2088 delegates_.back()->set_is_fullscreen(true); | 2099 delegates_.back()->set_is_fullscreen(true); |
2089 view_->SetSize(medium_size); | 2100 view_->SetSize(medium_size); |
2090 | 2101 |
2091 // Right gutter is unnecessary. | 2102 // Right gutter is unnecessary. |
2092 ASSERT_EQ(1u, parent_layer->children().size()); | 2103 ASSERT_EQ(1u, parent_layer->children().size()); |
2093 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds()); | 2104 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds()); |
2094 | 2105 |
2095 // RWH is fullscreen, so gutters should be black. | 2106 // RWH is fullscreen, so gutters should be black. |
2096 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color()); | 2107 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color()); |
2097 | 2108 |
2098 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size)); | 2109 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size)); |
2099 view_->OnSwapCompositorFrame(0, std::move(frame)); | 2110 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame)); |
2100 EXPECT_EQ(0u, parent_layer->children().size()); | 2111 EXPECT_EQ(0u, parent_layer->children().size()); |
2101 | 2112 |
2102 view_->SetSize(large_size); | 2113 view_->SetSize(large_size); |
2103 ASSERT_EQ(2u, parent_layer->children().size()); | 2114 ASSERT_EQ(2u, parent_layer->children().size()); |
2104 | 2115 |
2105 // This should evict the frame and remove the gutter layers. | 2116 // This should evict the frame and remove the gutter layers. |
2106 view_->Hide(); | 2117 view_->Hide(); |
2107 view_->SetSize(small_size); | 2118 view_->SetSize(small_size); |
2108 ASSERT_EQ(0u, parent_layer->children().size()); | 2119 ASSERT_EQ(0u, parent_layer->children().size()); |
2109 } | 2120 } |
2110 | 2121 |
2111 TEST_F(RenderWidgetHostViewAuraTest, Resize) { | 2122 TEST_F(RenderWidgetHostViewAuraTest, Resize) { |
2112 gfx::Size size1(100, 100); | 2123 gfx::Size size1(100, 100); |
2113 gfx::Size size2(200, 200); | 2124 gfx::Size size2(200, 200); |
2114 gfx::Size size3(300, 300); | 2125 gfx::Size size3(300, 300); |
2115 | 2126 |
2116 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow(); | 2127 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow(); |
2117 view_->InitAsChild(nullptr); | 2128 view_->InitAsChild(nullptr); |
2118 aura::client::ParentWindowWithContext( | 2129 aura::client::ParentWindowWithContext( |
2119 view_->GetNativeView(), root_window, gfx::Rect(size1)); | 2130 view_->GetNativeView(), root_window, gfx::Rect(size1)); |
2120 view_->Show(); | 2131 view_->Show(); |
2121 view_->SetSize(size1); | 2132 view_->SetSize(size1); |
2122 view_->OnSwapCompositorFrame( | 2133 view_->OnSwapCompositorFrame( |
2123 0, MakeDelegatedFrame(1.f, size1, gfx::Rect(size1))); | 2134 0, kArbitraryLocalSurfaceId, |
| 2135 MakeDelegatedFrame(1.f, size1, gfx::Rect(size1))); |
2124 ui::DrawWaiterForTest::WaitForCommit( | 2136 ui::DrawWaiterForTest::WaitForCommit( |
2125 root_window->GetHost()->compositor()); | 2137 root_window->GetHost()->compositor()); |
2126 ViewHostMsg_UpdateRect_Params update_params; | 2138 ViewHostMsg_UpdateRect_Params update_params; |
2127 update_params.view_size = size1; | 2139 update_params.view_size = size1; |
2128 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK; | 2140 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK; |
2129 widget_host_->OnMessageReceived( | 2141 widget_host_->OnMessageReceived( |
2130 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); | 2142 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); |
2131 sink_->ClearMessages(); | 2143 sink_->ClearMessages(); |
2132 // Resize logic is idle (no pending resize, no pending commit). | 2144 // Resize logic is idle (no pending resize, no pending commit). |
2133 EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString()); | 2145 EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString()); |
(...skipping 17 matching lines...) Expand all Loading... |
2151 | 2163 |
2152 // Resize renderer again, before receiving a frame. Should not produce a | 2164 // Resize renderer again, before receiving a frame. Should not produce a |
2153 // Resize message. | 2165 // Resize message. |
2154 view_->SetSize(size3); | 2166 view_->SetSize(size3); |
2155 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 2167 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
2156 EXPECT_EQ(0u, sink_->message_count()); | 2168 EXPECT_EQ(0u, sink_->message_count()); |
2157 | 2169 |
2158 // Receive a frame of the new size, should be skipped and not produce a Resize | 2170 // Receive a frame of the new size, should be skipped and not produce a Resize |
2159 // message. | 2171 // message. |
2160 view_->OnSwapCompositorFrame( | 2172 view_->OnSwapCompositorFrame( |
2161 0, MakeDelegatedFrame(1.f, size3, gfx::Rect(size3))); | 2173 0, kArbitraryLocalSurfaceId, |
| 2174 MakeDelegatedFrame(1.f, size3, gfx::Rect(size3))); |
2162 // Expect the frame ack; | 2175 // Expect the frame ack; |
2163 EXPECT_EQ(1u, sink_->message_count()); | 2176 EXPECT_EQ(1u, sink_->message_count()); |
2164 EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, | 2177 EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, |
2165 sink_->GetMessageAt(0)->type()); | 2178 sink_->GetMessageAt(0)->type()); |
2166 sink_->ClearMessages(); | 2179 sink_->ClearMessages(); |
2167 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 2180 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
2168 | 2181 |
2169 // Receive a frame of the correct size, should not be skipped and, and should | 2182 // Receive a frame of the correct size, should not be skipped and, and should |
2170 // produce a Resize message after the commit. | 2183 // produce a Resize message after the commit. |
2171 view_->OnSwapCompositorFrame( | 2184 view_->OnSwapCompositorFrame( |
2172 0, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); | 2185 0, kArbitraryLocalSurfaceId, |
| 2186 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
2173 cc::SurfaceId surface_id = view_->surface_id(); | 2187 cc::SurfaceId surface_id = view_->surface_id(); |
2174 if (!surface_id.is_valid()) { | 2188 if (!surface_id.is_valid()) { |
2175 // No frame ack yet. | 2189 // No frame ack yet. |
2176 EXPECT_EQ(0u, sink_->message_count()); | 2190 EXPECT_EQ(0u, sink_->message_count()); |
2177 } else { | 2191 } else { |
2178 // Frame isn't desired size, so early ack. | 2192 // Frame isn't desired size, so early ack. |
2179 EXPECT_EQ(1u, sink_->message_count()); | 2193 EXPECT_EQ(1u, sink_->message_count()); |
2180 } | 2194 } |
2181 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 2195 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
2182 | 2196 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2233 view_->GetNativeView(), | 2247 view_->GetNativeView(), |
2234 parent_view_->GetNativeView()->GetRootWindow(), | 2248 parent_view_->GetNativeView()->GetRootWindow(), |
2235 gfx::Rect()); | 2249 gfx::Rect()); |
2236 view_->SetSize(view_rect.size()); | 2250 view_->SetSize(view_rect.size()); |
2237 | 2251 |
2238 MockWindowObserver observer; | 2252 MockWindowObserver observer; |
2239 view_->window_->AddObserver(&observer); | 2253 view_->window_->AddObserver(&observer); |
2240 | 2254 |
2241 // A full frame of damage. | 2255 // A full frame of damage. |
2242 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2256 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2243 view_->OnSwapCompositorFrame( | 2257 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, |
2244 0, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2258 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2245 testing::Mock::VerifyAndClearExpectations(&observer); | 2259 testing::Mock::VerifyAndClearExpectations(&observer); |
2246 view_->RunOnCompositingDidCommit(); | 2260 view_->RunOnCompositingDidCommit(); |
2247 | 2261 |
2248 // A partial damage frame. | 2262 // A partial damage frame. |
2249 gfx::Rect partial_view_rect(30, 30, 20, 20); | 2263 gfx::Rect partial_view_rect(30, 30, 20, 20); |
2250 EXPECT_CALL(observer, | 2264 EXPECT_CALL(observer, |
2251 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); | 2265 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); |
2252 view_->OnSwapCompositorFrame( | 2266 view_->OnSwapCompositorFrame( |
2253 0, MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); | 2267 0, kArbitraryLocalSurfaceId, |
| 2268 MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); |
2254 testing::Mock::VerifyAndClearExpectations(&observer); | 2269 testing::Mock::VerifyAndClearExpectations(&observer); |
2255 view_->RunOnCompositingDidCommit(); | 2270 view_->RunOnCompositingDidCommit(); |
2256 | 2271 |
2257 // Lock the compositor. Now we should drop frames. | 2272 // Lock the compositor. Now we should drop frames. |
2258 view_rect = gfx::Rect(150, 150); | 2273 view_rect = gfx::Rect(150, 150); |
2259 view_->SetSize(view_rect.size()); | 2274 view_->SetSize(view_rect.size()); |
2260 | 2275 |
2261 // This frame is dropped. | 2276 // This frame is dropped. |
2262 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40); | 2277 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40); |
2263 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); | 2278 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
2264 view_->OnSwapCompositorFrame( | 2279 view_->OnSwapCompositorFrame( |
2265 0, MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); | 2280 0, kArbitraryLocalSurfaceId, |
| 2281 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); |
2266 testing::Mock::VerifyAndClearExpectations(&observer); | 2282 testing::Mock::VerifyAndClearExpectations(&observer); |
2267 view_->RunOnCompositingDidCommit(); | 2283 view_->RunOnCompositingDidCommit(); |
2268 | 2284 |
2269 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20); | 2285 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20); |
2270 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); | 2286 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
2271 view_->OnSwapCompositorFrame( | 2287 view_->OnSwapCompositorFrame( |
2272 0, MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); | 2288 0, kArbitraryLocalSurfaceId, |
| 2289 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); |
2273 testing::Mock::VerifyAndClearExpectations(&observer); | 2290 testing::Mock::VerifyAndClearExpectations(&observer); |
2274 view_->RunOnCompositingDidCommit(); | 2291 view_->RunOnCompositingDidCommit(); |
2275 | 2292 |
2276 // Unlock the compositor. This frame should damage everything. | 2293 // Unlock the compositor. This frame should damage everything. |
2277 frame_size = view_rect.size(); | 2294 frame_size = view_rect.size(); |
2278 | 2295 |
2279 gfx::Rect new_damage_rect(5, 6, 10, 10); | 2296 gfx::Rect new_damage_rect(5, 6, 10, 10); |
2280 EXPECT_CALL(observer, | 2297 EXPECT_CALL(observer, |
2281 OnDelegatedFrameDamage(view_->window_, view_rect)); | 2298 OnDelegatedFrameDamage(view_->window_, view_rect)); |
2282 view_->OnSwapCompositorFrame( | 2299 view_->OnSwapCompositorFrame( |
2283 0, MakeDelegatedFrame(1.f, frame_size, new_damage_rect)); | 2300 0, kArbitraryLocalSurfaceId, |
| 2301 MakeDelegatedFrame(1.f, frame_size, new_damage_rect)); |
2284 testing::Mock::VerifyAndClearExpectations(&observer); | 2302 testing::Mock::VerifyAndClearExpectations(&observer); |
2285 view_->RunOnCompositingDidCommit(); | 2303 view_->RunOnCompositingDidCommit(); |
2286 | 2304 |
2287 // A partial damage frame, this should not be dropped. | 2305 // A partial damage frame, this should not be dropped. |
2288 EXPECT_CALL(observer, | 2306 EXPECT_CALL(observer, |
2289 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); | 2307 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); |
2290 view_->OnSwapCompositorFrame( | 2308 view_->OnSwapCompositorFrame( |
2291 0, MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); | 2309 0, kArbitraryLocalSurfaceId, |
| 2310 MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); |
2292 testing::Mock::VerifyAndClearExpectations(&observer); | 2311 testing::Mock::VerifyAndClearExpectations(&observer); |
2293 view_->RunOnCompositingDidCommit(); | 2312 view_->RunOnCompositingDidCommit(); |
2294 | 2313 |
2295 | 2314 |
2296 // Resize to something empty. | 2315 // Resize to something empty. |
2297 view_rect = gfx::Rect(100, 0); | 2316 view_rect = gfx::Rect(100, 0); |
2298 view_->SetSize(view_rect.size()); | 2317 view_->SetSize(view_rect.size()); |
2299 | 2318 |
2300 // We're never expecting empty frames, resize to something non-empty. | 2319 // We're never expecting empty frames, resize to something non-empty. |
2301 view_rect = gfx::Rect(100, 100); | 2320 view_rect = gfx::Rect(100, 100); |
2302 view_->SetSize(view_rect.size()); | 2321 view_->SetSize(view_rect.size()); |
2303 | 2322 |
2304 // This frame should not be dropped. | 2323 // This frame should not be dropped. |
2305 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2324 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2306 view_->OnSwapCompositorFrame( | 2325 view_->OnSwapCompositorFrame( |
2307 0, MakeDelegatedFrame(1.f, view_rect.size(), view_rect)); | 2326 0, kArbitraryLocalSurfaceId, |
| 2327 MakeDelegatedFrame(1.f, view_rect.size(), view_rect)); |
2308 testing::Mock::VerifyAndClearExpectations(&observer); | 2328 testing::Mock::VerifyAndClearExpectations(&observer); |
2309 view_->RunOnCompositingDidCommit(); | 2329 view_->RunOnCompositingDidCommit(); |
2310 | 2330 |
2311 view_->window_->RemoveObserver(&observer); | 2331 view_->window_->RemoveObserver(&observer); |
2312 } | 2332 } |
2313 | 2333 |
2314 TEST_F(RenderWidgetHostViewAuraTest, OutputSurfaceIdChange) { | 2334 TEST_F(RenderWidgetHostViewAuraTest, OutputSurfaceIdChange) { |
2315 gfx::Rect view_rect(100, 100); | 2335 gfx::Rect view_rect(100, 100); |
2316 gfx::Size frame_size = view_rect.size(); | 2336 gfx::Size frame_size = view_rect.size(); |
2317 | 2337 |
2318 view_->InitAsChild(nullptr); | 2338 view_->InitAsChild(nullptr); |
2319 aura::client::ParentWindowWithContext( | 2339 aura::client::ParentWindowWithContext( |
2320 view_->GetNativeView(), | 2340 view_->GetNativeView(), |
2321 parent_view_->GetNativeView()->GetRootWindow(), | 2341 parent_view_->GetNativeView()->GetRootWindow(), |
2322 gfx::Rect()); | 2342 gfx::Rect()); |
2323 view_->SetSize(view_rect.size()); | 2343 view_->SetSize(view_rect.size()); |
2324 | 2344 |
2325 MockWindowObserver observer; | 2345 MockWindowObserver observer; |
2326 view_->window_->AddObserver(&observer); | 2346 view_->window_->AddObserver(&observer); |
2327 | 2347 |
2328 // Swap a frame. | 2348 // Swap a frame. |
2329 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2349 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2330 view_->OnSwapCompositorFrame( | 2350 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, |
2331 0, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2351 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2332 testing::Mock::VerifyAndClearExpectations(&observer); | 2352 testing::Mock::VerifyAndClearExpectations(&observer); |
2333 view_->RunOnCompositingDidCommit(); | 2353 view_->RunOnCompositingDidCommit(); |
2334 | 2354 |
2335 // Swap a frame with a different surface id. | 2355 // Swap a frame with a different surface id. |
2336 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2356 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2337 view_->OnSwapCompositorFrame( | 2357 view_->OnSwapCompositorFrame(1, CreateLocalSurfaceId(), |
2338 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2358 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2339 testing::Mock::VerifyAndClearExpectations(&observer); | 2359 testing::Mock::VerifyAndClearExpectations(&observer); |
2340 view_->RunOnCompositingDidCommit(); | 2360 view_->RunOnCompositingDidCommit(); |
2341 | 2361 |
2342 // Swap an empty frame, with a different surface id. | 2362 // Swap an empty frame, with a different surface id. |
2343 view_->OnSwapCompositorFrame( | 2363 view_->OnSwapCompositorFrame( |
2344 2, MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); | 2364 2, CreateLocalSurfaceId(), |
| 2365 MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); |
2345 testing::Mock::VerifyAndClearExpectations(&observer); | 2366 testing::Mock::VerifyAndClearExpectations(&observer); |
2346 view_->RunOnCompositingDidCommit(); | 2367 view_->RunOnCompositingDidCommit(); |
2347 | 2368 |
2348 // Swap another frame, with a different surface id. | 2369 // Swap another frame, with a different surface id. |
2349 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2370 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2350 view_->OnSwapCompositorFrame(3, | 2371 view_->OnSwapCompositorFrame(3, CreateLocalSurfaceId(), |
2351 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2372 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2352 testing::Mock::VerifyAndClearExpectations(&observer); | 2373 testing::Mock::VerifyAndClearExpectations(&observer); |
2353 view_->RunOnCompositingDidCommit(); | 2374 view_->RunOnCompositingDidCommit(); |
2354 | 2375 |
2355 view_->window_->RemoveObserver(&observer); | 2376 view_->window_->RemoveObserver(&observer); |
2356 } | 2377 } |
2357 | 2378 |
2358 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { | 2379 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { |
2359 view_->InitAsChild(nullptr); | 2380 view_->InitAsChild(nullptr); |
2360 | 2381 |
(...skipping 24 matching lines...) Expand all Loading... |
2385 views[i]->GetNativeView(), | 2406 views[i]->GetNativeView(), |
2386 parent_view_->GetNativeView()->GetRootWindow(), | 2407 parent_view_->GetNativeView()->GetRootWindow(), |
2387 gfx::Rect()); | 2408 gfx::Rect()); |
2388 views[i]->SetSize(view_rect.size()); | 2409 views[i]->SetSize(view_rect.size()); |
2389 } | 2410 } |
2390 | 2411 |
2391 // Make each renderer visible, and swap a frame on it, then make it invisible. | 2412 // Make each renderer visible, and swap a frame on it, then make it invisible. |
2392 for (size_t i = 0; i < renderer_count; ++i) { | 2413 for (size_t i = 0; i < renderer_count; ++i) { |
2393 views[i]->Show(); | 2414 views[i]->Show(); |
2394 views[i]->OnSwapCompositorFrame( | 2415 views[i]->OnSwapCompositorFrame( |
2395 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2416 1, kArbitraryLocalSurfaceId, |
| 2417 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2396 EXPECT_TRUE(views[i]->HasFrameData()); | 2418 EXPECT_TRUE(views[i]->HasFrameData()); |
2397 views[i]->Hide(); | 2419 views[i]->Hide(); |
2398 } | 2420 } |
2399 | 2421 |
2400 // There should be max_renderer_frames with a frame in it, and one without it. | 2422 // There should be max_renderer_frames with a frame in it, and one without it. |
2401 // Since the logic is LRU eviction, the first one should be without. | 2423 // Since the logic is LRU eviction, the first one should be without. |
2402 EXPECT_FALSE(views[0]->HasFrameData()); | 2424 EXPECT_FALSE(views[0]->HasFrameData()); |
2403 for (size_t i = 1; i < renderer_count; ++i) | 2425 for (size_t i = 1; i < renderer_count; ++i) |
2404 EXPECT_TRUE(views[i]->HasFrameData()); | 2426 EXPECT_TRUE(views[i]->HasFrameData()); |
2405 | 2427 |
2406 // LRU renderer is [0], make it visible, it shouldn't evict anything yet. | 2428 // LRU renderer is [0], make it visible, it shouldn't evict anything yet. |
2407 views[0]->Show(); | 2429 views[0]->Show(); |
2408 EXPECT_FALSE(views[0]->HasFrameData()); | 2430 EXPECT_FALSE(views[0]->HasFrameData()); |
2409 EXPECT_TRUE(views[1]->HasFrameData()); | 2431 EXPECT_TRUE(views[1]->HasFrameData()); |
2410 // Since [0] doesn't have a frame, it should be waiting for the renderer to | 2432 // Since [0] doesn't have a frame, it should be waiting for the renderer to |
2411 // give it one. | 2433 // give it one. |
2412 EXPECT_TRUE(views[0]->released_front_lock_active()); | 2434 EXPECT_TRUE(views[0]->released_front_lock_active()); |
2413 | 2435 |
2414 // Swap a frame on it, it should evict the next LRU [1]. | 2436 // Swap a frame on it, it should evict the next LRU [1]. |
2415 views[0]->OnSwapCompositorFrame( | 2437 views[0]->OnSwapCompositorFrame( |
2416 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2438 1, kArbitraryLocalSurfaceId, |
| 2439 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2417 EXPECT_TRUE(views[0]->HasFrameData()); | 2440 EXPECT_TRUE(views[0]->HasFrameData()); |
2418 EXPECT_FALSE(views[1]->HasFrameData()); | 2441 EXPECT_FALSE(views[1]->HasFrameData()); |
2419 // Now that [0] got a frame, it shouldn't be waiting any more. | 2442 // Now that [0] got a frame, it shouldn't be waiting any more. |
2420 EXPECT_FALSE(views[0]->released_front_lock_active()); | 2443 EXPECT_FALSE(views[0]->released_front_lock_active()); |
2421 views[0]->Hide(); | 2444 views[0]->Hide(); |
2422 | 2445 |
2423 // LRU renderer is [1], still hidden. Swap a frame on it, it should evict | 2446 // LRU renderer is [1], still hidden. Swap a frame on it, it should evict |
2424 // the next LRU [2]. | 2447 // the next LRU [2]. |
2425 views[1]->OnSwapCompositorFrame( | 2448 views[1]->OnSwapCompositorFrame( |
2426 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2449 1, kArbitraryLocalSurfaceId, |
| 2450 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2427 EXPECT_TRUE(views[0]->HasFrameData()); | 2451 EXPECT_TRUE(views[0]->HasFrameData()); |
2428 EXPECT_TRUE(views[1]->HasFrameData()); | 2452 EXPECT_TRUE(views[1]->HasFrameData()); |
2429 EXPECT_FALSE(views[2]->HasFrameData()); | 2453 EXPECT_FALSE(views[2]->HasFrameData()); |
2430 for (size_t i = 3; i < renderer_count; ++i) | 2454 for (size_t i = 3; i < renderer_count; ++i) |
2431 EXPECT_TRUE(views[i]->HasFrameData()); | 2455 EXPECT_TRUE(views[i]->HasFrameData()); |
2432 | 2456 |
2433 // Make all renderers but [0] visible and swap a frame on them, keep [0] | 2457 // Make all renderers but [0] visible and swap a frame on them, keep [0] |
2434 // hidden, it becomes the LRU. | 2458 // hidden, it becomes the LRU. |
2435 for (size_t i = 1; i < renderer_count; ++i) { | 2459 for (size_t i = 1; i < renderer_count; ++i) { |
2436 views[i]->Show(); | 2460 views[i]->Show(); |
2437 // The renderers who don't have a frame should be waiting. The ones that | 2461 // The renderers who don't have a frame should be waiting. The ones that |
2438 // have a frame should not. | 2462 // have a frame should not. |
2439 // In practice, [1] has a frame, but anything after has its frame evicted. | 2463 // In practice, [1] has a frame, but anything after has its frame evicted. |
2440 EXPECT_EQ(!views[i]->HasFrameData(), | 2464 EXPECT_EQ(!views[i]->HasFrameData(), |
2441 views[i]->released_front_lock_active()); | 2465 views[i]->released_front_lock_active()); |
2442 views[i]->OnSwapCompositorFrame( | 2466 views[i]->OnSwapCompositorFrame( |
2443 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2467 1, kArbitraryLocalSurfaceId, |
| 2468 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2444 // Now everyone has a frame. | 2469 // Now everyone has a frame. |
2445 EXPECT_FALSE(views[i]->released_front_lock_active()); | 2470 EXPECT_FALSE(views[i]->released_front_lock_active()); |
2446 EXPECT_TRUE(views[i]->HasFrameData()); | 2471 EXPECT_TRUE(views[i]->HasFrameData()); |
2447 } | 2472 } |
2448 EXPECT_FALSE(views[0]->HasFrameData()); | 2473 EXPECT_FALSE(views[0]->HasFrameData()); |
2449 | 2474 |
2450 // Swap a frame on [0], it should be evicted immediately. | 2475 // Swap a frame on [0], it should be evicted immediately. |
2451 views[0]->OnSwapCompositorFrame( | 2476 views[0]->OnSwapCompositorFrame( |
2452 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2477 1, kArbitraryLocalSurfaceId, |
| 2478 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2453 EXPECT_FALSE(views[0]->HasFrameData()); | 2479 EXPECT_FALSE(views[0]->HasFrameData()); |
2454 | 2480 |
2455 // Make [0] visible, and swap a frame on it. Nothing should be evicted | 2481 // Make [0] visible, and swap a frame on it. Nothing should be evicted |
2456 // although we're above the limit. | 2482 // although we're above the limit. |
2457 views[0]->Show(); | 2483 views[0]->Show(); |
2458 // We don't have a frame, wait. | 2484 // We don't have a frame, wait. |
2459 EXPECT_TRUE(views[0]->released_front_lock_active()); | 2485 EXPECT_TRUE(views[0]->released_front_lock_active()); |
2460 views[0]->OnSwapCompositorFrame( | 2486 views[0]->OnSwapCompositorFrame( |
2461 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2487 1, kArbitraryLocalSurfaceId, |
| 2488 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2462 EXPECT_FALSE(views[0]->released_front_lock_active()); | 2489 EXPECT_FALSE(views[0]->released_front_lock_active()); |
2463 for (size_t i = 0; i < renderer_count; ++i) | 2490 for (size_t i = 0; i < renderer_count; ++i) |
2464 EXPECT_TRUE(views[i]->HasFrameData()); | 2491 EXPECT_TRUE(views[i]->HasFrameData()); |
2465 | 2492 |
2466 // Make [0] hidden, it should evict its frame. | 2493 // Make [0] hidden, it should evict its frame. |
2467 views[0]->Hide(); | 2494 views[0]->Hide(); |
2468 EXPECT_FALSE(views[0]->HasFrameData()); | 2495 EXPECT_FALSE(views[0]->HasFrameData()); |
2469 | 2496 |
2470 // Make [0] visible, don't give it a frame, it should be waiting. | 2497 // Make [0] visible, don't give it a frame, it should be waiting. |
2471 views[0]->Show(); | 2498 views[0]->Show(); |
2472 EXPECT_TRUE(views[0]->released_front_lock_active()); | 2499 EXPECT_TRUE(views[0]->released_front_lock_active()); |
2473 // Make [0] hidden, it should stop waiting. | 2500 // Make [0] hidden, it should stop waiting. |
2474 views[0]->Hide(); | 2501 views[0]->Hide(); |
2475 EXPECT_FALSE(views[0]->released_front_lock_active()); | 2502 EXPECT_FALSE(views[0]->released_front_lock_active()); |
2476 | 2503 |
2477 // Make [1] hidden, resize it. It should drop its frame. | 2504 // Make [1] hidden, resize it. It should drop its frame. |
2478 views[1]->Hide(); | 2505 views[1]->Hide(); |
2479 EXPECT_TRUE(views[1]->HasFrameData()); | 2506 EXPECT_TRUE(views[1]->HasFrameData()); |
2480 gfx::Size size2(200, 200); | 2507 gfx::Size size2(200, 200); |
2481 views[1]->SetSize(size2); | 2508 views[1]->SetSize(size2); |
2482 EXPECT_FALSE(views[1]->HasFrameData()); | 2509 EXPECT_FALSE(views[1]->HasFrameData()); |
2483 // Show it, it should block until we give it a frame. | 2510 // Show it, it should block until we give it a frame. |
2484 views[1]->Show(); | 2511 views[1]->Show(); |
2485 EXPECT_TRUE(views[1]->released_front_lock_active()); | 2512 EXPECT_TRUE(views[1]->released_front_lock_active()); |
2486 views[1]->OnSwapCompositorFrame( | 2513 views[1]->OnSwapCompositorFrame( |
2487 1, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); | 2514 1, kArbitraryLocalSurfaceId, |
| 2515 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
2488 EXPECT_FALSE(views[1]->released_front_lock_active()); | 2516 EXPECT_FALSE(views[1]->released_front_lock_active()); |
2489 | 2517 |
2490 for (size_t i = 0; i < renderer_count - 1; ++i) | 2518 for (size_t i = 0; i < renderer_count - 1; ++i) |
2491 views[i]->Hide(); | 2519 views[i]->Hide(); |
2492 | 2520 |
2493 // Allocate enough bitmaps so that two frames (proportionally) would be | 2521 // Allocate enough bitmaps so that two frames (proportionally) would be |
2494 // enough hit the handle limit. | 2522 // enough hit the handle limit. |
2495 int handles_per_frame = 5; | 2523 int handles_per_frame = 5; |
2496 RendererFrameManager::GetInstance()->set_max_handles(handles_per_frame * 2); | 2524 RendererFrameManager::GetInstance()->set_max_handles(handles_per_frame * 2); |
2497 | 2525 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2551 parent_view_->GetNativeView()->GetRootWindow(), | 2579 parent_view_->GetNativeView()->GetRootWindow(), |
2552 gfx::Rect()); | 2580 gfx::Rect()); |
2553 views[i]->SetSize(view_rect.size()); | 2581 views[i]->SetSize(view_rect.size()); |
2554 } | 2582 } |
2555 | 2583 |
2556 // Make each renderer visible and swap a frame on it. No eviction should | 2584 // Make each renderer visible and swap a frame on it. No eviction should |
2557 // occur because all frames are visible. | 2585 // occur because all frames are visible. |
2558 for (size_t i = 0; i < renderer_count; ++i) { | 2586 for (size_t i = 0; i < renderer_count; ++i) { |
2559 views[i]->Show(); | 2587 views[i]->Show(); |
2560 views[i]->OnSwapCompositorFrame( | 2588 views[i]->OnSwapCompositorFrame( |
2561 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2589 1, i ? CreateLocalSurfaceId() : kArbitraryLocalSurfaceId, |
| 2590 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2562 EXPECT_TRUE(views[i]->HasFrameData()); | 2591 EXPECT_TRUE(views[i]->HasFrameData()); |
2563 } | 2592 } |
2564 | 2593 |
2565 // If we hide [0], then [0] should be evicted. | 2594 // If we hide [0], then [0] should be evicted. |
2566 views[0]->Hide(); | 2595 views[0]->Hide(); |
2567 EXPECT_FALSE(views[0]->HasFrameData()); | 2596 EXPECT_FALSE(views[0]->HasFrameData()); |
2568 | 2597 |
2569 // If we lock [0] before hiding it, then [0] should not be evicted. | 2598 // If we lock [0] before hiding it, then [0] should not be evicted. |
2570 views[0]->Show(); | 2599 views[0]->Show(); |
2571 views[0]->OnSwapCompositorFrame( | 2600 views[0]->OnSwapCompositorFrame( |
2572 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2601 1, kArbitraryLocalSurfaceId, |
| 2602 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2573 EXPECT_TRUE(views[0]->HasFrameData()); | 2603 EXPECT_TRUE(views[0]->HasFrameData()); |
2574 views[0]->GetDelegatedFrameHost()->LockResources(); | 2604 views[0]->GetDelegatedFrameHost()->LockResources(); |
2575 views[0]->Hide(); | 2605 views[0]->Hide(); |
2576 EXPECT_TRUE(views[0]->HasFrameData()); | 2606 EXPECT_TRUE(views[0]->HasFrameData()); |
2577 | 2607 |
2578 // If we unlock [0] now, then [0] should be evicted. | 2608 // If we unlock [0] now, then [0] should be evicted. |
2579 views[0]->GetDelegatedFrameHost()->UnlockResources(); | 2609 views[0]->GetDelegatedFrameHost()->UnlockResources(); |
2580 EXPECT_FALSE(views[0]->HasFrameData()); | 2610 EXPECT_FALSE(views[0]->HasFrameData()); |
2581 | 2611 |
2582 for (size_t i = 0; i < renderer_count; ++i) { | 2612 for (size_t i = 0; i < renderer_count; ++i) { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2622 parent_view_->GetNativeView()->GetRootWindow(), | 2652 parent_view_->GetNativeView()->GetRootWindow(), |
2623 gfx::Rect()); | 2653 gfx::Rect()); |
2624 views[i]->SetSize(view_rect.size()); | 2654 views[i]->SetSize(view_rect.size()); |
2625 } | 2655 } |
2626 | 2656 |
2627 // Make each renderer visible and swap a frame on it. No eviction should | 2657 // Make each renderer visible and swap a frame on it. No eviction should |
2628 // occur because all frames are visible. | 2658 // occur because all frames are visible. |
2629 for (size_t i = 0; i < renderer_count; ++i) { | 2659 for (size_t i = 0; i < renderer_count; ++i) { |
2630 views[i]->Show(); | 2660 views[i]->Show(); |
2631 views[i]->OnSwapCompositorFrame( | 2661 views[i]->OnSwapCompositorFrame( |
2632 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2662 1, kArbitraryLocalSurfaceId, |
| 2663 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2633 EXPECT_TRUE(views[i]->HasFrameData()); | 2664 EXPECT_TRUE(views[i]->HasFrameData()); |
2634 } | 2665 } |
2635 | 2666 |
2636 // If we hide one, it should not get evicted. | 2667 // If we hide one, it should not get evicted. |
2637 views[0]->Hide(); | 2668 views[0]->Hide(); |
2638 base::RunLoop().RunUntilIdle(); | 2669 base::RunLoop().RunUntilIdle(); |
2639 EXPECT_TRUE(views[0]->HasFrameData()); | 2670 EXPECT_TRUE(views[0]->HasFrameData()); |
2640 // Using a lesser memory pressure event however, should evict. | 2671 // Using a lesser memory pressure event however, should evict. |
2641 SimulateMemoryPressure( | 2672 SimulateMemoryPressure( |
2642 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE); | 2673 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE); |
2643 base::RunLoop().RunUntilIdle(); | 2674 base::RunLoop().RunUntilIdle(); |
2644 EXPECT_FALSE(views[0]->HasFrameData()); | 2675 EXPECT_FALSE(views[0]->HasFrameData()); |
2645 | 2676 |
2646 // Check the same for a higher pressure event. | 2677 // Check the same for a higher pressure event. |
2647 views[1]->Hide(); | 2678 views[1]->Hide(); |
2648 base::RunLoop().RunUntilIdle(); | 2679 base::RunLoop().RunUntilIdle(); |
2649 EXPECT_TRUE(views[1]->HasFrameData()); | 2680 EXPECT_TRUE(views[1]->HasFrameData()); |
2650 SimulateMemoryPressure( | 2681 SimulateMemoryPressure( |
2651 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL); | 2682 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL); |
2652 base::RunLoop().RunUntilIdle(); | 2683 base::RunLoop().RunUntilIdle(); |
2653 EXPECT_FALSE(views[1]->HasFrameData()); | 2684 EXPECT_FALSE(views[1]->HasFrameData()); |
2654 | 2685 |
2655 for (size_t i = 0; i < renderer_count; ++i) { | 2686 for (size_t i = 0; i < renderer_count; ++i) { |
2656 views[i]->Destroy(); | 2687 views[i]->Destroy(); |
2657 delete hosts[i]; | 2688 delete hosts[i]; |
2658 } | 2689 } |
2659 } | 2690 } |
2660 | 2691 |
2661 TEST_F(RenderWidgetHostViewAuraTest, SoftwareDPIChange) { | |
2662 gfx::Rect view_rect(100, 100); | |
2663 gfx::Size frame_size(100, 100); | |
2664 | |
2665 view_->InitAsChild(nullptr); | |
2666 aura::client::ParentWindowWithContext( | |
2667 view_->GetNativeView(), | |
2668 parent_view_->GetNativeView()->GetRootWindow(), | |
2669 gfx::Rect()); | |
2670 view_->SetSize(view_rect.size()); | |
2671 view_->Show(); | |
2672 | |
2673 // With a 1x DPI UI and 1x DPI Renderer. | |
2674 view_->OnSwapCompositorFrame( | |
2675 1, MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); | |
2676 | |
2677 cc::SurfaceId surface_id = view_->surface_id(); | |
2678 | |
2679 // This frame will have the same number of physical pixels, but has a new | |
2680 // scale on it. | |
2681 view_->OnSwapCompositorFrame( | |
2682 1, MakeDelegatedFrame(2.f, frame_size, gfx::Rect(frame_size))); | |
2683 | |
2684 // When we get a new frame with the same frame size in physical pixels, but | |
2685 // a different scale, we should generate a surface, as the final result will | |
2686 // need to be scaled differently to the screen. | |
2687 EXPECT_NE(surface_id, view_->surface_id()); | |
2688 } | |
2689 | |
2690 TEST_F(RenderWidgetHostViewAuraTest, SourceEventTypeExistsInLatencyInfo) { | 2692 TEST_F(RenderWidgetHostViewAuraTest, SourceEventTypeExistsInLatencyInfo) { |
2691 // WHEEL source exists. | 2693 // WHEEL source exists. |
2692 ui::ScrollEvent scroll(ui::ET_SCROLL, gfx::Point(2, 2), ui::EventTimeForNow(), | 2694 ui::ScrollEvent scroll(ui::ET_SCROLL, gfx::Point(2, 2), ui::EventTimeForNow(), |
2693 0, 0, 0, 0, 0, 2); | 2695 0, 0, 0, 0, 0, 2); |
2694 view_->OnScrollEvent(&scroll); | 2696 view_->OnScrollEvent(&scroll); |
2695 EXPECT_EQ(widget_host_->lastWheelOrTouchEventLatencyInfo.source_event_type(), | 2697 EXPECT_EQ(widget_host_->lastWheelOrTouchEventLatencyInfo.source_event_type(), |
2696 ui::SourceEventType::WHEEL); | 2698 ui::SourceEventType::WHEEL); |
2697 | 2699 |
2698 // TOUCH source exists. | 2700 // TOUCH source exists. |
2699 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(30, 30), 0, | 2701 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(30, 30), 0, |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2755 } | 2757 } |
2756 | 2758 |
2757 void InstallFakeTickClock() { | 2759 void InstallFakeTickClock() { |
2758 // Create a fake tick clock and transfer ownership to the frame host. | 2760 // Create a fake tick clock and transfer ownership to the frame host. |
2759 tick_clock_ = new base::SimpleTestTickClock(); | 2761 tick_clock_ = new base::SimpleTestTickClock(); |
2760 view_->GetDelegatedFrameHost()->tick_clock_ = base::WrapUnique(tick_clock_); | 2762 view_->GetDelegatedFrameHost()->tick_clock_ = base::WrapUnique(tick_clock_); |
2761 } | 2763 } |
2762 | 2764 |
2763 void OnSwapCompositorFrame() { | 2765 void OnSwapCompositorFrame() { |
2764 view_->OnSwapCompositorFrame( | 2766 view_->OnSwapCompositorFrame( |
2765 1, MakeDelegatedFrame(1.f, view_rect_.size(), view_rect_)); | 2767 1, kArbitraryLocalSurfaceId, |
| 2768 MakeDelegatedFrame(1.f, view_rect_.size(), view_rect_)); |
2766 cc::SurfaceId surface_id = | 2769 cc::SurfaceId surface_id = |
2767 view_->GetDelegatedFrameHost()->SurfaceIdForTesting(); | 2770 view_->GetDelegatedFrameHost()->SurfaceIdForTesting(); |
2768 if (surface_id.is_valid()) | 2771 if (surface_id.is_valid()) |
2769 view_->GetDelegatedFrameHost()->WillDrawSurface( | 2772 view_->GetDelegatedFrameHost()->WillDrawSurface( |
2770 surface_id.local_surface_id(), view_rect_); | 2773 surface_id.local_surface_id(), view_rect_); |
2771 ASSERT_TRUE(view_->last_copy_request_); | 2774 ASSERT_TRUE(view_->last_copy_request_); |
2772 } | 2775 } |
2773 | 2776 |
2774 void ReleaseSwappedFrame() { | 2777 void ReleaseSwappedFrame() { |
2775 std::unique_ptr<cc::CopyOutputRequest> request = | 2778 std::unique_ptr<cc::CopyOutputRequest> request = |
(...skipping 2037 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4813 // There is no composition in the beginning. | 4816 // There is no composition in the beginning. |
4814 EXPECT_FALSE(has_composition_text()); | 4817 EXPECT_FALSE(has_composition_text()); |
4815 SetHasCompositionTextToTrue(); | 4818 SetHasCompositionTextToTrue(); |
4816 view->ImeCancelComposition(); | 4819 view->ImeCancelComposition(); |
4817 // The composition must have been canceled. | 4820 // The composition must have been canceled. |
4818 EXPECT_FALSE(has_composition_text()); | 4821 EXPECT_FALSE(has_composition_text()); |
4819 } | 4822 } |
4820 } | 4823 } |
4821 | 4824 |
4822 } // namespace content | 4825 } // namespace content |
OLD | NEW |