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

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

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