OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <tuple> | 10 #include <tuple> |
(...skipping 1896 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1907 cc::ReturnedResource resource; | 1907 cc::ReturnedResource resource; |
1908 resource.id = 1; | 1908 resource.id = 1; |
1909 resources.push_back(resource); | 1909 resources.push_back(resource); |
1910 view_->ReclaimResources(resources); | 1910 view_->ReclaimResources(resources); |
1911 EXPECT_EQ(1u, sink_->message_count()); | 1911 EXPECT_EQ(1u, sink_->message_count()); |
1912 { | 1912 { |
1913 const IPC::Message* msg = sink_->GetMessageAt(0); | 1913 const IPC::Message* msg = sink_->GetMessageAt(0); |
1914 EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, msg->type()); | 1914 EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, msg->type()); |
1915 ViewMsg_ReclaimCompositorResources::Param params; | 1915 ViewMsg_ReclaimCompositorResources::Param params; |
1916 ViewMsg_ReclaimCompositorResources::Read(msg, ¶ms); | 1916 ViewMsg_ReclaimCompositorResources::Read(msg, ¶ms); |
1917 EXPECT_EQ(0u, std::get<0>(params)); // compositor_frame_sink_id | |
1918 EXPECT_FALSE(std::get<1>(params)); // is_swap_ack | 1917 EXPECT_FALSE(std::get<1>(params)); // is_swap_ack |
1919 } | 1918 } |
1920 } | 1919 } |
1921 | 1920 |
1922 // This test verifies that when the compositor_frame_sink_id changes, the old | 1921 // This test verifies that when the compositor_frame_sink_id changes, the old |
1923 // resources are not returned. | 1922 // resources are not returned. |
1924 TEST_F(RenderWidgetHostViewAuraTest, TwoOutputSurfaces) { | 1923 TEST_F(RenderWidgetHostViewAuraTest, TwoOutputSurfaces) { |
1925 FakeSurfaceObserver manager_observer; | 1924 FakeSurfaceObserver manager_observer; |
1926 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); | 1925 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
1927 cc::SurfaceManager* manager = | 1926 cc::SurfaceManager* manager = |
1928 factory->GetContextFactoryPrivate()->GetSurfaceManager(); | 1927 factory->GetContextFactoryPrivate()->GetSurfaceManager(); |
1929 manager->AddObserver(&manager_observer); | 1928 manager->AddObserver(&manager_observer); |
1930 | 1929 |
1931 gfx::Size view_size(100, 100); | 1930 gfx::Size view_size(100, 100); |
1932 gfx::Rect view_rect(view_size); | 1931 gfx::Rect view_rect(view_size); |
1933 | 1932 |
1934 view_->InitAsChild(nullptr); | 1933 view_->InitAsChild(nullptr); |
1935 aura::client::ParentWindowWithContext( | 1934 aura::client::ParentWindowWithContext( |
1936 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), | 1935 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), |
1937 gfx::Rect()); | 1936 gfx::Rect()); |
1938 view_->SetSize(view_size); | 1937 view_->SetSize(view_size); |
1939 view_->Show(); | 1938 view_->Show(); |
1940 sink_->ClearMessages(); | 1939 sink_->ClearMessages(); |
1941 | 1940 |
1942 // Submit a frame with resources. | 1941 // Submit a frame with resources. |
1943 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, view_size, view_rect); | 1942 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, view_size, view_rect); |
1944 cc::TransferableResource resource; | 1943 cc::TransferableResource resource; |
1945 resource.id = 1; | 1944 resource.id = 1; |
1946 frame.resource_list.push_back(resource); | 1945 frame.resource_list.push_back(resource); |
1947 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame)); | 1946 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
1948 EXPECT_EQ(0u, sink_->message_count()); | 1947 EXPECT_EQ(0u, sink_->message_count()); |
1949 | 1948 |
1950 // Swap another CompositorFrame but this time from another | 1949 // Signal that a new RendererCompositorFrameSink was created by the renderer. |
1951 // compositor_frame_sink_id. The resources for the previous frame are old and | 1950 view_->DidCreateNewRendererCompositorFrameSink(); |
1952 // should not be returned. | 1951 |
1953 view_->OnSwapCompositorFrame(1, CreateLocalSurfaceId(), | 1952 // Submit another frame. The resources for the previous frame belong to the |
| 1953 // old RendererCompositorFrameSink and should not be returned. |
| 1954 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), |
1954 MakeDelegatedFrame(1.f, view_size, view_rect)); | 1955 MakeDelegatedFrame(1.f, view_size, view_rect)); |
1955 EXPECT_EQ(0u, sink_->message_count()); | 1956 EXPECT_EQ(0u, sink_->message_count()); |
1956 | 1957 |
1957 // Report that the surface is drawn to trigger an ACK. | 1958 // Report that the surface is drawn to trigger an ACK. |
1958 cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id()); | 1959 cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id()); |
1959 EXPECT_TRUE(surface); | 1960 EXPECT_TRUE(surface); |
1960 surface->RunDrawCallbacks(); | 1961 surface->RunDrawCallbacks(); |
1961 EXPECT_EQ(1u, sink_->message_count()); | 1962 EXPECT_EQ(1u, sink_->message_count()); |
1962 { | 1963 { |
1963 const IPC::Message* msg = sink_->GetMessageAt(0); | 1964 const IPC::Message* msg = sink_->GetMessageAt(0); |
1964 EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, msg->type()); | 1965 EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, msg->type()); |
1965 ViewMsg_ReclaimCompositorResources::Param params; | 1966 ViewMsg_ReclaimCompositorResources::Param params; |
1966 ViewMsg_ReclaimCompositorResources::Read(msg, ¶ms); | 1967 ViewMsg_ReclaimCompositorResources::Read(msg, ¶ms); |
1967 EXPECT_EQ(1u, std::get<0>(params)); // compositor_frame_sink_id | |
1968 EXPECT_EQ(true, std::get<1>(params)); // is_swap_ack | 1968 EXPECT_EQ(true, std::get<1>(params)); // is_swap_ack |
1969 } | 1969 } |
1970 | 1970 |
1971 manager->RemoveObserver(&manager_observer); | 1971 manager->RemoveObserver(&manager_observer); |
1972 } | 1972 } |
1973 | 1973 |
1974 // Resizing in fullscreen mode should send the up-to-date screen info. | 1974 // Resizing in fullscreen mode should send the up-to-date screen info. |
1975 // http://crbug.com/324350 | 1975 // http://crbug.com/324350 |
1976 TEST_F(RenderWidgetHostViewAuraTest, DISABLED_FullscreenResize) { | 1976 TEST_F(RenderWidgetHostViewAuraTest, DISABLED_FullscreenResize) { |
1977 aura::Window* root_window = aura_test_helper_->root_window(); | 1977 aura::Window* root_window = aura_test_helper_->root_window(); |
(...skipping 10 matching lines...) Expand all Loading... |
1988 const IPC::Message* msg = sink_->GetMessageAt(0); | 1988 const IPC::Message* msg = sink_->GetMessageAt(0); |
1989 EXPECT_EQ(ViewMsg_Resize::ID, msg->type()); | 1989 EXPECT_EQ(ViewMsg_Resize::ID, msg->type()); |
1990 ViewMsg_Resize::Param params; | 1990 ViewMsg_Resize::Param params; |
1991 ViewMsg_Resize::Read(msg, ¶ms); | 1991 ViewMsg_Resize::Read(msg, ¶ms); |
1992 EXPECT_EQ( | 1992 EXPECT_EQ( |
1993 "0,0 800x600", | 1993 "0,0 800x600", |
1994 std::get<0>(params).screen_info.available_rect.ToString()); | 1994 std::get<0>(params).screen_info.available_rect.ToString()); |
1995 EXPECT_EQ("800x600", std::get<0>(params).new_size.ToString()); | 1995 EXPECT_EQ("800x600", std::get<0>(params).new_size.ToString()); |
1996 // Resizes are blocked until we swapped a frame of the correct size, and | 1996 // Resizes are blocked until we swapped a frame of the correct size, and |
1997 // we've committed it. | 1997 // we've committed it. |
1998 view_->OnSwapCompositorFrame( | 1998 view_->SubmitCompositorFrame( |
1999 0, kArbitraryLocalSurfaceId, | 1999 kArbitraryLocalSurfaceId, |
2000 MakeDelegatedFrame(1.f, std::get<0>(params).new_size, | 2000 MakeDelegatedFrame(1.f, std::get<0>(params).new_size, |
2001 gfx::Rect(std::get<0>(params).new_size))); | 2001 gfx::Rect(std::get<0>(params).new_size))); |
2002 ui::DrawWaiterForTest::WaitForCommit( | 2002 ui::DrawWaiterForTest::WaitForCommit( |
2003 root_window->GetHost()->compositor()); | 2003 root_window->GetHost()->compositor()); |
2004 } | 2004 } |
2005 | 2005 |
2006 widget_host_->ResetSizeAndRepaintPendingFlags(); | 2006 widget_host_->ResetSizeAndRepaintPendingFlags(); |
2007 sink_->ClearMessages(); | 2007 sink_->ClearMessages(); |
2008 | 2008 |
2009 // Make sure the corrent screen size is set along in the resize | 2009 // Make sure the corrent screen size is set along in the resize |
2010 // request when the screen size has changed. | 2010 // request when the screen size has changed. |
2011 aura_test_helper_->test_screen()->SetUIScale(0.5); | 2011 aura_test_helper_->test_screen()->SetUIScale(0.5); |
2012 EXPECT_EQ(1u, sink_->message_count()); | 2012 EXPECT_EQ(1u, sink_->message_count()); |
2013 { | 2013 { |
2014 const IPC::Message* msg = sink_->GetMessageAt(0); | 2014 const IPC::Message* msg = sink_->GetMessageAt(0); |
2015 EXPECT_EQ(ViewMsg_Resize::ID, msg->type()); | 2015 EXPECT_EQ(ViewMsg_Resize::ID, msg->type()); |
2016 ViewMsg_Resize::Param params; | 2016 ViewMsg_Resize::Param params; |
2017 ViewMsg_Resize::Read(msg, ¶ms); | 2017 ViewMsg_Resize::Read(msg, ¶ms); |
2018 EXPECT_EQ( | 2018 EXPECT_EQ( |
2019 "0,0 1600x1200", | 2019 "0,0 1600x1200", |
2020 std::get<0>(params).screen_info.available_rect.ToString()); | 2020 std::get<0>(params).screen_info.available_rect.ToString()); |
2021 EXPECT_EQ("1600x1200", std::get<0>(params).new_size.ToString()); | 2021 EXPECT_EQ("1600x1200", std::get<0>(params).new_size.ToString()); |
2022 view_->OnSwapCompositorFrame( | 2022 view_->SubmitCompositorFrame( |
2023 0, kArbitraryLocalSurfaceId, | 2023 kArbitraryLocalSurfaceId, |
2024 MakeDelegatedFrame(1.f, std::get<0>(params).new_size, | 2024 MakeDelegatedFrame(1.f, std::get<0>(params).new_size, |
2025 gfx::Rect(std::get<0>(params).new_size))); | 2025 gfx::Rect(std::get<0>(params).new_size))); |
2026 ui::DrawWaiterForTest::WaitForCommit( | 2026 ui::DrawWaiterForTest::WaitForCommit( |
2027 root_window->GetHost()->compositor()); | 2027 root_window->GetHost()->compositor()); |
2028 } | 2028 } |
2029 } | 2029 } |
2030 | 2030 |
2031 // Swapping a frame should notify the window. | 2031 // Swapping a frame should notify the window. |
2032 TEST_F(RenderWidgetHostViewAuraTest, SwapNotifiesWindow) { | 2032 TEST_F(RenderWidgetHostViewAuraTest, SwapNotifiesWindow) { |
2033 gfx::Size view_size(100, 100); | 2033 gfx::Size view_size(100, 100); |
2034 gfx::Rect view_rect(view_size); | 2034 gfx::Rect view_rect(view_size); |
2035 | 2035 |
2036 view_->InitAsChild(nullptr); | 2036 view_->InitAsChild(nullptr); |
2037 aura::client::ParentWindowWithContext( | 2037 aura::client::ParentWindowWithContext( |
2038 view_->GetNativeView(), | 2038 view_->GetNativeView(), |
2039 parent_view_->GetNativeView()->GetRootWindow(), | 2039 parent_view_->GetNativeView()->GetRootWindow(), |
2040 gfx::Rect()); | 2040 gfx::Rect()); |
2041 view_->SetSize(view_size); | 2041 view_->SetSize(view_size); |
2042 view_->Show(); | 2042 view_->Show(); |
2043 | 2043 |
2044 MockWindowObserver observer; | 2044 MockWindowObserver observer; |
2045 view_->window_->AddObserver(&observer); | 2045 view_->window_->AddObserver(&observer); |
2046 | 2046 |
2047 // Delegated renderer path | 2047 // Delegated renderer path |
2048 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2048 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2049 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, | 2049 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, |
2050 MakeDelegatedFrame(1.f, view_size, view_rect)); | 2050 MakeDelegatedFrame(1.f, view_size, view_rect)); |
2051 testing::Mock::VerifyAndClearExpectations(&observer); | 2051 testing::Mock::VerifyAndClearExpectations(&observer); |
2052 | 2052 |
2053 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, | 2053 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, |
2054 gfx::Rect(5, 5, 5, 5))); | 2054 gfx::Rect(5, 5, 5, 5))); |
2055 view_->OnSwapCompositorFrame( | 2055 view_->SubmitCompositorFrame( |
2056 0, kArbitraryLocalSurfaceId, | 2056 kArbitraryLocalSurfaceId, |
2057 MakeDelegatedFrame(1.f, view_size, gfx::Rect(5, 5, 5, 5))); | 2057 MakeDelegatedFrame(1.f, view_size, gfx::Rect(5, 5, 5, 5))); |
2058 testing::Mock::VerifyAndClearExpectations(&observer); | 2058 testing::Mock::VerifyAndClearExpectations(&observer); |
2059 | 2059 |
2060 view_->window_->RemoveObserver(&observer); | 2060 view_->window_->RemoveObserver(&observer); |
2061 } | 2061 } |
2062 | 2062 |
2063 // Mirroring the layers for a window should cause Surface destruction to | 2063 // Mirroring the layers for a window should cause Surface destruction to |
2064 // depend on both layers. | 2064 // depend on both layers. |
2065 TEST_F(RenderWidgetHostViewAuraTest, MirrorLayers) { | 2065 TEST_F(RenderWidgetHostViewAuraTest, MirrorLayers) { |
2066 gfx::Size view_size(100, 100); | 2066 gfx::Size view_size(100, 100); |
2067 gfx::Rect view_rect(view_size); | 2067 gfx::Rect view_rect(view_size); |
2068 aura::Window* const root = parent_view_->GetNativeView()->GetRootWindow(); | 2068 aura::Window* const root = parent_view_->GetNativeView()->GetRootWindow(); |
2069 | 2069 |
2070 view_->InitAsChild(nullptr); | 2070 view_->InitAsChild(nullptr); |
2071 aura::client::ParentWindowWithContext( | 2071 aura::client::ParentWindowWithContext( |
2072 view_->GetNativeView(), root, gfx::Rect()); | 2072 view_->GetNativeView(), root, gfx::Rect()); |
2073 view_->SetSize(view_size); | 2073 view_->SetSize(view_size); |
2074 view_->Show(); | 2074 view_->Show(); |
2075 | 2075 |
2076 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, | 2076 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, |
2077 MakeDelegatedFrame(1.f, view_size, view_rect)); | 2077 MakeDelegatedFrame(1.f, view_size, view_rect)); |
2078 std::unique_ptr<ui::LayerTreeOwner> mirror(wm::MirrorLayers( | 2078 std::unique_ptr<ui::LayerTreeOwner> mirror(wm::MirrorLayers( |
2079 view_->GetNativeView(), false /* sync_bounds */)); | 2079 view_->GetNativeView(), false /* sync_bounds */)); |
2080 | 2080 |
2081 cc::SurfaceId id = view_->GetDelegatedFrameHost()->SurfaceIdForTesting(); | 2081 cc::SurfaceId id = view_->GetDelegatedFrameHost()->SurfaceIdForTesting(); |
2082 if (id.is_valid()) { | 2082 if (id.is_valid()) { |
2083 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); | 2083 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
2084 cc::SurfaceManager* manager = | 2084 cc::SurfaceManager* manager = |
2085 factory->GetContextFactoryPrivate()->GetSurfaceManager(); | 2085 factory->GetContextFactoryPrivate()->GetSurfaceManager(); |
2086 cc::Surface* surface = manager->GetSurfaceForId(id); | 2086 cc::Surface* surface = manager->GetSurfaceForId(id); |
(...skipping 22 matching lines...) Expand all Loading... |
2109 | 2109 |
2110 view_->InitAsChild(nullptr); | 2110 view_->InitAsChild(nullptr); |
2111 aura::client::ParentWindowWithContext( | 2111 aura::client::ParentWindowWithContext( |
2112 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), | 2112 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), |
2113 gfx::Rect()); | 2113 gfx::Rect()); |
2114 view_->SetSize(large_size); | 2114 view_->SetSize(large_size); |
2115 view_->Show(); | 2115 view_->Show(); |
2116 cc::CompositorFrame frame = | 2116 cc::CompositorFrame frame = |
2117 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size)); | 2117 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size)); |
2118 frame.metadata.root_background_color = SK_ColorRED; | 2118 frame.metadata.root_background_color = SK_ColorRED; |
2119 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame)); | 2119 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
2120 | 2120 |
2121 ui::Layer* parent_layer = view_->GetNativeView()->layer(); | 2121 ui::Layer* parent_layer = view_->GetNativeView()->layer(); |
2122 | 2122 |
2123 ASSERT_EQ(2u, parent_layer->children().size()); | 2123 ASSERT_EQ(2u, parent_layer->children().size()); |
2124 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds()); | 2124 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds()); |
2125 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color()); | 2125 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color()); |
2126 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds()); | 2126 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds()); |
2127 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color()); | 2127 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color()); |
2128 | 2128 |
2129 delegates_.back()->set_is_fullscreen(true); | 2129 delegates_.back()->set_is_fullscreen(true); |
2130 view_->SetSize(medium_size); | 2130 view_->SetSize(medium_size); |
2131 | 2131 |
2132 // Right gutter is unnecessary. | 2132 // Right gutter is unnecessary. |
2133 ASSERT_EQ(1u, parent_layer->children().size()); | 2133 ASSERT_EQ(1u, parent_layer->children().size()); |
2134 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds()); | 2134 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds()); |
2135 | 2135 |
2136 // RWH is fullscreen, so gutters should be black. | 2136 // RWH is fullscreen, so gutters should be black. |
2137 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color()); | 2137 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color()); |
2138 | 2138 |
2139 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size)); | 2139 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size)); |
2140 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame)); | 2140 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
2141 EXPECT_EQ(0u, parent_layer->children().size()); | 2141 EXPECT_EQ(0u, parent_layer->children().size()); |
2142 | 2142 |
2143 view_->SetSize(large_size); | 2143 view_->SetSize(large_size); |
2144 ASSERT_EQ(2u, parent_layer->children().size()); | 2144 ASSERT_EQ(2u, parent_layer->children().size()); |
2145 | 2145 |
2146 // This should evict the frame and remove the gutter layers. | 2146 // This should evict the frame and remove the gutter layers. |
2147 view_->Hide(); | 2147 view_->Hide(); |
2148 view_->SetSize(small_size); | 2148 view_->SetSize(small_size); |
2149 ASSERT_EQ(0u, parent_layer->children().size()); | 2149 ASSERT_EQ(0u, parent_layer->children().size()); |
2150 } | 2150 } |
2151 | 2151 |
2152 TEST_F(RenderWidgetHostViewAuraTest, Resize) { | 2152 TEST_F(RenderWidgetHostViewAuraTest, Resize) { |
2153 gfx::Size size1(100, 100); | 2153 gfx::Size size1(100, 100); |
2154 gfx::Size size2(200, 200); | 2154 gfx::Size size2(200, 200); |
2155 gfx::Size size3(300, 300); | 2155 gfx::Size size3(300, 300); |
2156 | 2156 |
2157 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow(); | 2157 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow(); |
2158 view_->InitAsChild(nullptr); | 2158 view_->InitAsChild(nullptr); |
2159 aura::client::ParentWindowWithContext( | 2159 aura::client::ParentWindowWithContext( |
2160 view_->GetNativeView(), root_window, gfx::Rect(size1)); | 2160 view_->GetNativeView(), root_window, gfx::Rect(size1)); |
2161 view_->Show(); | 2161 view_->Show(); |
2162 view_->SetSize(size1); | 2162 view_->SetSize(size1); |
2163 view_->OnSwapCompositorFrame( | 2163 view_->SubmitCompositorFrame( |
2164 0, kArbitraryLocalSurfaceId, | 2164 kArbitraryLocalSurfaceId, |
2165 MakeDelegatedFrame(1.f, size1, gfx::Rect(size1))); | 2165 MakeDelegatedFrame(1.f, size1, gfx::Rect(size1))); |
2166 ui::DrawWaiterForTest::WaitForCommit( | 2166 ui::DrawWaiterForTest::WaitForCommit( |
2167 root_window->GetHost()->compositor()); | 2167 root_window->GetHost()->compositor()); |
2168 ViewHostMsg_UpdateRect_Params update_params; | 2168 ViewHostMsg_UpdateRect_Params update_params; |
2169 update_params.view_size = size1; | 2169 update_params.view_size = size1; |
2170 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK; | 2170 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK; |
2171 widget_host_->OnMessageReceived( | 2171 widget_host_->OnMessageReceived( |
2172 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); | 2172 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); |
2173 sink_->ClearMessages(); | 2173 sink_->ClearMessages(); |
2174 // Resize logic is idle (no pending resize, no pending commit). | 2174 // Resize logic is idle (no pending resize, no pending commit). |
(...skipping 17 matching lines...) Expand all Loading... |
2192 sink_->ClearMessages(); | 2192 sink_->ClearMessages(); |
2193 | 2193 |
2194 // Resize renderer again, before receiving a frame. Should not produce a | 2194 // Resize renderer again, before receiving a frame. Should not produce a |
2195 // Resize message. | 2195 // Resize message. |
2196 view_->SetSize(size3); | 2196 view_->SetSize(size3); |
2197 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 2197 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
2198 EXPECT_EQ(0u, sink_->message_count()); | 2198 EXPECT_EQ(0u, sink_->message_count()); |
2199 | 2199 |
2200 // Receive a frame of the new size, should be skipped and not produce a Resize | 2200 // Receive a frame of the new size, should be skipped and not produce a Resize |
2201 // message. | 2201 // message. |
2202 view_->OnSwapCompositorFrame( | 2202 view_->SubmitCompositorFrame( |
2203 0, kArbitraryLocalSurfaceId, | 2203 kArbitraryLocalSurfaceId, |
2204 MakeDelegatedFrame(1.f, size3, gfx::Rect(size3))); | 2204 MakeDelegatedFrame(1.f, size3, gfx::Rect(size3))); |
2205 // Expect the frame ack; | 2205 // Expect the frame ack; |
2206 EXPECT_EQ(1u, sink_->message_count()); | 2206 EXPECT_EQ(1u, sink_->message_count()); |
2207 EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, | 2207 EXPECT_EQ(ViewMsg_ReclaimCompositorResources::ID, |
2208 sink_->GetMessageAt(0)->type()); | 2208 sink_->GetMessageAt(0)->type()); |
2209 sink_->ClearMessages(); | 2209 sink_->ClearMessages(); |
2210 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 2210 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
2211 | 2211 |
2212 // Receive a frame of the correct size, should not be skipped and, and should | 2212 // Receive a frame of the correct size, should not be skipped and, and should |
2213 // produce a Resize message after the commit. | 2213 // produce a Resize message after the commit. |
2214 view_->OnSwapCompositorFrame( | 2214 view_->SubmitCompositorFrame( |
2215 0, kArbitraryLocalSurfaceId, | 2215 kArbitraryLocalSurfaceId, |
2216 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); | 2216 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
2217 cc::SurfaceId surface_id = view_->surface_id(); | 2217 cc::SurfaceId surface_id = view_->surface_id(); |
2218 if (!surface_id.is_valid()) { | 2218 if (!surface_id.is_valid()) { |
2219 // No frame ack yet. | 2219 // No frame ack yet. |
2220 EXPECT_EQ(0u, sink_->message_count()); | 2220 EXPECT_EQ(0u, sink_->message_count()); |
2221 } else { | 2221 } else { |
2222 // Frame isn't desired size, so early ack. | 2222 // Frame isn't desired size, so early ack. |
2223 EXPECT_EQ(1u, sink_->message_count()); | 2223 EXPECT_EQ(1u, sink_->message_count()); |
2224 } | 2224 } |
2225 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 2225 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2277 view_->GetNativeView(), | 2277 view_->GetNativeView(), |
2278 parent_view_->GetNativeView()->GetRootWindow(), | 2278 parent_view_->GetNativeView()->GetRootWindow(), |
2279 gfx::Rect()); | 2279 gfx::Rect()); |
2280 view_->SetSize(view_rect.size()); | 2280 view_->SetSize(view_rect.size()); |
2281 | 2281 |
2282 MockWindowObserver observer; | 2282 MockWindowObserver observer; |
2283 view_->window_->AddObserver(&observer); | 2283 view_->window_->AddObserver(&observer); |
2284 | 2284 |
2285 // A full frame of damage. | 2285 // A full frame of damage. |
2286 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2286 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2287 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, | 2287 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, |
2288 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2288 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2289 testing::Mock::VerifyAndClearExpectations(&observer); | 2289 testing::Mock::VerifyAndClearExpectations(&observer); |
2290 view_->RunOnCompositingDidCommit(); | 2290 view_->RunOnCompositingDidCommit(); |
2291 | 2291 |
2292 // A partial damage frame. | 2292 // A partial damage frame. |
2293 gfx::Rect partial_view_rect(30, 30, 20, 20); | 2293 gfx::Rect partial_view_rect(30, 30, 20, 20); |
2294 EXPECT_CALL(observer, | 2294 EXPECT_CALL(observer, |
2295 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); | 2295 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); |
2296 view_->OnSwapCompositorFrame( | 2296 view_->SubmitCompositorFrame( |
2297 0, kArbitraryLocalSurfaceId, | 2297 kArbitraryLocalSurfaceId, |
2298 MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); | 2298 MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); |
2299 testing::Mock::VerifyAndClearExpectations(&observer); | 2299 testing::Mock::VerifyAndClearExpectations(&observer); |
2300 view_->RunOnCompositingDidCommit(); | 2300 view_->RunOnCompositingDidCommit(); |
2301 | 2301 |
2302 // Lock the compositor. Now we should drop frames. | 2302 // Lock the compositor. Now we should drop frames. |
2303 view_rect = gfx::Rect(150, 150); | 2303 view_rect = gfx::Rect(150, 150); |
2304 view_->SetSize(view_rect.size()); | 2304 view_->SetSize(view_rect.size()); |
2305 | 2305 |
2306 // This frame is dropped. | 2306 // This frame is dropped. |
2307 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40); | 2307 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40); |
2308 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); | 2308 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
2309 view_->OnSwapCompositorFrame( | 2309 view_->SubmitCompositorFrame( |
2310 0, kArbitraryLocalSurfaceId, | 2310 kArbitraryLocalSurfaceId, |
2311 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); | 2311 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); |
2312 testing::Mock::VerifyAndClearExpectations(&observer); | 2312 testing::Mock::VerifyAndClearExpectations(&observer); |
2313 view_->RunOnCompositingDidCommit(); | 2313 view_->RunOnCompositingDidCommit(); |
2314 | 2314 |
2315 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20); | 2315 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20); |
2316 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); | 2316 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
2317 view_->OnSwapCompositorFrame( | 2317 view_->SubmitCompositorFrame( |
2318 0, kArbitraryLocalSurfaceId, | 2318 kArbitraryLocalSurfaceId, |
2319 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); | 2319 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); |
2320 testing::Mock::VerifyAndClearExpectations(&observer); | 2320 testing::Mock::VerifyAndClearExpectations(&observer); |
2321 view_->RunOnCompositingDidCommit(); | 2321 view_->RunOnCompositingDidCommit(); |
2322 | 2322 |
2323 // Unlock the compositor. This frame should damage everything. | 2323 // Unlock the compositor. This frame should damage everything. |
2324 frame_size = view_rect.size(); | 2324 frame_size = view_rect.size(); |
2325 | 2325 |
2326 gfx::Rect new_damage_rect(5, 6, 10, 10); | 2326 gfx::Rect new_damage_rect(5, 6, 10, 10); |
2327 EXPECT_CALL(observer, | 2327 EXPECT_CALL(observer, |
2328 OnDelegatedFrameDamage(view_->window_, view_rect)); | 2328 OnDelegatedFrameDamage(view_->window_, view_rect)); |
2329 view_->OnSwapCompositorFrame( | 2329 view_->SubmitCompositorFrame( |
2330 0, kArbitraryLocalSurfaceId, | 2330 kArbitraryLocalSurfaceId, |
2331 MakeDelegatedFrame(1.f, frame_size, new_damage_rect)); | 2331 MakeDelegatedFrame(1.f, frame_size, new_damage_rect)); |
2332 testing::Mock::VerifyAndClearExpectations(&observer); | 2332 testing::Mock::VerifyAndClearExpectations(&observer); |
2333 view_->RunOnCompositingDidCommit(); | 2333 view_->RunOnCompositingDidCommit(); |
2334 | 2334 |
2335 // A partial damage frame, this should not be dropped. | 2335 // A partial damage frame, this should not be dropped. |
2336 EXPECT_CALL(observer, | 2336 EXPECT_CALL(observer, |
2337 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); | 2337 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); |
2338 view_->OnSwapCompositorFrame( | 2338 view_->SubmitCompositorFrame( |
2339 0, kArbitraryLocalSurfaceId, | 2339 kArbitraryLocalSurfaceId, |
2340 MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); | 2340 MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); |
2341 testing::Mock::VerifyAndClearExpectations(&observer); | 2341 testing::Mock::VerifyAndClearExpectations(&observer); |
2342 view_->RunOnCompositingDidCommit(); | 2342 view_->RunOnCompositingDidCommit(); |
2343 | 2343 |
2344 | 2344 |
2345 // Resize to something empty. | 2345 // Resize to something empty. |
2346 view_rect = gfx::Rect(100, 0); | 2346 view_rect = gfx::Rect(100, 0); |
2347 view_->SetSize(view_rect.size()); | 2347 view_->SetSize(view_rect.size()); |
2348 | 2348 |
2349 // We're never expecting empty frames, resize to something non-empty. | 2349 // We're never expecting empty frames, resize to something non-empty. |
2350 view_rect = gfx::Rect(100, 100); | 2350 view_rect = gfx::Rect(100, 100); |
2351 view_->SetSize(view_rect.size()); | 2351 view_->SetSize(view_rect.size()); |
2352 | 2352 |
2353 // This frame should not be dropped. | 2353 // This frame should not be dropped. |
2354 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2354 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2355 view_->OnSwapCompositorFrame( | 2355 view_->SubmitCompositorFrame( |
2356 0, kArbitraryLocalSurfaceId, | 2356 kArbitraryLocalSurfaceId, |
2357 MakeDelegatedFrame(1.f, view_rect.size(), view_rect)); | 2357 MakeDelegatedFrame(1.f, view_rect.size(), view_rect)); |
2358 testing::Mock::VerifyAndClearExpectations(&observer); | 2358 testing::Mock::VerifyAndClearExpectations(&observer); |
2359 view_->RunOnCompositingDidCommit(); | 2359 view_->RunOnCompositingDidCommit(); |
2360 | 2360 |
2361 view_->window_->RemoveObserver(&observer); | 2361 view_->window_->RemoveObserver(&observer); |
2362 } | 2362 } |
2363 | 2363 |
2364 TEST_F(RenderWidgetHostViewAuraTest, OutputSurfaceIdChange) { | 2364 TEST_F(RenderWidgetHostViewAuraTest, OutputSurfaceIdChange) { |
2365 gfx::Rect view_rect(100, 100); | 2365 gfx::Rect view_rect(100, 100); |
2366 gfx::Size frame_size = view_rect.size(); | 2366 gfx::Size frame_size = view_rect.size(); |
2367 | 2367 |
2368 view_->InitAsChild(nullptr); | 2368 view_->InitAsChild(nullptr); |
2369 aura::client::ParentWindowWithContext( | 2369 aura::client::ParentWindowWithContext( |
2370 view_->GetNativeView(), | 2370 view_->GetNativeView(), |
2371 parent_view_->GetNativeView()->GetRootWindow(), | 2371 parent_view_->GetNativeView()->GetRootWindow(), |
2372 gfx::Rect()); | 2372 gfx::Rect()); |
2373 view_->SetSize(view_rect.size()); | 2373 view_->SetSize(view_rect.size()); |
2374 | 2374 |
2375 MockWindowObserver observer; | 2375 MockWindowObserver observer; |
2376 view_->window_->AddObserver(&observer); | 2376 view_->window_->AddObserver(&observer); |
2377 | 2377 |
2378 // Swap a frame. | 2378 // Swap a frame. |
2379 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2379 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2380 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, | 2380 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, |
2381 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2381 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2382 testing::Mock::VerifyAndClearExpectations(&observer); | 2382 testing::Mock::VerifyAndClearExpectations(&observer); |
2383 view_->RunOnCompositingDidCommit(); | 2383 view_->RunOnCompositingDidCommit(); |
2384 | 2384 |
2385 // Swap a frame with a different surface id. | 2385 // Signal that a new RendererCompositorFrameSink was created. |
| 2386 view_->DidCreateNewRendererCompositorFrameSink(); |
| 2387 |
| 2388 // Submit a frame from the new RendererCompositorFrameSink. |
2386 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2389 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2387 view_->OnSwapCompositorFrame(1, CreateLocalSurfaceId(), | 2390 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), |
2388 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2391 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2389 testing::Mock::VerifyAndClearExpectations(&observer); | 2392 testing::Mock::VerifyAndClearExpectations(&observer); |
2390 view_->RunOnCompositingDidCommit(); | 2393 view_->RunOnCompositingDidCommit(); |
2391 | 2394 |
2392 // Swap an empty frame, with a different surface id. | 2395 // Signal that a new RendererCompositorFrameSink was created. |
2393 view_->OnSwapCompositorFrame( | 2396 view_->DidCreateNewRendererCompositorFrameSink(); |
2394 2, CreateLocalSurfaceId(), | 2397 |
| 2398 // Submit a frame from the new RendererCompositorFrameSink. |
| 2399 view_->SubmitCompositorFrame( |
| 2400 CreateLocalSurfaceId(), |
2395 MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); | 2401 MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); |
2396 testing::Mock::VerifyAndClearExpectations(&observer); | 2402 testing::Mock::VerifyAndClearExpectations(&observer); |
2397 view_->RunOnCompositingDidCommit(); | 2403 view_->RunOnCompositingDidCommit(); |
2398 | 2404 |
| 2405 // Signal that a new RendererCompositorFrameSink was created. |
| 2406 view_->DidCreateNewRendererCompositorFrameSink(); |
| 2407 |
2399 // Swap another frame, with a different surface id. | 2408 // Swap another frame, with a different surface id. |
2400 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2409 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2401 view_->OnSwapCompositorFrame(3, CreateLocalSurfaceId(), | 2410 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), |
2402 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2411 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2403 testing::Mock::VerifyAndClearExpectations(&observer); | 2412 testing::Mock::VerifyAndClearExpectations(&observer); |
2404 view_->RunOnCompositingDidCommit(); | 2413 view_->RunOnCompositingDidCommit(); |
2405 | 2414 |
2406 view_->window_->RemoveObserver(&observer); | 2415 view_->window_->RemoveObserver(&observer); |
2407 } | 2416 } |
2408 | 2417 |
2409 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { | 2418 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { |
2410 view_->InitAsChild(nullptr); | 2419 view_->InitAsChild(nullptr); |
2411 | 2420 |
(...skipping 23 matching lines...) Expand all Loading... |
2435 aura::client::ParentWindowWithContext( | 2444 aura::client::ParentWindowWithContext( |
2436 views[i]->GetNativeView(), | 2445 views[i]->GetNativeView(), |
2437 parent_view_->GetNativeView()->GetRootWindow(), | 2446 parent_view_->GetNativeView()->GetRootWindow(), |
2438 gfx::Rect()); | 2447 gfx::Rect()); |
2439 views[i]->SetSize(view_rect.size()); | 2448 views[i]->SetSize(view_rect.size()); |
2440 } | 2449 } |
2441 | 2450 |
2442 // Make each renderer visible, and swap a frame on it, then make it invisible. | 2451 // Make each renderer visible, and swap a frame on it, then make it invisible. |
2443 for (size_t i = 0; i < renderer_count; ++i) { | 2452 for (size_t i = 0; i < renderer_count; ++i) { |
2444 views[i]->Show(); | 2453 views[i]->Show(); |
2445 views[i]->OnSwapCompositorFrame( | 2454 views[i]->SubmitCompositorFrame( |
2446 1, kArbitraryLocalSurfaceId, | 2455 kArbitraryLocalSurfaceId, |
2447 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2456 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2448 EXPECT_TRUE(views[i]->HasFrameData()); | 2457 EXPECT_TRUE(views[i]->HasFrameData()); |
2449 views[i]->Hide(); | 2458 views[i]->Hide(); |
2450 } | 2459 } |
2451 | 2460 |
2452 // There should be max_renderer_frames with a frame in it, and one without it. | 2461 // There should be max_renderer_frames with a frame in it, and one without it. |
2453 // Since the logic is LRU eviction, the first one should be without. | 2462 // Since the logic is LRU eviction, the first one should be without. |
2454 EXPECT_FALSE(views[0]->HasFrameData()); | 2463 EXPECT_FALSE(views[0]->HasFrameData()); |
2455 for (size_t i = 1; i < renderer_count; ++i) | 2464 for (size_t i = 1; i < renderer_count; ++i) |
2456 EXPECT_TRUE(views[i]->HasFrameData()); | 2465 EXPECT_TRUE(views[i]->HasFrameData()); |
2457 | 2466 |
2458 // LRU renderer is [0], make it visible, it shouldn't evict anything yet. | 2467 // LRU renderer is [0], make it visible, it shouldn't evict anything yet. |
2459 views[0]->Show(); | 2468 views[0]->Show(); |
2460 EXPECT_FALSE(views[0]->HasFrameData()); | 2469 EXPECT_FALSE(views[0]->HasFrameData()); |
2461 EXPECT_TRUE(views[1]->HasFrameData()); | 2470 EXPECT_TRUE(views[1]->HasFrameData()); |
2462 // Since [0] doesn't have a frame, it should be waiting for the renderer to | 2471 // Since [0] doesn't have a frame, it should be waiting for the renderer to |
2463 // give it one. | 2472 // give it one. |
2464 EXPECT_TRUE(views[0]->released_front_lock_active()); | 2473 EXPECT_TRUE(views[0]->released_front_lock_active()); |
2465 | 2474 |
2466 // Swap a frame on it, it should evict the next LRU [1]. | 2475 // Swap a frame on it, it should evict the next LRU [1]. |
2467 views[0]->OnSwapCompositorFrame( | 2476 views[0]->SubmitCompositorFrame( |
2468 1, kArbitraryLocalSurfaceId, | 2477 kArbitraryLocalSurfaceId, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2469 MakeDelegatedFrame(1.f, frame_size, view_rect)); | |
2470 EXPECT_TRUE(views[0]->HasFrameData()); | 2478 EXPECT_TRUE(views[0]->HasFrameData()); |
2471 EXPECT_FALSE(views[1]->HasFrameData()); | 2479 EXPECT_FALSE(views[1]->HasFrameData()); |
2472 // Now that [0] got a frame, it shouldn't be waiting any more. | 2480 // Now that [0] got a frame, it shouldn't be waiting any more. |
2473 EXPECT_FALSE(views[0]->released_front_lock_active()); | 2481 EXPECT_FALSE(views[0]->released_front_lock_active()); |
2474 views[0]->Hide(); | 2482 views[0]->Hide(); |
2475 | 2483 |
2476 // LRU renderer is [1], still hidden. Swap a frame on it, it should evict | 2484 // LRU renderer is [1], still hidden. Swap a frame on it, it should evict |
2477 // the next LRU [2]. | 2485 // the next LRU [2]. |
2478 views[1]->OnSwapCompositorFrame( | 2486 views[1]->SubmitCompositorFrame( |
2479 1, kArbitraryLocalSurfaceId, | 2487 kArbitraryLocalSurfaceId, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2480 MakeDelegatedFrame(1.f, frame_size, view_rect)); | |
2481 EXPECT_TRUE(views[0]->HasFrameData()); | 2488 EXPECT_TRUE(views[0]->HasFrameData()); |
2482 EXPECT_TRUE(views[1]->HasFrameData()); | 2489 EXPECT_TRUE(views[1]->HasFrameData()); |
2483 EXPECT_FALSE(views[2]->HasFrameData()); | 2490 EXPECT_FALSE(views[2]->HasFrameData()); |
2484 for (size_t i = 3; i < renderer_count; ++i) | 2491 for (size_t i = 3; i < renderer_count; ++i) |
2485 EXPECT_TRUE(views[i]->HasFrameData()); | 2492 EXPECT_TRUE(views[i]->HasFrameData()); |
2486 | 2493 |
2487 // Make all renderers but [0] visible and swap a frame on them, keep [0] | 2494 // Make all renderers but [0] visible and swap a frame on them, keep [0] |
2488 // hidden, it becomes the LRU. | 2495 // hidden, it becomes the LRU. |
2489 for (size_t i = 1; i < renderer_count; ++i) { | 2496 for (size_t i = 1; i < renderer_count; ++i) { |
2490 views[i]->Show(); | 2497 views[i]->Show(); |
2491 // The renderers who don't have a frame should be waiting. The ones that | 2498 // The renderers who don't have a frame should be waiting. The ones that |
2492 // have a frame should not. | 2499 // have a frame should not. |
2493 // In practice, [1] has a frame, but anything after has its frame evicted. | 2500 // In practice, [1] has a frame, but anything after has its frame evicted. |
2494 EXPECT_EQ(!views[i]->HasFrameData(), | 2501 EXPECT_EQ(!views[i]->HasFrameData(), |
2495 views[i]->released_front_lock_active()); | 2502 views[i]->released_front_lock_active()); |
2496 views[i]->OnSwapCompositorFrame( | 2503 views[i]->SubmitCompositorFrame( |
2497 1, kArbitraryLocalSurfaceId, | 2504 kArbitraryLocalSurfaceId, |
2498 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2505 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2499 // Now everyone has a frame. | 2506 // Now everyone has a frame. |
2500 EXPECT_FALSE(views[i]->released_front_lock_active()); | 2507 EXPECT_FALSE(views[i]->released_front_lock_active()); |
2501 EXPECT_TRUE(views[i]->HasFrameData()); | 2508 EXPECT_TRUE(views[i]->HasFrameData()); |
2502 } | 2509 } |
2503 EXPECT_FALSE(views[0]->HasFrameData()); | 2510 EXPECT_FALSE(views[0]->HasFrameData()); |
2504 | 2511 |
2505 // Swap a frame on [0], it should be evicted immediately. | 2512 // Swap a frame on [0], it should be evicted immediately. |
2506 views[0]->OnSwapCompositorFrame( | 2513 views[0]->SubmitCompositorFrame( |
2507 1, kArbitraryLocalSurfaceId, | 2514 kArbitraryLocalSurfaceId, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2508 MakeDelegatedFrame(1.f, frame_size, view_rect)); | |
2509 EXPECT_FALSE(views[0]->HasFrameData()); | 2515 EXPECT_FALSE(views[0]->HasFrameData()); |
2510 | 2516 |
2511 // Make [0] visible, and swap a frame on it. Nothing should be evicted | 2517 // Make [0] visible, and swap a frame on it. Nothing should be evicted |
2512 // although we're above the limit. | 2518 // although we're above the limit. |
2513 views[0]->Show(); | 2519 views[0]->Show(); |
2514 // We don't have a frame, wait. | 2520 // We don't have a frame, wait. |
2515 EXPECT_TRUE(views[0]->released_front_lock_active()); | 2521 EXPECT_TRUE(views[0]->released_front_lock_active()); |
2516 views[0]->OnSwapCompositorFrame( | 2522 views[0]->SubmitCompositorFrame( |
2517 1, kArbitraryLocalSurfaceId, | 2523 kArbitraryLocalSurfaceId, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2518 MakeDelegatedFrame(1.f, frame_size, view_rect)); | |
2519 EXPECT_FALSE(views[0]->released_front_lock_active()); | 2524 EXPECT_FALSE(views[0]->released_front_lock_active()); |
2520 for (size_t i = 0; i < renderer_count; ++i) | 2525 for (size_t i = 0; i < renderer_count; ++i) |
2521 EXPECT_TRUE(views[i]->HasFrameData()); | 2526 EXPECT_TRUE(views[i]->HasFrameData()); |
2522 | 2527 |
2523 // Make [0] hidden, it should evict its frame. | 2528 // Make [0] hidden, it should evict its frame. |
2524 views[0]->Hide(); | 2529 views[0]->Hide(); |
2525 EXPECT_FALSE(views[0]->HasFrameData()); | 2530 EXPECT_FALSE(views[0]->HasFrameData()); |
2526 | 2531 |
2527 // Make [0] visible, don't give it a frame, it should be waiting. | 2532 // Make [0] visible, don't give it a frame, it should be waiting. |
2528 views[0]->Show(); | 2533 views[0]->Show(); |
2529 EXPECT_TRUE(views[0]->released_front_lock_active()); | 2534 EXPECT_TRUE(views[0]->released_front_lock_active()); |
2530 // Make [0] hidden, it should stop waiting. | 2535 // Make [0] hidden, it should stop waiting. |
2531 views[0]->Hide(); | 2536 views[0]->Hide(); |
2532 EXPECT_FALSE(views[0]->released_front_lock_active()); | 2537 EXPECT_FALSE(views[0]->released_front_lock_active()); |
2533 | 2538 |
2534 // Make [1] hidden, resize it. It should drop its frame. | 2539 // Make [1] hidden, resize it. It should drop its frame. |
2535 views[1]->Hide(); | 2540 views[1]->Hide(); |
2536 EXPECT_TRUE(views[1]->HasFrameData()); | 2541 EXPECT_TRUE(views[1]->HasFrameData()); |
2537 gfx::Size size2(200, 200); | 2542 gfx::Size size2(200, 200); |
2538 views[1]->SetSize(size2); | 2543 views[1]->SetSize(size2); |
2539 EXPECT_FALSE(views[1]->HasFrameData()); | 2544 EXPECT_FALSE(views[1]->HasFrameData()); |
2540 // Show it, it should block until we give it a frame. | 2545 // Show it, it should block until we give it a frame. |
2541 views[1]->Show(); | 2546 views[1]->Show(); |
2542 EXPECT_TRUE(views[1]->released_front_lock_active()); | 2547 EXPECT_TRUE(views[1]->released_front_lock_active()); |
2543 views[1]->OnSwapCompositorFrame( | 2548 views[1]->SubmitCompositorFrame( |
2544 1, kArbitraryLocalSurfaceId, | 2549 kArbitraryLocalSurfaceId, |
2545 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); | 2550 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
2546 EXPECT_FALSE(views[1]->released_front_lock_active()); | 2551 EXPECT_FALSE(views[1]->released_front_lock_active()); |
2547 | 2552 |
2548 for (size_t i = 0; i < renderer_count - 1; ++i) | 2553 for (size_t i = 0; i < renderer_count - 1; ++i) |
2549 views[i]->Hide(); | 2554 views[i]->Hide(); |
2550 | 2555 |
2551 // Allocate enough bitmaps so that two frames (proportionally) would be | 2556 // Allocate enough bitmaps so that two frames (proportionally) would be |
2552 // enough hit the handle limit. | 2557 // enough hit the handle limit. |
2553 int handles_per_frame = 5; | 2558 int handles_per_frame = 5; |
2554 RendererFrameManager::GetInstance()->set_max_handles(handles_per_frame * 2); | 2559 RendererFrameManager::GetInstance()->set_max_handles(handles_per_frame * 2); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2608 views[i]->GetNativeView(), | 2613 views[i]->GetNativeView(), |
2609 parent_view_->GetNativeView()->GetRootWindow(), | 2614 parent_view_->GetNativeView()->GetRootWindow(), |
2610 gfx::Rect()); | 2615 gfx::Rect()); |
2611 views[i]->SetSize(view_rect.size()); | 2616 views[i]->SetSize(view_rect.size()); |
2612 } | 2617 } |
2613 | 2618 |
2614 // Make each renderer visible and swap a frame on it. No eviction should | 2619 // Make each renderer visible and swap a frame on it. No eviction should |
2615 // occur because all frames are visible. | 2620 // occur because all frames are visible. |
2616 for (size_t i = 0; i < renderer_count; ++i) { | 2621 for (size_t i = 0; i < renderer_count; ++i) { |
2617 views[i]->Show(); | 2622 views[i]->Show(); |
2618 views[i]->OnSwapCompositorFrame( | 2623 views[i]->SubmitCompositorFrame( |
2619 1, i ? CreateLocalSurfaceId() : kArbitraryLocalSurfaceId, | 2624 i ? CreateLocalSurfaceId() : kArbitraryLocalSurfaceId, |
2620 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2625 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2621 EXPECT_TRUE(views[i]->HasFrameData()); | 2626 EXPECT_TRUE(views[i]->HasFrameData()); |
2622 } | 2627 } |
2623 | 2628 |
2624 // If we hide [0], then [0] should be evicted. | 2629 // If we hide [0], then [0] should be evicted. |
2625 views[0]->Hide(); | 2630 views[0]->Hide(); |
2626 EXPECT_FALSE(views[0]->HasFrameData()); | 2631 EXPECT_FALSE(views[0]->HasFrameData()); |
2627 | 2632 |
2628 // If we lock [0] before hiding it, then [0] should not be evicted. | 2633 // If we lock [0] before hiding it, then [0] should not be evicted. |
2629 views[0]->Show(); | 2634 views[0]->Show(); |
2630 views[0]->OnSwapCompositorFrame( | 2635 views[0]->SubmitCompositorFrame( |
2631 1, kArbitraryLocalSurfaceId, | 2636 kArbitraryLocalSurfaceId, MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2632 MakeDelegatedFrame(1.f, frame_size, view_rect)); | |
2633 EXPECT_TRUE(views[0]->HasFrameData()); | 2637 EXPECT_TRUE(views[0]->HasFrameData()); |
2634 views[0]->GetDelegatedFrameHost()->LockResources(); | 2638 views[0]->GetDelegatedFrameHost()->LockResources(); |
2635 views[0]->Hide(); | 2639 views[0]->Hide(); |
2636 EXPECT_TRUE(views[0]->HasFrameData()); | 2640 EXPECT_TRUE(views[0]->HasFrameData()); |
2637 | 2641 |
2638 // If we unlock [0] now, then [0] should be evicted. | 2642 // If we unlock [0] now, then [0] should be evicted. |
2639 views[0]->GetDelegatedFrameHost()->UnlockResources(); | 2643 views[0]->GetDelegatedFrameHost()->UnlockResources(); |
2640 EXPECT_FALSE(views[0]->HasFrameData()); | 2644 EXPECT_FALSE(views[0]->HasFrameData()); |
2641 | 2645 |
2642 for (size_t i = 0; i < renderer_count; ++i) { | 2646 for (size_t i = 0; i < renderer_count; ++i) { |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2681 views[i]->GetNativeView(), | 2685 views[i]->GetNativeView(), |
2682 parent_view_->GetNativeView()->GetRootWindow(), | 2686 parent_view_->GetNativeView()->GetRootWindow(), |
2683 gfx::Rect()); | 2687 gfx::Rect()); |
2684 views[i]->SetSize(view_rect.size()); | 2688 views[i]->SetSize(view_rect.size()); |
2685 } | 2689 } |
2686 | 2690 |
2687 // Make each renderer visible and swap a frame on it. No eviction should | 2691 // Make each renderer visible and swap a frame on it. No eviction should |
2688 // occur because all frames are visible. | 2692 // occur because all frames are visible. |
2689 for (size_t i = 0; i < renderer_count; ++i) { | 2693 for (size_t i = 0; i < renderer_count; ++i) { |
2690 views[i]->Show(); | 2694 views[i]->Show(); |
2691 views[i]->OnSwapCompositorFrame( | 2695 views[i]->SubmitCompositorFrame( |
2692 1, kArbitraryLocalSurfaceId, | 2696 kArbitraryLocalSurfaceId, |
2693 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2697 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2694 EXPECT_TRUE(views[i]->HasFrameData()); | 2698 EXPECT_TRUE(views[i]->HasFrameData()); |
2695 } | 2699 } |
2696 | 2700 |
2697 // If we hide one, it should not get evicted. | 2701 // If we hide one, it should not get evicted. |
2698 views[0]->Hide(); | 2702 views[0]->Hide(); |
2699 base::RunLoop().RunUntilIdle(); | 2703 base::RunLoop().RunUntilIdle(); |
2700 EXPECT_TRUE(views[0]->HasFrameData()); | 2704 EXPECT_TRUE(views[0]->HasFrameData()); |
2701 // Using a lesser memory pressure event however, should evict. | 2705 // Using a lesser memory pressure event however, should evict. |
2702 SimulateMemoryPressure( | 2706 SimulateMemoryPressure( |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2788 | 2792 |
2789 { | 2793 { |
2790 cc::BeginFrameArgs args = | 2794 cc::BeginFrameArgs args = |
2791 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u); | 2795 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u); |
2792 source.TestOnBeginFrame(args); | 2796 source.TestOnBeginFrame(args); |
2793 | 2797 |
2794 // Ack from CompositorFrame is forwarded. | 2798 // Ack from CompositorFrame is forwarded. |
2795 cc::BeginFrameAck ack(source_id, 5, 4, true); | 2799 cc::BeginFrameAck ack(source_id, 5, 4, true); |
2796 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); | 2800 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); |
2797 frame.metadata.begin_frame_ack = ack; | 2801 frame.metadata.begin_frame_ack = ack; |
2798 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame)); | 2802 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
2799 view_->RunOnCompositingDidCommit(); | 2803 view_->RunOnCompositingDidCommit(); |
2800 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 2804 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
2801 } | 2805 } |
2802 | 2806 |
2803 { | 2807 { |
2804 cc::BeginFrameArgs args = | 2808 cc::BeginFrameArgs args = |
2805 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u); | 2809 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u); |
2806 source.TestOnBeginFrame(args); | 2810 source.TestOnBeginFrame(args); |
2807 | 2811 |
2808 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. | 2812 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. |
(...skipping 12 matching lines...) Expand all Loading... |
2821 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u); | 2825 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u); |
2822 source.TestOnBeginFrame(args); | 2826 source.TestOnBeginFrame(args); |
2823 | 2827 |
2824 // Ack from CompositorFrame is forwarded with old | 2828 // Ack from CompositorFrame is forwarded with old |
2825 // latest_confirmed_sequence_number and without damage. | 2829 // latest_confirmed_sequence_number and without damage. |
2826 cc::BeginFrameAck ack(source_id, 7, 7, true); | 2830 cc::BeginFrameAck ack(source_id, 7, 7, true); |
2827 gfx::Rect dropped_damage_rect(10, 20, 30, 40); | 2831 gfx::Rect dropped_damage_rect(10, 20, 30, 40); |
2828 cc::CompositorFrame frame = | 2832 cc::CompositorFrame frame = |
2829 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); | 2833 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); |
2830 frame.metadata.begin_frame_ack = ack; | 2834 frame.metadata.begin_frame_ack = ack; |
2831 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame)); | 2835 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
2832 view_->RunOnCompositingDidCommit(); | 2836 view_->RunOnCompositingDidCommit(); |
2833 ack.latest_confirmed_sequence_number = 4; | 2837 ack.latest_confirmed_sequence_number = 4; |
2834 ack.has_damage = false; | 2838 ack.has_damage = false; |
2835 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 2839 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
2836 } | 2840 } |
2837 | 2841 |
2838 // Change source_id known to the view. This should reset the | 2842 // Change source_id known to the view. This should reset the |
2839 // latest_confirmed_sequence_number tracked by the view. | 2843 // latest_confirmed_sequence_number tracked by the view. |
2840 source_id = cc::BeginFrameArgs::kManualSourceId; | 2844 source_id = cc::BeginFrameArgs::kManualSourceId; |
2841 | 2845 |
2842 { | 2846 { |
2843 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 2847 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( |
2844 BEGINFRAME_FROM_HERE, source_id, 10u); | 2848 BEGINFRAME_FROM_HERE, source_id, 10u); |
2845 source.TestOnBeginFrame(args); | 2849 source.TestOnBeginFrame(args); |
2846 | 2850 |
2847 // Ack from CompositorFrame is forwarded with invalid | 2851 // Ack from CompositorFrame is forwarded with invalid |
2848 // latest_confirmed_sequence_number and without damage. | 2852 // latest_confirmed_sequence_number and without damage. |
2849 cc::BeginFrameAck ack(source_id, 10, 10, true); | 2853 cc::BeginFrameAck ack(source_id, 10, 10, true); |
2850 gfx::Rect dropped_damage_rect(10, 20, 30, 40); | 2854 gfx::Rect dropped_damage_rect(10, 20, 30, 40); |
2851 cc::CompositorFrame frame = | 2855 cc::CompositorFrame frame = |
2852 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); | 2856 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); |
2853 frame.metadata.begin_frame_ack = ack; | 2857 frame.metadata.begin_frame_ack = ack; |
2854 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame)); | 2858 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
2855 view_->RunOnCompositingDidCommit(); | 2859 view_->RunOnCompositingDidCommit(); |
2856 ack.latest_confirmed_sequence_number = | 2860 ack.latest_confirmed_sequence_number = |
2857 cc::BeginFrameArgs::kInvalidFrameNumber; | 2861 cc::BeginFrameArgs::kInvalidFrameNumber; |
2858 ack.has_damage = false; | 2862 ack.has_damage = false; |
2859 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 2863 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
2860 } | 2864 } |
2861 | 2865 |
2862 { | 2866 { |
2863 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 2867 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( |
2864 BEGINFRAME_FROM_HERE, source_id, 11u); | 2868 BEGINFRAME_FROM_HERE, source_id, 11u); |
(...skipping 13 matching lines...) Expand all Loading... |
2878 | 2882 |
2879 { | 2883 { |
2880 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 2884 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( |
2881 BEGINFRAME_FROM_HERE, source_id, 12u); | 2885 BEGINFRAME_FROM_HERE, source_id, 12u); |
2882 source.TestOnBeginFrame(args); | 2886 source.TestOnBeginFrame(args); |
2883 | 2887 |
2884 // Ack from CompositorFrame is forwarded. | 2888 // Ack from CompositorFrame is forwarded. |
2885 cc::BeginFrameAck ack(source_id, 12, 12, true); | 2889 cc::BeginFrameAck ack(source_id, 12, 12, true); |
2886 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); | 2890 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); |
2887 frame.metadata.begin_frame_ack = ack; | 2891 frame.metadata.begin_frame_ack = ack; |
2888 view_->OnSwapCompositorFrame(0, kArbitraryLocalSurfaceId, std::move(frame)); | 2892 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
2889 view_->RunOnCompositingDidCommit(); | 2893 view_->RunOnCompositingDidCommit(); |
2890 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 2894 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
2891 } | 2895 } |
2892 | 2896 |
2893 { | 2897 { |
2894 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 2898 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( |
2895 BEGINFRAME_FROM_HERE, source_id, 13u); | 2899 BEGINFRAME_FROM_HERE, source_id, 13u); |
2896 source.TestOnBeginFrame(args); | 2900 source.TestOnBeginFrame(args); |
2897 | 2901 |
2898 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. | 2902 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2948 ASSERT_EQ(0, callback_count_); | 2952 ASSERT_EQ(0, callback_count_); |
2949 ASSERT_FALSE(view_->last_copy_request_); | 2953 ASSERT_FALSE(view_->last_copy_request_); |
2950 } | 2954 } |
2951 | 2955 |
2952 void InstallFakeTickClock() { | 2956 void InstallFakeTickClock() { |
2953 // Create a fake tick clock and transfer ownership to the frame host. | 2957 // Create a fake tick clock and transfer ownership to the frame host. |
2954 tick_clock_ = new base::SimpleTestTickClock(); | 2958 tick_clock_ = new base::SimpleTestTickClock(); |
2955 view_->GetDelegatedFrameHost()->tick_clock_ = base::WrapUnique(tick_clock_); | 2959 view_->GetDelegatedFrameHost()->tick_clock_ = base::WrapUnique(tick_clock_); |
2956 } | 2960 } |
2957 | 2961 |
2958 void OnSwapCompositorFrame() { | 2962 void SubmitCompositorFrame() { |
2959 view_->OnSwapCompositorFrame( | 2963 view_->SubmitCompositorFrame( |
2960 1, kArbitraryLocalSurfaceId, | 2964 kArbitraryLocalSurfaceId, |
2961 MakeDelegatedFrame(1.f, view_rect_.size(), view_rect_)); | 2965 MakeDelegatedFrame(1.f, view_rect_.size(), view_rect_)); |
2962 cc::SurfaceId surface_id = | 2966 cc::SurfaceId surface_id = |
2963 view_->GetDelegatedFrameHost()->SurfaceIdForTesting(); | 2967 view_->GetDelegatedFrameHost()->SurfaceIdForTesting(); |
2964 if (surface_id.is_valid()) | 2968 if (surface_id.is_valid()) |
2965 view_->GetDelegatedFrameHost()->WillDrawSurface( | 2969 view_->GetDelegatedFrameHost()->WillDrawSurface( |
2966 surface_id.local_surface_id(), view_rect_); | 2970 surface_id.local_surface_id(), view_rect_); |
2967 ASSERT_TRUE(view_->last_copy_request_); | 2971 ASSERT_TRUE(view_->last_copy_request_); |
2968 } | 2972 } |
2969 | 2973 |
2970 void ReleaseSwappedFrame() { | 2974 void ReleaseSwappedFrame() { |
2971 std::unique_ptr<cc::CopyOutputRequest> request = | 2975 std::unique_ptr<cc::CopyOutputRequest> request = |
2972 std::move(view_->last_copy_request_); | 2976 std::move(view_->last_copy_request_); |
2973 request->SendTextureResult(view_rect_.size(), request->texture_mailbox(), | 2977 request->SendTextureResult(view_rect_.size(), request->texture_mailbox(), |
2974 std::unique_ptr<cc::SingleReleaseCallback>()); | 2978 std::unique_ptr<cc::SingleReleaseCallback>()); |
2975 RunLoopUntilCallback(); | 2979 RunLoopUntilCallback(); |
2976 } | 2980 } |
2977 | 2981 |
2978 void OnSwapCompositorFrameAndRelease() { | 2982 void SubmitCompositorFrameAndRelease() { |
2979 OnSwapCompositorFrame(); | 2983 SubmitCompositorFrame(); |
2980 ReleaseSwappedFrame(); | 2984 ReleaseSwappedFrame(); |
2981 } | 2985 } |
2982 | 2986 |
2983 void RunOnCompositingDidCommitAndReleaseFrame() { | 2987 void RunOnCompositingDidCommitAndReleaseFrame() { |
2984 view_->RunOnCompositingDidCommit(); | 2988 view_->RunOnCompositingDidCommit(); |
2985 ReleaseSwappedFrame(); | 2989 ReleaseSwappedFrame(); |
2986 } | 2990 } |
2987 | 2991 |
2988 void OnUpdateVSyncParameters(base::TimeTicks timebase, | 2992 void OnUpdateVSyncParameters(base::TimeTicks timebase, |
2989 base::TimeDelta interval) { | 2993 base::TimeDelta interval) { |
(...skipping 25 matching lines...) Expand all Loading... |
3015 // browser composites, and even if the frame subscriber desires more frames than | 3019 // browser composites, and even if the frame subscriber desires more frames than |
3016 // the number of browser composites. | 3020 // the number of browser composites. |
3017 TEST_F(RenderWidgetHostViewAuraCopyRequestTest, DedupeFrameSubscriberRequests) { | 3021 TEST_F(RenderWidgetHostViewAuraCopyRequestTest, DedupeFrameSubscriberRequests) { |
3018 InitializeView(); | 3022 InitializeView(); |
3019 int expected_callback_count = 0; | 3023 int expected_callback_count = 0; |
3020 | 3024 |
3021 // Normal case: A browser composite executes for each render frame swap. | 3025 // Normal case: A browser composite executes for each render frame swap. |
3022 for (int i = 0; i < 3; ++i) { | 3026 for (int i = 0; i < 3; ++i) { |
3023 // Renderer provides another frame and the Browser composites with the | 3027 // Renderer provides another frame and the Browser composites with the |
3024 // frame, executing the copy request, and then the result is delivered. | 3028 // frame, executing the copy request, and then the result is delivered. |
3025 OnSwapCompositorFrame(); | 3029 SubmitCompositorFrame(); |
3026 RunOnCompositingDidCommitAndReleaseFrame(); | 3030 RunOnCompositingDidCommitAndReleaseFrame(); |
3027 | 3031 |
3028 // The callback should be run with success status. | 3032 // The callback should be run with success status. |
3029 ++expected_callback_count; | 3033 ++expected_callback_count; |
3030 ASSERT_EQ(expected_callback_count, callback_count_); | 3034 ASSERT_EQ(expected_callback_count, callback_count_); |
3031 EXPECT_TRUE(result_); | 3035 EXPECT_TRUE(result_); |
3032 } | 3036 } |
3033 | 3037 |
3034 // De-duping case: One browser composite executes per varied number of render | 3038 // De-duping case: One browser composite executes per varied number of render |
3035 // frame swaps. | 3039 // frame swaps. |
3036 for (int i = 0; i < 3; ++i) { | 3040 for (int i = 0; i < 3; ++i) { |
3037 const int num_swaps = 1 + i % 3; | 3041 const int num_swaps = 1 + i % 3; |
3038 | 3042 |
3039 // The renderer provides |num_swaps| frames. | 3043 // The renderer provides |num_swaps| frames. |
3040 for (int j = 0; j < num_swaps; ++j) { | 3044 for (int j = 0; j < num_swaps; ++j) { |
3041 OnSwapCompositorFrame(); | 3045 SubmitCompositorFrame(); |
3042 if (j > 0) { | 3046 if (j > 0) { |
3043 ++expected_callback_count; | 3047 ++expected_callback_count; |
3044 ASSERT_EQ(expected_callback_count, callback_count_); | 3048 ASSERT_EQ(expected_callback_count, callback_count_); |
3045 EXPECT_FALSE(result_); // The prior copy request was aborted. | 3049 EXPECT_FALSE(result_); // The prior copy request was aborted. |
3046 } | 3050 } |
3047 } | 3051 } |
3048 | 3052 |
3049 // Browser composites with the frame, executing the last copy request that | 3053 // Browser composites with the frame, executing the last copy request that |
3050 // was made, and then the result is delivered. | 3054 // was made, and then the result is delivered. |
3051 RunOnCompositingDidCommitAndReleaseFrame(); | 3055 RunOnCompositingDidCommitAndReleaseFrame(); |
3052 | 3056 |
3053 // The final callback should be run with success status. | 3057 // The final callback should be run with success status. |
3054 ++expected_callback_count; | 3058 ++expected_callback_count; |
3055 ASSERT_EQ(expected_callback_count, callback_count_); | 3059 ASSERT_EQ(expected_callback_count, callback_count_); |
3056 EXPECT_TRUE(result_); | 3060 EXPECT_TRUE(result_); |
3057 } | 3061 } |
3058 | 3062 |
3059 // Destroy the RenderWidgetHostViewAura and ImageTransportFactory. | 3063 // Destroy the RenderWidgetHostViewAura and ImageTransportFactory. |
3060 TearDownEnvironment(); | 3064 TearDownEnvironment(); |
3061 } | 3065 } |
3062 | 3066 |
3063 TEST_F(RenderWidgetHostViewAuraCopyRequestTest, DestroyedAfterCopyRequest) { | 3067 TEST_F(RenderWidgetHostViewAuraCopyRequestTest, DestroyedAfterCopyRequest) { |
3064 InitializeView(); | 3068 InitializeView(); |
3065 | 3069 |
3066 OnSwapCompositorFrame(); | 3070 SubmitCompositorFrame(); |
3067 EXPECT_EQ(0, callback_count_); | 3071 EXPECT_EQ(0, callback_count_); |
3068 EXPECT_TRUE(view_->last_copy_request_); | 3072 EXPECT_TRUE(view_->last_copy_request_); |
3069 EXPECT_TRUE(view_->last_copy_request_->has_texture_mailbox()); | 3073 EXPECT_TRUE(view_->last_copy_request_->has_texture_mailbox()); |
3070 | 3074 |
3071 // Notify DelegatedFrameHost that the copy requests were moved to the | 3075 // Notify DelegatedFrameHost that the copy requests were moved to the |
3072 // compositor thread by calling OnCompositingDidCommit(). | 3076 // compositor thread by calling OnCompositingDidCommit(). |
3073 // | 3077 // |
3074 // Send back the mailbox included in the request. There's no release callback | 3078 // Send back the mailbox included in the request. There's no release callback |
3075 // since the mailbox came from the RWHVA originally. | 3079 // since the mailbox came from the RWHVA originally. |
3076 RunOnCompositingDidCommitAndReleaseFrame(); | 3080 RunOnCompositingDidCommitAndReleaseFrame(); |
3077 | 3081 |
3078 // The callback should succeed. | 3082 // The callback should succeed. |
3079 EXPECT_EQ(1, callback_count_); | 3083 EXPECT_EQ(1, callback_count_); |
3080 EXPECT_TRUE(result_); | 3084 EXPECT_TRUE(result_); |
3081 | 3085 |
3082 OnSwapCompositorFrame(); | 3086 SubmitCompositorFrame(); |
3083 EXPECT_EQ(1, callback_count_); | 3087 EXPECT_EQ(1, callback_count_); |
3084 std::unique_ptr<cc::CopyOutputRequest> request = | 3088 std::unique_ptr<cc::CopyOutputRequest> request = |
3085 std::move(view_->last_copy_request_); | 3089 std::move(view_->last_copy_request_); |
3086 | 3090 |
3087 // Destroy the RenderWidgetHostViewAura and ImageTransportFactory. | 3091 // Destroy the RenderWidgetHostViewAura and ImageTransportFactory. |
3088 TearDownEnvironment(); | 3092 TearDownEnvironment(); |
3089 | 3093 |
3090 // Send the result after-the-fact. It goes nowhere since DelegatedFrameHost | 3094 // Send the result after-the-fact. It goes nowhere since DelegatedFrameHost |
3091 // has been destroyed. | 3095 // has been destroyed. |
3092 request->SendTextureResult(view_rect_.size(), request->texture_mailbox(), | 3096 request->SendTextureResult(view_rect_.size(), request->texture_mailbox(), |
(...skipping 20 matching lines...) Expand all Loading... |
3113 const base::TimeDelta kDefaultInterval = | 3117 const base::TimeDelta kDefaultInterval = |
3114 cc::BeginFrameArgs::DefaultInterval(); | 3118 cc::BeginFrameArgs::DefaultInterval(); |
3115 tick_clock_->Advance(kDefaultInterval / 3); | 3119 tick_clock_->Advance(kDefaultInterval / 3); |
3116 | 3120 |
3117 // Swap the first frame without any vsync information. | 3121 // Swap the first frame without any vsync information. |
3118 ASSERT_EQ(base::TimeTicks(), vsync_timebase()); | 3122 ASSERT_EQ(base::TimeTicks(), vsync_timebase()); |
3119 ASSERT_EQ(base::TimeDelta(), vsync_interval()); | 3123 ASSERT_EQ(base::TimeDelta(), vsync_interval()); |
3120 | 3124 |
3121 // During this first call, there is no known vsync information, so while the | 3125 // During this first call, there is no known vsync information, so while the |
3122 // callback should succeed the present time is effectively just current time. | 3126 // callback should succeed the present time is effectively just current time. |
3123 OnSwapCompositorFrameAndRelease(); | 3127 SubmitCompositorFrameAndRelease(); |
3124 EXPECT_EQ(tick_clock_->NowTicks(), frame_subscriber_->last_present_time()); | 3128 EXPECT_EQ(tick_clock_->NowTicks(), frame_subscriber_->last_present_time()); |
3125 | 3129 |
3126 // Now initialize the vsync parameters with a null timebase, but a known vsync | 3130 // Now initialize the vsync parameters with a null timebase, but a known vsync |
3127 // interval; which should give us slightly better frame time estimates. | 3131 // interval; which should give us slightly better frame time estimates. |
3128 OnUpdateVSyncParameters(base::TimeTicks(), kDefaultInterval); | 3132 OnUpdateVSyncParameters(base::TimeTicks(), kDefaultInterval); |
3129 ASSERT_EQ(base::TimeTicks(), vsync_timebase()); | 3133 ASSERT_EQ(base::TimeTicks(), vsync_timebase()); |
3130 ASSERT_EQ(kDefaultInterval, vsync_interval()); | 3134 ASSERT_EQ(kDefaultInterval, vsync_interval()); |
3131 | 3135 |
3132 // Now that we have a vsync interval, the presentation time estimate should be | 3136 // Now that we have a vsync interval, the presentation time estimate should be |
3133 // the nearest presentation interval, which is just kDefaultInterval since our | 3137 // the nearest presentation interval, which is just kDefaultInterval since our |
3134 // tick clock is initialized to a time before that. | 3138 // tick clock is initialized to a time before that. |
3135 OnSwapCompositorFrameAndRelease(); | 3139 SubmitCompositorFrameAndRelease(); |
3136 EXPECT_EQ(base::TimeTicks() + kDefaultInterval, | 3140 EXPECT_EQ(base::TimeTicks() + kDefaultInterval, |
3137 frame_subscriber_->last_present_time()); | 3141 frame_subscriber_->last_present_time()); |
3138 | 3142 |
3139 // Now initialize the vsync parameters with a valid timebase and a known vsync | 3143 // Now initialize the vsync parameters with a valid timebase and a known vsync |
3140 // interval; which should give us the best frame time estimates. | 3144 // interval; which should give us the best frame time estimates. |
3141 const base::TimeTicks kBaseTime = tick_clock_->NowTicks(); | 3145 const base::TimeTicks kBaseTime = tick_clock_->NowTicks(); |
3142 OnUpdateVSyncParameters(kBaseTime, kDefaultInterval); | 3146 OnUpdateVSyncParameters(kBaseTime, kDefaultInterval); |
3143 ASSERT_EQ(kBaseTime, vsync_timebase()); | 3147 ASSERT_EQ(kBaseTime, vsync_timebase()); |
3144 ASSERT_EQ(kDefaultInterval, vsync_interval()); | 3148 ASSERT_EQ(kDefaultInterval, vsync_interval()); |
3145 | 3149 |
3146 // Now that we have a vsync interval and a timebase, the presentation time | 3150 // Now that we have a vsync interval and a timebase, the presentation time |
3147 // should be based on the number of vsync intervals which have elapsed since | 3151 // should be based on the number of vsync intervals which have elapsed since |
3148 // the vsync timebase. Advance time by a non integer number of intervals to | 3152 // the vsync timebase. Advance time by a non integer number of intervals to |
3149 // verify. | 3153 // verify. |
3150 const double kElapsedIntervals = 2.5; | 3154 const double kElapsedIntervals = 2.5; |
3151 tick_clock_->Advance(kDefaultInterval * kElapsedIntervals); | 3155 tick_clock_->Advance(kDefaultInterval * kElapsedIntervals); |
3152 OnSwapCompositorFrameAndRelease(); | 3156 SubmitCompositorFrameAndRelease(); |
3153 EXPECT_EQ(kBaseTime + kDefaultInterval * std::ceil(kElapsedIntervals), | 3157 EXPECT_EQ(kBaseTime + kDefaultInterval * std::ceil(kElapsedIntervals), |
3154 frame_subscriber_->last_present_time()); | 3158 frame_subscriber_->last_present_time()); |
3155 | 3159 |
3156 // Destroy the RenderWidgetHostViewAura and ImageTransportFactory. | 3160 // Destroy the RenderWidgetHostViewAura and ImageTransportFactory. |
3157 TearDownEnvironment(); | 3161 TearDownEnvironment(); |
3158 } | 3162 } |
3159 | 3163 |
3160 TEST_F(RenderWidgetHostViewAuraTest, VisibleViewportTest) { | 3164 TEST_F(RenderWidgetHostViewAuraTest, VisibleViewportTest) { |
3161 gfx::Rect view_rect(100, 100); | 3165 gfx::Rect view_rect(100, 100); |
3162 | 3166 |
(...skipping 1867 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5030 // There is no composition in the beginning. | 5034 // There is no composition in the beginning. |
5031 EXPECT_FALSE(has_composition_text()); | 5035 EXPECT_FALSE(has_composition_text()); |
5032 SetHasCompositionTextToTrue(); | 5036 SetHasCompositionTextToTrue(); |
5033 view->ImeCancelComposition(); | 5037 view->ImeCancelComposition(); |
5034 // The composition must have been canceled. | 5038 // The composition must have been canceled. |
5035 EXPECT_FALSE(has_composition_text()); | 5039 EXPECT_FALSE(has_composition_text()); |
5036 } | 5040 } |
5037 } | 5041 } |
5038 | 5042 |
5039 } // namespace content | 5043 } // namespace content |
OLD | NEW |