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

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: Fixed Android Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <tuple> 10 #include <tuple>
11 #include <utility> 11 #include <utility>
12 12
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/location.h" 14 #include "base/location.h"
15 #include "base/macros.h" 15 #include "base/macros.h"
16 #include "base/memory/ptr_util.h" 16 #include "base/memory/ptr_util.h"
17 #include "base/memory/shared_memory.h" 17 #include "base/memory/shared_memory.h"
18 #include "base/message_loop/message_loop.h" 18 #include "base/message_loop/message_loop.h"
19 #include "base/run_loop.h" 19 #include "base/run_loop.h"
20 #include "base/single_thread_task_runner.h" 20 #include "base/single_thread_task_runner.h"
21 #include "base/strings/utf_string_conversions.h" 21 #include "base/strings/utf_string_conversions.h"
22 #include "base/test/scoped_feature_list.h" 22 #include "base/test/scoped_feature_list.h"
23 #include "base/test/simple_test_tick_clock.h" 23 #include "base/test/simple_test_tick_clock.h"
24 #include "base/threading/thread_task_runner_handle.h" 24 #include "base/threading/thread_task_runner_handle.h"
25 #include "build/build_config.h" 25 #include "build/build_config.h"
26 #include "cc/output/begin_frame_args.h" 26 #include "cc/output/begin_frame_args.h"
27 #include "cc/output/compositor_frame.h" 27 #include "cc/output/compositor_frame.h"
28 #include "cc/output/compositor_frame_metadata.h" 28 #include "cc/output/compositor_frame_metadata.h"
29 #include "cc/output/copy_output_request.h" 29 #include "cc/output/copy_output_request.h"
30 #include "cc/surfaces/local_surface_id_allocator.h"
30 #include "cc/surfaces/surface.h" 31 #include "cc/surfaces/surface.h"
31 #include "cc/surfaces/surface_manager.h" 32 #include "cc/surfaces/surface_manager.h"
32 #include "cc/test/begin_frame_args_test.h" 33 #include "cc/test/begin_frame_args_test.h"
33 #include "cc/test/fake_external_begin_frame_source.h" 34 #include "cc/test/fake_external_begin_frame_source.h"
34 #include "components/viz/display_compositor/gl_helper.h" 35 #include "components/viz/display_compositor/gl_helper.h"
35 #include "components/viz/display_compositor/host_shared_bitmap_manager.h" 36 #include "components/viz/display_compositor/host_shared_bitmap_manager.h"
36 #include "content/browser/browser_thread_impl.h" 37 #include "content/browser/browser_thread_impl.h"
37 #include "content/browser/compositor/test/no_transport_image_transport_factory.h " 38 #include "content/browser/compositor/test/no_transport_image_transport_factory.h "
38 #include "content/browser/frame_host/render_widget_host_view_guest.h" 39 #include "content/browser/frame_host/render_widget_host_view_guest.h"
39 #include "content/browser/gpu/compositor_util.h" 40 #include "content/browser/gpu/compositor_util.h"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 void InstallDelegatedFrameHostClient( 124 void InstallDelegatedFrameHostClient(
124 RenderWidgetHostViewAura* render_widget_host_view, 125 RenderWidgetHostViewAura* render_widget_host_view,
125 std::unique_ptr<DelegatedFrameHostClient> delegated_frame_host_client); 126 std::unique_ptr<DelegatedFrameHostClient> delegated_frame_host_client);
126 127
127 namespace { 128 namespace {
128 129
129 const cc::LocalSurfaceId kArbitraryLocalSurfaceId( 130 const cc::LocalSurfaceId kArbitraryLocalSurfaceId(
130 1, 131 1,
131 base::UnguessableToken::Deserialize(2, 3)); 132 base::UnguessableToken::Deserialize(2, 3));
132 133
133 cc::LocalSurfaceId CreateLocalSurfaceId() {
134 return cc::LocalSurfaceId(1, base::UnguessableToken::Create());
135 }
136
137 class TestOverscrollDelegate : public OverscrollControllerDelegate { 134 class TestOverscrollDelegate : public OverscrollControllerDelegate {
138 public: 135 public:
139 explicit TestOverscrollDelegate(RenderWidgetHostView* view) 136 explicit TestOverscrollDelegate(RenderWidgetHostView* view)
140 : view_(view), 137 : view_(view),
141 current_mode_(OVERSCROLL_NONE), 138 current_mode_(OVERSCROLL_NONE),
142 completed_mode_(OVERSCROLL_NONE), 139 completed_mode_(OVERSCROLL_NONE),
143 delta_x_(0.f), 140 delta_x_(0.f),
144 delta_y_(0.f) {} 141 delta_y_(0.f) {}
145 142
146 ~TestOverscrollDelegate() override {} 143 ~TestOverscrollDelegate() override {}
(...skipping 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 // XXX
2262 view_->DisableResizeLock(); 2263 view_->DisableResizeLock();
2263 2264
2264 view_->InitAsChild(nullptr); 2265 view_->InitAsChild(nullptr);
2265 aura::client::ParentWindowWithContext( 2266 aura::client::ParentWindowWithContext(
2266 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), 2267 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(),
2267 gfx::Rect()); 2268 gfx::Rect());
2268 view_->SetSize(large_size); 2269 view_->SetSize(large_size);
2269 view_->Show(); 2270 view_->Show();
2270 cc::CompositorFrame frame = 2271 cc::CompositorFrame frame =
2271 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size)); 2272 MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size));
2272 frame.metadata.root_background_color = SK_ColorRED; 2273 frame.metadata.root_background_color = SK_ColorRED;
2273 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 2274 view_->SubmitCompositorFrame(small_id, std::move(frame));
2274 2275
2275 ui::Layer* parent_layer = view_->GetNativeView()->layer(); 2276 ui::Layer* parent_layer = view_->GetNativeView()->layer();
2276 2277
2277 ASSERT_EQ(2u, parent_layer->children().size()); 2278 ASSERT_EQ(2u, parent_layer->children().size());
2278 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds()); 2279 EXPECT_EQ(gfx::Rect(40, 0, 60, 100), parent_layer->children()[0]->bounds());
2279 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color()); 2280 EXPECT_EQ(SK_ColorRED, parent_layer->children()[0]->background_color());
2280 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds()); 2281 EXPECT_EQ(gfx::Rect(0, 45, 40, 55), parent_layer->children()[1]->bounds());
2281 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color()); 2282 EXPECT_EQ(SK_ColorRED, parent_layer->children()[1]->background_color());
2282 2283
2283 delegates_.back()->set_is_fullscreen(true); 2284 delegates_.back()->set_is_fullscreen(true);
2284 view_->SetSize(medium_size); 2285 view_->SetSize(medium_size);
2285 2286
2286 // Right gutter is unnecessary. 2287 // Right gutter is unnecessary.
2287 ASSERT_EQ(1u, parent_layer->children().size()); 2288 ASSERT_EQ(1u, parent_layer->children().size());
2288 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds()); 2289 EXPECT_EQ(gfx::Rect(0, 45, 40, 50), parent_layer->children()[0]->bounds());
2289 2290
2290 // RWH is fullscreen, so gutters should be black. 2291 // RWH is fullscreen, so gutters should be black.
2291 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color()); 2292 EXPECT_EQ(SK_ColorBLACK, parent_layer->children()[0]->background_color());
2292 2293
2293 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size)); 2294 frame = MakeDelegatedFrame(1.f, medium_size, gfx::Rect(medium_size));
2294 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 2295 view_->SubmitCompositorFrame(medium_id, std::move(frame));
2295 EXPECT_EQ(0u, parent_layer->children().size()); 2296 EXPECT_EQ(0u, parent_layer->children().size());
2296 2297
2297 view_->SetSize(large_size); 2298 view_->SetSize(large_size);
2298 ASSERT_EQ(2u, parent_layer->children().size()); 2299 ASSERT_EQ(2u, parent_layer->children().size());
2299 2300
2300 // This should evict the frame and remove the gutter layers. 2301 // This should evict the frame and remove the gutter layers.
2301 view_->Hide(); 2302 view_->Hide();
2302 view_->SetSize(small_size); 2303 view_->SetSize(small_size);
2303 ASSERT_EQ(0u, parent_layer->children().size()); 2304 ASSERT_EQ(0u, parent_layer->children().size());
2304 } 2305 }
2305 2306
2306 TEST_F(RenderWidgetHostViewAuraTest, Resize) { 2307 TEST_F(RenderWidgetHostViewAuraTest, Resize) {
2307 gfx::Size size1(100, 100); 2308 gfx::Size size1(100, 100);
2308 gfx::Size size2(200, 200); 2309 gfx::Size size2(200, 200);
2309 gfx::Size size3(300, 300); 2310 gfx::Size size3(300, 300);
2311 cc::LocalSurfaceId id1 = local_surface_id_allocator_.GenerateId();
2312 cc::LocalSurfaceId id2 = local_surface_id_allocator_.GenerateId();
2313 cc::LocalSurfaceId id3 = local_surface_id_allocator_.GenerateId();
2310 2314
2311 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow(); 2315 aura::Window* root_window = parent_view_->GetNativeView()->GetRootWindow();
2312 view_->InitAsChild(nullptr); 2316 view_->InitAsChild(nullptr);
2313 aura::client::ParentWindowWithContext( 2317 aura::client::ParentWindowWithContext(
2314 view_->GetNativeView(), root_window, gfx::Rect(size1)); 2318 view_->GetNativeView(), root_window, gfx::Rect(size1));
2315 view_->Show(); 2319 view_->Show();
2316 view_->SetSize(size1); 2320 view_->SetSize(size1);
2317 view_->SubmitCompositorFrame( 2321 view_->SubmitCompositorFrame(
2318 kArbitraryLocalSurfaceId, 2322 id1, MakeDelegatedFrame(1.f, size1, gfx::Rect(size1)));
2319 MakeDelegatedFrame(1.f, size1, gfx::Rect(size1)));
2320 ui::DrawWaiterForTest::WaitForCommit( 2323 ui::DrawWaiterForTest::WaitForCommit(
2321 root_window->GetHost()->compositor()); 2324 root_window->GetHost()->compositor());
2322 ViewHostMsg_UpdateRect_Params update_params; 2325 ViewHostMsg_UpdateRect_Params update_params;
2323 update_params.view_size = size1; 2326 update_params.view_size = size1;
2324 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK; 2327 update_params.flags = ViewHostMsg_UpdateRect_Flags::IS_RESIZE_ACK;
2325 widget_host_->OnMessageReceived( 2328 widget_host_->OnMessageReceived(
2326 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); 2329 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params));
2327 sink_->ClearMessages(); 2330 sink_->ClearMessages();
2328 // Resize logic is idle (no pending resize, no pending commit). 2331 // Resize logic is idle (no pending resize, no pending commit).
2329 EXPECT_EQ(size1.ToString(), view_->GetRequestedRendererSize().ToString()); 2332 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 2351 // Resize renderer again, before receiving a frame. Should not produce a
2349 // Resize message. 2352 // Resize message.
2350 view_->SetSize(size3); 2353 view_->SetSize(size3);
2351 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); 2354 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
2352 EXPECT_EQ(0u, sink_->message_count()); 2355 EXPECT_EQ(0u, sink_->message_count());
2353 2356
2354 // Receive a frame of the new size, should be skipped and not produce a Resize 2357 // Receive a frame of the new size, should be skipped and not produce a Resize
2355 // message. 2358 // message.
2356 view_->renderer_compositor_frame_sink_->Reset(); 2359 view_->renderer_compositor_frame_sink_->Reset();
2357 view_->SubmitCompositorFrame( 2360 view_->SubmitCompositorFrame(
2358 kArbitraryLocalSurfaceId, 2361 id3, MakeDelegatedFrame(1.f, size3, gfx::Rect(size3)));
2359 MakeDelegatedFrame(1.f, size3, gfx::Rect(size3)));
2360 view_->renderer_compositor_frame_sink_->Flush(); 2362 view_->renderer_compositor_frame_sink_->Flush();
2361 // Expect the frame ack; 2363 // Expect the frame ack;
2362 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); 2364 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack());
2363 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); 2365 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString());
2364 2366
2365 // Receive a frame of the correct size, should not be skipped and, and should 2367 // Receive a frame of the correct size, should not be skipped and, and should
2366 // produce a Resize message after the commit. 2368 // produce a Resize message after the commit.
2367 view_->renderer_compositor_frame_sink_->Reset(); 2369 view_->renderer_compositor_frame_sink_->Reset();
2368 view_->SubmitCompositorFrame( 2370 view_->SubmitCompositorFrame(
2369 kArbitraryLocalSurfaceId, 2371 id2, MakeDelegatedFrame(1.f, size2, gfx::Rect(size2)));
2370 MakeDelegatedFrame(1.f, size2, gfx::Rect(size2)));
2371 view_->renderer_compositor_frame_sink_->Flush(); 2372 view_->renderer_compositor_frame_sink_->Flush();
2372 cc::SurfaceId surface_id = view_->surface_id(); 2373 cc::SurfaceId surface_id = view_->surface_id();
2373 if (!surface_id.is_valid()) { 2374 if (!surface_id.is_valid()) {
2374 // No frame ack yet. 2375 // No frame ack yet.
2375 EXPECT_FALSE(view_->renderer_compositor_frame_sink_->did_receive_ack()); 2376 EXPECT_FALSE(view_->renderer_compositor_frame_sink_->did_receive_ack());
2376 } else { 2377 } else {
2377 // Frame isn't desired size, so early ack. 2378 // Frame isn't desired size, so early ack.
2378 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack()); 2379 EXPECT_TRUE(view_->renderer_compositor_frame_sink_->did_receive_ack());
2379 } 2380 }
2380 EXPECT_EQ(size2.ToString(), view_->GetRequestedRendererSize().ToString()); 2381 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; 2418 update_params.view_size = size3;
2418 widget_host_->OnMessageReceived( 2419 widget_host_->OnMessageReceived(
2419 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params)); 2420 ViewHostMsg_UpdateRect(widget_host_->GetRoutingID(), update_params));
2420 sink_->ClearMessages(); 2421 sink_->ClearMessages();
2421 } 2422 }
2422 2423
2423 // Skipped frames should not drop their damage. 2424 // Skipped frames should not drop their damage.
2424 TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) { 2425 TEST_F(RenderWidgetHostViewAuraTest, SkippedDelegatedFrames) {
2425 gfx::Rect view_rect(100, 100); 2426 gfx::Rect view_rect(100, 100);
2426 gfx::Size frame_size = view_rect.size(); 2427 gfx::Size frame_size = view_rect.size();
2428 cc::LocalSurfaceId local_surface_id = kArbitraryLocalSurfaceId;
2427 2429
2428 view_->InitAsChild(nullptr); 2430 view_->InitAsChild(nullptr);
2429 aura::client::ParentWindowWithContext( 2431 aura::client::ParentWindowWithContext(
2430 view_->GetNativeView(), 2432 view_->GetNativeView(),
2431 parent_view_->GetNativeView()->GetRootWindow(), 2433 parent_view_->GetNativeView()->GetRootWindow(),
2432 gfx::Rect()); 2434 gfx::Rect());
2433 view_->SetSize(view_rect.size()); 2435 view_->SetSize(view_rect.size());
2434 2436
2435 MockWindowObserver observer; 2437 MockWindowObserver observer;
2436 view_->window_->AddObserver(&observer); 2438 view_->window_->AddObserver(&observer);
2437 2439
2438 // A full frame of damage. 2440 // A full frame of damage.
2439 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2441 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2440 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, 2442 view_->SubmitCompositorFrame(local_surface_id,
2441 MakeDelegatedFrame(1.f, frame_size, view_rect)); 2443 MakeDelegatedFrame(1.f, frame_size, view_rect));
2442 testing::Mock::VerifyAndClearExpectations(&observer); 2444 testing::Mock::VerifyAndClearExpectations(&observer);
2443 view_->RunOnCompositingDidCommit(); 2445 view_->RunOnCompositingDidCommit();
2444 2446
2445 // A partial damage frame. 2447 // A partial damage frame.
2446 gfx::Rect partial_view_rect(30, 30, 20, 20); 2448 gfx::Rect partial_view_rect(30, 30, 20, 20);
2447 EXPECT_CALL(observer, 2449 EXPECT_CALL(observer,
2448 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); 2450 OnDelegatedFrameDamage(view_->window_, partial_view_rect));
2449 view_->SubmitCompositorFrame( 2451 view_->SubmitCompositorFrame(
2450 kArbitraryLocalSurfaceId, 2452 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); 2453 testing::Mock::VerifyAndClearExpectations(&observer);
2453 view_->RunOnCompositingDidCommit(); 2454 view_->RunOnCompositingDidCommit();
2454 2455
2455 EXPECT_FALSE(view_->resize_locked()); 2456 EXPECT_FALSE(view_->resize_locked());
2456 EXPECT_FALSE(view_->compositor_locked()); 2457 EXPECT_FALSE(view_->compositor_locked());
2457 2458
2458 // Lock the compositor. Now we should drop frames. 2459 // Lock the compositor. Now we should drop frames.
2459 view_rect = gfx::Rect(150, 150); 2460 view_rect = gfx::Rect(150, 150);
2460 view_->SetSize(view_rect.size()); 2461 view_->SetSize(view_rect.size());
2461 EXPECT_TRUE(view_->resize_locked()); 2462 EXPECT_TRUE(view_->resize_locked());
2462 EXPECT_TRUE(view_->compositor_locked()); 2463 EXPECT_TRUE(view_->compositor_locked());
2463 2464
2464 // This frame is dropped. 2465 // This frame is dropped.
2465 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40); 2466 gfx::Rect dropped_damage_rect_1(10, 20, 30, 40);
2466 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); 2467 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0);
2467 view_->SubmitCompositorFrame( 2468 view_->SubmitCompositorFrame(
2468 kArbitraryLocalSurfaceId, 2469 local_surface_id,
2469 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1)); 2470 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_1));
2470 testing::Mock::VerifyAndClearExpectations(&observer); 2471 testing::Mock::VerifyAndClearExpectations(&observer);
2471 view_->RunOnCompositingDidCommit(); 2472 view_->RunOnCompositingDidCommit();
2472 2473
2473 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20); 2474 gfx::Rect dropped_damage_rect_2(40, 50, 10, 20);
2474 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); 2475 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0);
2475 view_->SubmitCompositorFrame( 2476 view_->SubmitCompositorFrame(
2476 kArbitraryLocalSurfaceId, 2477 local_surface_id,
2477 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2)); 2478 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect_2));
2478 testing::Mock::VerifyAndClearExpectations(&observer); 2479 testing::Mock::VerifyAndClearExpectations(&observer);
2479 view_->RunOnCompositingDidCommit(); 2480 view_->RunOnCompositingDidCommit();
2480 2481
2481 EXPECT_TRUE(view_->resize_locked()); 2482 EXPECT_TRUE(view_->resize_locked());
2482 EXPECT_TRUE(view_->compositor_locked()); 2483 EXPECT_TRUE(view_->compositor_locked());
2483 2484
2484 // Unlock the compositor. This frame should damage everything. 2485 // Unlock the compositor. This frame should damage everything.
2485 frame_size = view_rect.size(); 2486 frame_size = view_rect.size();
2487 local_surface_id = local_surface_id_allocator_.GenerateId();
2486 2488
2487 gfx::Rect new_damage_rect(5, 6, 10, 10); 2489 gfx::Rect new_damage_rect(5, 6, 10, 10);
2488 EXPECT_CALL(observer, 2490 EXPECT_CALL(observer,
2489 OnDelegatedFrameDamage(view_->window_, view_rect)); 2491 OnDelegatedFrameDamage(view_->window_, view_rect));
2490 view_->SubmitCompositorFrame( 2492 view_->SubmitCompositorFrame(
2491 kArbitraryLocalSurfaceId, 2493 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. 2494 // The swap unlocks the compositor.
2494 EXPECT_TRUE(view_->resize_locked()); 2495 EXPECT_TRUE(view_->resize_locked());
2495 EXPECT_FALSE(view_->compositor_locked()); 2496 EXPECT_FALSE(view_->compositor_locked());
2496 testing::Mock::VerifyAndClearExpectations(&observer); 2497 testing::Mock::VerifyAndClearExpectations(&observer);
2497 // The UI commit unlocks for further resize. 2498 // The UI commit unlocks for further resize.
2498 view_->RunOnCompositingDidCommit(); 2499 view_->RunOnCompositingDidCommit();
2499 EXPECT_FALSE(view_->resize_locked()); 2500 EXPECT_FALSE(view_->resize_locked());
2500 EXPECT_FALSE(view_->compositor_locked()); 2501 EXPECT_FALSE(view_->compositor_locked());
2501 2502
2502 // A partial damage frame, this should not be dropped. 2503 // A partial damage frame, this should not be dropped.
2503 EXPECT_CALL(observer, 2504 EXPECT_CALL(observer,
2504 OnDelegatedFrameDamage(view_->window_, partial_view_rect)); 2505 OnDelegatedFrameDamage(view_->window_, partial_view_rect));
2505 view_->SubmitCompositorFrame( 2506 view_->SubmitCompositorFrame(
2506 kArbitraryLocalSurfaceId, 2507 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); 2508 testing::Mock::VerifyAndClearExpectations(&observer);
2509 view_->RunOnCompositingDidCommit(); 2509 view_->RunOnCompositingDidCommit();
2510 EXPECT_FALSE(view_->resize_locked()); 2510 EXPECT_FALSE(view_->resize_locked());
2511 EXPECT_FALSE(view_->compositor_locked()); 2511 EXPECT_FALSE(view_->compositor_locked());
2512 2512
2513 // Resize to something empty. This doesn't lock anything since it's not 2513 // Resize to something empty. This doesn't lock anything since it's not
2514 // visible anymore anyways. 2514 // visible anymore anyways.
2515 view_rect = gfx::Rect(100, 0); 2515 view_rect = gfx::Rect(100, 0);
2516 view_->SetSize(view_rect.size()); 2516 view_->SetSize(view_rect.size());
2517 EXPECT_FALSE(view_->resize_locked()); 2517 EXPECT_FALSE(view_->resize_locked());
2518 EXPECT_FALSE(view_->compositor_locked()); 2518 EXPECT_FALSE(view_->compositor_locked());
2519 2519
2520 // We're never expecting empty frames, resize to something non-empty. 2520 // We're never expecting empty frames, resize to something non-empty.
2521 view_rect = gfx::Rect(100, 100); 2521 view_rect = gfx::Rect(100, 100);
2522 frame_size = view_rect.size();
2523 local_surface_id = local_surface_id_allocator_.GenerateId();
2522 view_->SetSize(view_rect.size()); 2524 view_->SetSize(view_rect.size());
2523 EXPECT_TRUE(view_->resize_locked()); 2525 EXPECT_TRUE(view_->resize_locked());
2524 EXPECT_TRUE(view_->compositor_locked()); 2526 EXPECT_TRUE(view_->compositor_locked());
2525 2527
2526 // This frame should not be dropped. 2528 // This frame should not be dropped.
2527 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2529 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2528 view_->SubmitCompositorFrame( 2530 view_->SubmitCompositorFrame(local_surface_id,
2529 kArbitraryLocalSurfaceId, 2531 MakeDelegatedFrame(1.f, frame_size, view_rect));
2530 MakeDelegatedFrame(1.f, view_rect.size(), view_rect));
2531 testing::Mock::VerifyAndClearExpectations(&observer); 2532 testing::Mock::VerifyAndClearExpectations(&observer);
2532 EXPECT_TRUE(view_->resize_locked()); 2533 EXPECT_TRUE(view_->resize_locked());
2533 EXPECT_FALSE(view_->compositor_locked()); 2534 EXPECT_FALSE(view_->compositor_locked());
2534 view_->RunOnCompositingDidCommit(); 2535 view_->RunOnCompositingDidCommit();
2535 EXPECT_FALSE(view_->resize_locked()); 2536 EXPECT_FALSE(view_->resize_locked());
2536 EXPECT_FALSE(view_->compositor_locked()); 2537 EXPECT_FALSE(view_->compositor_locked());
2537 2538
2538 view_->window_->RemoveObserver(&observer); 2539 view_->window_->RemoveObserver(&observer);
2539 } 2540 }
2540 2541
2541 // If resize races with a renderer frame, we should lock for the right size. 2542 // If resize races with a renderer frame, we should lock for the right size.
2542 TEST_F(RenderWidgetHostViewAuraTest, ResizeAfterReceivingFrame) { 2543 TEST_F(RenderWidgetHostViewAuraTest, ResizeAfterReceivingFrame) {
2543 gfx::Rect view_rect(100, 100); 2544 gfx::Rect view_rect(100, 100);
2544 gfx::Size frame_size = view_rect.size(); 2545 gfx::Size frame_size = view_rect.size();
2546 cc::LocalSurfaceId local_surface_id = kArbitraryLocalSurfaceId;
2545 2547
2546 view_->InitAsChild(nullptr); 2548 view_->InitAsChild(nullptr);
2547 aura::client::ParentWindowWithContext( 2549 aura::client::ParentWindowWithContext(
2548 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), 2550 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(),
2549 gfx::Rect()); 2551 gfx::Rect());
2550 view_->SetSize(view_rect.size()); 2552 view_->SetSize(view_rect.size());
2551 2553
2552 MockWindowObserver observer; 2554 MockWindowObserver observer;
2553 view_->window_->AddObserver(&observer); 2555 view_->window_->AddObserver(&observer);
2554 2556
2555 // A frame of initial size. 2557 // A frame of initial size.
2556 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2558 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2557 view_->SubmitCompositorFrame( 2559 view_->SubmitCompositorFrame(
2558 kArbitraryLocalSurfaceId, 2560 local_surface_id,
2559 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); 2561 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size)));
2560 testing::Mock::VerifyAndClearExpectations(&observer); 2562 testing::Mock::VerifyAndClearExpectations(&observer);
2561 view_->RunOnCompositingDidCommit(); 2563 view_->RunOnCompositingDidCommit();
2562 2564
2563 // A frame of initial size arrives, but we don't commit in the UI yet. 2565 // A frame of initial size arrives, but we don't commit in the UI yet.
2564 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _)); 2566 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _));
2565 view_->SubmitCompositorFrame( 2567 view_->SubmitCompositorFrame(
2566 kArbitraryLocalSurfaceId, 2568 local_surface_id,
2567 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); 2569 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size)));
2568 testing::Mock::VerifyAndClearExpectations(&observer); 2570 testing::Mock::VerifyAndClearExpectations(&observer);
2569 2571
2570 EXPECT_FALSE(view_->resize_locked()); 2572 EXPECT_FALSE(view_->resize_locked());
2571 EXPECT_FALSE(view_->compositor_locked()); 2573 EXPECT_FALSE(view_->compositor_locked());
2572 2574
2573 // Resize, and lock the compositor. Now we should drop frames of the old size. 2575 // Resize, and lock the compositor. Now we should drop frames of the old size.
2574 view_rect = gfx::Rect(150, 150); 2576 view_rect = gfx::Rect(150, 150);
2575 view_->SetSize(view_rect.size()); 2577 view_->SetSize(view_rect.size());
2576 EXPECT_TRUE(view_->resize_locked()); 2578 EXPECT_TRUE(view_->resize_locked());
2577 EXPECT_TRUE(view_->compositor_locked()); 2579 EXPECT_TRUE(view_->compositor_locked());
2578 2580
2579 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); 2581 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0);
2580 view_->SubmitCompositorFrame( 2582 view_->SubmitCompositorFrame(
2581 kArbitraryLocalSurfaceId, 2583 local_surface_id,
2582 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); 2584 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size)));
2583 testing::Mock::VerifyAndClearExpectations(&observer); 2585 testing::Mock::VerifyAndClearExpectations(&observer);
2584 2586
2585 // If the CompositorLock times out in the meantime, a commit would happen. 2587 // 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 2588 // Verify that if a commit occurs, the lock remains and we reject frames
2587 // of the wrong size still. 2589 // of the wrong size still.
2588 view_->RunOnCompositingDidCommit(); 2590 view_->RunOnCompositingDidCommit();
2589 2591
2590 EXPECT_TRUE(view_->resize_locked()); 2592 EXPECT_TRUE(view_->resize_locked());
2591 // In this case we lied about it and the CompositorLock is still active. 2593 // In this case we lied about it and the CompositorLock is still active.
2592 EXPECT_TRUE(view_->compositor_locked()); 2594 EXPECT_TRUE(view_->compositor_locked());
2593 2595
2594 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0); 2596 EXPECT_CALL(observer, OnDelegatedFrameDamage(_, _)).Times(0);
2595 view_->SubmitCompositorFrame( 2597 view_->SubmitCompositorFrame(
2596 kArbitraryLocalSurfaceId, 2598 local_surface_id,
2597 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); 2599 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size)));
2598 testing::Mock::VerifyAndClearExpectations(&observer); 2600 testing::Mock::VerifyAndClearExpectations(&observer);
2599 2601
2600 // A frame arrives of the new size, which will be accepted. 2602 // A frame arrives of the new size, which will be accepted.
2601 frame_size = view_rect.size(); 2603 frame_size = view_rect.size();
2604 local_surface_id = local_surface_id_allocator_.GenerateId();
2602 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _)); 2605 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, _));
2603 view_->SubmitCompositorFrame( 2606 view_->SubmitCompositorFrame(
2604 kArbitraryLocalSurfaceId, 2607 local_surface_id,
2605 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size))); 2608 MakeDelegatedFrame(1.f, frame_size, gfx::Rect(frame_size)));
2606 // Receiving the frame unlocks the compositor so it can commit. 2609 // Receiving the frame unlocks the compositor so it can commit.
2607 EXPECT_TRUE(view_->resize_locked()); 2610 EXPECT_TRUE(view_->resize_locked());
2608 EXPECT_FALSE(view_->compositor_locked()); 2611 EXPECT_FALSE(view_->compositor_locked());
2609 testing::Mock::VerifyAndClearExpectations(&observer); 2612 testing::Mock::VerifyAndClearExpectations(&observer);
2610 2613
2611 // When the frame of the correct size is committed, the CompositorResizeLock 2614 // When the frame of the correct size is committed, the CompositorResizeLock
2612 // is released. 2615 // is released.
2613 view_->RunOnCompositingDidCommit(); 2616 view_->RunOnCompositingDidCommit();
2614 EXPECT_FALSE(view_->resize_locked()); 2617 EXPECT_FALSE(view_->resize_locked());
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
2685 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, 2688 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId,
2686 MakeDelegatedFrame(1.f, frame_size, view_rect)); 2689 MakeDelegatedFrame(1.f, frame_size, view_rect));
2687 testing::Mock::VerifyAndClearExpectations(&observer); 2690 testing::Mock::VerifyAndClearExpectations(&observer);
2688 view_->RunOnCompositingDidCommit(); 2691 view_->RunOnCompositingDidCommit();
2689 2692
2690 // Signal that a new RendererCompositorFrameSink was created. 2693 // Signal that a new RendererCompositorFrameSink was created.
2691 view_->CreateNewRendererCompositorFrameSink(); 2694 view_->CreateNewRendererCompositorFrameSink();
2692 2695
2693 // Submit a frame from the new RendererCompositorFrameSink. 2696 // Submit a frame from the new RendererCompositorFrameSink.
2694 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2697 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2695 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), 2698 view_->SubmitCompositorFrame(local_surface_id_allocator_.GenerateId(),
2696 MakeDelegatedFrame(1.f, frame_size, view_rect)); 2699 MakeDelegatedFrame(1.f, frame_size, view_rect));
2697 testing::Mock::VerifyAndClearExpectations(&observer); 2700 testing::Mock::VerifyAndClearExpectations(&observer);
2698 view_->RunOnCompositingDidCommit(); 2701 view_->RunOnCompositingDidCommit();
2699 2702
2700 // Signal that a new RendererCompositorFrameSink was created. 2703 // Signal that a new RendererCompositorFrameSink was created.
2701 view_->CreateNewRendererCompositorFrameSink(); 2704 view_->CreateNewRendererCompositorFrameSink();
2702 2705
2703 // Submit a frame from the new RendererCompositorFrameSink. 2706 // Submit a frame from the new RendererCompositorFrameSink.
2704 view_->SubmitCompositorFrame( 2707 view_->SubmitCompositorFrame(
2705 CreateLocalSurfaceId(), 2708 local_surface_id_allocator_.GenerateId(),
2706 MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect())); 2709 MakeDelegatedFrame(1.f, gfx::Size(), gfx::Rect()));
2707 testing::Mock::VerifyAndClearExpectations(&observer); 2710 testing::Mock::VerifyAndClearExpectations(&observer);
2708 view_->RunOnCompositingDidCommit(); 2711 view_->RunOnCompositingDidCommit();
2709 2712
2710 // Signal that a new RendererCompositorFrameSink was created. 2713 // Signal that a new RendererCompositorFrameSink was created.
2711 view_->CreateNewRendererCompositorFrameSink(); 2714 view_->CreateNewRendererCompositorFrameSink();
2712 2715
2713 // Swap another frame, with a different surface id. 2716 // Swap another frame, with a different surface id.
2714 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect)); 2717 EXPECT_CALL(observer, OnDelegatedFrameDamage(view_->window_, view_rect));
2715 view_->SubmitCompositorFrame(CreateLocalSurfaceId(), 2718 view_->SubmitCompositorFrame(local_surface_id_allocator_.GenerateId(),
2716 MakeDelegatedFrame(1.f, frame_size, view_rect)); 2719 MakeDelegatedFrame(1.f, frame_size, view_rect));
2717 testing::Mock::VerifyAndClearExpectations(&observer); 2720 testing::Mock::VerifyAndClearExpectations(&observer);
2718 view_->RunOnCompositingDidCommit(); 2721 view_->RunOnCompositingDidCommit();
2719 2722
2720 view_->window_->RemoveObserver(&observer); 2723 view_->window_->RemoveObserver(&observer);
2721 } 2724 }
2722 2725
2723 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) { 2726 TEST_F(RenderWidgetHostViewAuraTest, DiscardDelegatedFrames) {
2724 view_->InitAsChild(nullptr); 2727 view_->InitAsChild(nullptr);
2725 2728
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
2844 views[0]->Show(); 2847 views[0]->Show();
2845 EXPECT_TRUE(views[0]->released_front_lock_active()); 2848 EXPECT_TRUE(views[0]->released_front_lock_active());
2846 // Make [0] hidden, it should stop waiting. 2849 // Make [0] hidden, it should stop waiting.
2847 views[0]->Hide(); 2850 views[0]->Hide();
2848 EXPECT_FALSE(views[0]->released_front_lock_active()); 2851 EXPECT_FALSE(views[0]->released_front_lock_active());
2849 2852
2850 // Make [1] hidden, resize it. It should drop its frame. 2853 // Make [1] hidden, resize it. It should drop its frame.
2851 views[1]->Hide(); 2854 views[1]->Hide();
2852 EXPECT_TRUE(views[1]->HasFrameData()); 2855 EXPECT_TRUE(views[1]->HasFrameData());
2853 gfx::Size size2(200, 200); 2856 gfx::Size size2(200, 200);
2857 cc::LocalSurfaceId id2 = local_surface_id_allocator_.GenerateId();
2854 views[1]->SetSize(size2); 2858 views[1]->SetSize(size2);
2855 EXPECT_FALSE(views[1]->HasFrameData()); 2859 EXPECT_FALSE(views[1]->HasFrameData());
2856 // Show it, it should block until we give it a frame. 2860 // Show it, it should block until we give it a frame.
2857 views[1]->Show(); 2861 views[1]->Show();
2858 EXPECT_TRUE(views[1]->released_front_lock_active()); 2862 EXPECT_TRUE(views[1]->released_front_lock_active());
2859 views[1]->SubmitCompositorFrame( 2863 views[1]->SubmitCompositorFrame(
2860 kArbitraryLocalSurfaceId, 2864 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()); 2865 EXPECT_FALSE(views[1]->released_front_lock_active());
2863 2866
2864 for (size_t i = 0; i < renderer_count - 1; ++i) 2867 for (size_t i = 0; i < renderer_count - 1; ++i)
2865 views[i]->Hide(); 2868 views[i]->Hide();
2866 2869
2867 // Allocate enough bitmaps so that two frames (proportionally) would be 2870 // Allocate enough bitmaps so that two frames (proportionally) would be
2868 // enough hit the handle limit. 2871 // enough hit the handle limit.
2869 int handles_per_frame = 5; 2872 int handles_per_frame = 5;
2870 FrameEvictionManager::GetInstance()->set_max_handles(handles_per_frame * 2); 2873 FrameEvictionManager::GetInstance()->set_max_handles(handles_per_frame * 2);
2871 2874
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2926 parent_view_->GetNativeView()->GetRootWindow(), 2929 parent_view_->GetNativeView()->GetRootWindow(),
2927 gfx::Rect()); 2930 gfx::Rect());
2928 views[i]->SetSize(view_rect.size()); 2931 views[i]->SetSize(view_rect.size());
2929 } 2932 }
2930 2933
2931 // Make each renderer visible and swap a frame on it. No eviction should 2934 // Make each renderer visible and swap a frame on it. No eviction should
2932 // occur because all frames are visible. 2935 // occur because all frames are visible.
2933 for (size_t i = 0; i < renderer_count; ++i) { 2936 for (size_t i = 0; i < renderer_count; ++i) {
2934 views[i]->Show(); 2937 views[i]->Show();
2935 views[i]->SubmitCompositorFrame( 2938 views[i]->SubmitCompositorFrame(
2936 i ? CreateLocalSurfaceId() : kArbitraryLocalSurfaceId, 2939 i ? local_surface_id_allocator_.GenerateId() : kArbitraryLocalSurfaceId,
2937 MakeDelegatedFrame(1.f, frame_size, view_rect)); 2940 MakeDelegatedFrame(1.f, frame_size, view_rect));
2938 EXPECT_TRUE(views[i]->HasFrameData()); 2941 EXPECT_TRUE(views[i]->HasFrameData());
2939 } 2942 }
2940 2943
2941 // If we hide [0], then [0] should be evicted. 2944 // If we hide [0], then [0] should be evicted.
2942 views[0]->Hide(); 2945 views[0]->Hide();
2943 EXPECT_FALSE(views[0]->HasFrameData()); 2946 EXPECT_FALSE(views[0]->HasFrameData());
2944 2947
2945 // If we lock [0] before hiding it, then [0] should not be evicted. 2948 // If we lock [0] before hiding it, then [0] should not be evicted.
2946 views[0]->Show(); 2949 views[0]->Show();
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
3072 cc::BeginFrameObserver* last_observer_ = nullptr; 3075 cc::BeginFrameObserver* last_observer_ = nullptr;
3073 }; 3076 };
3074 } // namespace 3077 } // namespace
3075 3078
3076 // Tests that BeginFrameAcks are forwarded correctly from the 3079 // Tests that BeginFrameAcks are forwarded correctly from the
3077 // SwapCompositorFrame and OnBeginFrameDidNotSwap IPCs through 3080 // SwapCompositorFrame and OnBeginFrameDidNotSwap IPCs through
3078 // DelegatedFrameHost and its CompositorFrameSinkSupport. 3081 // DelegatedFrameHost and its CompositorFrameSinkSupport.
3079 TEST_F(RenderWidgetHostViewAuraTest, ForwardsBeginFrameAcks) { 3082 TEST_F(RenderWidgetHostViewAuraTest, ForwardsBeginFrameAcks) {
3080 gfx::Rect view_rect(100, 100); 3083 gfx::Rect view_rect(100, 100);
3081 gfx::Size frame_size = view_rect.size(); 3084 gfx::Size frame_size = view_rect.size();
3085 cc::LocalSurfaceId local_surface_id = kArbitraryLocalSurfaceId;
3082 3086
3083 view_->InitAsChild(nullptr); 3087 view_->InitAsChild(nullptr);
3084 aura::client::ParentWindowWithContext( 3088 aura::client::ParentWindowWithContext(
3085 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(), 3089 view_->GetNativeView(), parent_view_->GetNativeView()->GetRootWindow(),
3086 gfx::Rect()); 3090 gfx::Rect());
3087 view_->SetSize(view_rect.size()); 3091 view_->SetSize(view_rect.size());
3088 3092
3089 // Replace BeginFrameSource so that we can observe acknowledgments. Since the 3093 // Replace BeginFrameSource so that we can observe acknowledgments. Since the
3090 // DelegatedFrameHost doesn't directly observe our BeginFrameSource, 3094 // DelegatedFrameHost doesn't directly observe our BeginFrameSource,
3091 // |observer_tracker| grabs a pointer to the observer (the 3095 // |observer_tracker| grabs a pointer to the observer (the
(...skipping 13 matching lines...) Expand all
3105 3109
3106 { 3110 {
3107 cc::BeginFrameArgs args = 3111 cc::BeginFrameArgs args =
3108 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u); 3112 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 5u);
3109 source.TestOnBeginFrame(args); 3113 source.TestOnBeginFrame(args);
3110 3114
3111 // Ack from CompositorFrame is forwarded. 3115 // Ack from CompositorFrame is forwarded.
3112 cc::BeginFrameAck ack(source_id, 5, 4, true); 3116 cc::BeginFrameAck ack(source_id, 5, 4, true);
3113 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); 3117 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect);
3114 frame.metadata.begin_frame_ack = ack; 3118 frame.metadata.begin_frame_ack = ack;
3115 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 3119 view_->SubmitCompositorFrame(local_surface_id, std::move(frame));
3116 view_->RunOnCompositingDidCommit(); 3120 view_->RunOnCompositingDidCommit();
3117 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 3121 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3118 } 3122 }
3119 3123
3120 { 3124 {
3121 cc::BeginFrameArgs args = 3125 cc::BeginFrameArgs args =
3122 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u); 3126 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 6u);
3123 source.TestOnBeginFrame(args); 3127 source.TestOnBeginFrame(args);
3124 3128
3125 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. 3129 // Explicit ack through OnBeginFrameDidNotSwap is forwarded.
(...skipping 12 matching lines...) Expand all
3138 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u); 3142 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, source_id, 7u);
3139 source.TestOnBeginFrame(args); 3143 source.TestOnBeginFrame(args);
3140 3144
3141 // Ack from CompositorFrame is forwarded with old 3145 // Ack from CompositorFrame is forwarded with old
3142 // latest_confirmed_sequence_number and without damage. 3146 // latest_confirmed_sequence_number and without damage.
3143 cc::BeginFrameAck ack(source_id, 7, 7, true); 3147 cc::BeginFrameAck ack(source_id, 7, 7, true);
3144 gfx::Rect dropped_damage_rect(10, 20, 30, 40); 3148 gfx::Rect dropped_damage_rect(10, 20, 30, 40);
3145 cc::CompositorFrame frame = 3149 cc::CompositorFrame frame =
3146 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); 3150 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect);
3147 frame.metadata.begin_frame_ack = ack; 3151 frame.metadata.begin_frame_ack = ack;
3148 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 3152 view_->SubmitCompositorFrame(local_surface_id, std::move(frame));
3149 view_->RunOnCompositingDidCommit(); 3153 view_->RunOnCompositingDidCommit();
3150 ack.latest_confirmed_sequence_number = 4; 3154 ack.latest_confirmed_sequence_number = 4;
3151 ack.has_damage = false; 3155 ack.has_damage = false;
3152 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 3156 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3153 } 3157 }
3154 3158
3155 // Change source_id known to the view. This should reset the 3159 // Change source_id known to the view. This should reset the
3156 // latest_confirmed_sequence_number tracked by the view. 3160 // latest_confirmed_sequence_number tracked by the view.
3157 source_id = cc::BeginFrameArgs::kManualSourceId; 3161 source_id = cc::BeginFrameArgs::kManualSourceId;
3158 3162
3159 { 3163 {
3160 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( 3164 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
3161 BEGINFRAME_FROM_HERE, source_id, 10u); 3165 BEGINFRAME_FROM_HERE, source_id, 10u);
3162 source.TestOnBeginFrame(args); 3166 source.TestOnBeginFrame(args);
3163 3167
3164 // Ack from CompositorFrame is forwarded with invalid 3168 // Ack from CompositorFrame is forwarded with invalid
3165 // latest_confirmed_sequence_number and without damage. 3169 // latest_confirmed_sequence_number and without damage.
3166 cc::BeginFrameAck ack(source_id, 10, 10, true); 3170 cc::BeginFrameAck ack(source_id, 10, 10, true);
3167 gfx::Rect dropped_damage_rect(10, 20, 30, 40); 3171 gfx::Rect dropped_damage_rect(10, 20, 30, 40);
3168 cc::CompositorFrame frame = 3172 cc::CompositorFrame frame =
3169 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect); 3173 MakeDelegatedFrame(1.f, frame_size, dropped_damage_rect);
3170 frame.metadata.begin_frame_ack = ack; 3174 frame.metadata.begin_frame_ack = ack;
3171 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 3175 view_->SubmitCompositorFrame(local_surface_id, std::move(frame));
3172 view_->RunOnCompositingDidCommit(); 3176 view_->RunOnCompositingDidCommit();
3173 ack.latest_confirmed_sequence_number = 3177 ack.latest_confirmed_sequence_number =
3174 cc::BeginFrameArgs::kInvalidFrameNumber; 3178 cc::BeginFrameArgs::kInvalidFrameNumber;
3175 ack.has_damage = false; 3179 ack.has_damage = false;
3176 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 3180 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3177 } 3181 }
3178 3182
3179 { 3183 {
3180 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( 3184 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
3181 BEGINFRAME_FROM_HERE, source_id, 11u); 3185 BEGINFRAME_FROM_HERE, source_id, 11u);
3182 source.TestOnBeginFrame(args); 3186 source.TestOnBeginFrame(args);
3183 3187
3184 // Explicit ack through OnBeginFrameDidNotSwap is forwarded with invalid 3188 // Explicit ack through OnBeginFrameDidNotSwap is forwarded with invalid
3185 // latest_confirmed_sequence_number. 3189 // latest_confirmed_sequence_number.
3186 cc::BeginFrameAck ack(source_id, 11, 11, false); 3190 cc::BeginFrameAck ack(source_id, 11, 11, false);
3187 view_->OnBeginFrameDidNotSwap(ack); 3191 view_->OnBeginFrameDidNotSwap(ack);
3188 ack.latest_confirmed_sequence_number = 3192 ack.latest_confirmed_sequence_number =
3189 cc::BeginFrameArgs::kInvalidFrameNumber; 3193 cc::BeginFrameArgs::kInvalidFrameNumber;
3190 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 3194 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3191 } 3195 }
3192 3196
3193 // Unlock the compositor again with a new CompositorFrame of correct size. 3197 // Unlock the compositor again with a new CompositorFrame of correct size.
3194 frame_size = view_rect.size(); 3198 frame_size = view_rect.size();
3199 local_surface_id = local_surface_id_allocator_.GenerateId();
3195 3200
3196 { 3201 {
3197 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( 3202 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
3198 BEGINFRAME_FROM_HERE, source_id, 12u); 3203 BEGINFRAME_FROM_HERE, source_id, 12u);
3199 source.TestOnBeginFrame(args); 3204 source.TestOnBeginFrame(args);
3200 3205
3201 // Ack from CompositorFrame is forwarded. 3206 // Ack from CompositorFrame is forwarded.
3202 cc::BeginFrameAck ack(source_id, 12, 12, true); 3207 cc::BeginFrameAck ack(source_id, 12, 12, true);
3203 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect); 3208 cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect);
3204 frame.metadata.begin_frame_ack = ack; 3209 frame.metadata.begin_frame_ack = ack;
3205 view_->SubmitCompositorFrame(kArbitraryLocalSurfaceId, std::move(frame)); 3210 view_->SubmitCompositorFrame(local_surface_id, std::move(frame));
3206 view_->RunOnCompositingDidCommit(); 3211 view_->RunOnCompositingDidCommit();
3207 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_)); 3212 EXPECT_EQ(ack, source.LastAckForObserver(observer_tracker.last_observer_));
3208 } 3213 }
3209 3214
3210 { 3215 {
3211 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting( 3216 cc::BeginFrameArgs args = cc::CreateBeginFrameArgsForTesting(
3212 BEGINFRAME_FROM_HERE, source_id, 13u); 3217 BEGINFRAME_FROM_HERE, source_id, 13u);
3213 source.TestOnBeginFrame(args); 3218 source.TestOnBeginFrame(args);
3214 3219
3215 // Explicit ack through OnBeginFrameDidNotSwap is forwarded. 3220 // Explicit ack through OnBeginFrameDidNotSwap is forwarded.
(...skipping 2326 matching lines...) Expand 10 before | Expand all | Expand 10 after
5542 // There is no composition in the beginning. 5547 // There is no composition in the beginning.
5543 EXPECT_FALSE(has_composition_text()); 5548 EXPECT_FALSE(has_composition_text());
5544 SetHasCompositionTextToTrue(); 5549 SetHasCompositionTextToTrue();
5545 view->ImeCancelComposition(); 5550 view->ImeCancelComposition();
5546 // The composition must have been canceled. 5551 // The composition must have been canceled.
5547 EXPECT_FALSE(has_composition_text()); 5552 EXPECT_FALSE(has_composition_text());
5548 } 5553 }
5549 } 5554 }
5550 5555
5551 } // namespace content 5556 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698