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

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

Issue 2780713004: Hide compositor_frame_sink_id from RenderWidgetHostView* (Closed)
Patch Set: Added a comment in android Created 3 years, 8 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 1896 matching lines...) Expand 10 before | Expand all | Expand 10 after
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, &params); 1916 ViewMsg_ReclaimCompositorResources::Read(msg, &params);
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, &params); 1967 ViewMsg_ReclaimCompositorResources::Read(msg, &params);
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
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, &params); 1991 ViewMsg_Resize::Read(msg, &params);
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, &params); 2017 ViewMsg_Resize::Read(msg, &params);
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698