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> |
11 #include <utility> | 11 #include <utility> |
12 | 12 |
13 #include "base/command_line.h" | 13 #include "base/command_line.h" |
14 #include "base/location.h" | 14 #include "base/location.h" |
15 #include "base/macros.h" | 15 #include "base/macros.h" |
16 #include "base/memory/ptr_util.h" | 16 #include "base/memory/ptr_util.h" |
17 #include "base/memory/shared_memory.h" | 17 #include "base/memory/shared_memory.h" |
18 #include "base/message_loop/message_loop.h" | 18 #include "base/message_loop/message_loop.h" |
19 #include "base/run_loop.h" | 19 #include "base/run_loop.h" |
20 #include "base/single_thread_task_runner.h" | 20 #include "base/single_thread_task_runner.h" |
21 #include "base/strings/utf_string_conversions.h" | 21 #include "base/strings/utf_string_conversions.h" |
22 #include "base/test/scoped_feature_list.h" | 22 #include "base/test/scoped_feature_list.h" |
23 #include "base/test/simple_test_tick_clock.h" | 23 #include "base/test/simple_test_tick_clock.h" |
24 #include "base/threading/thread_task_runner_handle.h" | 24 #include "base/threading/thread_task_runner_handle.h" |
25 #include "build/build_config.h" | 25 #include "build/build_config.h" |
26 #include "cc/output/begin_frame_args.h" | 26 #include "cc/output/begin_frame_args.h" |
27 #include "cc/output/compositor_frame.h" | 27 #include "cc/output/compositor_frame.h" |
28 #include "cc/output/compositor_frame_metadata.h" | 28 #include "cc/output/compositor_frame_metadata.h" |
29 #include "cc/output/copy_output_request.h" | 29 #include "cc/output/copy_output_request.h" |
| 30 #include "cc/surfaces/local_surface_id_allocator.h" |
30 #include "cc/surfaces/surface.h" | 31 #include "cc/surfaces/surface.h" |
31 #include "cc/surfaces/surface_manager.h" | 32 #include "cc/surfaces/surface_manager.h" |
32 #include "cc/test/begin_frame_args_test.h" | 33 #include "cc/test/begin_frame_args_test.h" |
33 #include "cc/test/fake_external_begin_frame_source.h" | 34 #include "cc/test/fake_external_begin_frame_source.h" |
34 #include "components/viz/display_compositor/gl_helper.h" | 35 #include "components/viz/display_compositor/gl_helper.h" |
35 #include "components/viz/display_compositor/host_shared_bitmap_manager.h" | 36 #include "components/viz/display_compositor/host_shared_bitmap_manager.h" |
36 #include "content/browser/browser_thread_impl.h" | 37 #include "content/browser/browser_thread_impl.h" |
37 #include "content/browser/compositor/test/no_transport_image_transport_factory.h
" | 38 #include "content/browser/compositor/test/no_transport_image_transport_factory.h
" |
38 #include "content/browser/frame_host/render_widget_host_view_guest.h" | 39 #include "content/browser/frame_host/render_widget_host_view_guest.h" |
39 #include "content/browser/gpu/compositor_util.h" | 40 #include "content/browser/gpu/compositor_util.h" |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 void InstallDelegatedFrameHostClient( | 124 void InstallDelegatedFrameHostClient( |
124 RenderWidgetHostViewAura* render_widget_host_view, | 125 RenderWidgetHostViewAura* render_widget_host_view, |
125 std::unique_ptr<DelegatedFrameHostClient> delegated_frame_host_client); | 126 std::unique_ptr<DelegatedFrameHostClient> delegated_frame_host_client); |
126 | 127 |
127 namespace { | 128 namespace { |
128 | 129 |
129 const cc::LocalSurfaceId kArbitraryLocalSurfaceId( | 130 const cc::LocalSurfaceId kArbitraryLocalSurfaceId( |
130 1, | 131 1, |
131 base::UnguessableToken::Deserialize(2, 3)); | 132 base::UnguessableToken::Deserialize(2, 3)); |
132 | 133 |
133 cc::LocalSurfaceId CreateLocalSurfaceId() { | |
134 return cc::LocalSurfaceId(1, base::UnguessableToken::Create()); | |
135 } | |
136 | |
137 class TestOverscrollDelegate : public OverscrollControllerDelegate { | 134 class TestOverscrollDelegate : public OverscrollControllerDelegate { |
138 public: | 135 public: |
139 explicit TestOverscrollDelegate(RenderWidgetHostView* view) | 136 explicit TestOverscrollDelegate(RenderWidgetHostView* view) |
140 : view_(view), | 137 : view_(view), |
141 current_mode_(OVERSCROLL_NONE), | 138 current_mode_(OVERSCROLL_NONE), |
142 completed_mode_(OVERSCROLL_NONE), | 139 completed_mode_(OVERSCROLL_NONE), |
143 delta_x_(0.f), | 140 delta_x_(0.f), |
144 delta_y_(0.f) {} | 141 delta_y_(0.f) {} |
145 | 142 |
146 ~TestOverscrollDelegate() override {} | 143 ~TestOverscrollDelegate() override {} |
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
818 RenderWidgetHostViewAura* parent_view_; | 815 RenderWidgetHostViewAura* parent_view_; |
819 | 816 |
820 // Tests should set these to nullptr if they've already triggered their | 817 // Tests should set these to nullptr if they've already triggered their |
821 // destruction. | 818 // destruction. |
822 MockRenderWidgetHostImpl* widget_host_; | 819 MockRenderWidgetHostImpl* widget_host_; |
823 FakeRenderWidgetHostViewAura* view_; | 820 FakeRenderWidgetHostViewAura* view_; |
824 | 821 |
825 IPC::TestSink* sink_; | 822 IPC::TestSink* sink_; |
826 base::test::ScopedFeatureList feature_list_; | 823 base::test::ScopedFeatureList feature_list_; |
827 | 824 |
| 825 cc::LocalSurfaceIdAllocator local_surface_id_allocator_; |
| 826 |
828 private: | 827 private: |
829 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraTest); | 828 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraTest); |
830 }; | 829 }; |
831 | 830 |
832 class RenderWidgetHostViewAuraRafAlignedTouchEnabledTest | 831 class RenderWidgetHostViewAuraRafAlignedTouchEnabledTest |
833 : public RenderWidgetHostViewAuraTest { | 832 : public RenderWidgetHostViewAuraTest { |
834 public: | 833 public: |
835 void SetUp() override { | 834 void SetUp() override { |
836 EnableRafAlignedTouchInput(); | 835 EnableRafAlignedTouchInput(); |
837 RenderWidgetHostViewAuraTest::SetUp(); | 836 RenderWidgetHostViewAuraTest::SetUp(); |
(...skipping 1265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2103 resource.id = 1; | 2102 resource.id = 1; |
2104 frame.resource_list.push_back(resource); | 2103 frame.resource_list.push_back(resource); |
2105 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); | 2104 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
2106 EXPECT_EQ(0u, sink_->message_count()); | 2105 EXPECT_EQ(0u, sink_->message_count()); |
2107 | 2106 |
2108 // Signal that a new RendererCompositorFrameSink was created by the renderer. | 2107 // Signal that a new RendererCompositorFrameSink was created by the renderer. |
2109 view_->CreateNewRendererCompositorFrameSink(); | 2108 view_->CreateNewRendererCompositorFrameSink(); |
2110 | 2109 |
2111 // Submit another frame. The resources for the previous frame belong to the | 2110 // Submit another frame. The resources for the previous frame belong to the |
2112 // old RendererCompositorFrameSink and should not be returned. | 2111 // old RendererCompositorFrameSink and should not be returned. |
2113 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), | 2112 view_->SubmitCompositorFrame(local_surface_id_allocator_.GenerateId(), |
2114 MakeDelegatedFrame(1.f, view_size, view_rect)); | 2113 MakeDelegatedFrame(1.f, view_size, view_rect)); |
2115 EXPECT_EQ(0u, sink_->message_count()); | 2114 EXPECT_EQ(0u, sink_->message_count()); |
2116 | 2115 |
2117 // Report that the surface is drawn to trigger an ACK. | 2116 // Report that the surface is drawn to trigger an ACK. |
2118 view_->renderer_compositor_frame_sink_->Reset(); | 2117 view_->renderer_compositor_frame_sink_->Reset(); |
2119 cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id()); | 2118 cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id()); |
2120 EXPECT_TRUE(surface); | 2119 EXPECT_TRUE(surface); |
2121 surface->RunDrawCallback(); | 2120 surface->RunDrawCallback(); |
2122 view_->renderer_compositor_frame_sink_->Flush(); | 2121 view_->renderer_compositor_frame_sink_->Flush(); |
2123 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); | 2122 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2249 root->layer()->Remove(mirror->root()); | 2248 root->layer()->Remove(mirror->root()); |
2250 } | 2249 } |
2251 } | 2250 } |
2252 | 2251 |
2253 // If the view size is larger than the compositor frame then extra layers | 2252 // If the view size is larger than the compositor frame then extra layers |
2254 // should be created to fill the gap. | 2253 // should be created to fill the gap. |
2255 TEST_F(RenderWidgetHostViewAuraTest, DelegatedFrameGutter) { | 2254 TEST_F(RenderWidgetHostViewAuraTest, DelegatedFrameGutter) { |
2256 gfx::Size large_size(100, 100); | 2255 gfx::Size large_size(100, 100); |
2257 gfx::Size small_size(40, 45); | 2256 gfx::Size small_size(40, 45); |
2258 gfx::Size medium_size(40, 95); | 2257 gfx::Size medium_size(40, 95); |
| 2258 cc::LocalSurfaceId small_id = local_surface_id_allocator_.GenerateId(); |
| 2259 cc::LocalSurfaceId medium_id = local_surface_id_allocator_.GenerateId(); |
2259 | 2260 |
2260 // Prevent the DelegatedFrameHost from skipping frames. | 2261 // Prevent the DelegatedFrameHost from skipping frames. |
2261 // XXX | 2262 // XXX |
2262 view_->DisableResizeLock(); | 2263 view_->DisableResizeLock(); |
2263 | 2264 |
2264 view_->InitAsChild(nullptr); | 2265 view_->InitAsChild(nullptr); |
2265 aura::client::ParentWindowWithContext( | 2266 aura::client::ParentWindowWithContext( |
2266 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), | 2267 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), |
2267 gfx::Rect()); | 2268 gfx::Rect()); |
2268 view_->SetSize(large_size); | 2269 view_->SetSize(large_size); |
2269 view_->Show(); | 2270 view_->Show(); |
2270 cc::CompositorFrame frame = | 2271 cc::CompositorFrame frame = |
2271 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size)); | 2272 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size)); |
2272 frame.metadata.root_background_color = SK_ColorRED; | 2273 frame.metadata.root_background_color = SK_ColorRED; |
2273 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); | 2274 view_->SubmitCompositorFrame(small_id, std::move(frame)); |
2274 | 2275 |
2275 ui::Layer* parent_layer = view_->GetNativeView()->layer(); | 2276 ui::Layer* parent_layer = view_->GetNativeView()->layer(); |
2276 | 2277 |
2277 ASSERT_EQ(2u, parent_layer->children().size()); | 2278 ASSERT_EQ(2u, parent_layer->children().size()); |
2278 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds()); | 2279 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds()); |
2279 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color()); | 2280 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color()); |
2280 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds()); | 2281 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds()); |
2281 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color()); | 2282 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color()); |
2282 | 2283 |
2283 delegates_.back()->set_is_fullscreen(true); | 2284 delegates_.back()->set_is_fullscreen(true); |
2284 view_->SetSize(medium_size); | 2285 view_->SetSize(medium_size); |
2285 | 2286 |
2286 // Right gutter is unnecessary. | 2287 // Right gutter is unnecessary. |
2287 ASSERT_EQ(1u, parent_layer->children().size()); | 2288 ASSERT_EQ(1u, parent_layer->children().size()); |
2288 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds()); | 2289 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds()); |
2289 | 2290 |
2290 // RWH is fullscreen, so gutters should be black. | 2291 // RWH is fullscreen, so gutters should be black. |
2291 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color()); | 2292 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color()); |
2292 | 2293 |
2293 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size)); | 2294 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size)); |
2294 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); | 2295 view_->SubmitCompositorFrame(medium_id, std::move(frame)); |
2295 EXPECT_EQ(0u, parent_layer->children().size()); | 2296 EXPECT_EQ(0u, parent_layer->children().size()); |
2296 | 2297 |
2297 view_->SetSize(large_size); | 2298 view_->SetSize(large_size); |
2298 ASSERT_EQ(2u, parent_layer->children().size()); | 2299 ASSERT_EQ(2u, parent_layer->children().size()); |
2299 | 2300 |
2300 // This should evict the frame and remove the gutter layers. | 2301 // This should evict the frame and remove the gutter layers. |
2301 view_->Hide(); | 2302 view_->Hide(); |
2302 view_->SetSize(small_size); | 2303 view_->SetSize(small_size); |
2303 ASSERT_EQ(0u, parent_layer->children().size()); | 2304 ASSERT_EQ(0u, parent_layer->children().size()); |
2304 } | 2305 } |
2305 | 2306 |
2306 TEST_F(RenderWidgetHostViewAuraTest, Resize) { | 2307 TEST_F(RenderWidgetHostViewAuraTest, Resize) { |
2307 gfx::Size size1(100, 100); | 2308 gfx::Size size1(100, 100); |
2308 gfx::Size size2(200, 200); | 2309 gfx::Size size2(200, 200); |
2309 gfx::Size size3(300, 300); | 2310 gfx::Size size3(300, 300); |
| 2311 cc::LocalSurfaceId id1 = local_surface_id_allocator_.GenerateId(); |
| 2312 cc::LocalSurfaceId id2 = local_surface_id_allocator_.GenerateId(); |
| 2313 cc::LocalSurfaceId id3 = local_surface_id_allocator_.GenerateId(); |
2310 | 2314 |
2311 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow(); | 2315 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow(); |
2312 view_->InitAsChild(nullptr); | 2316 view_->InitAsChild(nullptr); |
2313 aura::client::ParentWindowWithContext( | 2317 aura::client::ParentWindowWithContext( |
2314 view_->GetNativeView(), root_window, gfx::Rect(size1)); | 2318 view_->GetNativeView(), root_window, gfx::Rect(size1)); |
2315 view_->Show(); | 2319 view_->Show(); |
2316 view_->SetSize(size1); | 2320 view_->SetSize(size1); |
2317 view_->SubmitCompositorFrame( | 2321 view_->SubmitCompositorFrame( |
2318 kArbitraryLocalSurfaceId, | 2322 id1, MakeDelegatedFrame(1.f, size1, gfx::Rect(size1))); |
2319 MakeDelegatedFrame(1.f, size1, gfx::Rect(size1))); | |
2320 ui::DrawWaiterForTest::WaitForCommit( | 2323 ui::DrawWaiterForTest::WaitForCommit( |
2321 root_window->GetHost()->compositor()); | 2324 root_window->GetHost()->compositor()); |
2322 ViewHostMsg_UpdateRect_Params update_params; | 2325 ViewHostMsg_UpdateRect_Params update_params; |
2323 update_params.view_size = size1; | 2326 update_params.view_size = size1; |
2324 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK; | 2327 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK; |
2325 widget_host_->OnMessageReceived( | 2328 widget_host_->OnMessageReceived( |
2326 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); | 2329 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); |
2327 sink_->ClearMessages(); | 2330 sink_->ClearMessages(); |
2328 // Resize logic is idle (no pending resize, no pending commit). | 2331 // Resize logic is idle (no pending resize, no pending commit). |
2329 EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString()); | 2332 EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString()); |
(...skipping 18 matching lines...) Expand all Loading... |
2348 // Resize renderer again, before receiving a frame. Should not produce a | 2351 // Resize renderer again, before receiving a frame. Should not produce a |
2349 // Resize message. | 2352 // Resize message. |
2350 view_->SetSize(size3); | 2353 view_->SetSize(size3); |
2351 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 2354 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
2352 EXPECT_EQ(0u, sink_->message_count()); | 2355 EXPECT_EQ(0u, sink_->message_count()); |
2353 | 2356 |
2354 // Receive a frame of the new size, should be skipped and not produce a Resize | 2357 // Receive a frame of the new size, should be skipped and not produce a Resize |
2355 // message. | 2358 // message. |
2356 view_->renderer_compositor_frame_sink_->Reset(); | 2359 view_->renderer_compositor_frame_sink_->Reset(); |
2357 view_->SubmitCompositorFrame( | 2360 view_->SubmitCompositorFrame( |
2358 kArbitraryLocalSurfaceId, | 2361 id3, MakeDelegatedFrame(1.f, size3, gfx::Rect(size3))); |
2359 MakeDelegatedFrame(1.f, size3, gfx::Rect(size3))); | |
2360 view_->renderer_compositor_frame_sink_->Flush(); | 2362 view_->renderer_compositor_frame_sink_->Flush(); |
2361 // Expect the frame ack; | 2363 // Expect the frame ack; |
2362 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); | 2364 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); |
2363 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 2365 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
2364 | 2366 |
2365 // Receive a frame of the correct size, should not be skipped and, and should | 2367 // Receive a frame of the correct size, should not be skipped and, and should |
2366 // produce a Resize message after the commit. | 2368 // produce a Resize message after the commit. |
2367 view_->renderer_compositor_frame_sink_->Reset(); | 2369 view_->renderer_compositor_frame_sink_->Reset(); |
2368 view_->SubmitCompositorFrame( | 2370 view_->SubmitCompositorFrame( |
2369 kArbitraryLocalSurfaceId, | 2371 id2, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
2370 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); | |
2371 view_->renderer_compositor_frame_sink_->Flush(); | 2372 view_->renderer_compositor_frame_sink_->Flush(); |
2372 cc::SurfaceId surface_id = view_->surface_id(); | 2373 cc::SurfaceId surface_id = view_->surface_id(); |
2373 if (!surface_id.is_valid()) { | 2374 if (!surface_id.is_valid()) { |
2374 // No frame ack yet. | 2375 // No frame ack yet. |
2375 EXPECT_FALSE(view_->renderer_compositor_frame_sink_->did_receive_ack()); | 2376 EXPECT_FALSE(view_->renderer_compositor_frame_sink_->did_receive_ack()); |
2376 } else { | 2377 } else { |
2377 // Frame isn't desired size, so early ack. | 2378 // Frame isn't desired size, so early ack. |
2378 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); | 2379 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); |
2379 } | 2380 } |
2380 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 2381 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2417 update_params.view_size = size3; | 2418 update_params.view_size = size3; |
2418 widget_host_->OnMessageReceived( | 2419 widget_host_->OnMessageReceived( |
2419 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); | 2420 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); |
2420 sink_->ClearMessages(); | 2421 sink_->ClearMessages(); |
2421 } | 2422 } |
2422 | 2423 |
2423 // Skipped frames should not drop their damage. | 2424 // Skipped frames should not drop their damage. |
2424 TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { | 2425 TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { |
2425 gfx::Rect view_rect(100, 100); | 2426 gfx::Rect view_rect(100, 100); |
2426 gfx::Size frame_size = view_rect.size(); | 2427 gfx::Size frame_size = view_rect.size(); |
| 2428 cc::LocalSurfaceId local_surface_id = kArbitraryLocalSurfaceId; |
2427 | 2429 |
2428 view_->InitAsChild(nullptr); | 2430 view_->InitAsChild(nullptr); |
2429 aura::client::ParentWindowWithContext( | 2431 aura::client::ParentWindowWithContext( |
2430 view_->GetNativeView(), | 2432 view_->GetNativeView(), |
2431 parent_view_->GetNativeView()->GetRootWindow(), | 2433 parent_view_->GetNativeView()->GetRootWindow(), |
2432 gfx::Rect()); | 2434 gfx::Rect()); |
2433 view_->SetSize(view_rect.size()); | 2435 view_->SetSize(view_rect.size()); |
2434 | 2436 |
2435 MockWindowObserver observer; | 2437 MockWindowObserver observer; |
2436 view_->window_->AddObserver(&observer); | 2438 view_->window_->AddObserver(&observer); |
2437 | 2439 |
2438 // A full frame of damage. | 2440 // A full frame of damage. |
2439 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2441 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2440 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, | 2442 view_->SubmitCompositorFrame(local_surface_id, |
2441 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2443 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2442 testing::Mock::VerifyAndClearExpectations(&observer); | 2444 testing::Mock::VerifyAndClearExpectations(&observer); |
2443 view_->RunOnCompositingDidCommit(); | 2445 view_->RunOnCompositingDidCommit(); |
2444 | 2446 |
2445 // A partial damage frame. | 2447 // A partial damage frame. |
2446 gfx::Rect partial_view_rect(30, 30, 20, 20); | 2448 gfx::Rect partial_view_rect(30, 30, 20, 20); |
2447 EXPECT_CALL(observer, | 2449 EXPECT_CALL(observer, |
2448 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); | 2450 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); |
2449 view_->SubmitCompositorFrame( | 2451 view_->SubmitCompositorFrame( |
2450 kArbitraryLocalSurfaceId, | 2452 local_surface_id, MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); |
2451 MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); | |
2452 testing::Mock::VerifyAndClearExpectations(&observer); | 2453 testing::Mock::VerifyAndClearExpectations(&observer); |
2453 view_->RunOnCompositingDidCommit(); | 2454 view_->RunOnCompositingDidCommit(); |
2454 | 2455 |
2455 EXPECT_FALSE(view_->resize_locked()); | 2456 EXPECT_FALSE(view_->resize_locked()); |
2456 EXPECT_FALSE(view_->compositor_locked()); | 2457 EXPECT_FALSE(view_->compositor_locked()); |
2457 | 2458 |
2458 // Lock the compositor. Now we should drop frames. | 2459 // Lock the compositor. Now we should drop frames. |
2459 view_rect = gfx::Rect(150, 150); | 2460 view_rect = gfx::Rect(150, 150); |
2460 view_->SetSize(view_rect.size()); | 2461 view_->SetSize(view_rect.size()); |
2461 EXPECT_TRUE(view_->resize_locked()); | 2462 EXPECT_TRUE(view_->resize_locked()); |
2462 EXPECT_TRUE(view_->compositor_locked()); | 2463 EXPECT_TRUE(view_->compositor_locked()); |
2463 | 2464 |
2464 // This frame is dropped. | 2465 // This frame is dropped. |
2465 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40); | 2466 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40); |
2466 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); | 2467 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
2467 view_->SubmitCompositorFrame( | 2468 view_->SubmitCompositorFrame( |
2468 kArbitraryLocalSurfaceId, | 2469 local_surface_id, |
2469 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); | 2470 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); |
2470 testing::Mock::VerifyAndClearExpectations(&observer); | 2471 testing::Mock::VerifyAndClearExpectations(&observer); |
2471 view_->RunOnCompositingDidCommit(); | 2472 view_->RunOnCompositingDidCommit(); |
2472 | 2473 |
2473 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20); | 2474 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20); |
2474 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); | 2475 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
2475 view_->SubmitCompositorFrame( | 2476 view_->SubmitCompositorFrame( |
2476 kArbitraryLocalSurfaceId, | 2477 local_surface_id, |
2477 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); | 2478 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); |
2478 testing::Mock::VerifyAndClearExpectations(&observer); | 2479 testing::Mock::VerifyAndClearExpectations(&observer); |
2479 view_->RunOnCompositingDidCommit(); | 2480 view_->RunOnCompositingDidCommit(); |
2480 | 2481 |
2481 EXPECT_TRUE(view_->resize_locked()); | 2482 EXPECT_TRUE(view_->resize_locked()); |
2482 EXPECT_TRUE(view_->compositor_locked()); | 2483 EXPECT_TRUE(view_->compositor_locked()); |
2483 | 2484 |
2484 // Unlock the compositor. This frame should damage everything. | 2485 // Unlock the compositor. This frame should damage everything. |
2485 frame_size = view_rect.size(); | 2486 frame_size = view_rect.size(); |
| 2487 local_surface_id = local_surface_id_allocator_.GenerateId(); |
2486 | 2488 |
2487 gfx::Rect new_damage_rect(5, 6, 10, 10); | 2489 gfx::Rect new_damage_rect(5, 6, 10, 10); |
2488 EXPECT_CALL(observer, | 2490 EXPECT_CALL(observer, |
2489 OnDelegatedFrameDamage(view_->window_, view_rect)); | 2491 OnDelegatedFrameDamage(view_->window_, view_rect)); |
2490 view_->SubmitCompositorFrame( | 2492 view_->SubmitCompositorFrame( |
2491 kArbitraryLocalSurfaceId, | 2493 local_surface_id, MakeDelegatedFrame(1.f, frame_size, new_damage_rect)); |
2492 MakeDelegatedFrame(1.f, frame_size, new_damage_rect)); | |
2493 // The swap unlocks the compositor. | 2494 // The swap unlocks the compositor. |
2494 EXPECT_TRUE(view_->resize_locked()); | 2495 EXPECT_TRUE(view_->resize_locked()); |
2495 EXPECT_FALSE(view_->compositor_locked()); | 2496 EXPECT_FALSE(view_->compositor_locked()); |
2496 testing::Mock::VerifyAndClearExpectations(&observer); | 2497 testing::Mock::VerifyAndClearExpectations(&observer); |
2497 // The UI commit unlocks for further resize. | 2498 // The UI commit unlocks for further resize. |
2498 view_->RunOnCompositingDidCommit(); | 2499 view_->RunOnCompositingDidCommit(); |
2499 EXPECT_FALSE(view_->resize_locked()); | 2500 EXPECT_FALSE(view_->resize_locked()); |
2500 EXPECT_FALSE(view_->compositor_locked()); | 2501 EXPECT_FALSE(view_->compositor_locked()); |
2501 | 2502 |
2502 // A partial damage frame, this should not be dropped. | 2503 // A partial damage frame, this should not be dropped. |
2503 EXPECT_CALL(observer, | 2504 EXPECT_CALL(observer, |
2504 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); | 2505 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); |
2505 view_->SubmitCompositorFrame( | 2506 view_->SubmitCompositorFrame( |
2506 kArbitraryLocalSurfaceId, | 2507 local_surface_id, MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); |
2507 MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); | |
2508 testing::Mock::VerifyAndClearExpectations(&observer); | 2508 testing::Mock::VerifyAndClearExpectations(&observer); |
2509 view_->RunOnCompositingDidCommit(); | 2509 view_->RunOnCompositingDidCommit(); |
2510 EXPECT_FALSE(view_->resize_locked()); | 2510 EXPECT_FALSE(view_->resize_locked()); |
2511 EXPECT_FALSE(view_->compositor_locked()); | 2511 EXPECT_FALSE(view_->compositor_locked()); |
2512 | 2512 |
2513 // Resize to something empty. This doesn't lock anything since it's not | 2513 // Resize to something empty. This doesn't lock anything since it's not |
2514 // visible anymore anyways. | 2514 // visible anymore anyways. |
2515 view_rect = gfx::Rect(100, 0); | 2515 view_rect = gfx::Rect(100, 0); |
2516 view_->SetSize(view_rect.size()); | 2516 view_->SetSize(view_rect.size()); |
2517 EXPECT_FALSE(view_->resize_locked()); | 2517 EXPECT_FALSE(view_->resize_locked()); |
2518 EXPECT_FALSE(view_->compositor_locked()); | 2518 EXPECT_FALSE(view_->compositor_locked()); |
2519 | 2519 |
2520 // We're never expecting empty frames, resize to something non-empty. | 2520 // We're never expecting empty frames, resize to something non-empty. |
2521 view_rect = gfx::Rect(100, 100); | 2521 view_rect = gfx::Rect(100, 100); |
| 2522 frame_size = view_rect.size(); |
| 2523 local_surface_id = local_surface_id_allocator_.GenerateId(); |
2522 view_->SetSize(view_rect.size()); | 2524 view_->SetSize(view_rect.size()); |
2523 EXPECT_TRUE(view_->resize_locked()); | 2525 EXPECT_TRUE(view_->resize_locked()); |
2524 EXPECT_TRUE(view_->compositor_locked()); | 2526 EXPECT_TRUE(view_->compositor_locked()); |
2525 | 2527 |
2526 // This frame should not be dropped. | 2528 // This frame should not be dropped. |
2527 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2529 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2528 view_->SubmitCompositorFrame( | 2530 view_->SubmitCompositorFrame(local_surface_id, |
2529 kArbitraryLocalSurfaceId, | 2531 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2530 MakeDelegatedFrame(1.f, view_rect.size(), view_rect)); | |
2531 testing::Mock::VerifyAndClearExpectations(&observer); | 2532 testing::Mock::VerifyAndClearExpectations(&observer); |
2532 EXPECT_TRUE(view_->resize_locked()); | 2533 EXPECT_TRUE(view_->resize_locked()); |
2533 EXPECT_FALSE(view_->compositor_locked()); | 2534 EXPECT_FALSE(view_->compositor_locked()); |
2534 view_->RunOnCompositingDidCommit(); | 2535 view_->RunOnCompositingDidCommit(); |
2535 EXPECT_FALSE(view_->resize_locked()); | 2536 EXPECT_FALSE(view_->resize_locked()); |
2536 EXPECT_FALSE(view_->compositor_locked()); | 2537 EXPECT_FALSE(view_->compositor_locked()); |
2537 | 2538 |
2538 view_->window_->RemoveObserver(&observer); | 2539 view_->window_->RemoveObserver(&observer); |
2539 } | 2540 } |
2540 | 2541 |
2541 // If resize races with a renderer frame, we should lock for the right size. | 2542 // If resize races with a renderer frame, we should lock for the right size. |
2542 TEST_F(RenderWidgetHostViewAuraTest, ResizeAfterReceivingFrame) { | 2543 TEST_F(RenderWidgetHostViewAuraTest, ResizeAfterReceivingFrame) { |
2543 gfx::Rect view_rect(100, 100); | 2544 gfx::Rect view_rect(100, 100); |
2544 gfx::Size frame_size = view_rect.size(); | 2545 gfx::Size frame_size = view_rect.size(); |
| 2546 cc::LocalSurfaceId local_surface_id = kArbitraryLocalSurfaceId; |
2545 | 2547 |
2546 view_->InitAsChild(nullptr); | 2548 view_->InitAsChild(nullptr); |
2547 aura::client::ParentWindowWithContext( | 2549 aura::client::ParentWindowWithContext( |
2548 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), | 2550 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), |
2549 gfx::Rect()); | 2551 gfx::Rect()); |
2550 view_->SetSize(view_rect.size()); | 2552 view_->SetSize(view_rect.size()); |
2551 | 2553 |
2552 MockWindowObserver observer; | 2554 MockWindowObserver observer; |
2553 view_->window_->AddObserver(&observer); | 2555 view_->window_->AddObserver(&observer); |
2554 | 2556 |
2555 // A frame of initial size. | 2557 // A frame of initial size. |
2556 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2558 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2557 view_->SubmitCompositorFrame( | 2559 view_->SubmitCompositorFrame( |
2558 kArbitraryLocalSurfaceId, | 2560 local_surface_id, |
2559 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); | 2561 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
2560 testing::Mock::VerifyAndClearExpectations(&observer); | 2562 testing::Mock::VerifyAndClearExpectations(&observer); |
2561 view_->RunOnCompositingDidCommit(); | 2563 view_->RunOnCompositingDidCommit(); |
2562 | 2564 |
2563 // A frame of initial size arrives, but we don't commit in the UI yet. | 2565 // A frame of initial size arrives, but we don't commit in the UI yet. |
2564 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _)); | 2566 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _)); |
2565 view_->SubmitCompositorFrame( | 2567 view_->SubmitCompositorFrame( |
2566 kArbitraryLocalSurfaceId, | 2568 local_surface_id, |
2567 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); | 2569 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
2568 testing::Mock::VerifyAndClearExpectations(&observer); | 2570 testing::Mock::VerifyAndClearExpectations(&observer); |
2569 | 2571 |
2570 EXPECT_FALSE(view_->resize_locked()); | 2572 EXPECT_FALSE(view_->resize_locked()); |
2571 EXPECT_FALSE(view_->compositor_locked()); | 2573 EXPECT_FALSE(view_->compositor_locked()); |
2572 | 2574 |
2573 // Resize, and lock the compositor. Now we should drop frames of the old size. | 2575 // Resize, and lock the compositor. Now we should drop frames of the old size. |
2574 view_rect = gfx::Rect(150, 150); | 2576 view_rect = gfx::Rect(150, 150); |
2575 view_->SetSize(view_rect.size()); | 2577 view_->SetSize(view_rect.size()); |
2576 EXPECT_TRUE(view_->resize_locked()); | 2578 EXPECT_TRUE(view_->resize_locked()); |
2577 EXPECT_TRUE(view_->compositor_locked()); | 2579 EXPECT_TRUE(view_->compositor_locked()); |
2578 | 2580 |
2579 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); | 2581 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
2580 view_->SubmitCompositorFrame( | 2582 view_->SubmitCompositorFrame( |
2581 kArbitraryLocalSurfaceId, | 2583 local_surface_id, |
2582 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); | 2584 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
2583 testing::Mock::VerifyAndClearExpectations(&observer); | 2585 testing::Mock::VerifyAndClearExpectations(&observer); |
2584 | 2586 |
2585 // If the CompositorLock times out in the meantime, a commit would happen. | 2587 // If the CompositorLock times out in the meantime, a commit would happen. |
2586 // Verify that if a commit occurs, the lock remains and we reject frames | 2588 // Verify that if a commit occurs, the lock remains and we reject frames |
2587 // of the wrong size still. | 2589 // of the wrong size still. |
2588 view_->RunOnCompositingDidCommit(); | 2590 view_->RunOnCompositingDidCommit(); |
2589 | 2591 |
2590 EXPECT_TRUE(view_->resize_locked()); | 2592 EXPECT_TRUE(view_->resize_locked()); |
2591 // In this case we lied about it and the CompositorLock is still active. | 2593 // In this case we lied about it and the CompositorLock is still active. |
2592 EXPECT_TRUE(view_->compositor_locked()); | 2594 EXPECT_TRUE(view_->compositor_locked()); |
2593 | 2595 |
2594 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); | 2596 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
2595 view_->SubmitCompositorFrame( | 2597 view_->SubmitCompositorFrame( |
2596 kArbitraryLocalSurfaceId, | 2598 local_surface_id, |
2597 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); | 2599 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
2598 testing::Mock::VerifyAndClearExpectations(&observer); | 2600 testing::Mock::VerifyAndClearExpectations(&observer); |
2599 | 2601 |
2600 // A frame arrives of the new size, which will be accepted. | 2602 // A frame arrives of the new size, which will be accepted. |
2601 frame_size = view_rect.size(); | 2603 frame_size = view_rect.size(); |
| 2604 local_surface_id = local_surface_id_allocator_.GenerateId(); |
2602 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _)); | 2605 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _)); |
2603 view_->SubmitCompositorFrame( | 2606 view_->SubmitCompositorFrame( |
2604 kArbitraryLocalSurfaceId, | 2607 local_surface_id, |
2605 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); | 2608 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
2606 // Receiving the frame unlocks the compositor so it can commit. | 2609 // Receiving the frame unlocks the compositor so it can commit. |
2607 EXPECT_TRUE(view_->resize_locked()); | 2610 EXPECT_TRUE(view_->resize_locked()); |
2608 EXPECT_FALSE(view_->compositor_locked()); | 2611 EXPECT_FALSE(view_->compositor_locked()); |
2609 testing::Mock::VerifyAndClearExpectations(&observer); | 2612 testing::Mock::VerifyAndClearExpectations(&observer); |
2610 | 2613 |
2611 // When the frame of the correct size is committed, the CompositorResizeLock | 2614 // When the frame of the correct size is committed, the CompositorResizeLock |
2612 // is released. | 2615 // is released. |
2613 view_->RunOnCompositingDidCommit(); | 2616 view_->RunOnCompositingDidCommit(); |
2614 EXPECT_FALSE(view_->resize_locked()); | 2617 EXPECT_FALSE(view_->resize_locked()); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2685 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, | 2688 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, |
2686 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2689 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2687 testing::Mock::VerifyAndClearExpectations(&observer); | 2690 testing::Mock::VerifyAndClearExpectations(&observer); |
2688 view_->RunOnCompositingDidCommit(); | 2691 view_->RunOnCompositingDidCommit(); |
2689 | 2692 |
2690 // Signal that a new RendererCompositorFrameSink was created. | 2693 // Signal that a new RendererCompositorFrameSink was created. |
2691 view_->CreateNewRendererCompositorFrameSink(); | 2694 view_->CreateNewRendererCompositorFrameSink(); |
2692 | 2695 |
2693 // Submit a frame from the new RendererCompositorFrameSink. | 2696 // Submit a frame from the new RendererCompositorFrameSink. |
2694 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2697 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2695 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), | 2698 view_->SubmitCompositorFrame(local_surface_id_allocator_.GenerateId(), |
2696 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2699 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2697 testing::Mock::VerifyAndClearExpectations(&observer); | 2700 testing::Mock::VerifyAndClearExpectations(&observer); |
2698 view_->RunOnCompositingDidCommit(); | 2701 view_->RunOnCompositingDidCommit(); |
2699 | 2702 |
2700 // Signal that a new RendererCompositorFrameSink was created. | 2703 // Signal that a new RendererCompositorFrameSink was created. |
2701 view_->CreateNewRendererCompositorFrameSink(); | 2704 view_->CreateNewRendererCompositorFrameSink(); |
2702 | 2705 |
2703 // Submit a frame from the new RendererCompositorFrameSink. | 2706 // Submit a frame from the new RendererCompositorFrameSink. |
2704 view_->SubmitCompositorFrame( | 2707 view_->SubmitCompositorFrame( |
2705 CreateLocalSurfaceId(), | 2708 local_surface_id_allocator_.GenerateId(), |
2706 MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); | 2709 MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); |
2707 testing::Mock::VerifyAndClearExpectations(&observer); | 2710 testing::Mock::VerifyAndClearExpectations(&observer); |
2708 view_->RunOnCompositingDidCommit(); | 2711 view_->RunOnCompositingDidCommit(); |
2709 | 2712 |
2710 // Signal that a new RendererCompositorFrameSink was created. | 2713 // Signal that a new RendererCompositorFrameSink was created. |
2711 view_->CreateNewRendererCompositorFrameSink(); | 2714 view_->CreateNewRendererCompositorFrameSink(); |
2712 | 2715 |
2713 // Swap another frame, with a different surface id. | 2716 // Swap another frame, with a different surface id. |
2714 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2717 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2715 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), | 2718 view_->SubmitCompositorFrame(local_surface_id_allocator_.GenerateId(), |
2716 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2719 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2717 testing::Mock::VerifyAndClearExpectations(&observer); | 2720 testing::Mock::VerifyAndClearExpectations(&observer); |
2718 view_->RunOnCompositingDidCommit(); | 2721 view_->RunOnCompositingDidCommit(); |
2719 | 2722 |
2720 view_->window_->RemoveObserver(&observer); | 2723 view_->window_->RemoveObserver(&observer); |
2721 } | 2724 } |
2722 | 2725 |
2723 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { | 2726 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { |
2724 view_->InitAsChild(nullptr); | 2727 view_->InitAsChild(nullptr); |
2725 | 2728 |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2844 views[0]->Show(); | 2847 views[0]->Show(); |
2845 EXPECT_TRUE(views[0]->released_front_lock_active()); | 2848 EXPECT_TRUE(views[0]->released_front_lock_active()); |
2846 // Make [0] hidden, it should stop waiting. | 2849 // Make [0] hidden, it should stop waiting. |
2847 views[0]->Hide(); | 2850 views[0]->Hide(); |
2848 EXPECT_FALSE(views[0]->released_front_lock_active()); | 2851 EXPECT_FALSE(views[0]->released_front_lock_active()); |
2849 | 2852 |
2850 // Make [1] hidden, resize it. It should drop its frame. | 2853 // Make [1] hidden, resize it. It should drop its frame. |
2851 views[1]->Hide(); | 2854 views[1]->Hide(); |
2852 EXPECT_TRUE(views[1]->HasFrameData()); | 2855 EXPECT_TRUE(views[1]->HasFrameData()); |
2853 gfx::Size size2(200, 200); | 2856 gfx::Size size2(200, 200); |
| 2857 cc::LocalSurfaceId id2 = local_surface_id_allocator_.GenerateId(); |
2854 views[1]->SetSize(size2); | 2858 views[1]->SetSize(size2); |
2855 EXPECT_FALSE(views[1]->HasFrameData()); | 2859 EXPECT_FALSE(views[1]->HasFrameData()); |
2856 // Show it, it should block until we give it a frame. | 2860 // Show it, it should block until we give it a frame. |
2857 views[1]->Show(); | 2861 views[1]->Show(); |
2858 EXPECT_TRUE(views[1]->released_front_lock_active()); | 2862 EXPECT_TRUE(views[1]->released_front_lock_active()); |
2859 views[1]->SubmitCompositorFrame( | 2863 views[1]->SubmitCompositorFrame( |
2860 kArbitraryLocalSurfaceId, | 2864 id2, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
2861 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); | |
2862 EXPECT_FALSE(views[1]->released_front_lock_active()); | 2865 EXPECT_FALSE(views[1]->released_front_lock_active()); |
2863 | 2866 |
2864 for (size_t i = 0; i < renderer_count - 1; ++i) | 2867 for (size_t i = 0; i < renderer_count - 1; ++i) |
2865 views[i]->Hide(); | 2868 views[i]->Hide(); |
2866 | 2869 |
2867 // Allocate enough bitmaps so that two frames (proportionally) would be | 2870 // Allocate enough bitmaps so that two frames (proportionally) would be |
2868 // enough hit the handle limit. | 2871 // enough hit the handle limit. |
2869 int handles_per_frame = 5; | 2872 int handles_per_frame = 5; |
2870 FrameEvictionManager::GetInstance()->set_max_handles(handles_per_frame * 2); | 2873 FrameEvictionManager::GetInstance()->set_max_handles(handles_per_frame * 2); |
2871 | 2874 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2926 parent_view_->GetNativeView()->GetRootWindow(), | 2929 parent_view_->GetNativeView()->GetRootWindow(), |
2927 gfx::Rect()); | 2930 gfx::Rect()); |
2928 views[i]->SetSize(view_rect.size()); | 2931 views[i]->SetSize(view_rect.size()); |
2929 } | 2932 } |
2930 | 2933 |
2931 // Make each renderer visible and swap a frame on it. No eviction should | 2934 // Make each renderer visible and swap a frame on it. No eviction should |
2932 // occur because all frames are visible. | 2935 // occur because all frames are visible. |
2933 for (size_t i = 0; i < renderer_count; ++i) { | 2936 for (size_t i = 0; i < renderer_count; ++i) { |
2934 views[i]->Show(); | 2937 views[i]->Show(); |
2935 views[i]->SubmitCompositorFrame( | 2938 views[i]->SubmitCompositorFrame( |
2936 i ? CreateLocalSurfaceId() : kArbitraryLocalSurfaceId, | 2939 i ? local_surface_id_allocator_.GenerateId() : kArbitraryLocalSurfaceId, |
2937 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2940 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2938 EXPECT_TRUE(views[i]->HasFrameData()); | 2941 EXPECT_TRUE(views[i]->HasFrameData()); |
2939 } | 2942 } |
2940 | 2943 |
2941 // If we hide [0], then [0] should be evicted. | 2944 // If we hide [0], then [0] should be evicted. |
2942 views[0]->Hide(); | 2945 views[0]->Hide(); |
2943 EXPECT_FALSE(views[0]->HasFrameData()); | 2946 EXPECT_FALSE(views[0]->HasFrameData()); |
2944 | 2947 |
2945 // If we lock [0] before hiding it, then [0] should not be evicted. | 2948 // If we lock [0] before hiding it, then [0] should not be evicted. |
2946 views[0]->Show(); | 2949 views[0]->Show(); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3072 cc::BeginFrameObserver* last_observer_ = nullptr; | 3075 cc::BeginFrameObserver* last_observer_ = nullptr; |
3073 }; | 3076 }; |
3074 } // namespace | 3077 } // namespace |
3075 | 3078 |
3076 // Tests that BeginFrameAcks are forwarded correctly from the | 3079 // Tests that BeginFrameAcks are forwarded correctly from the |
3077 // SwapCompositorFrame and OnBeginFrameDidNotSwap IPCs through | 3080 // SwapCompositorFrame and OnBeginFrameDidNotSwap IPCs through |
3078 // DelegatedFrameHost and its CompositorFrameSinkSupport. | 3081 // DelegatedFrameHost and its CompositorFrameSinkSupport. |
3079 TEST_F(RenderWidgetHostViewAuraTest, ForwardsBeginFrameAcks) { | 3082 TEST_F(RenderWidgetHostViewAuraTest, ForwardsBeginFrameAcks) { |
3080 gfx::Rect view_rect(100, 100); | 3083 gfx::Rect view_rect(100, 100); |
3081 gfx::Size frame_size = view_rect.size(); | 3084 gfx::Size frame_size = view_rect.size(); |
| 3085 cc::LocalSurfaceId local_surface_id = kArbitraryLocalSurfaceId; |
3082 | 3086 |
3083 view_->InitAsChild(nullptr); | 3087 view_->InitAsChild(nullptr); |
3084 aura::client::ParentWindowWithContext( | 3088 aura::client::ParentWindowWithContext( |
3085 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), | 3089 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), |
3086 gfx::Rect()); | 3090 gfx::Rect()); |
3087 view_->SetSize(view_rect.size()); | 3091 view_->SetSize(view_rect.size()); |
3088 | 3092 |
3089 // Replace BeginFrameSource so that we can observe acknowledgments. Since the | 3093 // Replace BeginFrameSource so that we can observe acknowledgments. Since the |
3090 // DelegatedFrameHost doesn't directly observe our BeginFrameSource, | 3094 // DelegatedFrameHost doesn't directly observe our BeginFrameSource, |
3091 // |observer_tracker| grabs a pointer to the observer (the | 3095 // |observer_tracker| grabs a pointer to the observer (the |
(...skipping 13 matching lines...) Expand all Loading... |
3105 | 3109 |
3106 { | 3110 { |
3107 cc::BeginFrameArgs args = | 3111 cc::BeginFrameArgs args = |
3108 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u); | 3112 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u); |
3109 source.TestOnBeginFrame(args); | 3113 source.TestOnBeginFrame(args); |
3110 | 3114 |
3111 // Ack from CompositorFrame is forwarded. | 3115 // Ack from CompositorFrame is forwarded. |
3112 cc::BeginFrameAck ack(source_id, 5, 4, true); | 3116 cc::BeginFrameAck ack(source_id, 5, 4, true); |
3113 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); | 3117 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); |
3114 frame.metadata.begin_frame_ack = ack; | 3118 frame.metadata.begin_frame_ack = ack; |
3115 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); | 3119 view_->SubmitCompositorFrame(local_surface_id, std::move(frame)); |
3116 view_->RunOnCompositingDidCommit(); | 3120 view_->RunOnCompositingDidCommit(); |
3117 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 3121 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
3118 } | 3122 } |
3119 | 3123 |
3120 { | 3124 { |
3121 cc::BeginFrameArgs args = | 3125 cc::BeginFrameArgs args = |
3122 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u); | 3126 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u); |
3123 source.TestOnBeginFrame(args); | 3127 source.TestOnBeginFrame(args); |
3124 | 3128 |
3125 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. | 3129 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. |
(...skipping 12 matching lines...) Expand all Loading... |
3138 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u); | 3142 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u); |
3139 source.TestOnBeginFrame(args); | 3143 source.TestOnBeginFrame(args); |
3140 | 3144 |
3141 // Ack from CompositorFrame is forwarded with old | 3145 // Ack from CompositorFrame is forwarded with old |
3142 // latest_confirmed_sequence_number and without damage. | 3146 // latest_confirmed_sequence_number and without damage. |
3143 cc::BeginFrameAck ack(source_id, 7, 7, true); | 3147 cc::BeginFrameAck ack(source_id, 7, 7, true); |
3144 gfx::Rect dropped_damage_rect(10, 20, 30, 40); | 3148 gfx::Rect dropped_damage_rect(10, 20, 30, 40); |
3145 cc::CompositorFrame frame = | 3149 cc::CompositorFrame frame = |
3146 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); | 3150 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); |
3147 frame.metadata.begin_frame_ack = ack; | 3151 frame.metadata.begin_frame_ack = ack; |
3148 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); | 3152 view_->SubmitCompositorFrame(local_surface_id, std::move(frame)); |
3149 view_->RunOnCompositingDidCommit(); | 3153 view_->RunOnCompositingDidCommit(); |
3150 ack.latest_confirmed_sequence_number = 4; | 3154 ack.latest_confirmed_sequence_number = 4; |
3151 ack.has_damage = false; | 3155 ack.has_damage = false; |
3152 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 3156 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
3153 } | 3157 } |
3154 | 3158 |
3155 // Change source_id known to the view. This should reset the | 3159 // Change source_id known to the view. This should reset the |
3156 // latest_confirmed_sequence_number tracked by the view. | 3160 // latest_confirmed_sequence_number tracked by the view. |
3157 source_id = cc::BeginFrameArgs::kManualSourceId; | 3161 source_id = cc::BeginFrameArgs::kManualSourceId; |
3158 | 3162 |
3159 { | 3163 { |
3160 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 3164 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( |
3161 BEGINFRAME_FROM_HERE, source_id, 10u); | 3165 BEGINFRAME_FROM_HERE, source_id, 10u); |
3162 source.TestOnBeginFrame(args); | 3166 source.TestOnBeginFrame(args); |
3163 | 3167 |
3164 // Ack from CompositorFrame is forwarded with invalid | 3168 // Ack from CompositorFrame is forwarded with invalid |
3165 // latest_confirmed_sequence_number and without damage. | 3169 // latest_confirmed_sequence_number and without damage. |
3166 cc::BeginFrameAck ack(source_id, 10, 10, true); | 3170 cc::BeginFrameAck ack(source_id, 10, 10, true); |
3167 gfx::Rect dropped_damage_rect(10, 20, 30, 40); | 3171 gfx::Rect dropped_damage_rect(10, 20, 30, 40); |
3168 cc::CompositorFrame frame = | 3172 cc::CompositorFrame frame = |
3169 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); | 3173 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); |
3170 frame.metadata.begin_frame_ack = ack; | 3174 frame.metadata.begin_frame_ack = ack; |
3171 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); | 3175 view_->SubmitCompositorFrame(local_surface_id, std::move(frame)); |
3172 view_->RunOnCompositingDidCommit(); | 3176 view_->RunOnCompositingDidCommit(); |
3173 ack.latest_confirmed_sequence_number = | 3177 ack.latest_confirmed_sequence_number = |
3174 cc::BeginFrameArgs::kInvalidFrameNumber; | 3178 cc::BeginFrameArgs::kInvalidFrameNumber; |
3175 ack.has_damage = false; | 3179 ack.has_damage = false; |
3176 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 3180 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
3177 } | 3181 } |
3178 | 3182 |
3179 { | 3183 { |
3180 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 3184 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( |
3181 BEGINFRAME_FROM_HERE, source_id, 11u); | 3185 BEGINFRAME_FROM_HERE, source_id, 11u); |
3182 source.TestOnBeginFrame(args); | 3186 source.TestOnBeginFrame(args); |
3183 | 3187 |
3184 // Explicit ack through OnBeginFrameDidNotSwap is forwarded with invalid | 3188 // Explicit ack through OnBeginFrameDidNotSwap is forwarded with invalid |
3185 // latest_confirmed_sequence_number. | 3189 // latest_confirmed_sequence_number. |
3186 cc::BeginFrameAck ack(source_id, 11, 11, false); | 3190 cc::BeginFrameAck ack(source_id, 11, 11, false); |
3187 view_->OnBeginFrameDidNotSwap(ack); | 3191 view_->OnBeginFrameDidNotSwap(ack); |
3188 ack.latest_confirmed_sequence_number = | 3192 ack.latest_confirmed_sequence_number = |
3189 cc::BeginFrameArgs::kInvalidFrameNumber; | 3193 cc::BeginFrameArgs::kInvalidFrameNumber; |
3190 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 3194 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
3191 } | 3195 } |
3192 | 3196 |
3193 // Unlock the compositor again with a new CompositorFrame of correct size. | 3197 // Unlock the compositor again with a new CompositorFrame of correct size. |
3194 frame_size = view_rect.size(); | 3198 frame_size = view_rect.size(); |
| 3199 local_surface_id = local_surface_id_allocator_.GenerateId(); |
3195 | 3200 |
3196 { | 3201 { |
3197 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 3202 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( |
3198 BEGINFRAME_FROM_HERE, source_id, 12u); | 3203 BEGINFRAME_FROM_HERE, source_id, 12u); |
3199 source.TestOnBeginFrame(args); | 3204 source.TestOnBeginFrame(args); |
3200 | 3205 |
3201 // Ack from CompositorFrame is forwarded. | 3206 // Ack from CompositorFrame is forwarded. |
3202 cc::BeginFrameAck ack(source_id, 12, 12, true); | 3207 cc::BeginFrameAck ack(source_id, 12, 12, true); |
3203 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); | 3208 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); |
3204 frame.metadata.begin_frame_ack = ack; | 3209 frame.metadata.begin_frame_ack = ack; |
3205 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); | 3210 view_->SubmitCompositorFrame(local_surface_id, std::move(frame)); |
3206 view_->RunOnCompositingDidCommit(); | 3211 view_->RunOnCompositingDidCommit(); |
3207 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 3212 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
3208 } | 3213 } |
3209 | 3214 |
3210 { | 3215 { |
3211 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 3216 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( |
3212 BEGINFRAME_FROM_HERE, source_id, 13u); | 3217 BEGINFRAME_FROM_HERE, source_id, 13u); |
3213 source.TestOnBeginFrame(args); | 3218 source.TestOnBeginFrame(args); |
3214 | 3219 |
3215 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. | 3220 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. |
(...skipping 2326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5542 // There is no composition in the beginning. | 5547 // There is no composition in the beginning. |
5543 EXPECT_FALSE(has_composition_text()); | 5548 EXPECT_FALSE(has_composition_text()); |
5544 SetHasCompositionTextToTrue(); | 5549 SetHasCompositionTextToTrue(); |
5545 view->ImeCancelComposition(); | 5550 view->ImeCancelComposition(); |
5546 // The composition must have been canceled. | 5551 // The composition must have been canceled. |
5547 EXPECT_FALSE(has_composition_text()); | 5552 EXPECT_FALSE(has_composition_text()); |
5548 } | 5553 } |
5549 } | 5554 } |
5550 | 5555 |
5551 } // namespace content | 5556 } // namespace content |
OLD | NEW |