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

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: c 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/display_compositor/gl_helper.h" 35 #include "components/display_compositor/gl_helper.h"
35 #include "components/display_compositor/host_shared_bitmap_manager.h" 36 #include "components/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 671 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 RenderWidgetHostViewAura* parent_view_; 815 RenderWidgetHostViewAura* parent_view_;
819 816
820 // Tests should set these to nullptr if they've already triggered their 817 // Tests should set these to nullptr if they've already triggered their
821 // destruction. 818 // destruction.
822 MockRenderWidgetHostImpl* widget_host_; 819 MockRenderWidgetHostImpl* widget_host_;
823 FakeRenderWidgetHostViewAura* view_; 820 FakeRenderWidgetHostViewAura* view_;
824 821
825 IPC::TestSink* sink_; 822 IPC::TestSink* sink_;
826 base::test::ScopedFeatureList feature_list_; 823 base::test::ScopedFeatureList feature_list_;
827 824
825 cc::LocalSurfaceIdAllocator local_surface_id_allocator_;
826
828 private: 827 private:
829 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraTest); 828 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAuraTest);
830 }; 829 };
831 830
832 class RenderWidgetHostViewAuraRafAlignedTouchEnabledTest 831 class RenderWidgetHostViewAuraRafAlignedTouchEnabledTest
833 : public RenderWidgetHostViewAuraTest { 832 : public RenderWidgetHostViewAuraTest {
834 public: 833 public:
835 void SetUp() override { 834 void SetUp() override {
836 EnableRafAlignedTouchInput(); 835 EnableRafAlignedTouchInput();
837 RenderWidgetHostViewAuraTest::SetUp(); 836 RenderWidgetHostViewAuraTest::SetUp();
(...skipping 1265 matching lines...) Expand 10 before | Expand all | Expand 10 after
2103 resource.id = 1; 2102 resource.id = 1;
2104 frame.resource_list.push_back(resource); 2103 frame.resource_list.push_back(resource);
2105 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 2104 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame));
2106 EXPECT_EQ(0u, sink_->message_count()); 2105 EXPECT_EQ(0u, sink_->message_count());
2107 2106
2108 // Signal that a new RendererCompositorFrameSink was created by the renderer. 2107 // Signal that a new RendererCompositorFrameSink was created by the renderer.
2109 view_->CreateNewRendererCompositorFrameSink(); 2108 view_->CreateNewRendererCompositorFrameSink();
2110 2109
2111 // Submit another frame. The resources for the previous frame belong to the 2110 // Submit another frame. The resources for the previous frame belong to the
2112 // old RendererCompositorFrameSink and should not be returned. 2111 // old RendererCompositorFrameSink and should not be returned.
2113 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), 2112 view_->SubmitCompositorFrame(local_surface_id_allocator_.GenerateId(),
2114 MakeDelegatedFrame(1.f, view_size, view_rect)); 2113 MakeDelegatedFrame(1.f, view_size, view_rect));
2115 EXPECT_EQ(0u, sink_->message_count()); 2114 EXPECT_EQ(0u, sink_->message_count());
2116 2115
2117 // Report that the surface is drawn to trigger an ACK. 2116 // Report that the surface is drawn to trigger an ACK.
2118 view_->renderer_compositor_frame_sink_->Reset(); 2117 view_->renderer_compositor_frame_sink_->Reset();
2119 cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id()); 2118 cc::Surface* surface = manager->GetSurfaceForId(view_->surface_id());
2120 EXPECT_TRUE(surface); 2119 EXPECT_TRUE(surface);
2121 surface->RunDrawCallback(); 2120 surface->RunDrawCallback();
2122 view_->renderer_compositor_frame_sink_->Flush(); 2121 view_->renderer_compositor_frame_sink_->Flush();
2123 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); 2122 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack());
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
2249 root->layer()->Remove(mirror->root()); 2248 root->layer()->Remove(mirror->root());
2250 } 2249 }
2251 } 2250 }
2252 2251
2253 // If the view size is larger than the compositor frame then extra layers 2252 // If the view size is larger than the compositor frame then extra layers
2254 // should be created to fill the gap. 2253 // should be created to fill the gap.
2255 TEST_F(RenderWidgetHostViewAuraTest, DelegatedFrameGutter) { 2254 TEST_F(RenderWidgetHostViewAuraTest, DelegatedFrameGutter) {
2256 gfx::Size large_size(100, 100); 2255 gfx::Size large_size(100, 100);
2257 gfx::Size small_size(40, 45); 2256 gfx::Size small_size(40, 45);
2258 gfx::Size medium_size(40, 95); 2257 gfx::Size medium_size(40, 95);
2258 cc::LocalSurfaceId small_id = local_surface_id_allocator_.GenerateId();
2259 cc::LocalSurfaceId medium_id = local_surface_id_allocator_.GenerateId();
2259 2260
2260 // Prevent the DelegatedFrameHost from skipping frames. 2261 // Prevent the DelegatedFrameHost from skipping frames.
2261 // XXX
2262 view_->DisableResizeLock(); 2262 view_->DisableResizeLock();
2263 2263
2264 view_->InitAsChild(nullptr); 2264 view_->InitAsChild(nullptr);
2265 aura::client::ParentWindowWithContext( 2265 aura::client::ParentWindowWithContext(
2266 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), 2266 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(),
2267 gfx::Rect()); 2267 gfx::Rect());
2268 view_->SetSize(large_size); 2268 view_->SetSize(large_size);
2269 view_->Show(); 2269 view_->Show();
2270 cc::CompositorFrame frame = 2270 cc::CompositorFrame frame =
2271 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size)); 2271 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size));
2272 frame.metadata.root_background_color = SK_ColorRED; 2272 frame.metadata.root_background_color = SK_ColorRED;
2273 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 2273 view_->SubmitCompositorFrame(small_id, std::move(frame));
2274 2274
2275 ui::Layer* parent_layer = view_->GetNativeView()->layer(); 2275 ui::Layer* parent_layer = view_->GetNativeView()->layer();
2276 2276
2277 ASSERT_EQ(2u, parent_layer->children().size()); 2277 ASSERT_EQ(2u, parent_layer->children().size());
2278 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds()); 2278 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds());
2279 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color()); 2279 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color());
2280 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds()); 2280 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds());
2281 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color()); 2281 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color());
2282 2282
2283 delegates_.back()->set_is_fullscreen(true); 2283 delegates_.back()->set_is_fullscreen(true);
2284 view_->SetSize(medium_size); 2284 view_->SetSize(medium_size);
2285 2285
2286 // Right gutter is unnecessary. 2286 // Right gutter is unnecessary.
2287 ASSERT_EQ(1u, parent_layer->children().size()); 2287 ASSERT_EQ(1u, parent_layer->children().size());
2288 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds()); 2288 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds());
2289 2289
2290 // RWH is fullscreen, so gutters should be black. 2290 // RWH is fullscreen, so gutters should be black.
2291 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color()); 2291 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color());
2292 2292
2293 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size)); 2293 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size));
2294 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 2294 view_->SubmitCompositorFrame(medium_id, std::move(frame));
2295 EXPECT_EQ(0u, parent_layer->children().size()); 2295 EXPECT_EQ(0u, parent_layer->children().size());
2296 2296
2297 view_->SetSize(large_size); 2297 view_->SetSize(large_size);
2298 ASSERT_EQ(2u, parent_layer->children().size()); 2298 ASSERT_EQ(2u, parent_layer->children().size());
2299 2299
2300 // This should evict the frame and remove the gutter layers. 2300 // This should evict the frame and remove the gutter layers.
2301 view_->Hide(); 2301 view_->Hide();
2302 view_->SetSize(small_size); 2302 view_->SetSize(small_size);
2303 ASSERT_EQ(0u, parent_layer->children().size()); 2303 ASSERT_EQ(0u, parent_layer->children().size());
2304 } 2304 }
2305 2305
2306 TEST_F(RenderWidgetHostViewAuraTest, Resize) { 2306 TEST_F(RenderWidgetHostViewAuraTest, Resize) {
2307 gfx::Size size1(100, 100); 2307 gfx::Size size1(100, 100);
2308 gfx::Size size2(200, 200); 2308 gfx::Size size2(200, 200);
2309 gfx::Size size3(300, 300); 2309 gfx::Size size3(300, 300);
2310 cc::LocalSurfaceId id1 = local_surface_id_allocator_.GenerateId();
2311 cc::LocalSurfaceId id2 = local_surface_id_allocator_.GenerateId();
2312 cc::LocalSurfaceId id3 = local_surface_id_allocator_.GenerateId();
2310 2313
2311 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow(); 2314 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow();
2312 view_->InitAsChild(nullptr); 2315 view_->InitAsChild(nullptr);
2313 aura::client::ParentWindowWithContext( 2316 aura::client::ParentWindowWithContext(
2314 view_->GetNativeView(), root_window, gfx::Rect(size1)); 2317 view_->GetNativeView(), root_window, gfx::Rect(size1));
2315 view_->Show(); 2318 view_->Show();
2316 view_->SetSize(size1); 2319 view_->SetSize(size1);
2317 view_->SubmitCompositorFrame( 2320 view_->SubmitCompositorFrame(
2318 kArbitraryLocalSurfaceId, 2321 id1, MakeDelegatedFrame(1.f, size1, gfx::Rect(size1)));
2319 MakeDelegatedFrame(1.f, size1, gfx::Rect(size1)));
2320 ui::DrawWaiterForTest::WaitForCommit( 2322 ui::DrawWaiterForTest::WaitForCommit(
2321 root_window->GetHost()->compositor()); 2323 root_window->GetHost()->compositor());
2322 ViewHostMsg_UpdateRect_Params update_params; 2324 ViewHostMsg_UpdateRect_Params update_params;
2323 update_params.view_size = size1; 2325 update_params.view_size = size1;
2324 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK; 2326 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK;
2325 widget_host_->OnMessageReceived( 2327 widget_host_->OnMessageReceived(
2326 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); 2328 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params));
2327 sink_->ClearMessages(); 2329 sink_->ClearMessages();
2328 // Resize logic is idle (no pending resize, no pending commit). 2330 // Resize logic is idle (no pending resize, no pending commit).
2329 EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString()); 2331 EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString());
(...skipping 18 matching lines...) Expand all
2348 // Resize renderer again, before receiving a frame. Should not produce a 2350 // Resize renderer again, before receiving a frame. Should not produce a
2349 // Resize message. 2351 // Resize message.
2350 view_->SetSize(size3); 2352 view_->SetSize(size3);
2351 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); 2353 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
2352 EXPECT_EQ(0u, sink_->message_count()); 2354 EXPECT_EQ(0u, sink_->message_count());
2353 2355
2354 // Receive a frame of the new size, should be skipped and not produce a Resize 2356 // Receive a frame of the new size, should be skipped and not produce a Resize
2355 // message. 2357 // message.
2356 view_->renderer_compositor_frame_sink_->Reset(); 2358 view_->renderer_compositor_frame_sink_->Reset();
2357 view_->SubmitCompositorFrame( 2359 view_->SubmitCompositorFrame(
2358 kArbitraryLocalSurfaceId, 2360 id3, MakeDelegatedFrame(1.f, size3, gfx::Rect(size3)));
2359 MakeDelegatedFrame(1.f, size3, gfx::Rect(size3)));
2360 view_->renderer_compositor_frame_sink_->Flush(); 2361 view_->renderer_compositor_frame_sink_->Flush();
2361 // Expect the frame ack; 2362 // Expect the frame ack;
2362 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); 2363 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack());
2363 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); 2364 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
2364 2365
2365 // Receive a frame of the correct size, should not be skipped and, and should 2366 // Receive a frame of the correct size, should not be skipped and, and should
2366 // produce a Resize message after the commit. 2367 // produce a Resize message after the commit.
2367 view_->renderer_compositor_frame_sink_->Reset(); 2368 view_->renderer_compositor_frame_sink_->Reset();
2368 view_->SubmitCompositorFrame( 2369 view_->SubmitCompositorFrame(
2369 kArbitraryLocalSurfaceId, 2370 id2, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2)));
2370 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2)));
2371 view_->renderer_compositor_frame_sink_->Flush(); 2371 view_->renderer_compositor_frame_sink_->Flush();
2372 cc::SurfaceId surface_id = view_->surface_id(); 2372 cc::SurfaceId surface_id = view_->surface_id();
2373 if (!surface_id.is_valid()) { 2373 if (!surface_id.is_valid()) {
2374 // No frame ack yet. 2374 // No frame ack yet.
2375 EXPECT_FALSE(view_->renderer_compositor_frame_sink_->did_receive_ack()); 2375 EXPECT_FALSE(view_->renderer_compositor_frame_sink_->did_receive_ack());
2376 } else { 2376 } else {
2377 // Frame isn't desired size, so early ack. 2377 // Frame isn't desired size, so early ack.
2378 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); 2378 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack());
2379 } 2379 }
2380 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); 2380 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2417 update_params.view_size = size3; 2417 update_params.view_size = size3;
2418 widget_host_->OnMessageReceived( 2418 widget_host_->OnMessageReceived(
2419 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); 2419 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params));
2420 sink_->ClearMessages(); 2420 sink_->ClearMessages();
2421 } 2421 }
2422 2422
2423 // Skipped frames should not drop their damage. 2423 // Skipped frames should not drop their damage.
2424 TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { 2424 TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) {
2425 gfx::Rect view_rect(100, 100); 2425 gfx::Rect view_rect(100, 100);
2426 gfx::Size frame_size = view_rect.size(); 2426 gfx::Size frame_size = view_rect.size();
2427 cc::LocalSurfaceId local_surface_id = kArbitraryLocalSurfaceId;
2427 2428
2428 view_->InitAsChild(nullptr); 2429 view_->InitAsChild(nullptr);
2429 aura::client::ParentWindowWithContext( 2430 aura::client::ParentWindowWithContext(
2430 view_->GetNativeView(), 2431 view_->GetNativeView(),
2431 parent_view_->GetNativeView()->GetRootWindow(), 2432 parent_view_->GetNativeView()->GetRootWindow(),
2432 gfx::Rect()); 2433 gfx::Rect());
2433 view_->SetSize(view_rect.size()); 2434 view_->SetSize(view_rect.size());
2434 2435
2435 MockWindowObserver observer; 2436 MockWindowObserver observer;
2436 view_->window_->AddObserver(&observer); 2437 view_->window_->AddObserver(&observer);
2437 2438
2438 // A full frame of damage. 2439 // A full frame of damage.
2439 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2440 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2440 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, 2441 view_->SubmitCompositorFrame(local_surface_id,
2441 MakeDelegatedFrame(1.f, frame_size, view_rect)); 2442 MakeDelegatedFrame(1.f, frame_size, view_rect));
2442 testing::Mock::VerifyAndClearExpectations(&observer); 2443 testing::Mock::VerifyAndClearExpectations(&observer);
2443 view_->RunOnCompositingDidCommit(); 2444 view_->RunOnCompositingDidCommit();
2444 2445
2445 // A partial damage frame. 2446 // A partial damage frame.
2446 gfx::Rect partial_view_rect(30, 30, 20, 20); 2447 gfx::Rect partial_view_rect(30, 30, 20, 20);
2447 EXPECT_CALL(observer, 2448 EXPECT_CALL(observer,
2448 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); 2449 OnDelegatedFrameDamage(view_->window_, partial_view_rect));
2449 view_->SubmitCompositorFrame( 2450 view_->SubmitCompositorFrame(
2450 kArbitraryLocalSurfaceId, 2451 local_surface_id, MakeDelegatedFrame(1.f, frame_size, partial_view_rect));
2451 MakeDelegatedFrame(1.f, frame_size, partial_view_rect));
2452 testing::Mock::VerifyAndClearExpectations(&observer); 2452 testing::Mock::VerifyAndClearExpectations(&observer);
2453 view_->RunOnCompositingDidCommit(); 2453 view_->RunOnCompositingDidCommit();
2454 2454
2455 EXPECT_FALSE(view_->resize_locked()); 2455 EXPECT_FALSE(view_->resize_locked());
2456 EXPECT_FALSE(view_->compositor_locked()); 2456 EXPECT_FALSE(view_->compositor_locked());
2457 2457
2458 // Lock the compositor. Now we should drop frames. 2458 // Lock the compositor. Now we should drop frames.
2459 view_rect = gfx::Rect(150, 150); 2459 view_rect = gfx::Rect(150, 150);
2460 view_->SetSize(view_rect.size()); 2460 view_->SetSize(view_rect.size());
2461 EXPECT_TRUE(view_->resize_locked()); 2461 EXPECT_TRUE(view_->resize_locked());
2462 EXPECT_TRUE(view_->compositor_locked()); 2462 EXPECT_TRUE(view_->compositor_locked());
2463 2463
2464 // This frame is dropped. 2464 // This frame is dropped.
2465 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40); 2465 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40);
2466 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); 2466 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0);
2467 view_->SubmitCompositorFrame( 2467 view_->SubmitCompositorFrame(
2468 kArbitraryLocalSurfaceId, 2468 local_surface_id,
2469 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); 2469 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1));
2470 testing::Mock::VerifyAndClearExpectations(&observer); 2470 testing::Mock::VerifyAndClearExpectations(&observer);
2471 view_->RunOnCompositingDidCommit(); 2471 view_->RunOnCompositingDidCommit();
2472 2472
2473 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20); 2473 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20);
2474 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); 2474 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0);
2475 view_->SubmitCompositorFrame( 2475 view_->SubmitCompositorFrame(
2476 kArbitraryLocalSurfaceId, 2476 local_surface_id,
2477 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); 2477 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2));
2478 testing::Mock::VerifyAndClearExpectations(&observer); 2478 testing::Mock::VerifyAndClearExpectations(&observer);
2479 view_->RunOnCompositingDidCommit(); 2479 view_->RunOnCompositingDidCommit();
2480 2480
2481 EXPECT_TRUE(view_->resize_locked()); 2481 EXPECT_TRUE(view_->resize_locked());
2482 EXPECT_TRUE(view_->compositor_locked()); 2482 EXPECT_TRUE(view_->compositor_locked());
2483 2483
2484 // Unlock the compositor. This frame should damage everything. 2484 // Unlock the compositor. This frame should damage everything.
2485 frame_size = view_rect.size(); 2485 frame_size = view_rect.size();
2486 local_surface_id = local_surface_id_allocator_.GenerateId();
2486 2487
2487 gfx::Rect new_damage_rect(5, 6, 10, 10); 2488 gfx::Rect new_damage_rect(5, 6, 10, 10);
2488 EXPECT_CALL(observer, 2489 EXPECT_CALL(observer,
2489 OnDelegatedFrameDamage(view_->window_, view_rect)); 2490 OnDelegatedFrameDamage(view_->window_, view_rect));
2490 view_->SubmitCompositorFrame( 2491 view_->SubmitCompositorFrame(
2491 kArbitraryLocalSurfaceId, 2492 local_surface_id, MakeDelegatedFrame(1.f, frame_size, new_damage_rect));
2492 MakeDelegatedFrame(1.f, frame_size, new_damage_rect));
2493 // The swap unlocks the compositor. 2493 // The swap unlocks the compositor.
2494 EXPECT_TRUE(view_->resize_locked()); 2494 EXPECT_TRUE(view_->resize_locked());
2495 EXPECT_FALSE(view_->compositor_locked()); 2495 EXPECT_FALSE(view_->compositor_locked());
2496 testing::Mock::VerifyAndClearExpectations(&observer); 2496 testing::Mock::VerifyAndClearExpectations(&observer);
2497 // The UI commit unlocks for further resize. 2497 // The UI commit unlocks for further resize.
2498 view_->RunOnCompositingDidCommit(); 2498 view_->RunOnCompositingDidCommit();
2499 EXPECT_FALSE(view_->resize_locked()); 2499 EXPECT_FALSE(view_->resize_locked());
2500 EXPECT_FALSE(view_->compositor_locked()); 2500 EXPECT_FALSE(view_->compositor_locked());
2501 2501
2502 // A partial damage frame, this should not be dropped. 2502 // A partial damage frame, this should not be dropped.
2503 EXPECT_CALL(observer, 2503 EXPECT_CALL(observer,
2504 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); 2504 OnDelegatedFrameDamage(view_->window_, partial_view_rect));
2505 view_->SubmitCompositorFrame( 2505 view_->SubmitCompositorFrame(
2506 kArbitraryLocalSurfaceId, 2506 local_surface_id, MakeDelegatedFrame(1.f, frame_size, partial_view_rect));
2507 MakeDelegatedFrame(1.f, frame_size, partial_view_rect));
2508 testing::Mock::VerifyAndClearExpectations(&observer); 2507 testing::Mock::VerifyAndClearExpectations(&observer);
2509 view_->RunOnCompositingDidCommit(); 2508 view_->RunOnCompositingDidCommit();
2510 EXPECT_FALSE(view_->resize_locked()); 2509 EXPECT_FALSE(view_->resize_locked());
2511 EXPECT_FALSE(view_->compositor_locked()); 2510 EXPECT_FALSE(view_->compositor_locked());
2512 2511
2513 // Resize to something empty. This doesn't lock anything since it's not 2512 // Resize to something empty. This doesn't lock anything since it's not
2514 // visible anymore anyways. 2513 // visible anymore anyways.
2515 view_rect = gfx::Rect(100, 0); 2514 view_rect = gfx::Rect(100, 0);
2516 view_->SetSize(view_rect.size()); 2515 view_->SetSize(view_rect.size());
2517 EXPECT_FALSE(view_->resize_locked()); 2516 EXPECT_FALSE(view_->resize_locked());
2518 EXPECT_FALSE(view_->compositor_locked()); 2517 EXPECT_FALSE(view_->compositor_locked());
2519 2518
2520 // We're never expecting empty frames, resize to something non-empty. 2519 // We're never expecting empty frames, resize to something non-empty.
2521 view_rect = gfx::Rect(100, 100); 2520 view_rect = gfx::Rect(100, 100);
2521 frame_size = view_rect.size();
2522 local_surface_id = local_surface_id_allocator_.GenerateId();
2522 view_->SetSize(view_rect.size()); 2523 view_->SetSize(view_rect.size());
2523 EXPECT_TRUE(view_->resize_locked()); 2524 EXPECT_TRUE(view_->resize_locked());
2524 EXPECT_TRUE(view_->compositor_locked()); 2525 EXPECT_TRUE(view_->compositor_locked());
2525 2526
2526 // This frame should not be dropped. 2527 // This frame should not be dropped.
2527 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2528 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2528 view_->SubmitCompositorFrame( 2529 view_->SubmitCompositorFrame(local_surface_id,
2529 kArbitraryLocalSurfaceId, 2530 MakeDelegatedFrame(1.f, frame_size, view_rect));
2530 MakeDelegatedFrame(1.f, view_rect.size(), view_rect));
2531 testing::Mock::VerifyAndClearExpectations(&observer); 2531 testing::Mock::VerifyAndClearExpectations(&observer);
2532 EXPECT_TRUE(view_->resize_locked()); 2532 EXPECT_TRUE(view_->resize_locked());
2533 EXPECT_FALSE(view_->compositor_locked()); 2533 EXPECT_FALSE(view_->compositor_locked());
2534 view_->RunOnCompositingDidCommit(); 2534 view_->RunOnCompositingDidCommit();
2535 EXPECT_FALSE(view_->resize_locked()); 2535 EXPECT_FALSE(view_->resize_locked());
2536 EXPECT_FALSE(view_->compositor_locked()); 2536 EXPECT_FALSE(view_->compositor_locked());
2537 2537
2538 view_->window_->RemoveObserver(&observer); 2538 view_->window_->RemoveObserver(&observer);
2539 } 2539 }
2540 2540
2541 // If resize races with a renderer frame, we should lock for the right size. 2541 // If resize races with a renderer frame, we should lock for the right size.
2542 TEST_F(RenderWidgetHostViewAuraTest, ResizeAfterReceivingFrame) { 2542 TEST_F(RenderWidgetHostViewAuraTest, ResizeAfterReceivingFrame) {
2543 gfx::Rect view_rect(100, 100); 2543 gfx::Rect view_rect(100, 100);
2544 gfx::Size frame_size = view_rect.size(); 2544 gfx::Size frame_size = view_rect.size();
2545 cc::LocalSurfaceId local_surface_id = kArbitraryLocalSurfaceId;
2545 2546
2546 view_->InitAsChild(nullptr); 2547 view_->InitAsChild(nullptr);
2547 aura::client::ParentWindowWithContext( 2548 aura::client::ParentWindowWithContext(
2548 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), 2549 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(),
2549 gfx::Rect()); 2550 gfx::Rect());
2550 view_->SetSize(view_rect.size()); 2551 view_->SetSize(view_rect.size());
2551 2552
2552 MockWindowObserver observer; 2553 MockWindowObserver observer;
2553 view_->window_->AddObserver(&observer); 2554 view_->window_->AddObserver(&observer);
2554 2555
2555 // A frame of initial size. 2556 // A frame of initial size.
2556 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2557 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2557 view_->SubmitCompositorFrame( 2558 view_->SubmitCompositorFrame(
2558 kArbitraryLocalSurfaceId, 2559 local_surface_id,
2559 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); 2560 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size)));
2560 testing::Mock::VerifyAndClearExpectations(&observer); 2561 testing::Mock::VerifyAndClearExpectations(&observer);
2561 view_->RunOnCompositingDidCommit(); 2562 view_->RunOnCompositingDidCommit();
2562 2563
2563 // A frame of initial size arrives, but we don't commit in the UI yet. 2564 // A frame of initial size arrives, but we don't commit in the UI yet.
2564 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _)); 2565 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _));
2565 view_->SubmitCompositorFrame( 2566 view_->SubmitCompositorFrame(
2566 kArbitraryLocalSurfaceId, 2567 local_surface_id,
2567 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); 2568 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size)));
2568 testing::Mock::VerifyAndClearExpectations(&observer); 2569 testing::Mock::VerifyAndClearExpectations(&observer);
2569 2570
2570 EXPECT_FALSE(view_->resize_locked()); 2571 EXPECT_FALSE(view_->resize_locked());
2571 EXPECT_FALSE(view_->compositor_locked()); 2572 EXPECT_FALSE(view_->compositor_locked());
2572 2573
2573 // Resize, and lock the compositor. Now we should drop frames of the old size. 2574 // Resize, and lock the compositor. Now we should drop frames of the old size.
2574 view_rect = gfx::Rect(150, 150); 2575 view_rect = gfx::Rect(150, 150);
2575 view_->SetSize(view_rect.size()); 2576 view_->SetSize(view_rect.size());
2576 EXPECT_TRUE(view_->resize_locked()); 2577 EXPECT_TRUE(view_->resize_locked());
2577 EXPECT_TRUE(view_->compositor_locked()); 2578 EXPECT_TRUE(view_->compositor_locked());
2578 2579
2579 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); 2580 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0);
2580 view_->SubmitCompositorFrame( 2581 view_->SubmitCompositorFrame(
2581 kArbitraryLocalSurfaceId, 2582 local_surface_id,
2582 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); 2583 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size)));
2583 testing::Mock::VerifyAndClearExpectations(&observer); 2584 testing::Mock::VerifyAndClearExpectations(&observer);
2584 2585
2585 // If the CompositorLock times out in the meantime, a commit would happen. 2586 // If the CompositorLock times out in the meantime, a commit would happen.
2586 // Verify that if a commit occurs, the lock remains and we reject frames 2587 // Verify that if a commit occurs, the lock remains and we reject frames
2587 // of the wrong size still. 2588 // of the wrong size still.
2588 view_->RunOnCompositingDidCommit(); 2589 view_->RunOnCompositingDidCommit();
2589 2590
2590 EXPECT_TRUE(view_->resize_locked()); 2591 EXPECT_TRUE(view_->resize_locked());
2591 // In this case we lied about it and the CompositorLock is still active. 2592 // In this case we lied about it and the CompositorLock is still active.
2592 EXPECT_TRUE(view_->compositor_locked()); 2593 EXPECT_TRUE(view_->compositor_locked());
2593 2594
2594 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); 2595 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0);
2595 view_->SubmitCompositorFrame( 2596 view_->SubmitCompositorFrame(
2596 kArbitraryLocalSurfaceId, 2597 local_surface_id,
2597 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); 2598 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size)));
2598 testing::Mock::VerifyAndClearExpectations(&observer); 2599 testing::Mock::VerifyAndClearExpectations(&observer);
2599 2600
2600 // A frame arrives of the new size, which will be accepted. 2601 // A frame arrives of the new size, which will be accepted.
2601 frame_size = view_rect.size(); 2602 frame_size = view_rect.size();
2603 local_surface_id = local_surface_id_allocator_.GenerateId();
2602 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _)); 2604 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _));
2603 view_->SubmitCompositorFrame( 2605 view_->SubmitCompositorFrame(
2604 kArbitraryLocalSurfaceId, 2606 local_surface_id,
2605 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); 2607 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size)));
2606 // Receiving the frame unlocks the compositor so it can commit. 2608 // Receiving the frame unlocks the compositor so it can commit.
2607 EXPECT_TRUE(view_->resize_locked()); 2609 EXPECT_TRUE(view_->resize_locked());
2608 EXPECT_FALSE(view_->compositor_locked()); 2610 EXPECT_FALSE(view_->compositor_locked());
2609 testing::Mock::VerifyAndClearExpectations(&observer); 2611 testing::Mock::VerifyAndClearExpectations(&observer);
2610 2612
2611 // When the frame of the correct size is committed, the CompositorResizeLock 2613 // When the frame of the correct size is committed, the CompositorResizeLock
2612 // is released. 2614 // is released.
2613 view_->RunOnCompositingDidCommit(); 2615 view_->RunOnCompositingDidCommit();
2614 EXPECT_FALSE(view_->resize_locked()); 2616 EXPECT_FALSE(view_->resize_locked());
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
2685 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, 2687 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId,
2686 MakeDelegatedFrame(1.f, frame_size, view_rect)); 2688 MakeDelegatedFrame(1.f, frame_size, view_rect));
2687 testing::Mock::VerifyAndClearExpectations(&observer); 2689 testing::Mock::VerifyAndClearExpectations(&observer);
2688 view_->RunOnCompositingDidCommit(); 2690 view_->RunOnCompositingDidCommit();
2689 2691
2690 // Signal that a new RendererCompositorFrameSink was created. 2692 // Signal that a new RendererCompositorFrameSink was created.
2691 view_->CreateNewRendererCompositorFrameSink(); 2693 view_->CreateNewRendererCompositorFrameSink();
2692 2694
2693 // Submit a frame from the new RendererCompositorFrameSink. 2695 // Submit a frame from the new RendererCompositorFrameSink.
2694 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2696 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2695 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), 2697 view_->SubmitCompositorFrame(local_surface_id_allocator_.GenerateId(),
2696 MakeDelegatedFrame(1.f, frame_size, view_rect)); 2698 MakeDelegatedFrame(1.f, frame_size, view_rect));
2697 testing::Mock::VerifyAndClearExpectations(&observer); 2699 testing::Mock::VerifyAndClearExpectations(&observer);
2698 view_->RunOnCompositingDidCommit(); 2700 view_->RunOnCompositingDidCommit();
2699 2701
2700 // Signal that a new RendererCompositorFrameSink was created. 2702 // Signal that a new RendererCompositorFrameSink was created.
2701 view_->CreateNewRendererCompositorFrameSink(); 2703 view_->CreateNewRendererCompositorFrameSink();
2702 2704
2703 // Submit a frame from the new RendererCompositorFrameSink. 2705 // Submit a frame from the new RendererCompositorFrameSink.
2704 view_->SubmitCompositorFrame( 2706 view_->SubmitCompositorFrame(
2705 CreateLocalSurfaceId(), 2707 local_surface_id_allocator_.GenerateId(),
2706 MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); 2708 MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect()));
2707 testing::Mock::VerifyAndClearExpectations(&observer); 2709 testing::Mock::VerifyAndClearExpectations(&observer);
2708 view_->RunOnCompositingDidCommit(); 2710 view_->RunOnCompositingDidCommit();
2709 2711
2710 // Signal that a new RendererCompositorFrameSink was created. 2712 // Signal that a new RendererCompositorFrameSink was created.
2711 view_->CreateNewRendererCompositorFrameSink(); 2713 view_->CreateNewRendererCompositorFrameSink();
2712 2714
2713 // Swap another frame, with a different surface id. 2715 // Swap another frame, with a different surface id.
2714 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2716 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2715 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), 2717 view_->SubmitCompositorFrame(local_surface_id_allocator_.GenerateId(),
2716 MakeDelegatedFrame(1.f, frame_size, view_rect)); 2718 MakeDelegatedFrame(1.f, frame_size, view_rect));
2717 testing::Mock::VerifyAndClearExpectations(&observer); 2719 testing::Mock::VerifyAndClearExpectations(&observer);
2718 view_->RunOnCompositingDidCommit(); 2720 view_->RunOnCompositingDidCommit();
2719 2721
2720 view_->window_->RemoveObserver(&observer); 2722 view_->window_->RemoveObserver(&observer);
2721 } 2723 }
2722 2724
2723 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { 2725 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) {
2724 view_->InitAsChild(nullptr); 2726 view_->InitAsChild(nullptr);
2725 2727
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
2844 views[0]->Show(); 2846 views[0]->Show();
2845 EXPECT_TRUE(views[0]->released_front_lock_active()); 2847 EXPECT_TRUE(views[0]->released_front_lock_active());
2846 // Make [0] hidden, it should stop waiting. 2848 // Make [0] hidden, it should stop waiting.
2847 views[0]->Hide(); 2849 views[0]->Hide();
2848 EXPECT_FALSE(views[0]->released_front_lock_active()); 2850 EXPECT_FALSE(views[0]->released_front_lock_active());
2849 2851
2850 // Make [1] hidden, resize it. It should drop its frame. 2852 // Make [1] hidden, resize it. It should drop its frame.
2851 views[1]->Hide(); 2853 views[1]->Hide();
2852 EXPECT_TRUE(views[1]->HasFrameData()); 2854 EXPECT_TRUE(views[1]->HasFrameData());
2853 gfx::Size size2(200, 200); 2855 gfx::Size size2(200, 200);
2856 cc::LocalSurfaceId id2 = local_surface_id_allocator_.GenerateId();
2854 views[1]->SetSize(size2); 2857 views[1]->SetSize(size2);
2855 EXPECT_FALSE(views[1]->HasFrameData()); 2858 EXPECT_FALSE(views[1]->HasFrameData());
2856 // Show it, it should block until we give it a frame. 2859 // Show it, it should block until we give it a frame.
2857 views[1]->Show(); 2860 views[1]->Show();
2858 EXPECT_TRUE(views[1]->released_front_lock_active()); 2861 EXPECT_TRUE(views[1]->released_front_lock_active());
2859 views[1]->SubmitCompositorFrame( 2862 views[1]->SubmitCompositorFrame(
2860 kArbitraryLocalSurfaceId, 2863 id2, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2)));
2861 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2)));
2862 EXPECT_FALSE(views[1]->released_front_lock_active()); 2864 EXPECT_FALSE(views[1]->released_front_lock_active());
2863 2865
2864 for (size_t i = 0; i < renderer_count - 1; ++i) 2866 for (size_t i = 0; i < renderer_count - 1; ++i)
2865 views[i]->Hide(); 2867 views[i]->Hide();
2866 2868
2867 // Allocate enough bitmaps so that two frames (proportionally) would be 2869 // Allocate enough bitmaps so that two frames (proportionally) would be
2868 // enough hit the handle limit. 2870 // enough hit the handle limit.
2869 int handles_per_frame = 5; 2871 int handles_per_frame = 5;
2870 FrameEvictionManager::GetInstance()->set_max_handles(handles_per_frame * 2); 2872 FrameEvictionManager::GetInstance()->set_max_handles(handles_per_frame * 2);
2871 2873
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2926 parent_view_->GetNativeView()->GetRootWindow(), 2928 parent_view_->GetNativeView()->GetRootWindow(),
2927 gfx::Rect()); 2929 gfx::Rect());
2928 views[i]->SetSize(view_rect.size()); 2930 views[i]->SetSize(view_rect.size());
2929 } 2931 }
2930 2932
2931 // Make each renderer visible and swap a frame on it. No eviction should 2933 // Make each renderer visible and swap a frame on it. No eviction should
2932 // occur because all frames are visible. 2934 // occur because all frames are visible.
2933 for (size_t i = 0; i < renderer_count; ++i) { 2935 for (size_t i = 0; i < renderer_count; ++i) {
2934 views[i]->Show(); 2936 views[i]->Show();
2935 views[i]->SubmitCompositorFrame( 2937 views[i]->SubmitCompositorFrame(
2936 i ? CreateLocalSurfaceId() : kArbitraryLocalSurfaceId, 2938 i ? local_surface_id_allocator_.GenerateId() : kArbitraryLocalSurfaceId,
2937 MakeDelegatedFrame(1.f, frame_size, view_rect)); 2939 MakeDelegatedFrame(1.f, frame_size, view_rect));
2938 EXPECT_TRUE(views[i]->HasFrameData()); 2940 EXPECT_TRUE(views[i]->HasFrameData());
2939 } 2941 }
2940 2942
2941 // If we hide [0], then [0] should be evicted. 2943 // If we hide [0], then [0] should be evicted.
2942 views[0]->Hide(); 2944 views[0]->Hide();
2943 EXPECT_FALSE(views[0]->HasFrameData()); 2945 EXPECT_FALSE(views[0]->HasFrameData());
2944 2946
2945 // If we lock [0] before hiding it, then [0] should not be evicted. 2947 // If we lock [0] before hiding it, then [0] should not be evicted.
2946 views[0]->Show(); 2948 views[0]->Show();
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
3072 cc::BeginFrameObserver* last_observer_ = nullptr; 3074 cc::BeginFrameObserver* last_observer_ = nullptr;
3073 }; 3075 };
3074 } // namespace 3076 } // namespace
3075 3077
3076 // Tests that BeginFrameAcks are forwarded correctly from the 3078 // Tests that BeginFrameAcks are forwarded correctly from the
3077 // SwapCompositorFrame and OnBeginFrameDidNotSwap IPCs through 3079 // SwapCompositorFrame and OnBeginFrameDidNotSwap IPCs through
3078 // DelegatedFrameHost and its CompositorFrameSinkSupport. 3080 // DelegatedFrameHost and its CompositorFrameSinkSupport.
3079 TEST_F(RenderWidgetHostViewAuraTest, ForwardsBeginFrameAcks) { 3081 TEST_F(RenderWidgetHostViewAuraTest, ForwardsBeginFrameAcks) {
3080 gfx::Rect view_rect(100, 100); 3082 gfx::Rect view_rect(100, 100);
3081 gfx::Size frame_size = view_rect.size(); 3083 gfx::Size frame_size = view_rect.size();
3084 cc::LocalSurfaceId local_surface_id = kArbitraryLocalSurfaceId;
3082 3085
3083 view_->InitAsChild(nullptr); 3086 view_->InitAsChild(nullptr);
3084 aura::client::ParentWindowWithContext( 3087 aura::client::ParentWindowWithContext(
3085 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), 3088 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(),
3086 gfx::Rect()); 3089 gfx::Rect());
3087 view_->SetSize(view_rect.size()); 3090 view_->SetSize(view_rect.size());
3088 3091
3089 // Replace BeginFrameSource so that we can observe acknowledgments. Since the 3092 // Replace BeginFrameSource so that we can observe acknowledgments. Since the
3090 // DelegatedFrameHost doesn't directly observe our BeginFrameSource, 3093 // DelegatedFrameHost doesn't directly observe our BeginFrameSource,
3091 // |observer_tracker| grabs a pointer to the observer (the 3094 // |observer_tracker| grabs a pointer to the observer (the
(...skipping 13 matching lines...) Expand all
3105 3108
3106 { 3109 {
3107 cc::BeginFrameArgs args = 3110 cc::BeginFrameArgs args =
3108 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u); 3111 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u);
3109 source.TestOnBeginFrame(args); 3112 source.TestOnBeginFrame(args);
3110 3113
3111 // Ack from CompositorFrame is forwarded. 3114 // Ack from CompositorFrame is forwarded.
3112 cc::BeginFrameAck ack(source_id, 5, 4, true); 3115 cc::BeginFrameAck ack(source_id, 5, 4, true);
3113 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); 3116 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect);
3114 frame.metadata.begin_frame_ack = ack; 3117 frame.metadata.begin_frame_ack = ack;
3115 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 3118 view_->SubmitCompositorFrame(local_surface_id, std::move(frame));
3116 view_->RunOnCompositingDidCommit(); 3119 view_->RunOnCompositingDidCommit();
3117 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 3120 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3118 } 3121 }
3119 3122
3120 { 3123 {
3121 cc::BeginFrameArgs args = 3124 cc::BeginFrameArgs args =
3122 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u); 3125 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u);
3123 source.TestOnBeginFrame(args); 3126 source.TestOnBeginFrame(args);
3124 3127
3125 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. 3128 // Explicit ack through OnBeginFrameDidNotSwap is forwarded.
(...skipping 12 matching lines...) Expand all
3138 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u); 3141 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u);
3139 source.TestOnBeginFrame(args); 3142 source.TestOnBeginFrame(args);
3140 3143
3141 // Ack from CompositorFrame is forwarded with old 3144 // Ack from CompositorFrame is forwarded with old
3142 // latest_confirmed_sequence_number and without damage. 3145 // latest_confirmed_sequence_number and without damage.
3143 cc::BeginFrameAck ack(source_id, 7, 7, true); 3146 cc::BeginFrameAck ack(source_id, 7, 7, true);
3144 gfx::Rect dropped_damage_rect(10, 20, 30, 40); 3147 gfx::Rect dropped_damage_rect(10, 20, 30, 40);
3145 cc::CompositorFrame frame = 3148 cc::CompositorFrame frame =
3146 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); 3149 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect);
3147 frame.metadata.begin_frame_ack = ack; 3150 frame.metadata.begin_frame_ack = ack;
3148 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 3151 view_->SubmitCompositorFrame(local_surface_id, std::move(frame));
3149 view_->RunOnCompositingDidCommit(); 3152 view_->RunOnCompositingDidCommit();
3150 ack.latest_confirmed_sequence_number = 4; 3153 ack.latest_confirmed_sequence_number = 4;
3151 ack.has_damage = false; 3154 ack.has_damage = false;
3152 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 3155 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3153 } 3156 }
3154 3157
3155 // Change source_id known to the view. This should reset the 3158 // Change source_id known to the view. This should reset the
3156 // latest_confirmed_sequence_number tracked by the view. 3159 // latest_confirmed_sequence_number tracked by the view.
3157 source_id = cc::BeginFrameArgs::kManualSourceId; 3160 source_id = cc::BeginFrameArgs::kManualSourceId;
3158 3161
3159 { 3162 {
3160 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( 3163 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
3161 BEGINFRAME_FROM_HERE, source_id, 10u); 3164 BEGINFRAME_FROM_HERE, source_id, 10u);
3162 source.TestOnBeginFrame(args); 3165 source.TestOnBeginFrame(args);
3163 3166
3164 // Ack from CompositorFrame is forwarded with invalid 3167 // Ack from CompositorFrame is forwarded with invalid
3165 // latest_confirmed_sequence_number and without damage. 3168 // latest_confirmed_sequence_number and without damage.
3166 cc::BeginFrameAck ack(source_id, 10, 10, true); 3169 cc::BeginFrameAck ack(source_id, 10, 10, true);
3167 gfx::Rect dropped_damage_rect(10, 20, 30, 40); 3170 gfx::Rect dropped_damage_rect(10, 20, 30, 40);
3168 cc::CompositorFrame frame = 3171 cc::CompositorFrame frame =
3169 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); 3172 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect);
3170 frame.metadata.begin_frame_ack = ack; 3173 frame.metadata.begin_frame_ack = ack;
3171 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 3174 view_->SubmitCompositorFrame(local_surface_id, std::move(frame));
3172 view_->RunOnCompositingDidCommit(); 3175 view_->RunOnCompositingDidCommit();
3173 ack.latest_confirmed_sequence_number = 3176 ack.latest_confirmed_sequence_number =
3174 cc::BeginFrameArgs::kInvalidFrameNumber; 3177 cc::BeginFrameArgs::kInvalidFrameNumber;
3175 ack.has_damage = false; 3178 ack.has_damage = false;
3176 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 3179 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3177 } 3180 }
3178 3181
3179 { 3182 {
3180 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( 3183 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
3181 BEGINFRAME_FROM_HERE, source_id, 11u); 3184 BEGINFRAME_FROM_HERE, source_id, 11u);
3182 source.TestOnBeginFrame(args); 3185 source.TestOnBeginFrame(args);
3183 3186
3184 // Explicit ack through OnBeginFrameDidNotSwap is forwarded with invalid 3187 // Explicit ack through OnBeginFrameDidNotSwap is forwarded with invalid
3185 // latest_confirmed_sequence_number. 3188 // latest_confirmed_sequence_number.
3186 cc::BeginFrameAck ack(source_id, 11, 11, false); 3189 cc::BeginFrameAck ack(source_id, 11, 11, false);
3187 view_->OnBeginFrameDidNotSwap(ack); 3190 view_->OnBeginFrameDidNotSwap(ack);
3188 ack.latest_confirmed_sequence_number = 3191 ack.latest_confirmed_sequence_number =
3189 cc::BeginFrameArgs::kInvalidFrameNumber; 3192 cc::BeginFrameArgs::kInvalidFrameNumber;
3190 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 3193 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3191 } 3194 }
3192 3195
3193 // Unlock the compositor again with a new CompositorFrame of correct size. 3196 // Unlock the compositor again with a new CompositorFrame of correct size.
3194 frame_size = view_rect.size(); 3197 frame_size = view_rect.size();
3198 local_surface_id = local_surface_id_allocator_.GenerateId();
3195 3199
3196 { 3200 {
3197 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( 3201 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
3198 BEGINFRAME_FROM_HERE, source_id, 12u); 3202 BEGINFRAME_FROM_HERE, source_id, 12u);
3199 source.TestOnBeginFrame(args); 3203 source.TestOnBeginFrame(args);
3200 3204
3201 // Ack from CompositorFrame is forwarded. 3205 // Ack from CompositorFrame is forwarded.
3202 cc::BeginFrameAck ack(source_id, 12, 12, true); 3206 cc::BeginFrameAck ack(source_id, 12, 12, true);
3203 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); 3207 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect);
3204 frame.metadata.begin_frame_ack = ack; 3208 frame.metadata.begin_frame_ack = ack;
3205 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 3209 view_->SubmitCompositorFrame(local_surface_id, std::move(frame));
3206 view_->RunOnCompositingDidCommit(); 3210 view_->RunOnCompositingDidCommit();
3207 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 3211 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3208 } 3212 }
3209 3213
3210 { 3214 {
3211 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( 3215 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
3212 BEGINFRAME_FROM_HERE, source_id, 13u); 3216 BEGINFRAME_FROM_HERE, source_id, 13u);
3213 source.TestOnBeginFrame(args); 3217 source.TestOnBeginFrame(args);
3214 3218
3215 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. 3219 // Explicit ack through OnBeginFrameDidNotSwap is forwarded.
(...skipping 2331 matching lines...) Expand 10 before | Expand all | Expand 10 after
5547 // There is no composition in the beginning. 5551 // There is no composition in the beginning.
5548 EXPECT_FALSE(has_composition_text()); 5552 EXPECT_FALSE(has_composition_text());
5549 SetHasCompositionTextToTrue(); 5553 SetHasCompositionTextToTrue();
5550 view->ImeCancelComposition(); 5554 view->ImeCancelComposition();
5551 // The composition must have been canceled. 5555 // The composition must have been canceled.
5552 EXPECT_FALSE(has_composition_text()); 5556 EXPECT_FALSE(has_composition_text());
5553 } 5557 }
5554 } 5558 }
5555 5559
5556 } // namespace content 5560 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698