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