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

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

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