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" | |
31 #include "cc/surfaces/surface.h" | 30 #include "cc/surfaces/surface.h" |
32 #include "cc/surfaces/surface_manager.h" | 31 #include "cc/surfaces/surface_manager.h" |
33 #include "cc/test/begin_frame_args_test.h" | 32 #include "cc/test/begin_frame_args_test.h" |
34 #include "cc/test/fake_external_begin_frame_source.h" | 33 #include "cc/test/fake_external_begin_frame_source.h" |
35 #include "components/viz/display_compositor/gl_helper.h" | 34 #include "components/viz/display_compositor/gl_helper.h" |
36 #include "components/viz/display_compositor/host_shared_bitmap_manager.h" | 35 #include "components/viz/display_compositor/host_shared_bitmap_manager.h" |
37 #include "content/browser/browser_thread_impl.h" | 36 #include "content/browser/browser_thread_impl.h" |
38 #include "content/browser/compositor/test/no_transport_image_transport_factory.h
" | 37 #include "content/browser/compositor/test/no_transport_image_transport_factory.h
" |
39 #include "content/browser/frame_host/render_widget_host_view_guest.h" | 38 #include "content/browser/frame_host/render_widget_host_view_guest.h" |
40 #include "content/browser/gpu/compositor_util.h" | 39 #include "content/browser/gpu/compositor_util.h" |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 void InstallDelegatedFrameHostClient( | 123 void InstallDelegatedFrameHostClient( |
125 RenderWidgetHostViewAura* render_widget_host_view, | 124 RenderWidgetHostViewAura* render_widget_host_view, |
126 std::unique_ptr<DelegatedFrameHostClient> delegated_frame_host_client); | 125 std::unique_ptr<DelegatedFrameHostClient> delegated_frame_host_client); |
127 | 126 |
128 namespace { | 127 namespace { |
129 | 128 |
130 const cc::LocalSurfaceId kArbitraryLocalSurfaceId( | 129 const cc::LocalSurfaceId kArbitraryLocalSurfaceId( |
131 1, | 130 1, |
132 base::UnguessableToken::Deserialize(2, 3)); | 131 base::UnguessableToken::Deserialize(2, 3)); |
133 | 132 |
| 133 cc::LocalSurfaceId CreateLocalSurfaceId() { |
| 134 return cc::LocalSurfaceId(1, base::UnguessableToken::Create()); |
| 135 } |
| 136 |
134 class TestOverscrollDelegate : public OverscrollControllerDelegate { | 137 class TestOverscrollDelegate : public OverscrollControllerDelegate { |
135 public: | 138 public: |
136 explicit TestOverscrollDelegate(RenderWidgetHostView* view) | 139 explicit TestOverscrollDelegate(RenderWidgetHostView* view) |
137 : view_(view), | 140 : view_(view), |
138 current_mode_(OVERSCROLL_NONE), | 141 current_mode_(OVERSCROLL_NONE), |
139 completed_mode_(OVERSCROLL_NONE), | 142 completed_mode_(OVERSCROLL_NONE), |
140 delta_x_(0.f), | 143 delta_x_(0.f), |
141 delta_y_(0.f) {} | 144 delta_y_(0.f) {} |
142 | 145 |
143 ~TestOverscrollDelegate() override {} | 146 ~TestOverscrollDelegate() override {} |
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 RenderWidgetHostViewAura* parent_view_; | 828 RenderWidgetHostViewAura* parent_view_; |
826 | 829 |
827 // Tests should set these to nullptr if they've already triggered their | 830 // Tests should set these to nullptr if they've already triggered their |
828 // destruction. | 831 // destruction. |
829 MockRenderWidgetHostImpl* widget_host_; | 832 MockRenderWidgetHostImpl* widget_host_; |
830 FakeRenderWidgetHostViewAura* view_; | 833 FakeRenderWidgetHostViewAura* view_; |
831 | 834 |
832 IPC::TestSink* sink_; | 835 IPC::TestSink* sink_; |
833 base::test::ScopedFeatureList feature_list_; | 836 base::test::ScopedFeatureList feature_list_; |
834 | 837 |
835 cc::LocalSurfaceIdAllocator local_surface_id_allocator_; | |
836 | |
837 private: | 838 private: |
838 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraTest); | 839 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraTest); |
839 }; | 840 }; |
840 | 841 |
841 class RenderWidgetHostViewAuraRafAlignedTouchEnabledTest | 842 class RenderWidgetHostViewAuraRafAlignedTouchEnabledTest |
842 : public RenderWidgetHostViewAuraTest { | 843 : public RenderWidgetHostViewAuraTest { |
843 public: | 844 public: |
844 void SetUp() override { | 845 void SetUp() override { |
845 EnableRafAlignedTouchInput(); | 846 EnableRafAlignedTouchInput(); |
846 RenderWidgetHostViewAuraTest::SetUp(); | 847 RenderWidgetHostViewAuraTest::SetUp(); |
(...skipping 1487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2334 resource.id = 1; | 2335 resource.id = 1; |
2335 frame.resource_list.push_back(resource); | 2336 frame.resource_list.push_back(resource); |
2336 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); | 2337 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
2337 EXPECT_EQ(0u, sink_->message_count()); | 2338 EXPECT_EQ(0u, sink_->message_count()); |
2338 | 2339 |
2339 // Signal that a new RendererCompositorFrameSink was created by the renderer. | 2340 // Signal that a new RendererCompositorFrameSink was created by the renderer. |
2340 view_->CreateNewRendererCompositorFrameSink(); | 2341 view_->CreateNewRendererCompositorFrameSink(); |
2341 | 2342 |
2342 // Submit another frame. The resources for the previous frame belong to the | 2343 // Submit another frame. The resources for the previous frame belong to the |
2343 // old RendererCompositorFrameSink and should not be returned. | 2344 // old RendererCompositorFrameSink and should not be returned. |
2344 view_->SubmitCompositorFrame(local_surface_id_allocator_.GenerateId(), | 2345 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), |
2345 MakeDelegatedFrame(1.f, view_size, view_rect)); | 2346 MakeDelegatedFrame(1.f, view_size, view_rect)); |
2346 EXPECT_EQ(0u, sink_->message_count()); | 2347 EXPECT_EQ(0u, sink_->message_count()); |
2347 | 2348 |
2348 // Report that the surface is drawn to trigger an ACK. | 2349 // Report that the surface is drawn to trigger an ACK. |
2349 view_->renderer_compositor_frame_sink_->Reset(); | 2350 view_->renderer_compositor_frame_sink_->Reset(); |
2350 cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id()); | 2351 cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id()); |
2351 EXPECT_TRUE(surface); | 2352 EXPECT_TRUE(surface); |
2352 surface->RunDrawCallback(); | 2353 surface->RunDrawCallback(); |
2353 view_->renderer_compositor_frame_sink_->Flush(); | 2354 view_->renderer_compositor_frame_sink_->Flush(); |
2354 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); | 2355 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2480 root->layer()->Remove(mirror->root()); | 2481 root->layer()->Remove(mirror->root()); |
2481 } | 2482 } |
2482 } | 2483 } |
2483 | 2484 |
2484 // If the view size is larger than the compositor frame then extra layers | 2485 // If the view size is larger than the compositor frame then extra layers |
2485 // should be created to fill the gap. | 2486 // should be created to fill the gap. |
2486 TEST_F(RenderWidgetHostViewAuraTest, DelegatedFrameGutter) { | 2487 TEST_F(RenderWidgetHostViewAuraTest, DelegatedFrameGutter) { |
2487 gfx::Size large_size(100, 100); | 2488 gfx::Size large_size(100, 100); |
2488 gfx::Size small_size(40, 45); | 2489 gfx::Size small_size(40, 45); |
2489 gfx::Size medium_size(40, 95); | 2490 gfx::Size medium_size(40, 95); |
2490 cc::LocalSurfaceId small_id = local_surface_id_allocator_.GenerateId(); | |
2491 cc::LocalSurfaceId medium_id = local_surface_id_allocator_.GenerateId(); | |
2492 | 2491 |
2493 // Prevent the DelegatedFrameHost from skipping frames. | 2492 // Prevent the DelegatedFrameHost from skipping frames. |
2494 // XXX | 2493 // XXX |
2495 view_->DisableResizeLock(); | 2494 view_->DisableResizeLock(); |
2496 | 2495 |
2497 view_->InitAsChild(nullptr); | 2496 view_->InitAsChild(nullptr); |
2498 aura::client::ParentWindowWithContext( | 2497 aura::client::ParentWindowWithContext( |
2499 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), | 2498 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), |
2500 gfx::Rect()); | 2499 gfx::Rect()); |
2501 view_->SetSize(large_size); | 2500 view_->SetSize(large_size); |
2502 view_->Show(); | 2501 view_->Show(); |
2503 cc::CompositorFrame frame = | 2502 cc::CompositorFrame frame = |
2504 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size)); | 2503 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size)); |
2505 frame.metadata.root_background_color = SK_ColorRED; | 2504 frame.metadata.root_background_color = SK_ColorRED; |
2506 view_->SubmitCompositorFrame(small_id, std::move(frame)); | 2505 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
2507 | 2506 |
2508 ui::Layer* parent_layer = view_->GetNativeView()->layer(); | 2507 ui::Layer* parent_layer = view_->GetNativeView()->layer(); |
2509 | 2508 |
2510 ASSERT_EQ(2u, parent_layer->children().size()); | 2509 ASSERT_EQ(2u, parent_layer->children().size()); |
2511 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds()); | 2510 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds()); |
2512 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color()); | 2511 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color()); |
2513 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds()); | 2512 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds()); |
2514 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color()); | 2513 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color()); |
2515 | 2514 |
2516 delegates_.back()->set_is_fullscreen(true); | 2515 delegates_.back()->set_is_fullscreen(true); |
2517 view_->SetSize(medium_size); | 2516 view_->SetSize(medium_size); |
2518 | 2517 |
2519 // Right gutter is unnecessary. | 2518 // Right gutter is unnecessary. |
2520 ASSERT_EQ(1u, parent_layer->children().size()); | 2519 ASSERT_EQ(1u, parent_layer->children().size()); |
2521 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds()); | 2520 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds()); |
2522 | 2521 |
2523 // RWH is fullscreen, so gutters should be black. | 2522 // RWH is fullscreen, so gutters should be black. |
2524 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color()); | 2523 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color()); |
2525 | 2524 |
2526 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size)); | 2525 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size)); |
2527 view_->SubmitCompositorFrame(medium_id, std::move(frame)); | 2526 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
2528 EXPECT_EQ(0u, parent_layer->children().size()); | 2527 EXPECT_EQ(0u, parent_layer->children().size()); |
2529 | 2528 |
2530 view_->SetSize(large_size); | 2529 view_->SetSize(large_size); |
2531 ASSERT_EQ(2u, parent_layer->children().size()); | 2530 ASSERT_EQ(2u, parent_layer->children().size()); |
2532 | 2531 |
2533 // This should evict the frame and remove the gutter layers. | 2532 // This should evict the frame and remove the gutter layers. |
2534 view_->Hide(); | 2533 view_->Hide(); |
2535 view_->SetSize(small_size); | 2534 view_->SetSize(small_size); |
2536 ASSERT_EQ(0u, parent_layer->children().size()); | 2535 ASSERT_EQ(0u, parent_layer->children().size()); |
2537 } | 2536 } |
2538 | 2537 |
2539 TEST_F(RenderWidgetHostViewAuraTest, Resize) { | 2538 TEST_F(RenderWidgetHostViewAuraTest, Resize) { |
2540 gfx::Size size1(100, 100); | 2539 gfx::Size size1(100, 100); |
2541 gfx::Size size2(200, 200); | 2540 gfx::Size size2(200, 200); |
2542 gfx::Size size3(300, 300); | 2541 gfx::Size size3(300, 300); |
2543 cc::LocalSurfaceId id1 = local_surface_id_allocator_.GenerateId(); | |
2544 cc::LocalSurfaceId id2 = local_surface_id_allocator_.GenerateId(); | |
2545 cc::LocalSurfaceId id3 = local_surface_id_allocator_.GenerateId(); | |
2546 | 2542 |
2547 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow(); | 2543 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow(); |
2548 view_->InitAsChild(nullptr); | 2544 view_->InitAsChild(nullptr); |
2549 aura::client::ParentWindowWithContext( | 2545 aura::client::ParentWindowWithContext( |
2550 view_->GetNativeView(), root_window, gfx::Rect(size1)); | 2546 view_->GetNativeView(), root_window, gfx::Rect(size1)); |
2551 view_->Show(); | 2547 view_->Show(); |
2552 view_->SetSize(size1); | 2548 view_->SetSize(size1); |
2553 view_->SubmitCompositorFrame( | 2549 view_->SubmitCompositorFrame( |
2554 id1, MakeDelegatedFrame(1.f, size1, gfx::Rect(size1))); | 2550 kArbitraryLocalSurfaceId, |
| 2551 MakeDelegatedFrame(1.f, size1, gfx::Rect(size1))); |
2555 ui::DrawWaiterForTest::WaitForCommit( | 2552 ui::DrawWaiterForTest::WaitForCommit( |
2556 root_window->GetHost()->compositor()); | 2553 root_window->GetHost()->compositor()); |
2557 ViewHostMsg_UpdateRect_Params update_params; | 2554 ViewHostMsg_UpdateRect_Params update_params; |
2558 update_params.view_size = size1; | 2555 update_params.view_size = size1; |
2559 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK; | 2556 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK; |
2560 widget_host_->OnMessageReceived( | 2557 widget_host_->OnMessageReceived( |
2561 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); | 2558 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); |
2562 sink_->ClearMessages(); | 2559 sink_->ClearMessages(); |
2563 // Resize logic is idle (no pending resize, no pending commit). | 2560 // Resize logic is idle (no pending resize, no pending commit). |
2564 EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString()); | 2561 EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString()); |
(...skipping 18 matching lines...) Expand all Loading... |
2583 // Resize renderer again, before receiving a frame. Should not produce a | 2580 // Resize renderer again, before receiving a frame. Should not produce a |
2584 // Resize message. | 2581 // Resize message. |
2585 view_->SetSize(size3); | 2582 view_->SetSize(size3); |
2586 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 2583 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
2587 EXPECT_EQ(0u, sink_->message_count()); | 2584 EXPECT_EQ(0u, sink_->message_count()); |
2588 | 2585 |
2589 // Receive a frame of the new size, should be skipped and not produce a Resize | 2586 // Receive a frame of the new size, should be skipped and not produce a Resize |
2590 // message. | 2587 // message. |
2591 view_->renderer_compositor_frame_sink_->Reset(); | 2588 view_->renderer_compositor_frame_sink_->Reset(); |
2592 view_->SubmitCompositorFrame( | 2589 view_->SubmitCompositorFrame( |
2593 id3, MakeDelegatedFrame(1.f, size3, gfx::Rect(size3))); | 2590 kArbitraryLocalSurfaceId, |
| 2591 MakeDelegatedFrame(1.f, size3, gfx::Rect(size3))); |
2594 view_->renderer_compositor_frame_sink_->Flush(); | 2592 view_->renderer_compositor_frame_sink_->Flush(); |
2595 // Expect the frame ack; | 2593 // Expect the frame ack; |
2596 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); | 2594 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); |
2597 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 2595 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
2598 | 2596 |
2599 // Receive a frame of the correct size, should not be skipped and, and should | 2597 // Receive a frame of the correct size, should not be skipped and, and should |
2600 // produce a Resize message after the commit. | 2598 // produce a Resize message after the commit. |
2601 view_->renderer_compositor_frame_sink_->Reset(); | 2599 view_->renderer_compositor_frame_sink_->Reset(); |
2602 view_->SubmitCompositorFrame( | 2600 view_->SubmitCompositorFrame( |
2603 id2, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); | 2601 kArbitraryLocalSurfaceId, |
| 2602 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
2604 view_->renderer_compositor_frame_sink_->Flush(); | 2603 view_->renderer_compositor_frame_sink_->Flush(); |
2605 cc::SurfaceId surface_id = view_->surface_id(); | 2604 cc::SurfaceId surface_id = view_->surface_id(); |
2606 if (!surface_id.is_valid()) { | 2605 if (!surface_id.is_valid()) { |
2607 // No frame ack yet. | 2606 // No frame ack yet. |
2608 EXPECT_FALSE(view_->renderer_compositor_frame_sink_->did_receive_ack()); | 2607 EXPECT_FALSE(view_->renderer_compositor_frame_sink_->did_receive_ack()); |
2609 } else { | 2608 } else { |
2610 // Frame isn't desired size, so early ack. | 2609 // Frame isn't desired size, so early ack. |
2611 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); | 2610 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); |
2612 } | 2611 } |
2613 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); | 2612 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2650 update_params.view_size = size3; | 2649 update_params.view_size = size3; |
2651 widget_host_->OnMessageReceived( | 2650 widget_host_->OnMessageReceived( |
2652 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); | 2651 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); |
2653 sink_->ClearMessages(); | 2652 sink_->ClearMessages(); |
2654 } | 2653 } |
2655 | 2654 |
2656 // Skipped frames should not drop their damage. | 2655 // Skipped frames should not drop their damage. |
2657 TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { | 2656 TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { |
2658 gfx::Rect view_rect(100, 100); | 2657 gfx::Rect view_rect(100, 100); |
2659 gfx::Size frame_size = view_rect.size(); | 2658 gfx::Size frame_size = view_rect.size(); |
2660 cc::LocalSurfaceId local_surface_id = kArbitraryLocalSurfaceId; | |
2661 | 2659 |
2662 view_->InitAsChild(nullptr); | 2660 view_->InitAsChild(nullptr); |
2663 aura::client::ParentWindowWithContext( | 2661 aura::client::ParentWindowWithContext( |
2664 view_->GetNativeView(), | 2662 view_->GetNativeView(), |
2665 parent_view_->GetNativeView()->GetRootWindow(), | 2663 parent_view_->GetNativeView()->GetRootWindow(), |
2666 gfx::Rect()); | 2664 gfx::Rect()); |
2667 view_->SetSize(view_rect.size()); | 2665 view_->SetSize(view_rect.size()); |
2668 | 2666 |
2669 MockWindowObserver observer; | 2667 MockWindowObserver observer; |
2670 view_->window_->AddObserver(&observer); | 2668 view_->window_->AddObserver(&observer); |
2671 | 2669 |
2672 // A full frame of damage. | 2670 // A full frame of damage. |
2673 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2671 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2674 view_->SubmitCompositorFrame(local_surface_id, | 2672 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, |
2675 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2673 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2676 testing::Mock::VerifyAndClearExpectations(&observer); | 2674 testing::Mock::VerifyAndClearExpectations(&observer); |
2677 view_->RunOnCompositingDidCommit(); | 2675 view_->RunOnCompositingDidCommit(); |
2678 | 2676 |
2679 // A partial damage frame. | 2677 // A partial damage frame. |
2680 gfx::Rect partial_view_rect(30, 30, 20, 20); | 2678 gfx::Rect partial_view_rect(30, 30, 20, 20); |
2681 EXPECT_CALL(observer, | 2679 EXPECT_CALL(observer, |
2682 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); | 2680 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); |
2683 view_->SubmitCompositorFrame( | 2681 view_->SubmitCompositorFrame( |
2684 local_surface_id, MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); | 2682 kArbitraryLocalSurfaceId, |
| 2683 MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); |
2685 testing::Mock::VerifyAndClearExpectations(&observer); | 2684 testing::Mock::VerifyAndClearExpectations(&observer); |
2686 view_->RunOnCompositingDidCommit(); | 2685 view_->RunOnCompositingDidCommit(); |
2687 | 2686 |
2688 EXPECT_FALSE(view_->resize_locked()); | 2687 EXPECT_FALSE(view_->resize_locked()); |
2689 EXPECT_FALSE(view_->compositor_locked()); | 2688 EXPECT_FALSE(view_->compositor_locked()); |
2690 | 2689 |
2691 // Lock the compositor. Now we should drop frames. | 2690 // Lock the compositor. Now we should drop frames. |
2692 view_rect = gfx::Rect(150, 150); | 2691 view_rect = gfx::Rect(150, 150); |
2693 view_->SetSize(view_rect.size()); | 2692 view_->SetSize(view_rect.size()); |
2694 EXPECT_TRUE(view_->resize_locked()); | 2693 EXPECT_TRUE(view_->resize_locked()); |
2695 EXPECT_TRUE(view_->compositor_locked()); | 2694 EXPECT_TRUE(view_->compositor_locked()); |
2696 | 2695 |
2697 // This frame is dropped. | 2696 // This frame is dropped. |
2698 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40); | 2697 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40); |
2699 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); | 2698 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
2700 view_->SubmitCompositorFrame( | 2699 view_->SubmitCompositorFrame( |
2701 local_surface_id, | 2700 kArbitraryLocalSurfaceId, |
2702 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); | 2701 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); |
2703 testing::Mock::VerifyAndClearExpectations(&observer); | 2702 testing::Mock::VerifyAndClearExpectations(&observer); |
2704 view_->RunOnCompositingDidCommit(); | 2703 view_->RunOnCompositingDidCommit(); |
2705 | 2704 |
2706 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20); | 2705 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20); |
2707 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); | 2706 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
2708 view_->SubmitCompositorFrame( | 2707 view_->SubmitCompositorFrame( |
2709 local_surface_id, | 2708 kArbitraryLocalSurfaceId, |
2710 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); | 2709 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); |
2711 testing::Mock::VerifyAndClearExpectations(&observer); | 2710 testing::Mock::VerifyAndClearExpectations(&observer); |
2712 view_->RunOnCompositingDidCommit(); | 2711 view_->RunOnCompositingDidCommit(); |
2713 | 2712 |
2714 EXPECT_TRUE(view_->resize_locked()); | 2713 EXPECT_TRUE(view_->resize_locked()); |
2715 EXPECT_TRUE(view_->compositor_locked()); | 2714 EXPECT_TRUE(view_->compositor_locked()); |
2716 | 2715 |
2717 // Unlock the compositor. This frame should damage everything. | 2716 // Unlock the compositor. This frame should damage everything. |
2718 frame_size = view_rect.size(); | 2717 frame_size = view_rect.size(); |
2719 local_surface_id = local_surface_id_allocator_.GenerateId(); | |
2720 | 2718 |
2721 gfx::Rect new_damage_rect(5, 6, 10, 10); | 2719 gfx::Rect new_damage_rect(5, 6, 10, 10); |
2722 EXPECT_CALL(observer, | 2720 EXPECT_CALL(observer, |
2723 OnDelegatedFrameDamage(view_->window_, view_rect)); | 2721 OnDelegatedFrameDamage(view_->window_, view_rect)); |
2724 view_->SubmitCompositorFrame( | 2722 view_->SubmitCompositorFrame( |
2725 local_surface_id, MakeDelegatedFrame(1.f, frame_size, new_damage_rect)); | 2723 kArbitraryLocalSurfaceId, |
| 2724 MakeDelegatedFrame(1.f, frame_size, new_damage_rect)); |
2726 // The swap unlocks the compositor. | 2725 // The swap unlocks the compositor. |
2727 EXPECT_TRUE(view_->resize_locked()); | 2726 EXPECT_TRUE(view_->resize_locked()); |
2728 EXPECT_FALSE(view_->compositor_locked()); | 2727 EXPECT_FALSE(view_->compositor_locked()); |
2729 testing::Mock::VerifyAndClearExpectations(&observer); | 2728 testing::Mock::VerifyAndClearExpectations(&observer); |
2730 // The UI commit unlocks for further resize. | 2729 // The UI commit unlocks for further resize. |
2731 view_->RunOnCompositingDidCommit(); | 2730 view_->RunOnCompositingDidCommit(); |
2732 EXPECT_FALSE(view_->resize_locked()); | 2731 EXPECT_FALSE(view_->resize_locked()); |
2733 EXPECT_FALSE(view_->compositor_locked()); | 2732 EXPECT_FALSE(view_->compositor_locked()); |
2734 | 2733 |
2735 // A partial damage frame, this should not be dropped. | 2734 // A partial damage frame, this should not be dropped. |
2736 EXPECT_CALL(observer, | 2735 EXPECT_CALL(observer, |
2737 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); | 2736 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); |
2738 view_->SubmitCompositorFrame( | 2737 view_->SubmitCompositorFrame( |
2739 local_surface_id, MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); | 2738 kArbitraryLocalSurfaceId, |
| 2739 MakeDelegatedFrame(1.f, frame_size, partial_view_rect)); |
2740 testing::Mock::VerifyAndClearExpectations(&observer); | 2740 testing::Mock::VerifyAndClearExpectations(&observer); |
2741 view_->RunOnCompositingDidCommit(); | 2741 view_->RunOnCompositingDidCommit(); |
2742 EXPECT_FALSE(view_->resize_locked()); | 2742 EXPECT_FALSE(view_->resize_locked()); |
2743 EXPECT_FALSE(view_->compositor_locked()); | 2743 EXPECT_FALSE(view_->compositor_locked()); |
2744 | 2744 |
2745 // Resize to something empty. This doesn't lock anything since it's not | 2745 // Resize to something empty. This doesn't lock anything since it's not |
2746 // visible anymore anyways. | 2746 // visible anymore anyways. |
2747 view_rect = gfx::Rect(100, 0); | 2747 view_rect = gfx::Rect(100, 0); |
2748 view_->SetSize(view_rect.size()); | 2748 view_->SetSize(view_rect.size()); |
2749 EXPECT_FALSE(view_->resize_locked()); | 2749 EXPECT_FALSE(view_->resize_locked()); |
2750 EXPECT_FALSE(view_->compositor_locked()); | 2750 EXPECT_FALSE(view_->compositor_locked()); |
2751 | 2751 |
2752 // We're never expecting empty frames, resize to something non-empty. | 2752 // We're never expecting empty frames, resize to something non-empty. |
2753 view_rect = gfx::Rect(100, 100); | 2753 view_rect = gfx::Rect(100, 100); |
2754 frame_size = view_rect.size(); | |
2755 local_surface_id = local_surface_id_allocator_.GenerateId(); | |
2756 view_->SetSize(view_rect.size()); | 2754 view_->SetSize(view_rect.size()); |
2757 EXPECT_TRUE(view_->resize_locked()); | 2755 EXPECT_TRUE(view_->resize_locked()); |
2758 EXPECT_TRUE(view_->compositor_locked()); | 2756 EXPECT_TRUE(view_->compositor_locked()); |
2759 | 2757 |
2760 // This frame should not be dropped. | 2758 // This frame should not be dropped. |
2761 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2759 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2762 view_->SubmitCompositorFrame(local_surface_id, | 2760 view_->SubmitCompositorFrame( |
2763 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2761 kArbitraryLocalSurfaceId, |
| 2762 MakeDelegatedFrame(1.f, view_rect.size(), view_rect)); |
2764 testing::Mock::VerifyAndClearExpectations(&observer); | 2763 testing::Mock::VerifyAndClearExpectations(&observer); |
2765 EXPECT_TRUE(view_->resize_locked()); | 2764 EXPECT_TRUE(view_->resize_locked()); |
2766 EXPECT_FALSE(view_->compositor_locked()); | 2765 EXPECT_FALSE(view_->compositor_locked()); |
2767 view_->RunOnCompositingDidCommit(); | 2766 view_->RunOnCompositingDidCommit(); |
2768 EXPECT_FALSE(view_->resize_locked()); | 2767 EXPECT_FALSE(view_->resize_locked()); |
2769 EXPECT_FALSE(view_->compositor_locked()); | 2768 EXPECT_FALSE(view_->compositor_locked()); |
2770 | 2769 |
2771 view_->window_->RemoveObserver(&observer); | 2770 view_->window_->RemoveObserver(&observer); |
2772 } | 2771 } |
2773 | 2772 |
2774 // If resize races with a renderer frame, we should lock for the right size. | 2773 // If resize races with a renderer frame, we should lock for the right size. |
2775 TEST_F(RenderWidgetHostViewAuraTest, ResizeAfterReceivingFrame) { | 2774 TEST_F(RenderWidgetHostViewAuraTest, ResizeAfterReceivingFrame) { |
2776 gfx::Rect view_rect(100, 100); | 2775 gfx::Rect view_rect(100, 100); |
2777 gfx::Size frame_size = view_rect.size(); | 2776 gfx::Size frame_size = view_rect.size(); |
2778 cc::LocalSurfaceId local_surface_id = kArbitraryLocalSurfaceId; | |
2779 | 2777 |
2780 view_->InitAsChild(nullptr); | 2778 view_->InitAsChild(nullptr); |
2781 aura::client::ParentWindowWithContext( | 2779 aura::client::ParentWindowWithContext( |
2782 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), | 2780 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), |
2783 gfx::Rect()); | 2781 gfx::Rect()); |
2784 view_->SetSize(view_rect.size()); | 2782 view_->SetSize(view_rect.size()); |
2785 | 2783 |
2786 MockWindowObserver observer; | 2784 MockWindowObserver observer; |
2787 view_->window_->AddObserver(&observer); | 2785 view_->window_->AddObserver(&observer); |
2788 | 2786 |
2789 // A frame of initial size. | 2787 // A frame of initial size. |
2790 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2788 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2791 view_->SubmitCompositorFrame( | 2789 view_->SubmitCompositorFrame( |
2792 local_surface_id, | 2790 kArbitraryLocalSurfaceId, |
2793 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); | 2791 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
2794 testing::Mock::VerifyAndClearExpectations(&observer); | 2792 testing::Mock::VerifyAndClearExpectations(&observer); |
2795 view_->RunOnCompositingDidCommit(); | 2793 view_->RunOnCompositingDidCommit(); |
2796 | 2794 |
2797 // A frame of initial size arrives, but we don't commit in the UI yet. | 2795 // A frame of initial size arrives, but we don't commit in the UI yet. |
2798 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _)); | 2796 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _)); |
2799 view_->SubmitCompositorFrame( | 2797 view_->SubmitCompositorFrame( |
2800 local_surface_id, | 2798 kArbitraryLocalSurfaceId, |
2801 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); | 2799 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
2802 testing::Mock::VerifyAndClearExpectations(&observer); | 2800 testing::Mock::VerifyAndClearExpectations(&observer); |
2803 | 2801 |
2804 EXPECT_FALSE(view_->resize_locked()); | 2802 EXPECT_FALSE(view_->resize_locked()); |
2805 EXPECT_FALSE(view_->compositor_locked()); | 2803 EXPECT_FALSE(view_->compositor_locked()); |
2806 | 2804 |
2807 // Resize, and lock the compositor. Now we should drop frames of the old size. | 2805 // Resize, and lock the compositor. Now we should drop frames of the old size. |
2808 view_rect = gfx::Rect(150, 150); | 2806 view_rect = gfx::Rect(150, 150); |
2809 view_->SetSize(view_rect.size()); | 2807 view_->SetSize(view_rect.size()); |
2810 EXPECT_TRUE(view_->resize_locked()); | 2808 EXPECT_TRUE(view_->resize_locked()); |
2811 EXPECT_TRUE(view_->compositor_locked()); | 2809 EXPECT_TRUE(view_->compositor_locked()); |
2812 | 2810 |
2813 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); | 2811 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
2814 view_->SubmitCompositorFrame( | 2812 view_->SubmitCompositorFrame( |
2815 local_surface_id, | 2813 kArbitraryLocalSurfaceId, |
2816 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); | 2814 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
2817 testing::Mock::VerifyAndClearExpectations(&observer); | 2815 testing::Mock::VerifyAndClearExpectations(&observer); |
2818 | 2816 |
2819 // If the CompositorLock times out in the meantime, a commit would happen. | 2817 // If the CompositorLock times out in the meantime, a commit would happen. |
2820 // Verify that if a commit occurs, the lock remains and we reject frames | 2818 // Verify that if a commit occurs, the lock remains and we reject frames |
2821 // of the wrong size still. | 2819 // of the wrong size still. |
2822 view_->RunOnCompositingDidCommit(); | 2820 view_->RunOnCompositingDidCommit(); |
2823 | 2821 |
2824 EXPECT_TRUE(view_->resize_locked()); | 2822 EXPECT_TRUE(view_->resize_locked()); |
2825 // In this case we lied about it and the CompositorLock is still active. | 2823 // In this case we lied about it and the CompositorLock is still active. |
2826 EXPECT_TRUE(view_->compositor_locked()); | 2824 EXPECT_TRUE(view_->compositor_locked()); |
2827 | 2825 |
2828 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); | 2826 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); |
2829 view_->SubmitCompositorFrame( | 2827 view_->SubmitCompositorFrame( |
2830 local_surface_id, | 2828 kArbitraryLocalSurfaceId, |
2831 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); | 2829 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
2832 testing::Mock::VerifyAndClearExpectations(&observer); | 2830 testing::Mock::VerifyAndClearExpectations(&observer); |
2833 | 2831 |
2834 // A frame arrives of the new size, which will be accepted. | 2832 // A frame arrives of the new size, which will be accepted. |
2835 frame_size = view_rect.size(); | 2833 frame_size = view_rect.size(); |
2836 local_surface_id = local_surface_id_allocator_.GenerateId(); | |
2837 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _)); | 2834 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _)); |
2838 view_->SubmitCompositorFrame( | 2835 view_->SubmitCompositorFrame( |
2839 local_surface_id, | 2836 kArbitraryLocalSurfaceId, |
2840 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); | 2837 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); |
2841 // Receiving the frame unlocks the compositor so it can commit. | 2838 // Receiving the frame unlocks the compositor so it can commit. |
2842 EXPECT_TRUE(view_->resize_locked()); | 2839 EXPECT_TRUE(view_->resize_locked()); |
2843 EXPECT_FALSE(view_->compositor_locked()); | 2840 EXPECT_FALSE(view_->compositor_locked()); |
2844 testing::Mock::VerifyAndClearExpectations(&observer); | 2841 testing::Mock::VerifyAndClearExpectations(&observer); |
2845 | 2842 |
2846 // When the frame of the correct size is committed, the CompositorResizeLock | 2843 // When the frame of the correct size is committed, the CompositorResizeLock |
2847 // is released. | 2844 // is released. |
2848 view_->RunOnCompositingDidCommit(); | 2845 view_->RunOnCompositingDidCommit(); |
2849 EXPECT_FALSE(view_->resize_locked()); | 2846 EXPECT_FALSE(view_->resize_locked()); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2920 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, | 2917 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, |
2921 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2918 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2922 testing::Mock::VerifyAndClearExpectations(&observer); | 2919 testing::Mock::VerifyAndClearExpectations(&observer); |
2923 view_->RunOnCompositingDidCommit(); | 2920 view_->RunOnCompositingDidCommit(); |
2924 | 2921 |
2925 // Signal that a new RendererCompositorFrameSink was created. | 2922 // Signal that a new RendererCompositorFrameSink was created. |
2926 view_->CreateNewRendererCompositorFrameSink(); | 2923 view_->CreateNewRendererCompositorFrameSink(); |
2927 | 2924 |
2928 // Submit a frame from the new RendererCompositorFrameSink. | 2925 // Submit a frame from the new RendererCompositorFrameSink. |
2929 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2926 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2930 view_->SubmitCompositorFrame(local_surface_id_allocator_.GenerateId(), | 2927 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), |
2931 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2928 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2932 testing::Mock::VerifyAndClearExpectations(&observer); | 2929 testing::Mock::VerifyAndClearExpectations(&observer); |
2933 view_->RunOnCompositingDidCommit(); | 2930 view_->RunOnCompositingDidCommit(); |
2934 | 2931 |
2935 // Signal that a new RendererCompositorFrameSink was created. | 2932 // Signal that a new RendererCompositorFrameSink was created. |
2936 view_->CreateNewRendererCompositorFrameSink(); | 2933 view_->CreateNewRendererCompositorFrameSink(); |
2937 | 2934 |
2938 // Submit a frame from the new RendererCompositorFrameSink. | 2935 // Submit a frame from the new RendererCompositorFrameSink. |
2939 view_->SubmitCompositorFrame( | 2936 view_->SubmitCompositorFrame( |
2940 local_surface_id_allocator_.GenerateId(), | 2937 CreateLocalSurfaceId(), |
2941 MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); | 2938 MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); |
2942 testing::Mock::VerifyAndClearExpectations(&observer); | 2939 testing::Mock::VerifyAndClearExpectations(&observer); |
2943 view_->RunOnCompositingDidCommit(); | 2940 view_->RunOnCompositingDidCommit(); |
2944 | 2941 |
2945 // Signal that a new RendererCompositorFrameSink was created. | 2942 // Signal that a new RendererCompositorFrameSink was created. |
2946 view_->CreateNewRendererCompositorFrameSink(); | 2943 view_->CreateNewRendererCompositorFrameSink(); |
2947 | 2944 |
2948 // Swap another frame, with a different surface id. | 2945 // Swap another frame, with a different surface id. |
2949 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); | 2946 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); |
2950 view_->SubmitCompositorFrame(local_surface_id_allocator_.GenerateId(), | 2947 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), |
2951 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 2948 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
2952 testing::Mock::VerifyAndClearExpectations(&observer); | 2949 testing::Mock::VerifyAndClearExpectations(&observer); |
2953 view_->RunOnCompositingDidCommit(); | 2950 view_->RunOnCompositingDidCommit(); |
2954 | 2951 |
2955 view_->window_->RemoveObserver(&observer); | 2952 view_->window_->RemoveObserver(&observer); |
2956 } | 2953 } |
2957 | 2954 |
2958 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { | 2955 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { |
2959 view_->InitAsChild(nullptr); | 2956 view_->InitAsChild(nullptr); |
2960 | 2957 |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3079 views[0]->Show(); | 3076 views[0]->Show(); |
3080 EXPECT_TRUE(views[0]->released_front_lock_active()); | 3077 EXPECT_TRUE(views[0]->released_front_lock_active()); |
3081 // Make [0] hidden, it should stop waiting. | 3078 // Make [0] hidden, it should stop waiting. |
3082 views[0]->Hide(); | 3079 views[0]->Hide(); |
3083 EXPECT_FALSE(views[0]->released_front_lock_active()); | 3080 EXPECT_FALSE(views[0]->released_front_lock_active()); |
3084 | 3081 |
3085 // Make [1] hidden, resize it. It should drop its frame. | 3082 // Make [1] hidden, resize it. It should drop its frame. |
3086 views[1]->Hide(); | 3083 views[1]->Hide(); |
3087 EXPECT_TRUE(views[1]->HasFrameData()); | 3084 EXPECT_TRUE(views[1]->HasFrameData()); |
3088 gfx::Size size2(200, 200); | 3085 gfx::Size size2(200, 200); |
3089 cc::LocalSurfaceId id2 = local_surface_id_allocator_.GenerateId(); | |
3090 views[1]->SetSize(size2); | 3086 views[1]->SetSize(size2); |
3091 EXPECT_FALSE(views[1]->HasFrameData()); | 3087 EXPECT_FALSE(views[1]->HasFrameData()); |
3092 // Show it, it should block until we give it a frame. | 3088 // Show it, it should block until we give it a frame. |
3093 views[1]->Show(); | 3089 views[1]->Show(); |
3094 EXPECT_TRUE(views[1]->released_front_lock_active()); | 3090 EXPECT_TRUE(views[1]->released_front_lock_active()); |
3095 views[1]->SubmitCompositorFrame( | 3091 views[1]->SubmitCompositorFrame( |
3096 id2, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); | 3092 kArbitraryLocalSurfaceId, |
| 3093 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2))); |
3097 EXPECT_FALSE(views[1]->released_front_lock_active()); | 3094 EXPECT_FALSE(views[1]->released_front_lock_active()); |
3098 | 3095 |
3099 for (size_t i = 0; i < renderer_count - 1; ++i) | 3096 for (size_t i = 0; i < renderer_count - 1; ++i) |
3100 views[i]->Hide(); | 3097 views[i]->Hide(); |
3101 | 3098 |
3102 // Allocate enough bitmaps so that two frames (proportionally) would be | 3099 // Allocate enough bitmaps so that two frames (proportionally) would be |
3103 // enough hit the handle limit. | 3100 // enough hit the handle limit. |
3104 int handles_per_frame = 5; | 3101 int handles_per_frame = 5; |
3105 FrameEvictionManager::GetInstance()->set_max_handles(handles_per_frame * 2); | 3102 FrameEvictionManager::GetInstance()->set_max_handles(handles_per_frame * 2); |
3106 | 3103 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3161 parent_view_->GetNativeView()->GetRootWindow(), | 3158 parent_view_->GetNativeView()->GetRootWindow(), |
3162 gfx::Rect()); | 3159 gfx::Rect()); |
3163 views[i]->SetSize(view_rect.size()); | 3160 views[i]->SetSize(view_rect.size()); |
3164 } | 3161 } |
3165 | 3162 |
3166 // Make each renderer visible and swap a frame on it. No eviction should | 3163 // Make each renderer visible and swap a frame on it. No eviction should |
3167 // occur because all frames are visible. | 3164 // occur because all frames are visible. |
3168 for (size_t i = 0; i < renderer_count; ++i) { | 3165 for (size_t i = 0; i < renderer_count; ++i) { |
3169 views[i]->Show(); | 3166 views[i]->Show(); |
3170 views[i]->SubmitCompositorFrame( | 3167 views[i]->SubmitCompositorFrame( |
3171 i ? local_surface_id_allocator_.GenerateId() : kArbitraryLocalSurfaceId, | 3168 i ? CreateLocalSurfaceId() : kArbitraryLocalSurfaceId, |
3172 MakeDelegatedFrame(1.f, frame_size, view_rect)); | 3169 MakeDelegatedFrame(1.f, frame_size, view_rect)); |
3173 EXPECT_TRUE(views[i]->HasFrameData()); | 3170 EXPECT_TRUE(views[i]->HasFrameData()); |
3174 } | 3171 } |
3175 | 3172 |
3176 // If we hide [0], then [0] should be evicted. | 3173 // If we hide [0], then [0] should be evicted. |
3177 views[0]->Hide(); | 3174 views[0]->Hide(); |
3178 EXPECT_FALSE(views[0]->HasFrameData()); | 3175 EXPECT_FALSE(views[0]->HasFrameData()); |
3179 | 3176 |
3180 // If we lock [0] before hiding it, then [0] should not be evicted. | 3177 // If we lock [0] before hiding it, then [0] should not be evicted. |
3181 views[0]->Show(); | 3178 views[0]->Show(); |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3307 cc::BeginFrameObserver* last_observer_ = nullptr; | 3304 cc::BeginFrameObserver* last_observer_ = nullptr; |
3308 }; | 3305 }; |
3309 } // namespace | 3306 } // namespace |
3310 | 3307 |
3311 // Tests that BeginFrameAcks are forwarded correctly from the | 3308 // Tests that BeginFrameAcks are forwarded correctly from the |
3312 // SwapCompositorFrame and OnDidNotProduceFrame IPCs through DelegatedFrameHost | 3309 // SwapCompositorFrame and OnDidNotProduceFrame IPCs through DelegatedFrameHost |
3313 // and its CompositorFrameSinkSupport. | 3310 // and its CompositorFrameSinkSupport. |
3314 TEST_F(RenderWidgetHostViewAuraTest, ForwardsBeginFrameAcks) { | 3311 TEST_F(RenderWidgetHostViewAuraTest, ForwardsBeginFrameAcks) { |
3315 gfx::Rect view_rect(100, 100); | 3312 gfx::Rect view_rect(100, 100); |
3316 gfx::Size frame_size = view_rect.size(); | 3313 gfx::Size frame_size = view_rect.size(); |
3317 cc::LocalSurfaceId local_surface_id = kArbitraryLocalSurfaceId; | |
3318 | 3314 |
3319 view_->InitAsChild(nullptr); | 3315 view_->InitAsChild(nullptr); |
3320 aura::client::ParentWindowWithContext( | 3316 aura::client::ParentWindowWithContext( |
3321 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), | 3317 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), |
3322 gfx::Rect()); | 3318 gfx::Rect()); |
3323 view_->SetSize(view_rect.size()); | 3319 view_->SetSize(view_rect.size()); |
3324 | 3320 |
3325 // Replace BeginFrameSource so that we can observe acknowledgments. Since the | 3321 // Replace BeginFrameSource so that we can observe acknowledgments. Since the |
3326 // DelegatedFrameHost doesn't directly observe our BeginFrameSource, | 3322 // DelegatedFrameHost doesn't directly observe our BeginFrameSource, |
3327 // |observer_tracker| grabs a pointer to the observer (the | 3323 // |observer_tracker| grabs a pointer to the observer (the |
(...skipping 13 matching lines...) Expand all Loading... |
3341 | 3337 |
3342 { | 3338 { |
3343 cc::BeginFrameArgs args = | 3339 cc::BeginFrameArgs args = |
3344 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u); | 3340 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u); |
3345 source.TestOnBeginFrame(args); | 3341 source.TestOnBeginFrame(args); |
3346 | 3342 |
3347 // Ack from CompositorFrame is forwarded. | 3343 // Ack from CompositorFrame is forwarded. |
3348 cc::BeginFrameAck ack(source_id, 5, 4, true); | 3344 cc::BeginFrameAck ack(source_id, 5, 4, true); |
3349 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); | 3345 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); |
3350 frame.metadata.begin_frame_ack = ack; | 3346 frame.metadata.begin_frame_ack = ack; |
3351 view_->SubmitCompositorFrame(local_surface_id, std::move(frame)); | 3347 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
3352 view_->RunOnCompositingDidCommit(); | 3348 view_->RunOnCompositingDidCommit(); |
3353 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 3349 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
3354 } | 3350 } |
3355 | 3351 |
3356 { | 3352 { |
3357 cc::BeginFrameArgs args = | 3353 cc::BeginFrameArgs args = |
3358 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u); | 3354 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u); |
3359 source.TestOnBeginFrame(args); | 3355 source.TestOnBeginFrame(args); |
3360 | 3356 |
3361 // Explicit ack through OnDidNotProduceFrame is forwarded. | 3357 // Explicit ack through OnDidNotProduceFrame is forwarded. |
(...skipping 12 matching lines...) Expand all Loading... |
3374 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u); | 3370 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u); |
3375 source.TestOnBeginFrame(args); | 3371 source.TestOnBeginFrame(args); |
3376 | 3372 |
3377 // Ack from CompositorFrame is forwarded with old | 3373 // Ack from CompositorFrame is forwarded with old |
3378 // latest_confirmed_sequence_number and without damage. | 3374 // latest_confirmed_sequence_number and without damage. |
3379 cc::BeginFrameAck ack(source_id, 7, 7, true); | 3375 cc::BeginFrameAck ack(source_id, 7, 7, true); |
3380 gfx::Rect dropped_damage_rect(10, 20, 30, 40); | 3376 gfx::Rect dropped_damage_rect(10, 20, 30, 40); |
3381 cc::CompositorFrame frame = | 3377 cc::CompositorFrame frame = |
3382 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); | 3378 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); |
3383 frame.metadata.begin_frame_ack = ack; | 3379 frame.metadata.begin_frame_ack = ack; |
3384 view_->SubmitCompositorFrame(local_surface_id, std::move(frame)); | 3380 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
3385 view_->RunOnCompositingDidCommit(); | 3381 view_->RunOnCompositingDidCommit(); |
3386 ack.latest_confirmed_sequence_number = 4; | 3382 ack.latest_confirmed_sequence_number = 4; |
3387 ack.has_damage = false; | 3383 ack.has_damage = false; |
3388 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 3384 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
3389 } | 3385 } |
3390 | 3386 |
3391 // Change source_id known to the view. This should reset the | 3387 // Change source_id known to the view. This should reset the |
3392 // latest_confirmed_sequence_number tracked by the view. | 3388 // latest_confirmed_sequence_number tracked by the view. |
3393 source_id = cc::BeginFrameArgs::kManualSourceId; | 3389 source_id = cc::BeginFrameArgs::kManualSourceId; |
3394 | 3390 |
3395 { | 3391 { |
3396 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 3392 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( |
3397 BEGINFRAME_FROM_HERE, source_id, 10u); | 3393 BEGINFRAME_FROM_HERE, source_id, 10u); |
3398 source.TestOnBeginFrame(args); | 3394 source.TestOnBeginFrame(args); |
3399 | 3395 |
3400 // Ack from CompositorFrame is forwarded with invalid | 3396 // Ack from CompositorFrame is forwarded with invalid |
3401 // latest_confirmed_sequence_number and without damage. | 3397 // latest_confirmed_sequence_number and without damage. |
3402 cc::BeginFrameAck ack(source_id, 10, 10, true); | 3398 cc::BeginFrameAck ack(source_id, 10, 10, true); |
3403 gfx::Rect dropped_damage_rect(10, 20, 30, 40); | 3399 gfx::Rect dropped_damage_rect(10, 20, 30, 40); |
3404 cc::CompositorFrame frame = | 3400 cc::CompositorFrame frame = |
3405 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); | 3401 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); |
3406 frame.metadata.begin_frame_ack = ack; | 3402 frame.metadata.begin_frame_ack = ack; |
3407 view_->SubmitCompositorFrame(local_surface_id, std::move(frame)); | 3403 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
3408 view_->RunOnCompositingDidCommit(); | 3404 view_->RunOnCompositingDidCommit(); |
3409 ack.latest_confirmed_sequence_number = | 3405 ack.latest_confirmed_sequence_number = |
3410 cc::BeginFrameArgs::kInvalidFrameNumber; | 3406 cc::BeginFrameArgs::kInvalidFrameNumber; |
3411 ack.has_damage = false; | 3407 ack.has_damage = false; |
3412 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 3408 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
3413 } | 3409 } |
3414 | 3410 |
3415 { | 3411 { |
3416 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 3412 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( |
3417 BEGINFRAME_FROM_HERE, source_id, 11u); | 3413 BEGINFRAME_FROM_HERE, source_id, 11u); |
3418 source.TestOnBeginFrame(args); | 3414 source.TestOnBeginFrame(args); |
3419 | 3415 |
3420 // Explicit ack through OnDidNotProduceFrame is forwarded with invalid | 3416 // Explicit ack through OnDidNotProduceFrame is forwarded with invalid |
3421 // latest_confirmed_sequence_number. | 3417 // latest_confirmed_sequence_number. |
3422 cc::BeginFrameAck ack(source_id, 11, 11, false); | 3418 cc::BeginFrameAck ack(source_id, 11, 11, false); |
3423 view_->OnDidNotProduceFrame(ack); | 3419 view_->OnDidNotProduceFrame(ack); |
3424 ack.latest_confirmed_sequence_number = | 3420 ack.latest_confirmed_sequence_number = |
3425 cc::BeginFrameArgs::kInvalidFrameNumber; | 3421 cc::BeginFrameArgs::kInvalidFrameNumber; |
3426 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 3422 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
3427 } | 3423 } |
3428 | 3424 |
3429 // Unlock the compositor again with a new CompositorFrame of correct size. | 3425 // Unlock the compositor again with a new CompositorFrame of correct size. |
3430 frame_size = view_rect.size(); | 3426 frame_size = view_rect.size(); |
3431 local_surface_id = local_surface_id_allocator_.GenerateId(); | |
3432 | 3427 |
3433 { | 3428 { |
3434 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 3429 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( |
3435 BEGINFRAME_FROM_HERE, source_id, 12u); | 3430 BEGINFRAME_FROM_HERE, source_id, 12u); |
3436 source.TestOnBeginFrame(args); | 3431 source.TestOnBeginFrame(args); |
3437 | 3432 |
3438 // Ack from CompositorFrame is forwarded. | 3433 // Ack from CompositorFrame is forwarded. |
3439 cc::BeginFrameAck ack(source_id, 12, 12, true); | 3434 cc::BeginFrameAck ack(source_id, 12, 12, true); |
3440 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); | 3435 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); |
3441 frame.metadata.begin_frame_ack = ack; | 3436 frame.metadata.begin_frame_ack = ack; |
3442 view_->SubmitCompositorFrame(local_surface_id, std::move(frame)); | 3437 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); |
3443 view_->RunOnCompositingDidCommit(); | 3438 view_->RunOnCompositingDidCommit(); |
3444 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); | 3439 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); |
3445 } | 3440 } |
3446 | 3441 |
3447 { | 3442 { |
3448 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( | 3443 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( |
3449 BEGINFRAME_FROM_HERE, source_id, 13u); | 3444 BEGINFRAME_FROM_HERE, source_id, 13u); |
3450 source.TestOnBeginFrame(args); | 3445 source.TestOnBeginFrame(args); |
3451 | 3446 |
3452 // Explicit ack through OnDidNotProduceFrame is forwarded. | 3447 // Explicit ack through OnDidNotProduceFrame is forwarded. |
(...skipping 2437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5890 // There is no composition in the beginning. | 5885 // There is no composition in the beginning. |
5891 EXPECT_FALSE(has_composition_text()); | 5886 EXPECT_FALSE(has_composition_text()); |
5892 SetHasCompositionTextToTrue(); | 5887 SetHasCompositionTextToTrue(); |
5893 view->ImeCancelComposition(); | 5888 view->ImeCancelComposition(); |
5894 // The composition must have been canceled. | 5889 // The composition must have been canceled. |
5895 EXPECT_FALSE(has_composition_text()); | 5890 EXPECT_FALSE(has_composition_text()); |
5896 } | 5891 } |
5897 } | 5892 } |
5898 | 5893 |
5899 } // namespace content | 5894 } // namespace content |
OLD | NEW |