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