| 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 |