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

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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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, &params); 1961 ViewMsg_Resize::Read(msg, &params);
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, &params); 1987 ViewMsg_Resize::Read(msg, &params);
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698