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