Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(611)

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698