Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc

Issue 2728183002: RendererCompositorFrameSink should handle local surface id allocation (Closed)
Patch Set: rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 using ui::WebInputEventTraits; 112 using ui::WebInputEventTraits;
113 113
114 namespace content { 114 namespace content {
115 115
116 void InstallDelegatedFrameHostClient( 116 void InstallDelegatedFrameHostClient(
117 RenderWidgetHostViewAura* render_widget_host_view, 117 RenderWidgetHostViewAura* render_widget_host_view,
118 std::unique_ptr<DelegatedFrameHostClient> delegated_frame_host_client); 118 std::unique_ptr<DelegatedFrameHostClient> delegated_frame_host_client);
119 119
120 namespace { 120 namespace {
121 121
122 const cc::LocalSurfaceId kArbitraryLocalSurfaceId(
123 1,
124 base::UnguessableToken::Deserialize(2, 3));
125
126 cc::LocalSurfaceId CreateLocalSurfaceId() {
127 return cc::LocalSurfaceId(1, base::UnguessableToken::Create());
128 }
129
122 class TestOverscrollDelegate : public OverscrollControllerDelegate { 130 class TestOverscrollDelegate : public OverscrollControllerDelegate {
123 public: 131 public:
124 explicit TestOverscrollDelegate(RenderWidgetHostView* view) 132 explicit TestOverscrollDelegate(RenderWidgetHostView* view)
125 : view_(view), 133 : view_(view),
126 current_mode_(OVERSCROLL_NONE), 134 current_mode_(OVERSCROLL_NONE),
127 completed_mode_(OVERSCROLL_NONE), 135 completed_mode_(OVERSCROLL_NONE),
128 delta_x_(0.f), 136 delta_x_(0.f),
129 delta_y_(0.f) {} 137 delta_y_(0.f) {}
130 138
131 ~TestOverscrollDelegate() override {} 139 ~TestOverscrollDelegate() override {}
(...skipping 1790 matching lines...) Expand 10 before | Expand all | Expand 10 after
1922 gfx::Rect()); 1930 gfx::Rect());
1923 view_->SetSize(view_size); 1931 view_->SetSize(view_size);
1924 view_->Show(); 1932 view_->Show();
1925 sink_->ClearMessages(); 1933 sink_->ClearMessages();
1926 1934
1927 // Submit a frame with resources. 1935 // Submit a frame with resources.
1928 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, view_size, view_rect); 1936 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, view_size, view_rect);
1929 cc::TransferableResource resource; 1937 cc::TransferableResource resource;
1930 resource.id = 1; 1938 resource.id = 1;
1931 frame.resource_list.push_back(resource); 1939 frame.resource_list.push_back(resource);
1932 view_->OnSwapCompositorFrame(0, std::move(frame)); 1940 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame));
1933 EXPECT_EQ(0u, sink_->message_count()); 1941 EXPECT_EQ(0u, sink_->message_count());
1934 1942
1935 // Swap another CompositorFrame but this time from another 1943 // Swap another CompositorFrame but this time from another
1936 // compositor_frame_sink_id. The resources for the previous frame are old and 1944 // compositor_frame_sink_id. The resources for the previous frame are old and
1937 // should not be returned. 1945 // should not be returned.
1938 view_->OnSwapCompositorFrame(1, 1946 view_->OnSwapCompositorFrame(1, CreateLocalSurfaceId(),
1939 MakeDelegatedFrame(1.f, view_size, view_rect)); 1947 MakeDelegatedFrame(1.f, view_size, view_rect));
1940 EXPECT_EQ(0u, sink_->message_count()); 1948 EXPECT_EQ(0u, sink_->message_count());
1941 1949
1942 // Report that the surface is drawn to trigger an ACK. 1950 // Report that the surface is drawn to trigger an ACK.
1943 cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id()); 1951 cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id());
1944 EXPECT_TRUE(surface); 1952 EXPECT_TRUE(surface);
1945 surface->RunDrawCallbacks(); 1953 surface->RunDrawCallbacks();
1946 EXPECT_EQ(1u, sink_->message_count()); 1954 EXPECT_EQ(1u, sink_->message_count());
1947 { 1955 {
1948 const IPC::Message* msg = sink_->GetMessageAt(0); 1956 const IPC::Message* msg = sink_->GetMessageAt(0);
(...skipping 25 matching lines...) Expand all
1974 EXPECT_EQ(ViewMsg_Resize::ID, msg->type()); 1982 EXPECT_EQ(ViewMsg_Resize::ID, msg->type());
1975 ViewMsg_Resize::Param params; 1983 ViewMsg_Resize::Param params;
1976 ViewMsg_Resize::Read(msg, &params); 1984 ViewMsg_Resize::Read(msg, &params);
1977 EXPECT_EQ( 1985 EXPECT_EQ(
1978 "0,0 800x600", 1986 "0,0 800x600",
1979 std::get<0>(params).screen_info.available_rect.ToString()); 1987 std::get<0>(params).screen_info.available_rect.ToString());
1980 EXPECT_EQ("800x600", std::get<0>(params).new_size.ToString()); 1988 EXPECT_EQ("800x600", std::get<0>(params).new_size.ToString());
1981 // Resizes are blocked until we swapped a frame of the correct size, and 1989 // Resizes are blocked until we swapped a frame of the correct size, and
1982 // we've committed it. 1990 // we've committed it.
1983 view_->OnSwapCompositorFrame( 1991 view_->OnSwapCompositorFrame(
1984 0, MakeDelegatedFrame(1.f, std::get<0>(params).new_size, 1992 0, kArbitraryLocalSurfaceId,
1985 gfx::Rect(std::get<0>(params).new_size))); 1993 MakeDelegatedFrame(1.f, std::get<0>(params).new_size,
1994 gfx::Rect(std::get<0>(params).new_size)));
1986 ui::DrawWaiterForTest::WaitForCommit( 1995 ui::DrawWaiterForTest::WaitForCommit(
1987 root_window->GetHost()->compositor()); 1996 root_window->GetHost()->compositor());
1988 } 1997 }
1989 1998
1990 widget_host_->ResetSizeAndRepaintPendingFlags(); 1999 widget_host_->ResetSizeAndRepaintPendingFlags();
1991 sink_->ClearMessages(); 2000 sink_->ClearMessages();
1992 2001
1993 // Make sure the corrent screen size is set along in the resize 2002 // Make sure the corrent screen size is set along in the resize
1994 // request when the screen size has changed. 2003 // request when the screen size has changed.
1995 aura_test_helper_->test_screen()->SetUIScale(0.5); 2004 aura_test_helper_->test_screen()->SetUIScale(0.5);
1996 EXPECT_EQ(1u, sink_->message_count()); 2005 EXPECT_EQ(1u, sink_->message_count());
1997 { 2006 {
1998 const IPC::Message* msg = sink_->GetMessageAt(0); 2007 const IPC::Message* msg = sink_->GetMessageAt(0);
1999 EXPECT_EQ(ViewMsg_Resize::ID, msg->type()); 2008 EXPECT_EQ(ViewMsg_Resize::ID, msg->type());
2000 ViewMsg_Resize::Param params; 2009 ViewMsg_Resize::Param params;
2001 ViewMsg_Resize::Read(msg, &params); 2010 ViewMsg_Resize::Read(msg, &params);
2002 EXPECT_EQ( 2011 EXPECT_EQ(
2003 "0,0 1600x1200", 2012 "0,0 1600x1200",
2004 std::get<0>(params).screen_info.available_rect.ToString()); 2013 std::get<0>(params).screen_info.available_rect.ToString());
2005 EXPECT_EQ("1600x1200", std::get<0>(params).new_size.ToString()); 2014 EXPECT_EQ("1600x1200", std::get<0>(params).new_size.ToString());
2006 view_->OnSwapCompositorFrame( 2015 view_->OnSwapCompositorFrame(
2007 0, MakeDelegatedFrame(1.f, std::get<0>(params).new_size, 2016 0, kArbitraryLocalSurfaceId,
2008 gfx::Rect(std::get<0>(params).new_size))); 2017 MakeDelegatedFrame(1.f, std::get<0>(params).new_size,
2018 gfx::Rect(std::get<0>(params).new_size)));
2009 ui::DrawWaiterForTest::WaitForCommit( 2019 ui::DrawWaiterForTest::WaitForCommit(
2010 root_window->GetHost()->compositor()); 2020 root_window->GetHost()->compositor());
2011 } 2021 }
2012 } 2022 }
2013 2023
2014 // Swapping a frame should notify the window. 2024 // Swapping a frame should notify the window.
2015 TEST_F(RenderWidgetHostViewAuraTest, SwapNotifiesWindow) { 2025 TEST_F(RenderWidgetHostViewAuraTest, SwapNotifiesWindow) {
2016 gfx::Size view_size(100, 100); 2026 gfx::Size view_size(100, 100);
2017 gfx::Rect view_rect(view_size); 2027 gfx::Rect view_rect(view_size);
2018 2028
2019 view_->InitAsChild(nullptr); 2029 view_->InitAsChild(nullptr);
2020 aura::client::ParentWindowWithContext( 2030 aura::client::ParentWindowWithContext(
2021 view_->GetNativeView(), 2031 view_->GetNativeView(),
2022 parent_view_->GetNativeView()->GetRootWindow(), 2032 parent_view_->GetNativeView()->GetRootWindow(),
2023 gfx::Rect()); 2033 gfx::Rect());
2024 view_->SetSize(view_size); 2034 view_->SetSize(view_size);
2025 view_->Show(); 2035 view_->Show();
2026 2036
2027 MockWindowObserver observer; 2037 MockWindowObserver observer;
2028 view_->window_->AddObserver(&observer); 2038 view_->window_->AddObserver(&observer);
2029 2039
2030 // Delegated renderer path 2040 // Delegated renderer path
2031 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2041 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2032 view_->OnSwapCompositorFrame( 2042 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId,
2033 0, MakeDelegatedFrame(1.f, view_size, view_rect)); 2043 MakeDelegatedFrame(1.f, view_size, view_rect));
2034 testing::Mock::VerifyAndClearExpectations(&observer); 2044 testing::Mock::VerifyAndClearExpectations(&observer);
2035 2045
2036 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, 2046 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_,
2037 gfx::Rect(5, 5, 5, 5))); 2047 gfx::Rect(5, 5, 5, 5)));
2038 view_->OnSwapCompositorFrame( 2048 view_->OnSwapCompositorFrame(
2039 0, MakeDelegatedFrame(1.f, view_size, gfx::Rect(5, 5, 5, 5))); 2049 0, kArbitraryLocalSurfaceId,
2050 MakeDelegatedFrame(1.f, view_size, gfx::Rect(5, 5, 5, 5)));
2040 testing::Mock::VerifyAndClearExpectations(&observer); 2051 testing::Mock::VerifyAndClearExpectations(&observer);
2041 2052
2042 view_->window_->RemoveObserver(&observer); 2053 view_->window_->RemoveObserver(&observer);
2043 } 2054 }
2044 2055
2045 // Mirroring the layers for a window should cause Surface destruction to 2056 // Mirroring the layers for a window should cause Surface destruction to
2046 // depend on both layers. 2057 // depend on both layers.
2047 TEST_F(RenderWidgetHostViewAuraTest, MirrorLayers) { 2058 TEST_F(RenderWidgetHostViewAuraTest, MirrorLayers) {
2048 gfx::Size view_size(100, 100); 2059 gfx::Size view_size(100, 100);
2049 gfx::Rect view_rect(view_size); 2060 gfx::Rect view_rect(view_size);
2050 aura::Window* const root = parent_view_->GetNativeView()->GetRootWindow(); 2061 aura::Window* const root = parent_view_->GetNativeView()->GetRootWindow();
2051 2062
2052 view_->InitAsChild(nullptr); 2063 view_->InitAsChild(nullptr);
2053 aura::client::ParentWindowWithContext( 2064 aura::client::ParentWindowWithContext(
2054 view_->GetNativeView(), root, gfx::Rect()); 2065 view_->GetNativeView(), root, gfx::Rect());
2055 view_->SetSize(view_size); 2066 view_->SetSize(view_size);
2056 view_->Show(); 2067 view_->Show();
2057 2068
2058 view_->OnSwapCompositorFrame(0, 2069 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId,
2059 MakeDelegatedFrame(1.f, view_size, view_rect)); 2070 MakeDelegatedFrame(1.f, view_size, view_rect));
2060 std::unique_ptr<ui::LayerTreeOwner> mirror(wm::MirrorLayers( 2071 std::unique_ptr<ui::LayerTreeOwner> mirror(wm::MirrorLayers(
2061 view_->GetNativeView(), false /* sync_bounds */)); 2072 view_->GetNativeView(), false /* sync_bounds */));
2062 2073
2063 cc::SurfaceId id = view_->GetDelegatedFrameHost()->SurfaceIdForTesting(); 2074 cc::SurfaceId id = view_->GetDelegatedFrameHost()->SurfaceIdForTesting();
2064 if (id.is_valid()) { 2075 if (id.is_valid()) {
2065 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); 2076 ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
2066 cc::SurfaceManager* manager = 2077 cc::SurfaceManager* manager =
2067 factory->GetContextFactoryPrivate()->GetSurfaceManager(); 2078 factory->GetContextFactoryPrivate()->GetSurfaceManager();
2068 cc::Surface* surface = manager->GetSurfaceForId(id); 2079 cc::Surface* surface = manager->GetSurfaceForId(id);
(...skipping 22 matching lines...) Expand all
2091 2102
2092 view_->InitAsChild(nullptr); 2103 view_->InitAsChild(nullptr);
2093 aura::client::ParentWindowWithContext( 2104 aura::client::ParentWindowWithContext(
2094 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), 2105 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(),
2095 gfx::Rect()); 2106 gfx::Rect());
2096 view_->SetSize(large_size); 2107 view_->SetSize(large_size);
2097 view_->Show(); 2108 view_->Show();
2098 cc::CompositorFrame frame = 2109 cc::CompositorFrame frame =
2099 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size)); 2110 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size));
2100 frame.metadata.root_background_color = SK_ColorRED; 2111 frame.metadata.root_background_color = SK_ColorRED;
2101 view_->OnSwapCompositorFrame(0, std::move(frame)); 2112 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame));
2102 2113
2103 ui::Layer* parent_layer = view_->GetNativeView()->layer(); 2114 ui::Layer* parent_layer = view_->GetNativeView()->layer();
2104 2115
2105 ASSERT_EQ(2u, parent_layer->children().size()); 2116 ASSERT_EQ(2u, parent_layer->children().size());
2106 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds()); 2117 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds());
2107 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color()); 2118 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color());
2108 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds()); 2119 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds());
2109 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color()); 2120 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color());
2110 2121
2111 delegates_.back()->set_is_fullscreen(true); 2122 delegates_.back()->set_is_fullscreen(true);
2112 view_->SetSize(medium_size); 2123 view_->SetSize(medium_size);
2113 2124
2114 // Right gutter is unnecessary. 2125 // Right gutter is unnecessary.
2115 ASSERT_EQ(1u, parent_layer->children().size()); 2126 ASSERT_EQ(1u, parent_layer->children().size());
2116 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds()); 2127 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds());
2117 2128
2118 // RWH is fullscreen, so gutters should be black. 2129 // RWH is fullscreen, so gutters should be black.
2119 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color()); 2130 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color());
2120 2131
2121 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size)); 2132 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size));
2122 view_->OnSwapCompositorFrame(0, std::move(frame)); 2133 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame));
2123 EXPECT_EQ(0u, parent_layer->children().size()); 2134 EXPECT_EQ(0u, parent_layer->children().size());
2124 2135
2125 view_->SetSize(large_size); 2136 view_->SetSize(large_size);
2126 ASSERT_EQ(2u, parent_layer->children().size()); 2137 ASSERT_EQ(2u, parent_layer->children().size());
2127 2138
2128 // This should evict the frame and remove the gutter layers. 2139 // This should evict the frame and remove the gutter layers.
2129 view_->Hide(); 2140 view_->Hide();
2130 view_->SetSize(small_size); 2141 view_->SetSize(small_size);
2131 ASSERT_EQ(0u, parent_layer->children().size()); 2142 ASSERT_EQ(0u, parent_layer->children().size());
2132 } 2143 }
2133 2144
2134 TEST_F(RenderWidgetHostViewAuraTest, Resize) { 2145 TEST_F(RenderWidgetHostViewAuraTest, Resize) {
2135 gfx::Size size1(100, 100); 2146 gfx::Size size1(100, 100);
2136 gfx::Size size2(200, 200); 2147 gfx::Size size2(200, 200);
2137 gfx::Size size3(300, 300); 2148 gfx::Size size3(300, 300);
2138 2149
2139 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow(); 2150 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow();
2140 view_->InitAsChild(nullptr); 2151 view_->InitAsChild(nullptr);
2141 aura::client::ParentWindowWithContext( 2152 aura::client::ParentWindowWithContext(
2142 view_->GetNativeView(), root_window, gfx::Rect(size1)); 2153 view_->GetNativeView(), root_window, gfx::Rect(size1));
2143 view_->Show(); 2154 view_->Show();
2144 view_->SetSize(size1); 2155 view_->SetSize(size1);
2145 view_->OnSwapCompositorFrame( 2156 view_->OnSwapCompositorFrame(
2146 0, MakeDelegatedFrame(1.f, size1, gfx::Rect(size1))); 2157 0, kArbitraryLocalSurfaceId,
2158 MakeDelegatedFrame(1.f, size1, gfx::Rect(size1)));
2147 ui::DrawWaiterForTest::WaitForCommit( 2159 ui::DrawWaiterForTest::WaitForCommit(
2148 root_window->GetHost()->compositor()); 2160 root_window->GetHost()->compositor());
2149 ViewHostMsg_UpdateRect_Params update_params; 2161 ViewHostMsg_UpdateRect_Params update_params;
2150 update_params.view_size = size1; 2162 update_params.view_size = size1;
2151 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK; 2163 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK;
2152 widget_host_->OnMessageReceived( 2164 widget_host_->OnMessageReceived(
2153 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); 2165 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params));
2154 sink_->ClearMessages(); 2166 sink_->ClearMessages();
2155 // Resize logic is idle (no pending resize, no pending commit). 2167 // Resize logic is idle (no pending resize, no pending commit).
2156 EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString()); 2168 EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString());
(...skipping 17 matching lines...) Expand all
2174 2186
2175 // Resize renderer again, before receiving a frame. Should not produce a 2187 // Resize renderer again, before receiving a frame. Should not produce a
2176 // Resize message. 2188 // Resize message.
2177 view_->SetSize(size3); 2189 view_->SetSize(size3);
2178 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); 2190 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
2179 EXPECT_EQ(0u, sink_->message_count()); 2191 EXPECT_EQ(0u, sink_->message_count());
2180 2192
2181 // Receive a frame of the new size, should be skipped and not produce a Resize 2193 // Receive a frame of the new size, should be skipped and not produce a Resize
2182 // message. 2194 // message.
2183 view_->OnSwapCompositorFrame( 2195 view_->OnSwapCompositorFrame(
2184 0, MakeDelegatedFrame(1.f, size3, gfx::Rect(size3))); 2196 0, kArbitraryLocalSurfaceId,
2197 MakeDelegatedFrame(1.f, size3, gfx::Rect(size3)));
2185 // Expect the frame ack; 2198 // Expect the frame ack;
2186 EXPECT_EQ(1u, sink_->message_count()); 2199 EXPECT_EQ(1u, sink_->message_count());
2187 EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, 2200 EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID,
2188 sink_->GetMessageAt(0)->type()); 2201 sink_->GetMessageAt(0)->type());
2189 sink_->ClearMessages(); 2202 sink_->ClearMessages();
2190 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); 2203 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
2191 2204
2192 // Receive a frame of the correct size, should not be skipped and, and should 2205 // Receive a frame of the correct size, should not be skipped and, and should
2193 // produce a Resize message after the commit. 2206 // produce a Resize message after the commit.
2194 view_->OnSwapCompositorFrame( 2207 view_->OnSwapCompositorFrame(
2195 0, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); 2208 0, kArbitraryLocalSurfaceId,
2209 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2)));
2196 cc::SurfaceId surface_id = view_->surface_id(); 2210 cc::SurfaceId surface_id = view_->surface_id();
2197 if (!surface_id.is_valid()) { 2211 if (!surface_id.is_valid()) {
2198 // No frame ack yet. 2212 // No frame ack yet.
2199 EXPECT_EQ(0u, sink_->message_count()); 2213 EXPECT_EQ(0u, sink_->message_count());
2200 } else { 2214 } else {
2201 // Frame isn't desired size, so early ack. 2215 // Frame isn't desired size, so early ack.
2202 EXPECT_EQ(1u, sink_->message_count()); 2216 EXPECT_EQ(1u, sink_->message_count());
2203 } 2217 }
2204 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); 2218 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
2205 2219
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2256 view_->GetNativeView(), 2270 view_->GetNativeView(),
2257 parent_view_->GetNativeView()->GetRootWindow(), 2271 parent_view_->GetNativeView()->GetRootWindow(),
2258 gfx::Rect()); 2272 gfx::Rect());
2259 view_->SetSize(view_rect.size()); 2273 view_->SetSize(view_rect.size());
2260 2274
2261 MockWindowObserver observer; 2275 MockWindowObserver observer;
2262 view_->window_->AddObserver(&observer); 2276 view_->window_->AddObserver(&observer);
2263 2277
2264 // A full frame of damage. 2278 // A full frame of damage.
2265 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2279 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2266 view_->OnSwapCompositorFrame( 2280 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId,
2267 0, MakeDelegatedFrame(1.f, frame_size, view_rect)); 2281 MakeDelegatedFrame(1.f, frame_size, view_rect));
2268 testing::Mock::VerifyAndClearExpectations(&observer); 2282 testing::Mock::VerifyAndClearExpectations(&observer);
2269 view_->RunOnCompositingDidCommit(); 2283 view_->RunOnCompositingDidCommit();
2270 2284
2271 // A partial damage frame. 2285 // A partial damage frame.
2272 gfx::Rect partial_view_rect(30, 30, 20, 20); 2286 gfx::Rect partial_view_rect(30, 30, 20, 20);
2273 EXPECT_CALL(observer, 2287 EXPECT_CALL(observer,
2274 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); 2288 OnDelegatedFrameDamage(view_->window_, partial_view_rect));
2275 view_->OnSwapCompositorFrame( 2289 view_->OnSwapCompositorFrame(
2276 0, MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); 2290 0, kArbitraryLocalSurfaceId,
2291 MakeDelegatedFrame(1.f, frame_size, partial_view_rect));
2277 testing::Mock::VerifyAndClearExpectations(&observer); 2292 testing::Mock::VerifyAndClearExpectations(&observer);
2278 view_->RunOnCompositingDidCommit(); 2293 view_->RunOnCompositingDidCommit();
2279 2294
2280 // Lock the compositor. Now we should drop frames. 2295 // Lock the compositor. Now we should drop frames.
2281 view_rect = gfx::Rect(150, 150); 2296 view_rect = gfx::Rect(150, 150);
2282 view_->SetSize(view_rect.size()); 2297 view_->SetSize(view_rect.size());
2283 2298
2284 // This frame is dropped. 2299 // This frame is dropped.
2285 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40); 2300 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40);
2286 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); 2301 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0);
2287 view_->OnSwapCompositorFrame( 2302 view_->OnSwapCompositorFrame(
2288 0, MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); 2303 0, kArbitraryLocalSurfaceId,
2304 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1));
2289 testing::Mock::VerifyAndClearExpectations(&observer); 2305 testing::Mock::VerifyAndClearExpectations(&observer);
2290 view_->RunOnCompositingDidCommit(); 2306 view_->RunOnCompositingDidCommit();
2291 2307
2292 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20); 2308 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20);
2293 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); 2309 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0);
2294 view_->OnSwapCompositorFrame( 2310 view_->OnSwapCompositorFrame(
2295 0, MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); 2311 0, kArbitraryLocalSurfaceId,
2312 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2));
2296 testing::Mock::VerifyAndClearExpectations(&observer); 2313 testing::Mock::VerifyAndClearExpectations(&observer);
2297 view_->RunOnCompositingDidCommit(); 2314 view_->RunOnCompositingDidCommit();
2298 2315
2299 // Unlock the compositor. This frame should damage everything. 2316 // Unlock the compositor. This frame should damage everything.
2300 frame_size = view_rect.size(); 2317 frame_size = view_rect.size();
2301 2318
2302 gfx::Rect new_damage_rect(5, 6, 10, 10); 2319 gfx::Rect new_damage_rect(5, 6, 10, 10);
2303 EXPECT_CALL(observer, 2320 EXPECT_CALL(observer,
2304 OnDelegatedFrameDamage(view_->window_, view_rect)); 2321 OnDelegatedFrameDamage(view_->window_, view_rect));
2305 view_->OnSwapCompositorFrame( 2322 view_->OnSwapCompositorFrame(
2306 0, MakeDelegatedFrame(1.f, frame_size, new_damage_rect)); 2323 0, kArbitraryLocalSurfaceId,
2324 MakeDelegatedFrame(1.f, frame_size, new_damage_rect));
2307 testing::Mock::VerifyAndClearExpectations(&observer); 2325 testing::Mock::VerifyAndClearExpectations(&observer);
2308 view_->RunOnCompositingDidCommit(); 2326 view_->RunOnCompositingDidCommit();
2309 2327
2310 // A partial damage frame, this should not be dropped. 2328 // A partial damage frame, this should not be dropped.
2311 EXPECT_CALL(observer, 2329 EXPECT_CALL(observer,
2312 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); 2330 OnDelegatedFrameDamage(view_->window_, partial_view_rect));
2313 view_->OnSwapCompositorFrame( 2331 view_->OnSwapCompositorFrame(
2314 0, MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); 2332 0, kArbitraryLocalSurfaceId,
2333 MakeDelegatedFrame(1.f, frame_size, partial_view_rect));
2315 testing::Mock::VerifyAndClearExpectations(&observer); 2334 testing::Mock::VerifyAndClearExpectations(&observer);
2316 view_->RunOnCompositingDidCommit(); 2335 view_->RunOnCompositingDidCommit();
2317 2336
2318 2337
2319 // Resize to something empty. 2338 // Resize to something empty.
2320 view_rect = gfx::Rect(100, 0); 2339 view_rect = gfx::Rect(100, 0);
2321 view_->SetSize(view_rect.size()); 2340 view_->SetSize(view_rect.size());
2322 2341
2323 // We're never expecting empty frames, resize to something non-empty. 2342 // We're never expecting empty frames, resize to something non-empty.
2324 view_rect = gfx::Rect(100, 100); 2343 view_rect = gfx::Rect(100, 100);
2325 view_->SetSize(view_rect.size()); 2344 view_->SetSize(view_rect.size());
2326 2345
2327 // This frame should not be dropped. 2346 // This frame should not be dropped.
2328 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2347 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2329 view_->OnSwapCompositorFrame( 2348 view_->OnSwapCompositorFrame(
2330 0, MakeDelegatedFrame(1.f, view_rect.size(), view_rect)); 2349 0, kArbitraryLocalSurfaceId,
2350 MakeDelegatedFrame(1.f, view_rect.size(), view_rect));
2331 testing::Mock::VerifyAndClearExpectations(&observer); 2351 testing::Mock::VerifyAndClearExpectations(&observer);
2332 view_->RunOnCompositingDidCommit(); 2352 view_->RunOnCompositingDidCommit();
2333 2353
2334 view_->window_->RemoveObserver(&observer); 2354 view_->window_->RemoveObserver(&observer);
2335 } 2355 }
2336 2356
2337 TEST_F(RenderWidgetHostViewAuraTest, OutputSurfaceIdChange) { 2357 TEST_F(RenderWidgetHostViewAuraTest, OutputSurfaceIdChange) {
2338 gfx::Rect view_rect(100, 100); 2358 gfx::Rect view_rect(100, 100);
2339 gfx::Size frame_size = view_rect.size(); 2359 gfx::Size frame_size = view_rect.size();
2340 2360
2341 view_->InitAsChild(nullptr); 2361 view_->InitAsChild(nullptr);
2342 aura::client::ParentWindowWithContext( 2362 aura::client::ParentWindowWithContext(
2343 view_->GetNativeView(), 2363 view_->GetNativeView(),
2344 parent_view_->GetNativeView()->GetRootWindow(), 2364 parent_view_->GetNativeView()->GetRootWindow(),
2345 gfx::Rect()); 2365 gfx::Rect());
2346 view_->SetSize(view_rect.size()); 2366 view_->SetSize(view_rect.size());
2347 2367
2348 MockWindowObserver observer; 2368 MockWindowObserver observer;
2349 view_->window_->AddObserver(&observer); 2369 view_->window_->AddObserver(&observer);
2350 2370
2351 // Swap a frame. 2371 // Swap a frame.
2352 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2372 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2353 view_->OnSwapCompositorFrame( 2373 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId,
2354 0, MakeDelegatedFrame(1.f, frame_size, view_rect)); 2374 MakeDelegatedFrame(1.f, frame_size, view_rect));
2355 testing::Mock::VerifyAndClearExpectations(&observer); 2375 testing::Mock::VerifyAndClearExpectations(&observer);
2356 view_->RunOnCompositingDidCommit(); 2376 view_->RunOnCompositingDidCommit();
2357 2377
2358 // Swap a frame with a different surface id. 2378 // Swap a frame with a different surface id.
2359 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2379 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2360 view_->OnSwapCompositorFrame( 2380 view_->OnSwapCompositorFrame(1, CreateLocalSurfaceId(),
2361 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); 2381 MakeDelegatedFrame(1.f, frame_size, view_rect));
2362 testing::Mock::VerifyAndClearExpectations(&observer); 2382 testing::Mock::VerifyAndClearExpectations(&observer);
2363 view_->RunOnCompositingDidCommit(); 2383 view_->RunOnCompositingDidCommit();
2364 2384
2365 // Swap an empty frame, with a different surface id. 2385 // Swap an empty frame, with a different surface id.
2366 view_->OnSwapCompositorFrame( 2386 view_->OnSwapCompositorFrame(
2367 2, MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); 2387 2, CreateLocalSurfaceId(),
2388 MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect()));
2368 testing::Mock::VerifyAndClearExpectations(&observer); 2389 testing::Mock::VerifyAndClearExpectations(&observer);
2369 view_->RunOnCompositingDidCommit(); 2390 view_->RunOnCompositingDidCommit();
2370 2391
2371 // Swap another frame, with a different surface id. 2392 // Swap another frame, with a different surface id.
2372 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2393 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2373 view_->OnSwapCompositorFrame(3, 2394 view_->OnSwapCompositorFrame(3, CreateLocalSurfaceId(),
2374 MakeDelegatedFrame(1.f, frame_size, view_rect)); 2395 MakeDelegatedFrame(1.f, frame_size, view_rect));
2375 testing::Mock::VerifyAndClearExpectations(&observer); 2396 testing::Mock::VerifyAndClearExpectations(&observer);
2376 view_->RunOnCompositingDidCommit(); 2397 view_->RunOnCompositingDidCommit();
2377 2398
2378 view_->window_->RemoveObserver(&observer); 2399 view_->window_->RemoveObserver(&observer);
2379 } 2400 }
2380 2401
2381 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { 2402 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) {
2382 view_->InitAsChild(nullptr); 2403 view_->InitAsChild(nullptr);
2383 2404
(...skipping 24 matching lines...) Expand all
2408 views[i]->GetNativeView(), 2429 views[i]->GetNativeView(),
2409 parent_view_->GetNativeView()->GetRootWindow(), 2430 parent_view_->GetNativeView()->GetRootWindow(),
2410 gfx::Rect()); 2431 gfx::Rect());
2411 views[i]->SetSize(view_rect.size()); 2432 views[i]->SetSize(view_rect.size());
2412 } 2433 }
2413 2434
2414 // Make each renderer visible, and swap a frame on it, then make it invisible. 2435 // Make each renderer visible, and swap a frame on it, then make it invisible.
2415 for (size_t i = 0; i < renderer_count; ++i) { 2436 for (size_t i = 0; i < renderer_count; ++i) {
2416 views[i]->Show(); 2437 views[i]->Show();
2417 views[i]->OnSwapCompositorFrame( 2438 views[i]->OnSwapCompositorFrame(
2418 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); 2439 1, kArbitraryLocalSurfaceId,
2440 MakeDelegatedFrame(1.f, frame_size, view_rect));
2419 EXPECT_TRUE(views[i]->HasFrameData()); 2441 EXPECT_TRUE(views[i]->HasFrameData());
2420 views[i]->Hide(); 2442 views[i]->Hide();
2421 } 2443 }
2422 2444
2423 // There should be max_renderer_frames with a frame in it, and one without it. 2445 // There should be max_renderer_frames with a frame in it, and one without it.
2424 // Since the logic is LRU eviction, the first one should be without. 2446 // Since the logic is LRU eviction, the first one should be without.
2425 EXPECT_FALSE(views[0]->HasFrameData()); 2447 EXPECT_FALSE(views[0]->HasFrameData());
2426 for (size_t i = 1; i < renderer_count; ++i) 2448 for (size_t i = 1; i < renderer_count; ++i)
2427 EXPECT_TRUE(views[i]->HasFrameData()); 2449 EXPECT_TRUE(views[i]->HasFrameData());
2428 2450
2429 // LRU renderer is [0], make it visible, it shouldn't evict anything yet. 2451 // LRU renderer is [0], make it visible, it shouldn't evict anything yet.
2430 views[0]->Show(); 2452 views[0]->Show();
2431 EXPECT_FALSE(views[0]->HasFrameData()); 2453 EXPECT_FALSE(views[0]->HasFrameData());
2432 EXPECT_TRUE(views[1]->HasFrameData()); 2454 EXPECT_TRUE(views[1]->HasFrameData());
2433 // Since [0] doesn't have a frame, it should be waiting for the renderer to 2455 // Since [0] doesn't have a frame, it should be waiting for the renderer to
2434 // give it one. 2456 // give it one.
2435 EXPECT_TRUE(views[0]->released_front_lock_active()); 2457 EXPECT_TRUE(views[0]->released_front_lock_active());
2436 2458
2437 // Swap a frame on it, it should evict the next LRU [1]. 2459 // Swap a frame on it, it should evict the next LRU [1].
2438 views[0]->OnSwapCompositorFrame( 2460 views[0]->OnSwapCompositorFrame(
2439 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); 2461 1, kArbitraryLocalSurfaceId,
2462 MakeDelegatedFrame(1.f, frame_size, view_rect));
2440 EXPECT_TRUE(views[0]->HasFrameData()); 2463 EXPECT_TRUE(views[0]->HasFrameData());
2441 EXPECT_FALSE(views[1]->HasFrameData()); 2464 EXPECT_FALSE(views[1]->HasFrameData());
2442 // Now that [0] got a frame, it shouldn't be waiting any more. 2465 // Now that [0] got a frame, it shouldn't be waiting any more.
2443 EXPECT_FALSE(views[0]->released_front_lock_active()); 2466 EXPECT_FALSE(views[0]->released_front_lock_active());
2444 views[0]->Hide(); 2467 views[0]->Hide();
2445 2468
2446 // LRU renderer is [1], still hidden. Swap a frame on it, it should evict 2469 // LRU renderer is [1], still hidden. Swap a frame on it, it should evict
2447 // the next LRU [2]. 2470 // the next LRU [2].
2448 views[1]->OnSwapCompositorFrame( 2471 views[1]->OnSwapCompositorFrame(
2449 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); 2472 1, kArbitraryLocalSurfaceId,
2473 MakeDelegatedFrame(1.f, frame_size, view_rect));
2450 EXPECT_TRUE(views[0]->HasFrameData()); 2474 EXPECT_TRUE(views[0]->HasFrameData());
2451 EXPECT_TRUE(views[1]->HasFrameData()); 2475 EXPECT_TRUE(views[1]->HasFrameData());
2452 EXPECT_FALSE(views[2]->HasFrameData()); 2476 EXPECT_FALSE(views[2]->HasFrameData());
2453 for (size_t i = 3; i < renderer_count; ++i) 2477 for (size_t i = 3; i < renderer_count; ++i)
2454 EXPECT_TRUE(views[i]->HasFrameData()); 2478 EXPECT_TRUE(views[i]->HasFrameData());
2455 2479
2456 // Make all renderers but [0] visible and swap a frame on them, keep [0] 2480 // Make all renderers but [0] visible and swap a frame on them, keep [0]
2457 // hidden, it becomes the LRU. 2481 // hidden, it becomes the LRU.
2458 for (size_t i = 1; i < renderer_count; ++i) { 2482 for (size_t i = 1; i < renderer_count; ++i) {
2459 views[i]->Show(); 2483 views[i]->Show();
2460 // The renderers who don't have a frame should be waiting. The ones that 2484 // The renderers who don't have a frame should be waiting. The ones that
2461 // have a frame should not. 2485 // have a frame should not.
2462 // In practice, [1] has a frame, but anything after has its frame evicted. 2486 // In practice, [1] has a frame, but anything after has its frame evicted.
2463 EXPECT_EQ(!views[i]->HasFrameData(), 2487 EXPECT_EQ(!views[i]->HasFrameData(),
2464 views[i]->released_front_lock_active()); 2488 views[i]->released_front_lock_active());
2465 views[i]->OnSwapCompositorFrame( 2489 views[i]->OnSwapCompositorFrame(
2466 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); 2490 1, kArbitraryLocalSurfaceId,
2491 MakeDelegatedFrame(1.f, frame_size, view_rect));
2467 // Now everyone has a frame. 2492 // Now everyone has a frame.
2468 EXPECT_FALSE(views[i]->released_front_lock_active()); 2493 EXPECT_FALSE(views[i]->released_front_lock_active());
2469 EXPECT_TRUE(views[i]->HasFrameData()); 2494 EXPECT_TRUE(views[i]->HasFrameData());
2470 } 2495 }
2471 EXPECT_FALSE(views[0]->HasFrameData()); 2496 EXPECT_FALSE(views[0]->HasFrameData());
2472 2497
2473 // Swap a frame on [0], it should be evicted immediately. 2498 // Swap a frame on [0], it should be evicted immediately.
2474 views[0]->OnSwapCompositorFrame( 2499 views[0]->OnSwapCompositorFrame(
2475 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); 2500 1, kArbitraryLocalSurfaceId,
2501 MakeDelegatedFrame(1.f, frame_size, view_rect));
2476 EXPECT_FALSE(views[0]->HasFrameData()); 2502 EXPECT_FALSE(views[0]->HasFrameData());
2477 2503
2478 // Make [0] visible, and swap a frame on it. Nothing should be evicted 2504 // Make [0] visible, and swap a frame on it. Nothing should be evicted
2479 // although we're above the limit. 2505 // although we're above the limit.
2480 views[0]->Show(); 2506 views[0]->Show();
2481 // We don't have a frame, wait. 2507 // We don't have a frame, wait.
2482 EXPECT_TRUE(views[0]->released_front_lock_active()); 2508 EXPECT_TRUE(views[0]->released_front_lock_active());
2483 views[0]->OnSwapCompositorFrame( 2509 views[0]->OnSwapCompositorFrame(
2484 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); 2510 1, kArbitraryLocalSurfaceId,
2511 MakeDelegatedFrame(1.f, frame_size, view_rect));
2485 EXPECT_FALSE(views[0]->released_front_lock_active()); 2512 EXPECT_FALSE(views[0]->released_front_lock_active());
2486 for (size_t i = 0; i < renderer_count; ++i) 2513 for (size_t i = 0; i < renderer_count; ++i)
2487 EXPECT_TRUE(views[i]->HasFrameData()); 2514 EXPECT_TRUE(views[i]->HasFrameData());
2488 2515
2489 // Make [0] hidden, it should evict its frame. 2516 // Make [0] hidden, it should evict its frame.
2490 views[0]->Hide(); 2517 views[0]->Hide();
2491 EXPECT_FALSE(views[0]->HasFrameData()); 2518 EXPECT_FALSE(views[0]->HasFrameData());
2492 2519
2493 // Make [0] visible, don't give it a frame, it should be waiting. 2520 // Make [0] visible, don't give it a frame, it should be waiting.
2494 views[0]->Show(); 2521 views[0]->Show();
2495 EXPECT_TRUE(views[0]->released_front_lock_active()); 2522 EXPECT_TRUE(views[0]->released_front_lock_active());
2496 // Make [0] hidden, it should stop waiting. 2523 // Make [0] hidden, it should stop waiting.
2497 views[0]->Hide(); 2524 views[0]->Hide();
2498 EXPECT_FALSE(views[0]->released_front_lock_active()); 2525 EXPECT_FALSE(views[0]->released_front_lock_active());
2499 2526
2500 // Make [1] hidden, resize it. It should drop its frame. 2527 // Make [1] hidden, resize it. It should drop its frame.
2501 views[1]->Hide(); 2528 views[1]->Hide();
2502 EXPECT_TRUE(views[1]->HasFrameData()); 2529 EXPECT_TRUE(views[1]->HasFrameData());
2503 gfx::Size size2(200, 200); 2530 gfx::Size size2(200, 200);
2504 views[1]->SetSize(size2); 2531 views[1]->SetSize(size2);
2505 EXPECT_FALSE(views[1]->HasFrameData()); 2532 EXPECT_FALSE(views[1]->HasFrameData());
2506 // Show it, it should block until we give it a frame. 2533 // Show it, it should block until we give it a frame.
2507 views[1]->Show(); 2534 views[1]->Show();
2508 EXPECT_TRUE(views[1]->released_front_lock_active()); 2535 EXPECT_TRUE(views[1]->released_front_lock_active());
2509 views[1]->OnSwapCompositorFrame( 2536 views[1]->OnSwapCompositorFrame(
2510 1, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); 2537 1, kArbitraryLocalSurfaceId,
2538 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2)));
2511 EXPECT_FALSE(views[1]->released_front_lock_active()); 2539 EXPECT_FALSE(views[1]->released_front_lock_active());
2512 2540
2513 for (size_t i = 0; i < renderer_count - 1; ++i) 2541 for (size_t i = 0; i < renderer_count - 1; ++i)
2514 views[i]->Hide(); 2542 views[i]->Hide();
2515 2543
2516 // Allocate enough bitmaps so that two frames (proportionally) would be 2544 // Allocate enough bitmaps so that two frames (proportionally) would be
2517 // enough hit the handle limit. 2545 // enough hit the handle limit.
2518 int handles_per_frame = 5; 2546 int handles_per_frame = 5;
2519 RendererFrameManager::GetInstance()->set_max_handles(handles_per_frame * 2); 2547 RendererFrameManager::GetInstance()->set_max_handles(handles_per_frame * 2);
2520 2548
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
2574 parent_view_->GetNativeView()->GetRootWindow(), 2602 parent_view_->GetNativeView()->GetRootWindow(),
2575 gfx::Rect()); 2603 gfx::Rect());
2576 views[i]->SetSize(view_rect.size()); 2604 views[i]->SetSize(view_rect.size());
2577 } 2605 }
2578 2606
2579 // Make each renderer visible and swap a frame on it. No eviction should 2607 // Make each renderer visible and swap a frame on it. No eviction should
2580 // occur because all frames are visible. 2608 // occur because all frames are visible.
2581 for (size_t i = 0; i < renderer_count; ++i) { 2609 for (size_t i = 0; i < renderer_count; ++i) {
2582 views[i]->Show(); 2610 views[i]->Show();
2583 views[i]->OnSwapCompositorFrame( 2611 views[i]->OnSwapCompositorFrame(
2584 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); 2612 1, i ? CreateLocalSurfaceId() : kArbitraryLocalSurfaceId,
2613 MakeDelegatedFrame(1.f, frame_size, view_rect));
2585 EXPECT_TRUE(views[i]->HasFrameData()); 2614 EXPECT_TRUE(views[i]->HasFrameData());
2586 } 2615 }
2587 2616
2588 // If we hide [0], then [0] should be evicted. 2617 // If we hide [0], then [0] should be evicted.
2589 views[0]->Hide(); 2618 views[0]->Hide();
2590 EXPECT_FALSE(views[0]->HasFrameData()); 2619 EXPECT_FALSE(views[0]->HasFrameData());
2591 2620
2592 // If we lock [0] before hiding it, then [0] should not be evicted. 2621 // If we lock [0] before hiding it, then [0] should not be evicted.
2593 views[0]->Show(); 2622 views[0]->Show();
2594 views[0]->OnSwapCompositorFrame( 2623 views[0]->OnSwapCompositorFrame(
2595 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); 2624 1, kArbitraryLocalSurfaceId,
2625 MakeDelegatedFrame(1.f, frame_size, view_rect));
2596 EXPECT_TRUE(views[0]->HasFrameData()); 2626 EXPECT_TRUE(views[0]->HasFrameData());
2597 views[0]->GetDelegatedFrameHost()->LockResources(); 2627 views[0]->GetDelegatedFrameHost()->LockResources();
2598 views[0]->Hide(); 2628 views[0]->Hide();
2599 EXPECT_TRUE(views[0]->HasFrameData()); 2629 EXPECT_TRUE(views[0]->HasFrameData());
2600 2630
2601 // If we unlock [0] now, then [0] should be evicted. 2631 // If we unlock [0] now, then [0] should be evicted.
2602 views[0]->GetDelegatedFrameHost()->UnlockResources(); 2632 views[0]->GetDelegatedFrameHost()->UnlockResources();
2603 EXPECT_FALSE(views[0]->HasFrameData()); 2633 EXPECT_FALSE(views[0]->HasFrameData());
2604 2634
2605 for (size_t i = 0; i < renderer_count; ++i) { 2635 for (size_t i = 0; i < renderer_count; ++i) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2645 parent_view_->GetNativeView()->GetRootWindow(), 2675 parent_view_->GetNativeView()->GetRootWindow(),
2646 gfx::Rect()); 2676 gfx::Rect());
2647 views[i]->SetSize(view_rect.size()); 2677 views[i]->SetSize(view_rect.size());
2648 } 2678 }
2649 2679
2650 // Make each renderer visible and swap a frame on it. No eviction should 2680 // Make each renderer visible and swap a frame on it. No eviction should
2651 // occur because all frames are visible. 2681 // occur because all frames are visible.
2652 for (size_t i = 0; i < renderer_count; ++i) { 2682 for (size_t i = 0; i < renderer_count; ++i) {
2653 views[i]->Show(); 2683 views[i]->Show();
2654 views[i]->OnSwapCompositorFrame( 2684 views[i]->OnSwapCompositorFrame(
2655 1, MakeDelegatedFrame(1.f, frame_size, view_rect)); 2685 1, kArbitraryLocalSurfaceId,
2686 MakeDelegatedFrame(1.f, frame_size, view_rect));
2656 EXPECT_TRUE(views[i]->HasFrameData()); 2687 EXPECT_TRUE(views[i]->HasFrameData());
2657 } 2688 }
2658 2689
2659 // If we hide one, it should not get evicted. 2690 // If we hide one, it should not get evicted.
2660 views[0]->Hide(); 2691 views[0]->Hide();
2661 base::RunLoop().RunUntilIdle(); 2692 base::RunLoop().RunUntilIdle();
2662 EXPECT_TRUE(views[0]->HasFrameData()); 2693 EXPECT_TRUE(views[0]->HasFrameData());
2663 // Using a lesser memory pressure event however, should evict. 2694 // Using a lesser memory pressure event however, should evict.
2664 SimulateMemoryPressure( 2695 SimulateMemoryPressure(
2665 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE); 2696 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE);
2666 base::RunLoop().RunUntilIdle(); 2697 base::RunLoop().RunUntilIdle();
2667 EXPECT_FALSE(views[0]->HasFrameData()); 2698 EXPECT_FALSE(views[0]->HasFrameData());
2668 2699
2669 // Check the same for a higher pressure event. 2700 // Check the same for a higher pressure event.
2670 views[1]->Hide(); 2701 views[1]->Hide();
2671 base::RunLoop().RunUntilIdle(); 2702 base::RunLoop().RunUntilIdle();
2672 EXPECT_TRUE(views[1]->HasFrameData()); 2703 EXPECT_TRUE(views[1]->HasFrameData());
2673 SimulateMemoryPressure( 2704 SimulateMemoryPressure(
2674 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL); 2705 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL);
2675 base::RunLoop().RunUntilIdle(); 2706 base::RunLoop().RunUntilIdle();
2676 EXPECT_FALSE(views[1]->HasFrameData()); 2707 EXPECT_FALSE(views[1]->HasFrameData());
2677 2708
2678 for (size_t i = 0; i < renderer_count; ++i) { 2709 for (size_t i = 0; i < renderer_count; ++i) {
2679 views[i]->Destroy(); 2710 views[i]->Destroy();
2680 delete hosts[i]; 2711 delete hosts[i];
2681 } 2712 }
2682 } 2713 }
2683 2714
2684 TEST_F(RenderWidgetHostViewAuraTest, SoftwareDPIChange) {
2685 gfx::Rect view_rect(100, 100);
2686 gfx::Size frame_size(100, 100);
2687
2688 view_->InitAsChild(nullptr);
2689 aura::client::ParentWindowWithContext(
2690 view_->GetNativeView(),
2691 parent_view_->GetNativeView()->GetRootWindow(),
2692 gfx::Rect());
2693 view_->SetSize(view_rect.size());
2694 view_->Show();
2695
2696 // With a 1x DPI UI and 1x DPI Renderer.
2697 view_->OnSwapCompositorFrame(
2698 1, MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size)));
2699
2700 cc::SurfaceId surface_id = view_->surface_id();
2701
2702 // This frame will have the same number of physical pixels, but has a new
2703 // scale on it.
2704 view_->OnSwapCompositorFrame(
2705 1, MakeDelegatedFrame(2.f, frame_size, gfx::Rect(frame_size)));
2706
2707 // When we get a new frame with the same frame size in physical pixels, but
2708 // a different scale, we should generate a surface, as the final result will
2709 // need to be scaled differently to the screen.
2710 EXPECT_NE(surface_id, view_->surface_id());
2711 }
2712
2713 TEST_F(RenderWidgetHostViewAuraTest, SourceEventTypeExistsInLatencyInfo) { 2715 TEST_F(RenderWidgetHostViewAuraTest, SourceEventTypeExistsInLatencyInfo) {
2714 // WHEEL source exists. 2716 // WHEEL source exists.
2715 ui::ScrollEvent scroll(ui::ET_SCROLL, gfx::Point(2, 2), ui::EventTimeForNow(), 2717 ui::ScrollEvent scroll(ui::ET_SCROLL, gfx::Point(2, 2), ui::EventTimeForNow(),
2716 0, 0, 0, 0, 0, 2); 2718 0, 0, 0, 0, 0, 2);
2717 view_->OnScrollEvent(&scroll); 2719 view_->OnScrollEvent(&scroll);
2718 EXPECT_EQ(widget_host_->lastWheelOrTouchEventLatencyInfo.source_event_type(), 2720 EXPECT_EQ(widget_host_->lastWheelOrTouchEventLatencyInfo.source_event_type(),
2719 ui::SourceEventType::WHEEL); 2721 ui::SourceEventType::WHEEL);
2720 2722
2721 // TOUCH source exists. 2723 // TOUCH source exists.
2722 ui::TouchEvent press( 2724 ui::TouchEvent press(
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
2779 2781
2780 { 2782 {
2781 cc::BeginFrameArgs args = 2783 cc::BeginFrameArgs args =
2782 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u); 2784 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u);
2783 source.TestOnBeginFrame(args); 2785 source.TestOnBeginFrame(args);
2784 2786
2785 // Ack from CompositorFrame is forwarded. 2787 // Ack from CompositorFrame is forwarded.
2786 cc::BeginFrameAck ack(source_id, 5, 4, 0, true); 2788 cc::BeginFrameAck ack(source_id, 5, 4, 0, true);
2787 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); 2789 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect);
2788 frame.metadata.begin_frame_ack = ack; 2790 frame.metadata.begin_frame_ack = ack;
2789 view_->OnSwapCompositorFrame(0, std::move(frame)); 2791 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame));
2790 view_->RunOnCompositingDidCommit(); 2792 view_->RunOnCompositingDidCommit();
2791 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 2793 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
2792 } 2794 }
2793 2795
2794 { 2796 {
2795 cc::BeginFrameArgs args = 2797 cc::BeginFrameArgs args =
2796 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u); 2798 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u);
2797 source.TestOnBeginFrame(args); 2799 source.TestOnBeginFrame(args);
2798 2800
2799 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. 2801 // Explicit ack through OnBeginFrameDidNotSwap is forwarded.
(...skipping 12 matching lines...) Expand all
2812 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u); 2814 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u);
2813 source.TestOnBeginFrame(args); 2815 source.TestOnBeginFrame(args);
2814 2816
2815 // Ack from CompositorFrame is forwarded with old 2817 // Ack from CompositorFrame is forwarded with old
2816 // latest_confirmed_sequence_number and without damage. 2818 // latest_confirmed_sequence_number and without damage.
2817 cc::BeginFrameAck ack(source_id, 7, 7, 0, true); 2819 cc::BeginFrameAck ack(source_id, 7, 7, 0, true);
2818 gfx::Rect dropped_damage_rect(10, 20, 30, 40); 2820 gfx::Rect dropped_damage_rect(10, 20, 30, 40);
2819 cc::CompositorFrame frame = 2821 cc::CompositorFrame frame =
2820 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); 2822 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect);
2821 frame.metadata.begin_frame_ack = ack; 2823 frame.metadata.begin_frame_ack = ack;
2822 view_->OnSwapCompositorFrame(0, std::move(frame)); 2824 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame));
2823 view_->RunOnCompositingDidCommit(); 2825 view_->RunOnCompositingDidCommit();
2824 ack.latest_confirmed_sequence_number = 4; 2826 ack.latest_confirmed_sequence_number = 4;
2825 ack.has_damage = false; 2827 ack.has_damage = false;
2826 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 2828 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
2827 } 2829 }
2828 2830
2829 // Change source_id known to the view. This should reset the 2831 // Change source_id known to the view. This should reset the
2830 // latest_confirmed_sequence_number tracked by the view. 2832 // latest_confirmed_sequence_number tracked by the view.
2831 source_id = cc::BeginFrameArgs::kManualSourceId; 2833 source_id = cc::BeginFrameArgs::kManualSourceId;
2832 2834
2833 { 2835 {
2834 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( 2836 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
2835 BEGINFRAME_FROM_HERE, source_id, 10u); 2837 BEGINFRAME_FROM_HERE, source_id, 10u);
2836 source.TestOnBeginFrame(args); 2838 source.TestOnBeginFrame(args);
2837 2839
2838 // Ack from CompositorFrame is forwarded with invalid 2840 // Ack from CompositorFrame is forwarded with invalid
2839 // latest_confirmed_sequence_number and without damage. 2841 // latest_confirmed_sequence_number and without damage.
2840 cc::BeginFrameAck ack(source_id, 10, 10, 0, true); 2842 cc::BeginFrameAck ack(source_id, 10, 10, 0, true);
2841 gfx::Rect dropped_damage_rect(10, 20, 30, 40); 2843 gfx::Rect dropped_damage_rect(10, 20, 30, 40);
2842 cc::CompositorFrame frame = 2844 cc::CompositorFrame frame =
2843 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); 2845 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect);
2844 frame.metadata.begin_frame_ack = ack; 2846 frame.metadata.begin_frame_ack = ack;
2845 view_->OnSwapCompositorFrame(0, std::move(frame)); 2847 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame));
2846 view_->RunOnCompositingDidCommit(); 2848 view_->RunOnCompositingDidCommit();
2847 ack.latest_confirmed_sequence_number = 2849 ack.latest_confirmed_sequence_number =
2848 cc::BeginFrameArgs::kInvalidFrameNumber; 2850 cc::BeginFrameArgs::kInvalidFrameNumber;
2849 ack.has_damage = false; 2851 ack.has_damage = false;
2850 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 2852 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
2851 } 2853 }
2852 2854
2853 { 2855 {
2854 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( 2856 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
2855 BEGINFRAME_FROM_HERE, source_id, 11u); 2857 BEGINFRAME_FROM_HERE, source_id, 11u);
(...skipping 13 matching lines...) Expand all
2869 2871
2870 { 2872 {
2871 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( 2873 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
2872 BEGINFRAME_FROM_HERE, source_id, 12u); 2874 BEGINFRAME_FROM_HERE, source_id, 12u);
2873 source.TestOnBeginFrame(args); 2875 source.TestOnBeginFrame(args);
2874 2876
2875 // Ack from CompositorFrame is forwarded. 2877 // Ack from CompositorFrame is forwarded.
2876 cc::BeginFrameAck ack(source_id, 12, 12, 0, true); 2878 cc::BeginFrameAck ack(source_id, 12, 12, 0, true);
2877 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); 2879 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect);
2878 frame.metadata.begin_frame_ack = ack; 2880 frame.metadata.begin_frame_ack = ack;
2879 view_->OnSwapCompositorFrame(0, std::move(frame)); 2881 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame));
2880 view_->RunOnCompositingDidCommit(); 2882 view_->RunOnCompositingDidCommit();
2881 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 2883 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
2882 } 2884 }
2883 2885
2884 { 2886 {
2885 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( 2887 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
2886 BEGINFRAME_FROM_HERE, source_id, 13u); 2888 BEGINFRAME_FROM_HERE, source_id, 13u);
2887 source.TestOnBeginFrame(args); 2889 source.TestOnBeginFrame(args);
2888 2890
2889 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. 2891 // Explicit ack through OnBeginFrameDidNotSwap is forwarded.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
2941 } 2943 }
2942 2944
2943 void InstallFakeTickClock() { 2945 void InstallFakeTickClock() {
2944 // Create a fake tick clock and transfer ownership to the frame host. 2946 // Create a fake tick clock and transfer ownership to the frame host.
2945 tick_clock_ = new base::SimpleTestTickClock(); 2947 tick_clock_ = new base::SimpleTestTickClock();
2946 view_->GetDelegatedFrameHost()->tick_clock_ = base::WrapUnique(tick_clock_); 2948 view_->GetDelegatedFrameHost()->tick_clock_ = base::WrapUnique(tick_clock_);
2947 } 2949 }
2948 2950
2949 void OnSwapCompositorFrame() { 2951 void OnSwapCompositorFrame() {
2950 view_->OnSwapCompositorFrame( 2952 view_->OnSwapCompositorFrame(
2951 1, MakeDelegatedFrame(1.f, view_rect_.size(), view_rect_)); 2953 1, kArbitraryLocalSurfaceId,
2954 MakeDelegatedFrame(1.f, view_rect_.size(), view_rect_));
2952 cc::SurfaceId surface_id = 2955 cc::SurfaceId surface_id =
2953 view_->GetDelegatedFrameHost()->SurfaceIdForTesting(); 2956 view_->GetDelegatedFrameHost()->SurfaceIdForTesting();
2954 if (surface_id.is_valid()) 2957 if (surface_id.is_valid())
2955 view_->GetDelegatedFrameHost()->WillDrawSurface( 2958 view_->GetDelegatedFrameHost()->WillDrawSurface(
2956 surface_id.local_surface_id(), view_rect_); 2959 surface_id.local_surface_id(), view_rect_);
2957 ASSERT_TRUE(view_->last_copy_request_); 2960 ASSERT_TRUE(view_->last_copy_request_);
2958 } 2961 }
2959 2962
2960 void ReleaseSwappedFrame() { 2963 void ReleaseSwappedFrame() {
2961 std::unique_ptr<cc::CopyOutputRequest> request = 2964 std::unique_ptr<cc::CopyOutputRequest> request =
(...skipping 2042 matching lines...) Expand 10 before | Expand all | Expand 10 after
5004 // There is no composition in the beginning. 5007 // There is no composition in the beginning.
5005 EXPECT_FALSE(has_composition_text()); 5008 EXPECT_FALSE(has_composition_text());
5006 SetHasCompositionTextToTrue(); 5009 SetHasCompositionTextToTrue();
5007 view->ImeCancelComposition(); 5010 view->ImeCancelComposition();
5008 // The composition must have been canceled. 5011 // The composition must have been canceled.
5009 EXPECT_FALSE(has_composition_text()); 5012 EXPECT_FALSE(has_composition_text());
5010 } 5013 }
5011 } 5014 }
5012 5015
5013 } // namespace content 5016 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698