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

Side by Side Diff: cc/trees/layer_tree_host_impl_unittest.cc

Issue 1866203004: Convert //cc from scoped_ptr to std::unique_ptr. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: scopedptrcc: rebase Created 4 years, 8 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
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/layer_tree_host_perftest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 "cc/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <cmath> 10 #include <cmath>
11 #include <utility> 11 #include <utility>
12 12
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/command_line.h" 14 #include "base/command_line.h"
15 #include "base/location.h" 15 #include "base/location.h"
16 #include "base/memory/ptr_util.h"
16 #include "base/thread_task_runner_handle.h" 17 #include "base/thread_task_runner_handle.h"
17 #include "cc/animation/animation_events.h" 18 #include "cc/animation/animation_events.h"
18 #include "cc/animation/animation_host.h" 19 #include "cc/animation/animation_host.h"
19 #include "cc/animation/animation_id_provider.h" 20 #include "cc/animation/animation_id_provider.h"
20 #include "cc/animation/transform_operations.h" 21 #include "cc/animation/transform_operations.h"
21 #include "cc/base/math_util.h" 22 #include "cc/base/math_util.h"
22 #include "cc/input/main_thread_scrolling_reason.h" 23 #include "cc/input/main_thread_scrolling_reason.h"
23 #include "cc/input/page_scale_animation.h" 24 #include "cc/input/page_scale_animation.h"
24 #include "cc/input/scrollbar_animation_controller_thinning.h" 25 #include "cc/input/scrollbar_animation_controller_thinning.h"
25 #include "cc/input/top_controls_manager.h" 26 #include "cc/input/top_controls_manager.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 } 142 }
142 void SetNeedsOneBeginImplFrameOnImplThread() override { 143 void SetNeedsOneBeginImplFrameOnImplThread() override {
143 did_request_next_frame_ = true; 144 did_request_next_frame_ = true;
144 } 145 }
145 void SetNeedsPrepareTilesOnImplThread() override { 146 void SetNeedsPrepareTilesOnImplThread() override {
146 did_request_prepare_tiles_ = true; 147 did_request_prepare_tiles_ = true;
147 } 148 }
148 void SetNeedsCommitOnImplThread() override { did_request_commit_ = true; } 149 void SetNeedsCommitOnImplThread() override { did_request_commit_ = true; }
149 void SetVideoNeedsBeginFrames(bool needs_begin_frames) override {} 150 void SetVideoNeedsBeginFrames(bool needs_begin_frames) override {}
150 void PostAnimationEventsToMainThreadOnImplThread( 151 void PostAnimationEventsToMainThreadOnImplThread(
151 scoped_ptr<AnimationEvents> events) override {} 152 std::unique_ptr<AnimationEvents> events) override {}
152 bool IsInsideDraw() override { return false; } 153 bool IsInsideDraw() override { return false; }
153 void RenewTreePriority() override {} 154 void RenewTreePriority() override {}
154 void PostDelayedAnimationTaskOnImplThread(const base::Closure& task, 155 void PostDelayedAnimationTaskOnImplThread(const base::Closure& task,
155 base::TimeDelta delay) override { 156 base::TimeDelta delay) override {
156 animation_task_ = task; 157 animation_task_ = task;
157 requested_animation_delay_ = delay; 158 requested_animation_delay_ = delay;
158 } 159 }
159 void DidActivateSyncTree() override {} 160 void DidActivateSyncTree() override {}
160 void WillPrepareTiles() override {} 161 void WillPrepareTiles() override {}
161 void DidPrepareTiles() override {} 162 void DidPrepareTiles() override {}
162 void DidCompletePageScaleAnimationOnImplThread() override { 163 void DidCompletePageScaleAnimationOnImplThread() override {
163 did_complete_page_scale_animation_ = true; 164 did_complete_page_scale_animation_ = true;
164 } 165 }
165 void OnDrawForOutputSurface(bool resourceless_software_draw) override { 166 void OnDrawForOutputSurface(bool resourceless_software_draw) override {
166 scoped_ptr<LayerTreeHostImpl::FrameData> frame( 167 std::unique_ptr<LayerTreeHostImpl::FrameData> frame(
167 new LayerTreeHostImpl::FrameData); 168 new LayerTreeHostImpl::FrameData);
168 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(frame.get())); 169 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(frame.get()));
169 last_on_draw_render_passes_.clear(); 170 last_on_draw_render_passes_.clear();
170 RenderPass::CopyAll(frame->render_passes, &last_on_draw_render_passes_); 171 RenderPass::CopyAll(frame->render_passes, &last_on_draw_render_passes_);
171 if (!skip_draw_layers_in_on_draw_) 172 if (!skip_draw_layers_in_on_draw_)
172 host_impl_->DrawLayers(frame.get()); 173 host_impl_->DrawLayers(frame.get());
173 host_impl_->DidDrawAllLayers(*frame); 174 host_impl_->DidDrawAllLayers(*frame);
174 host_impl_->SwapBuffers(*frame); 175 host_impl_->SwapBuffers(*frame);
175 last_on_draw_frame_ = std::move(frame); 176 last_on_draw_frame_ = std::move(frame);
176 } 177 }
177 void PostFrameTimingEventsOnImplThread( 178 void PostFrameTimingEventsOnImplThread(
178 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, 179 std::unique_ptr<FrameTimingTracker::CompositeTimingSet> composite_events,
179 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) 180 std::unique_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events)
180 override {} 181 override {}
181 182
182 void set_reduce_memory_result(bool reduce_memory_result) { 183 void set_reduce_memory_result(bool reduce_memory_result) {
183 reduce_memory_result_ = reduce_memory_result; 184 reduce_memory_result_ = reduce_memory_result;
184 } 185 }
185 186
186 virtual bool CreateHostImpl(const LayerTreeSettings& settings, 187 virtual bool CreateHostImpl(const LayerTreeSettings& settings,
187 scoped_ptr<OutputSurface> output_surface) { 188 std::unique_ptr<OutputSurface> output_surface) {
188 return CreateHostImplWithTaskRunnerProvider( 189 return CreateHostImplWithTaskRunnerProvider(
189 settings, std::move(output_surface), &task_runner_provider_); 190 settings, std::move(output_surface), &task_runner_provider_);
190 } 191 }
191 192
192 virtual bool CreateHostImplWithTaskRunnerProvider( 193 virtual bool CreateHostImplWithTaskRunnerProvider(
193 const LayerTreeSettings& settings, 194 const LayerTreeSettings& settings,
194 scoped_ptr<OutputSurface> output_surface, 195 std::unique_ptr<OutputSurface> output_surface,
195 TaskRunnerProvider* task_runner_provider) { 196 TaskRunnerProvider* task_runner_provider) {
196 host_impl_ = LayerTreeHostImpl::Create( 197 host_impl_ = LayerTreeHostImpl::Create(
197 settings, this, task_runner_provider, &stats_instrumentation_, 198 settings, this, task_runner_provider, &stats_instrumentation_,
198 &shared_bitmap_manager_, &gpu_memory_buffer_manager_, 199 &shared_bitmap_manager_, &gpu_memory_buffer_manager_,
199 &task_graph_runner_, 0); 200 &task_graph_runner_, 0);
200 output_surface_ = std::move(output_surface); 201 output_surface_ = std::move(output_surface);
201 host_impl_->SetVisible(true); 202 host_impl_->SetVisible(true);
202 bool init = host_impl_->InitializeRenderer(output_surface_.get()); 203 bool init = host_impl_->InitializeRenderer(output_surface_.get());
203 host_impl_->SetViewportSize(gfx::Size(10, 10)); 204 host_impl_->SetViewportSize(gfx::Size(10, 10));
204 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f); 205 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f);
205 // Set the BeginFrameArgs so that methods which use it are able to. 206 // Set the BeginFrameArgs so that methods which use it are able to.
206 host_impl_->WillBeginImplFrame(CreateBeginFrameArgsForTesting( 207 host_impl_->WillBeginImplFrame(CreateBeginFrameArgsForTesting(
207 BEGINFRAME_FROM_HERE, 208 BEGINFRAME_FROM_HERE,
208 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1))); 209 base::TimeTicks() + base::TimeDelta::FromMilliseconds(1)));
209 host_impl_->DidFinishImplFrame(); 210 host_impl_->DidFinishImplFrame();
210 211
211 timeline_ = 212 timeline_ =
212 AnimationTimeline::Create(AnimationIdProvider::NextTimelineId()); 213 AnimationTimeline::Create(AnimationIdProvider::NextTimelineId());
213 host_impl_->animation_host()->AddAnimationTimeline(timeline_); 214 host_impl_->animation_host()->AddAnimationTimeline(timeline_);
214 215
215 return init; 216 return init;
216 } 217 }
217 218
218 void SetupRootLayerImpl(scoped_ptr<LayerImpl> root) { 219 void SetupRootLayerImpl(std::unique_ptr<LayerImpl> root) {
219 root->SetPosition(gfx::PointF()); 220 root->SetPosition(gfx::PointF());
220 root->SetBounds(gfx::Size(10, 10)); 221 root->SetBounds(gfx::Size(10, 10));
221 root->SetDrawsContent(true); 222 root->SetDrawsContent(true);
222 root->draw_properties().visible_layer_rect = gfx::Rect(0, 0, 10, 10); 223 root->draw_properties().visible_layer_rect = gfx::Rect(0, 0, 10, 10);
223 root->SetForceRenderSurface(true); 224 root->SetForceRenderSurface(true);
224 host_impl_->active_tree()->SetRootLayer(std::move(root)); 225 host_impl_->active_tree()->SetRootLayer(std::move(root));
225 } 226 }
226 227
227 static gfx::Vector2dF ScrollDelta(LayerImpl* layer_impl) { 228 static gfx::Vector2dF ScrollDelta(LayerImpl* layer_impl) {
228 gfx::ScrollOffset delta = 229 gfx::ScrollOffset delta =
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 // Create both an inner viewport scroll layer and an outer viewport scroll 279 // Create both an inner viewport scroll layer and an outer viewport scroll
279 // layer. The MaxScrollOffset of the outer viewport scroll layer will be 280 // layer. The MaxScrollOffset of the outer viewport scroll layer will be
280 // 0x0, so the scrolls will be applied directly to the inner viewport. 281 // 0x0, so the scrolls will be applied directly to the inner viewport.
281 const int kOuterViewportClipLayerId = 116; 282 const int kOuterViewportClipLayerId = 116;
282 const int kOuterViewportScrollLayerId = 117; 283 const int kOuterViewportScrollLayerId = 117;
283 const int kContentLayerId = 118; 284 const int kContentLayerId = 118;
284 const int kInnerViewportScrollLayerId = 2; 285 const int kInnerViewportScrollLayerId = 2;
285 const int kInnerViewportClipLayerId = 4; 286 const int kInnerViewportClipLayerId = 4;
286 const int kPageScaleLayerId = 5; 287 const int kPageScaleLayerId = 5;
287 288
288 scoped_ptr<LayerImpl> root = 289 std::unique_ptr<LayerImpl> root = LayerImpl::Create(layer_tree_impl, 1);
289 LayerImpl::Create(layer_tree_impl, 1);
290 root->SetBounds(content_size); 290 root->SetBounds(content_size);
291 root->SetPosition(gfx::PointF()); 291 root->SetPosition(gfx::PointF());
292 root->SetForceRenderSurface(true); 292 root->SetForceRenderSurface(true);
293 293
294 scoped_ptr<LayerImpl> inner_scroll = 294 std::unique_ptr<LayerImpl> inner_scroll =
295 LayerImpl::Create(layer_tree_impl, kInnerViewportScrollLayerId); 295 LayerImpl::Create(layer_tree_impl, kInnerViewportScrollLayerId);
296 inner_scroll->SetIsContainerForFixedPositionLayers(true); 296 inner_scroll->SetIsContainerForFixedPositionLayers(true);
297 inner_scroll->layer_tree_impl() 297 inner_scroll->layer_tree_impl()
298 ->property_trees() 298 ->property_trees()
299 ->scroll_tree.UpdateScrollOffsetBaseForTesting(inner_scroll->id(), 299 ->scroll_tree.UpdateScrollOffsetBaseForTesting(inner_scroll->id(),
300 gfx::ScrollOffset()); 300 gfx::ScrollOffset());
301 301
302 scoped_ptr<LayerImpl> inner_clip = 302 std::unique_ptr<LayerImpl> inner_clip =
303 LayerImpl::Create(layer_tree_impl, kInnerViewportClipLayerId); 303 LayerImpl::Create(layer_tree_impl, kInnerViewportClipLayerId);
304 inner_clip->SetBounds( 304 inner_clip->SetBounds(
305 gfx::Size(content_size.width() / 2, content_size.height() / 2)); 305 gfx::Size(content_size.width() / 2, content_size.height() / 2));
306 306
307 scoped_ptr<LayerImpl> page_scale = 307 std::unique_ptr<LayerImpl> page_scale =
308 LayerImpl::Create(layer_tree_impl, kPageScaleLayerId); 308 LayerImpl::Create(layer_tree_impl, kPageScaleLayerId);
309 309
310 inner_scroll->SetScrollClipLayer(inner_clip->id()); 310 inner_scroll->SetScrollClipLayer(inner_clip->id());
311 inner_scroll->SetBounds(content_size); 311 inner_scroll->SetBounds(content_size);
312 inner_scroll->SetPosition(gfx::PointF()); 312 inner_scroll->SetPosition(gfx::PointF());
313 313
314 scoped_ptr<LayerImpl> outer_clip = 314 std::unique_ptr<LayerImpl> outer_clip =
315 LayerImpl::Create(layer_tree_impl, kOuterViewportClipLayerId); 315 LayerImpl::Create(layer_tree_impl, kOuterViewportClipLayerId);
316 outer_clip->SetBounds(content_size); 316 outer_clip->SetBounds(content_size);
317 outer_clip->SetIsContainerForFixedPositionLayers(true); 317 outer_clip->SetIsContainerForFixedPositionLayers(true);
318 318
319 scoped_ptr<LayerImpl> outer_scroll = 319 std::unique_ptr<LayerImpl> outer_scroll =
320 LayerImpl::Create(layer_tree_impl, kOuterViewportScrollLayerId); 320 LayerImpl::Create(layer_tree_impl, kOuterViewportScrollLayerId);
321 outer_scroll->SetScrollClipLayer(outer_clip->id()); 321 outer_scroll->SetScrollClipLayer(outer_clip->id());
322 outer_scroll->layer_tree_impl() 322 outer_scroll->layer_tree_impl()
323 ->property_trees() 323 ->property_trees()
324 ->scroll_tree.UpdateScrollOffsetBaseForTesting(outer_scroll->id(), 324 ->scroll_tree.UpdateScrollOffsetBaseForTesting(outer_scroll->id(),
325 gfx::ScrollOffset()); 325 gfx::ScrollOffset());
326 outer_scroll->SetBounds(content_size); 326 outer_scroll->SetBounds(content_size);
327 outer_scroll->SetPosition(gfx::PointF()); 327 outer_scroll->SetPosition(gfx::PointF());
328 328
329 scoped_ptr<LayerImpl> contents = 329 std::unique_ptr<LayerImpl> contents =
330 LayerImpl::Create(layer_tree_impl, kContentLayerId); 330 LayerImpl::Create(layer_tree_impl, kContentLayerId);
331 contents->SetDrawsContent(true); 331 contents->SetDrawsContent(true);
332 contents->SetBounds(content_size); 332 contents->SetBounds(content_size);
333 contents->SetPosition(gfx::PointF()); 333 contents->SetPosition(gfx::PointF());
334 334
335 outer_scroll->AddChild(std::move(contents)); 335 outer_scroll->AddChild(std::move(contents));
336 outer_clip->AddChild(std::move(outer_scroll)); 336 outer_clip->AddChild(std::move(outer_scroll));
337 inner_scroll->AddChild(std::move(outer_clip)); 337 inner_scroll->AddChild(std::move(outer_clip));
338 page_scale->AddChild(std::move(inner_scroll)); 338 page_scale->AddChild(std::move(inner_scroll));
339 inner_clip->AddChild(std::move(page_scale)); 339 inner_clip->AddChild(std::move(page_scale));
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 inner_clip_layer->SetBounds(viewport_size); 379 inner_clip_layer->SetBounds(viewport_size);
380 host_impl_->InnerViewportScrollLayer()->SetBounds(viewport_size); 380 host_impl_->InnerViewportScrollLayer()->SetBounds(viewport_size);
381 host_impl_->active_tree()->BuildPropertyTreesForTesting(); 381 host_impl_->active_tree()->BuildPropertyTreesForTesting();
382 382
383 host_impl_->SetViewportSize(viewport_size); 383 host_impl_->SetViewportSize(viewport_size);
384 host_impl_->active_tree()->DidBecomeActive(); 384 host_impl_->active_tree()->DidBecomeActive();
385 385
386 return content_layer; 386 return content_layer;
387 } 387 }
388 388
389 scoped_ptr<LayerImpl> CreateScrollableLayer(int id, 389 std::unique_ptr<LayerImpl> CreateScrollableLayer(int id,
390 const gfx::Size& size, 390 const gfx::Size& size,
391 LayerImpl* clip_layer) { 391 LayerImpl* clip_layer) {
392 DCHECK(clip_layer); 392 DCHECK(clip_layer);
393 DCHECK(id != clip_layer->id()); 393 DCHECK(id != clip_layer->id());
394 scoped_ptr<LayerImpl> layer = 394 std::unique_ptr<LayerImpl> layer =
395 LayerImpl::Create(host_impl_->active_tree(), id); 395 LayerImpl::Create(host_impl_->active_tree(), id);
396 layer->SetScrollClipLayer(clip_layer->id()); 396 layer->SetScrollClipLayer(clip_layer->id());
397 layer->SetDrawsContent(true); 397 layer->SetDrawsContent(true);
398 layer->SetBounds(size); 398 layer->SetBounds(size);
399 clip_layer->SetBounds(gfx::Size(size.width() / 2, size.height() / 2)); 399 clip_layer->SetBounds(gfx::Size(size.width() / 2, size.height() / 2));
400 return layer; 400 return layer;
401 } 401 }
402 402
403 scoped_ptr<ScrollState> BeginState(const gfx::Point& point) { 403 std::unique_ptr<ScrollState> BeginState(const gfx::Point& point) {
404 ScrollStateData scroll_state_data; 404 ScrollStateData scroll_state_data;
405 scroll_state_data.is_beginning = true; 405 scroll_state_data.is_beginning = true;
406 scroll_state_data.start_position_x = point.x(); 406 scroll_state_data.start_position_x = point.x();
407 scroll_state_data.start_position_y = point.y(); 407 scroll_state_data.start_position_y = point.y();
408 scoped_ptr<ScrollState> scroll_state(new ScrollState(scroll_state_data)); 408 std::unique_ptr<ScrollState> scroll_state(
409 new ScrollState(scroll_state_data));
409 return scroll_state; 410 return scroll_state;
410 } 411 }
411 412
412 scoped_ptr<ScrollState> UpdateState(const gfx::Point& point, 413 std::unique_ptr<ScrollState> UpdateState(const gfx::Point& point,
413 const gfx::Vector2dF& delta) { 414 const gfx::Vector2dF& delta) {
414 ScrollStateData scroll_state_data; 415 ScrollStateData scroll_state_data;
415 scroll_state_data.delta_x = delta.x(); 416 scroll_state_data.delta_x = delta.x();
416 scroll_state_data.delta_y = delta.y(); 417 scroll_state_data.delta_y = delta.y();
417 scroll_state_data.start_position_x = point.x(); 418 scroll_state_data.start_position_x = point.x();
418 scroll_state_data.start_position_y = point.y(); 419 scroll_state_data.start_position_y = point.y();
419 scoped_ptr<ScrollState> scroll_state(new ScrollState(scroll_state_data)); 420 std::unique_ptr<ScrollState> scroll_state(
421 new ScrollState(scroll_state_data));
420 return scroll_state; 422 return scroll_state;
421 } 423 }
422 424
423 scoped_ptr<ScrollState> EndState() { 425 std::unique_ptr<ScrollState> EndState() {
424 ScrollStateData scroll_state_data; 426 ScrollStateData scroll_state_data;
425 scroll_state_data.is_ending = true; 427 scroll_state_data.is_ending = true;
426 scoped_ptr<ScrollState> scroll_state(new ScrollState(scroll_state_data)); 428 std::unique_ptr<ScrollState> scroll_state(
429 new ScrollState(scroll_state_data));
427 return scroll_state; 430 return scroll_state;
428 } 431 }
429 432
430 void DrawFrame() { 433 void DrawFrame() {
431 LayerTreeHostImpl::FrameData frame; 434 LayerTreeHostImpl::FrameData frame;
432 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); 435 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame));
433 host_impl_->DrawLayers(&frame); 436 host_impl_->DrawLayers(&frame);
434 host_impl_->DidDrawAllLayers(frame); 437 host_impl_->DidDrawAllLayers(frame);
435 } 438 }
436 439
(...skipping 16 matching lines...) Expand all
453 void pinch_zoom_pan_viewport_test(float device_scale_factor); 456 void pinch_zoom_pan_viewport_test(float device_scale_factor);
454 void pinch_zoom_pan_viewport_and_scroll_test(float device_scale_factor); 457 void pinch_zoom_pan_viewport_and_scroll_test(float device_scale_factor);
455 void pinch_zoom_pan_viewport_and_scroll_boundary_test( 458 void pinch_zoom_pan_viewport_and_scroll_boundary_test(
456 float device_scale_factor); 459 float device_scale_factor);
457 460
458 void SetupMouseMoveAtWithDeviceScale(float device_scale_factor); 461 void SetupMouseMoveAtWithDeviceScale(float device_scale_factor);
459 462
460 scoped_refptr<AnimationTimeline> timeline() { return timeline_; } 463 scoped_refptr<AnimationTimeline> timeline() { return timeline_; }
461 464
462 protected: 465 protected:
463 virtual scoped_ptr<OutputSurface> CreateOutputSurface() { 466 virtual std::unique_ptr<OutputSurface> CreateOutputSurface() {
464 return FakeOutputSurface::Create3d(); 467 return FakeOutputSurface::Create3d();
465 } 468 }
466 469
467 void DrawOneFrame() { 470 void DrawOneFrame() {
468 LayerTreeHostImpl::FrameData frame_data; 471 LayerTreeHostImpl::FrameData frame_data;
469 PrepareToDrawFrame(&frame_data); 472 PrepareToDrawFrame(&frame_data);
470 host_impl_->DidDrawAllLayers(frame_data); 473 host_impl_->DidDrawAllLayers(frame_data);
471 } 474 }
472 475
473 static void SetScrollOffsetDelta(LayerImpl* layer_impl, 476 static void SetScrollOffsetDelta(LayerImpl* layer_impl,
(...skipping 14 matching lines...) Expand all
488 host_impl_->UpdateAnimationState(true); 491 host_impl_->UpdateAnimationState(true);
489 host_impl_->DidFinishImplFrame(); 492 host_impl_->DidFinishImplFrame();
490 } 493 }
491 494
492 FakeImplTaskRunnerProvider task_runner_provider_; 495 FakeImplTaskRunnerProvider task_runner_provider_;
493 DebugScopedSetMainThreadBlocked always_main_thread_blocked_; 496 DebugScopedSetMainThreadBlocked always_main_thread_blocked_;
494 497
495 TestSharedBitmapManager shared_bitmap_manager_; 498 TestSharedBitmapManager shared_bitmap_manager_;
496 TestGpuMemoryBufferManager gpu_memory_buffer_manager_; 499 TestGpuMemoryBufferManager gpu_memory_buffer_manager_;
497 TestTaskGraphRunner task_graph_runner_; 500 TestTaskGraphRunner task_graph_runner_;
498 scoped_ptr<OutputSurface> output_surface_; 501 std::unique_ptr<OutputSurface> output_surface_;
499 scoped_ptr<LayerTreeHostImpl> host_impl_; 502 std::unique_ptr<LayerTreeHostImpl> host_impl_;
500 FakeRenderingStatsInstrumentation stats_instrumentation_; 503 FakeRenderingStatsInstrumentation stats_instrumentation_;
501 bool on_can_draw_state_changed_called_; 504 bool on_can_draw_state_changed_called_;
502 bool did_notify_ready_to_activate_; 505 bool did_notify_ready_to_activate_;
503 bool did_request_commit_; 506 bool did_request_commit_;
504 bool did_request_redraw_; 507 bool did_request_redraw_;
505 bool did_request_next_frame_; 508 bool did_request_next_frame_;
506 bool did_request_prepare_tiles_; 509 bool did_request_prepare_tiles_;
507 bool did_complete_page_scale_animation_; 510 bool did_complete_page_scale_animation_;
508 bool reduce_memory_result_; 511 bool reduce_memory_result_;
509 base::Closure animation_task_; 512 base::Closure animation_task_;
510 base::TimeDelta requested_animation_delay_; 513 base::TimeDelta requested_animation_delay_;
511 bool skip_draw_layers_in_on_draw_; 514 bool skip_draw_layers_in_on_draw_;
512 scoped_ptr<LayerTreeHostImpl::FrameData> last_on_draw_frame_; 515 std::unique_ptr<LayerTreeHostImpl::FrameData> last_on_draw_frame_;
513 RenderPassList last_on_draw_render_passes_; 516 RenderPassList last_on_draw_render_passes_;
514 scoped_refptr<AnimationTimeline> timeline_; 517 scoped_refptr<AnimationTimeline> timeline_;
515 }; 518 };
516 519
517 // A test fixture for new animation timelines tests. 520 // A test fixture for new animation timelines tests.
518 class LayerTreeHostImplTimelinesTest : public LayerTreeHostImplTest { 521 class LayerTreeHostImplTimelinesTest : public LayerTreeHostImplTest {
519 public: 522 public:
520 void SetUp() override { 523 void SetUp() override {
521 CreateHostImpl(DefaultSettings(), CreateOutputSurface()); 524 CreateHostImpl(DefaultSettings(), CreateOutputSurface());
522 } 525 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 557
555 host_impl_->SetViewportSize(gfx::Size(100, 100)); 558 host_impl_->SetViewportSize(gfx::Size(100, 100));
556 EXPECT_TRUE(host_impl_->CanDraw()); 559 EXPECT_TRUE(host_impl_->CanDraw());
557 EXPECT_TRUE(on_can_draw_state_changed_called_); 560 EXPECT_TRUE(on_can_draw_state_changed_called_);
558 on_can_draw_state_changed_called_ = false; 561 on_can_draw_state_changed_called_ = false;
559 } 562 }
560 563
561 TEST_F(LayerTreeHostImplTest, ResourcelessDrawWithEmptyViewport) { 564 TEST_F(LayerTreeHostImplTest, ResourcelessDrawWithEmptyViewport) {
562 CreateHostImpl(DefaultSettings(), 565 CreateHostImpl(DefaultSettings(),
563 FakeOutputSurface::CreateSoftware( 566 FakeOutputSurface::CreateSoftware(
564 make_scoped_ptr(new SoftwareOutputDevice()))); 567 base::WrapUnique(new SoftwareOutputDevice())));
565 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 568 SetupScrollAndContentsLayers(gfx::Size(100, 100));
566 EXPECT_TRUE(host_impl_->CanDraw()); 569 EXPECT_TRUE(host_impl_->CanDraw());
567 host_impl_->SetViewportSize(gfx::Size()); 570 host_impl_->SetViewportSize(gfx::Size());
568 EXPECT_FALSE(host_impl_->CanDraw()); 571 EXPECT_FALSE(host_impl_->CanDraw());
569 572
570 FakeOutputSurface* fake_output_surface = 573 FakeOutputSurface* fake_output_surface =
571 static_cast<FakeOutputSurface*>(host_impl_->output_surface()); 574 static_cast<FakeOutputSurface*>(host_impl_->output_surface());
572 EXPECT_EQ(fake_output_surface->num_sent_frames(), 0u); 575 EXPECT_EQ(fake_output_surface->num_sent_frames(), 0u);
573 gfx::Transform identity; 576 gfx::Transform identity;
574 gfx::Rect viewport(100, 100); 577 gfx::Rect viewport(100, 100);
575 const bool resourceless_software_draw = true; 578 const bool resourceless_software_draw = true;
576 host_impl_->OnDraw(identity, viewport, viewport, resourceless_software_draw); 579 host_impl_->OnDraw(identity, viewport, viewport, resourceless_software_draw);
577 ASSERT_EQ(fake_output_surface->num_sent_frames(), 1u); 580 ASSERT_EQ(fake_output_surface->num_sent_frames(), 1u);
578 EXPECT_EQ(gfx::SizeF(100.f, 100.f), 581 EXPECT_EQ(gfx::SizeF(100.f, 100.f),
579 fake_output_surface->last_sent_frame().metadata.root_layer_size); 582 fake_output_surface->last_sent_frame().metadata.root_layer_size);
580 } 583 }
581 584
582 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) { 585 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) {
583 ASSERT_FALSE(host_impl_->active_tree()->root_layer()); 586 ASSERT_FALSE(host_impl_->active_tree()->root_layer());
584 587
585 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); 588 std::unique_ptr<ScrollAndScaleSet> scroll_info =
589 host_impl_->ProcessScrollDeltas();
586 ASSERT_EQ(scroll_info->scrolls.size(), 0u); 590 ASSERT_EQ(scroll_info->scrolls.size(), 0u);
587 } 591 }
588 592
589 TEST_F(LayerTreeHostImplTest, ScrollDeltaTreeButNoChanges) { 593 TEST_F(LayerTreeHostImplTest, ScrollDeltaTreeButNoChanges) {
590 { 594 {
591 scoped_ptr<LayerImpl> root = 595 std::unique_ptr<LayerImpl> root =
592 LayerImpl::Create(host_impl_->active_tree(), 1); 596 LayerImpl::Create(host_impl_->active_tree(), 1);
593 root->AddChild(LayerImpl::Create(host_impl_->active_tree(), 2)); 597 root->AddChild(LayerImpl::Create(host_impl_->active_tree(), 2));
594 root->AddChild(LayerImpl::Create(host_impl_->active_tree(), 3)); 598 root->AddChild(LayerImpl::Create(host_impl_->active_tree(), 3));
595 root->children()[1]->AddChild( 599 root->children()[1]->AddChild(
596 LayerImpl::Create(host_impl_->active_tree(), 4)); 600 LayerImpl::Create(host_impl_->active_tree(), 4));
597 root->children()[1]->AddChild( 601 root->children()[1]->AddChild(
598 LayerImpl::Create(host_impl_->active_tree(), 5)); 602 LayerImpl::Create(host_impl_->active_tree(), 5));
599 root->children()[1]->children()[0]->AddChild( 603 root->children()[1]->children()[0]->AddChild(
600 LayerImpl::Create(host_impl_->active_tree(), 6)); 604 LayerImpl::Create(host_impl_->active_tree(), 6));
601 host_impl_->active_tree()->SetRootLayer(std::move(root)); 605 host_impl_->active_tree()->SetRootLayer(std::move(root));
602 } 606 }
603 LayerImpl* root = host_impl_->active_tree()->root_layer(); 607 LayerImpl* root = host_impl_->active_tree()->root_layer();
604 608
605 ExpectClearedScrollDeltasRecursive(root); 609 ExpectClearedScrollDeltasRecursive(root);
606 610
607 scoped_ptr<ScrollAndScaleSet> scroll_info; 611 std::unique_ptr<ScrollAndScaleSet> scroll_info;
608 612
609 scroll_info = host_impl_->ProcessScrollDeltas(); 613 scroll_info = host_impl_->ProcessScrollDeltas();
610 ASSERT_EQ(scroll_info->scrolls.size(), 0u); 614 ASSERT_EQ(scroll_info->scrolls.size(), 0u);
611 ExpectClearedScrollDeltasRecursive(root); 615 ExpectClearedScrollDeltasRecursive(root);
612 616
613 scroll_info = host_impl_->ProcessScrollDeltas(); 617 scroll_info = host_impl_->ProcessScrollDeltas();
614 ASSERT_EQ(scroll_info->scrolls.size(), 0u); 618 ASSERT_EQ(scroll_info->scrolls.size(), 0u);
615 ExpectClearedScrollDeltasRecursive(root); 619 ExpectClearedScrollDeltasRecursive(root);
616 } 620 }
617 621
618 TEST_F(LayerTreeHostImplTest, ScrollDeltaRepeatedScrolls) { 622 TEST_F(LayerTreeHostImplTest, ScrollDeltaRepeatedScrolls) {
619 gfx::ScrollOffset scroll_offset(20, 30); 623 gfx::ScrollOffset scroll_offset(20, 30);
620 gfx::Vector2d scroll_delta(11, -15); 624 gfx::Vector2d scroll_delta(11, -15);
621 { 625 {
622 scoped_ptr<LayerImpl> root_clip = 626 std::unique_ptr<LayerImpl> root_clip =
623 LayerImpl::Create(host_impl_->active_tree(), 2); 627 LayerImpl::Create(host_impl_->active_tree(), 2);
624 scoped_ptr<LayerImpl> root = 628 std::unique_ptr<LayerImpl> root =
625 LayerImpl::Create(host_impl_->active_tree(), 1); 629 LayerImpl::Create(host_impl_->active_tree(), 1);
626 root_clip->SetBounds(gfx::Size(10, 10)); 630 root_clip->SetBounds(gfx::Size(10, 10));
627 LayerImpl* root_layer = root.get(); 631 LayerImpl* root_layer = root.get();
628 root_clip->AddChild(std::move(root)); 632 root_clip->AddChild(std::move(root));
629 root_layer->SetBounds(gfx::Size(110, 110)); 633 root_layer->SetBounds(gfx::Size(110, 110));
630 root_layer->SetScrollClipLayer(root_clip->id()); 634 root_layer->SetScrollClipLayer(root_clip->id());
631 root_layer->layer_tree_impl() 635 root_layer->layer_tree_impl()
632 ->property_trees() 636 ->property_trees()
633 ->scroll_tree.UpdateScrollOffsetBaseForTesting(root_layer->id(), 637 ->scroll_tree.UpdateScrollOffsetBaseForTesting(root_layer->id(),
634 scroll_offset); 638 scroll_offset);
635 host_impl_->active_tree()->SetRootLayer(std::move(root_clip)); 639 host_impl_->active_tree()->SetRootLayer(std::move(root_clip));
636 host_impl_->active_tree()->BuildPropertyTreesForTesting(); 640 host_impl_->active_tree()->BuildPropertyTreesForTesting();
637 root_layer->ScrollBy(scroll_delta); 641 root_layer->ScrollBy(scroll_delta);
638 } 642 }
639 643
640 LayerImpl* root = host_impl_->active_tree()->root_layer()->children()[0]; 644 LayerImpl* root = host_impl_->active_tree()->root_layer()->children()[0];
641 645
642 scoped_ptr<ScrollAndScaleSet> scroll_info; 646 std::unique_ptr<ScrollAndScaleSet> scroll_info;
643 647
644 scroll_info = host_impl_->ProcessScrollDeltas(); 648 scroll_info = host_impl_->ProcessScrollDeltas();
645 ASSERT_EQ(scroll_info->scrolls.size(), 1u); 649 ASSERT_EQ(scroll_info->scrolls.size(), 1u);
646 EXPECT_TRUE(ScrollInfoContains(*scroll_info, root->id(), scroll_delta)); 650 EXPECT_TRUE(ScrollInfoContains(*scroll_info, root->id(), scroll_delta));
647 651
648 gfx::Vector2d scroll_delta2(-5, 27); 652 gfx::Vector2d scroll_delta2(-5, 27);
649 root->ScrollBy(scroll_delta2); 653 root->ScrollBy(scroll_delta2);
650 scroll_info = host_impl_->ProcessScrollDeltas(); 654 scroll_info = host_impl_->ProcessScrollDeltas();
651 ASSERT_EQ(scroll_info->scrolls.size(), 1u); 655 ASSERT_EQ(scroll_info->scrolls.size(), 1u);
652 EXPECT_TRUE(ScrollInfoContains(*scroll_info, root->id(), 656 EXPECT_TRUE(ScrollInfoContains(*scroll_info, root->id(),
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 TEST_F(LayerTreeHostImplTest, ScrollWithoutRootLayer) { 706 TEST_F(LayerTreeHostImplTest, ScrollWithoutRootLayer) {
703 // We should not crash when trying to scroll an empty layer tree. 707 // We should not crash when trying to scroll an empty layer tree.
704 InputHandler::ScrollStatus status = host_impl_->ScrollBegin( 708 InputHandler::ScrollStatus status = host_impl_->ScrollBegin(
705 BeginState(gfx::Point()).get(), InputHandler::WHEEL); 709 BeginState(gfx::Point()).get(), InputHandler::WHEEL);
706 EXPECT_EQ(InputHandler::SCROLL_IGNORED, status.thread); 710 EXPECT_EQ(InputHandler::SCROLL_IGNORED, status.thread);
707 EXPECT_EQ(MainThreadScrollingReason::kNoScrollingLayer, 711 EXPECT_EQ(MainThreadScrollingReason::kNoScrollingLayer,
708 status.main_thread_scrolling_reasons); 712 status.main_thread_scrolling_reasons);
709 } 713 }
710 714
711 TEST_F(LayerTreeHostImplTest, ScrollWithoutRenderer) { 715 TEST_F(LayerTreeHostImplTest, ScrollWithoutRenderer) {
712 scoped_ptr<TestWebGraphicsContext3D> context_owned = 716 std::unique_ptr<TestWebGraphicsContext3D> context_owned =
713 TestWebGraphicsContext3D::Create(); 717 TestWebGraphicsContext3D::Create();
714 context_owned->set_context_lost(true); 718 context_owned->set_context_lost(true);
715 719
716 // Initialization will fail. 720 // Initialization will fail.
717 EXPECT_FALSE( 721 EXPECT_FALSE(
718 CreateHostImpl(DefaultSettings(), 722 CreateHostImpl(DefaultSettings(),
719 FakeOutputSurface::Create3d(std::move(context_owned)))); 723 FakeOutputSurface::Create3d(std::move(context_owned))));
720 724
721 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 725 SetupScrollAndContentsLayers(gfx::Size(100, 100));
722 726
(...skipping 18 matching lines...) Expand all
741 .thread); 745 .thread);
742 host_impl_->active_tree()->ClearLayers(); 746 host_impl_->active_tree()->ClearLayers();
743 747
744 scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100)); 748 scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100));
745 749
746 // We should still be scrolling, because the scrolled layer also exists in the 750 // We should still be scrolling, because the scrolled layer also exists in the
747 // new tree. 751 // new tree.
748 gfx::Vector2d scroll_delta(0, 10); 752 gfx::Vector2d scroll_delta(0, 10);
749 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()); 753 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
750 host_impl_->ScrollEnd(EndState().get()); 754 host_impl_->ScrollEnd(EndState().get());
751 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); 755 std::unique_ptr<ScrollAndScaleSet> scroll_info =
756 host_impl_->ProcessScrollDeltas();
752 EXPECT_TRUE( 757 EXPECT_TRUE(
753 ScrollInfoContains(*scroll_info, scroll_layer->id(), scroll_delta)); 758 ScrollInfoContains(*scroll_info, scroll_layer->id(), scroll_delta));
754 } 759 }
755 760
756 TEST_F(LayerTreeHostImplTest, ScrollBlocksOnWheelEventHandlers) { 761 TEST_F(LayerTreeHostImplTest, ScrollBlocksOnWheelEventHandlers) {
757 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 762 SetupScrollAndContentsLayers(gfx::Size(100, 100));
758 host_impl_->SetViewportSize(gfx::Size(50, 50)); 763 host_impl_->SetViewportSize(gfx::Size(50, 50));
759 DrawFrame(); 764 DrawFrame();
760 765
761 // With registered event handlers, wheel scrolls don't necessarily 766 // With registered event handlers, wheel scrolls don't necessarily
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 } 804 }
800 805
801 TEST_F(LayerTreeHostImplTest, ScrollBlocksOnTouchEventHandlers) { 806 TEST_F(LayerTreeHostImplTest, ScrollBlocksOnTouchEventHandlers) {
802 LayerImpl* scroll = SetupScrollAndContentsLayers(gfx::Size(100, 100)); 807 LayerImpl* scroll = SetupScrollAndContentsLayers(gfx::Size(100, 100));
803 host_impl_->SetViewportSize(gfx::Size(50, 50)); 808 host_impl_->SetViewportSize(gfx::Size(50, 50));
804 DrawFrame(); 809 DrawFrame();
805 LayerImpl* root = host_impl_->active_tree()->root_layer(); 810 LayerImpl* root = host_impl_->active_tree()->root_layer();
806 811
807 LayerImpl* child = 0; 812 LayerImpl* child = 0;
808 { 813 {
809 scoped_ptr<LayerImpl> child_layer = 814 std::unique_ptr<LayerImpl> child_layer =
810 LayerImpl::Create(host_impl_->active_tree(), 6); 815 LayerImpl::Create(host_impl_->active_tree(), 6);
811 child = child_layer.get(); 816 child = child_layer.get();
812 child_layer->SetDrawsContent(true); 817 child_layer->SetDrawsContent(true);
813 child_layer->SetPosition(gfx::PointF(0, 20)); 818 child_layer->SetPosition(gfx::PointF(0, 20));
814 child_layer->SetBounds(gfx::Size(50, 50)); 819 child_layer->SetBounds(gfx::Size(50, 50));
815 scroll->AddChild(std::move(child_layer)); 820 scroll->AddChild(std::move(child_layer));
816 SetNeedsRebuildPropertyTrees(); 821 SetNeedsRebuildPropertyTrees();
817 RebuildPropertyTrees(); 822 RebuildPropertyTrees();
818 } 823 }
819 824
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after
1398 1403
1399 TEST_F(LayerTreeHostImplTest, AnimationMarksLayerNotReady) { 1404 TEST_F(LayerTreeHostImplTest, AnimationMarksLayerNotReady) {
1400 host_impl_->SetViewportSize(gfx::Size(50, 50)); 1405 host_impl_->SetViewportSize(gfx::Size(50, 50));
1401 1406
1402 host_impl_->active_tree()->SetRootLayer( 1407 host_impl_->active_tree()->SetRootLayer(
1403 LayerImpl::Create(host_impl_->active_tree(), 1)); 1408 LayerImpl::Create(host_impl_->active_tree(), 1));
1404 LayerImpl* root = host_impl_->active_tree()->root_layer(); 1409 LayerImpl* root = host_impl_->active_tree()->root_layer();
1405 root->SetBounds(gfx::Size(50, 50)); 1410 root->SetBounds(gfx::Size(50, 50));
1406 root->SetHasRenderSurface(true); 1411 root->SetHasRenderSurface(true);
1407 1412
1408 root->AddChild(scoped_ptr<MissingTilesLayer>( 1413 root->AddChild(std::unique_ptr<MissingTilesLayer>(
1409 new MissingTilesLayer(host_impl_->active_tree(), 2))); 1414 new MissingTilesLayer(host_impl_->active_tree(), 2)));
1410 MissingTilesLayer* child = 1415 MissingTilesLayer* child =
1411 static_cast<MissingTilesLayer*>(root->children()[0]); 1416 static_cast<MissingTilesLayer*>(root->children()[0]);
1412 child->SetBounds(gfx::Size(10, 10)); 1417 child->SetBounds(gfx::Size(10, 10));
1413 child->draw_properties().visible_layer_rect = gfx::Rect(10, 10); 1418 child->draw_properties().visible_layer_rect = gfx::Rect(10, 10);
1414 child->SetDrawsContent(true); 1419 child->SetDrawsContent(true);
1415 1420
1416 EXPECT_TRUE(child->was_ever_ready_since_last_transform_animation()); 1421 EXPECT_TRUE(child->was_ever_ready_since_last_transform_animation());
1417 1422
1418 // Add a translate from 6,7 to 8,9. 1423 // Add a translate from 6,7 to 8,9.
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1506 InputHandler::TOUCHSCREEN); 1511 InputHandler::TOUCHSCREEN);
1507 host_impl_->PinchGestureBegin(); 1512 host_impl_->PinchGestureBegin();
1508 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(50, 50)); 1513 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(50, 50));
1509 host_impl_->PinchGestureEnd(); 1514 host_impl_->PinchGestureEnd();
1510 host_impl_->ScrollEnd(EndState().get()); 1515 host_impl_->ScrollEnd(EndState().get());
1511 EXPECT_FALSE(did_request_next_frame_); 1516 EXPECT_FALSE(did_request_next_frame_);
1512 EXPECT_TRUE(did_request_redraw_); 1517 EXPECT_TRUE(did_request_redraw_);
1513 EXPECT_TRUE(did_request_commit_); 1518 EXPECT_TRUE(did_request_commit_);
1514 EXPECT_EQ(gfx::Size(50, 50), container_layer->bounds()); 1519 EXPECT_EQ(gfx::Size(50, 50), container_layer->bounds());
1515 1520
1516 scoped_ptr<ScrollAndScaleSet> scroll_info = 1521 std::unique_ptr<ScrollAndScaleSet> scroll_info =
1517 host_impl_->ProcessScrollDeltas(); 1522 host_impl_->ProcessScrollDeltas();
1518 EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta); 1523 EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta);
1519 1524
1520 EXPECT_EQ(gfx::ScrollOffset(75.0, 75.0).ToString(), 1525 EXPECT_EQ(gfx::ScrollOffset(75.0, 75.0).ToString(),
1521 scroll_layer->MaxScrollOffset().ToString()); 1526 scroll_layer->MaxScrollOffset().ToString());
1522 } 1527 }
1523 1528
1524 // Scrolling after a pinch gesture should always be in local space. The 1529 // Scrolling after a pinch gesture should always be in local space. The
1525 // scroll deltas have the page scale factor applied. 1530 // scroll deltas have the page scale factor applied.
1526 { 1531 {
(...skipping 11 matching lines...) Expand all
1538 host_impl_->ScrollEnd(EndState().get()); 1543 host_impl_->ScrollEnd(EndState().get());
1539 1544
1540 gfx::Vector2d scroll_delta(0, 10); 1545 gfx::Vector2d scroll_delta(0, 10);
1541 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 1546 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
1542 host_impl_->ScrollBegin(BeginState(gfx::Point(5, 5)).get(), 1547 host_impl_->ScrollBegin(BeginState(gfx::Point(5, 5)).get(),
1543 InputHandler::WHEEL) 1548 InputHandler::WHEEL)
1544 .thread); 1549 .thread);
1545 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()); 1550 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
1546 host_impl_->ScrollEnd(EndState().get()); 1551 host_impl_->ScrollEnd(EndState().get());
1547 1552
1548 scoped_ptr<ScrollAndScaleSet> scroll_info = 1553 std::unique_ptr<ScrollAndScaleSet> scroll_info =
1549 host_impl_->ProcessScrollDeltas(); 1554 host_impl_->ProcessScrollDeltas();
1550 EXPECT_TRUE(ScrollInfoContains( 1555 EXPECT_TRUE(ScrollInfoContains(
1551 *scroll_info.get(), scroll_layer->id(), 1556 *scroll_info.get(), scroll_layer->id(),
1552 gfx::Vector2d(0, scroll_delta.y() / page_scale_delta))); 1557 gfx::Vector2d(0, scroll_delta.y() / page_scale_delta)));
1553 } 1558 }
1554 } 1559 }
1555 1560
1556 TEST_F(LayerTreeHostImplTest, ViewportScrollOrder) { 1561 TEST_F(LayerTreeHostImplTest, ViewportScrollOrder) {
1557 LayerTreeSettings settings = DefaultSettings(); 1562 LayerTreeSettings settings = DefaultSettings();
1558 CreateHostImpl(settings, 1563 CreateHostImpl(settings,
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
1879 outer_scroll_layer->CurrentScrollOffset()); 1884 outer_scroll_layer->CurrentScrollOffset());
1880 EXPECT_VECTOR_EQ( 1885 EXPECT_VECTOR_EQ(
1881 gfx::Vector2dF(50, 50), 1886 gfx::Vector2dF(50, 50),
1882 inner_scroll_layer->CurrentScrollOffset()); 1887 inner_scroll_layer->CurrentScrollOffset());
1883 } 1888 }
1884 1889
1885 TEST_F(LayerTreeHostImplTest, ScrollWithSwapPromises) { 1890 TEST_F(LayerTreeHostImplTest, ScrollWithSwapPromises) {
1886 ui::LatencyInfo latency_info; 1891 ui::LatencyInfo latency_info;
1887 latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, 1892 latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0,
1888 1234); 1893 1234);
1889 scoped_ptr<SwapPromise> swap_promise( 1894 std::unique_ptr<SwapPromise> swap_promise(
1890 new LatencyInfoSwapPromise(latency_info)); 1895 new LatencyInfoSwapPromise(latency_info));
1891 1896
1892 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 1897 SetupScrollAndContentsLayers(gfx::Size(100, 100));
1893 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 1898 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
1894 host_impl_ 1899 host_impl_
1895 ->ScrollBegin(BeginState(gfx::Point()).get(), 1900 ->ScrollBegin(BeginState(gfx::Point()).get(),
1896 InputHandler::TOUCHSCREEN) 1901 InputHandler::TOUCHSCREEN)
1897 .thread); 1902 .thread);
1898 host_impl_->ScrollBy(UpdateState(gfx::Point(), gfx::Vector2d(0, 10)).get()); 1903 host_impl_->ScrollBy(UpdateState(gfx::Point(), gfx::Vector2d(0, 10)).get());
1899 host_impl_->QueueSwapPromiseForMainThreadScrollUpdate( 1904 host_impl_->QueueSwapPromiseForMainThreadScrollUpdate(
1900 std::move(swap_promise)); 1905 std::move(swap_promise));
1901 host_impl_->ScrollEnd(EndState().get()); 1906 host_impl_->ScrollEnd(EndState().get());
1902 1907
1903 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); 1908 std::unique_ptr<ScrollAndScaleSet> scroll_info =
1909 host_impl_->ProcessScrollDeltas();
1904 EXPECT_EQ(1u, scroll_info->swap_promises.size()); 1910 EXPECT_EQ(1u, scroll_info->swap_promises.size());
1905 EXPECT_EQ(latency_info.trace_id(), scroll_info->swap_promises[0]->TraceId()); 1911 EXPECT_EQ(latency_info.trace_id(), scroll_info->swap_promises[0]->TraceId());
1906 } 1912 }
1907 1913
1908 // Test that scrolls targeting a layer with a non-null scroll_parent() don't 1914 // Test that scrolls targeting a layer with a non-null scroll_parent() don't
1909 // bubble up. 1915 // bubble up.
1910 TEST_F(LayerTreeHostImplTest, ScrollDoesntBubble) { 1916 TEST_F(LayerTreeHostImplTest, ScrollDoesntBubble) {
1911 LayerImpl* viewport_scroll = 1917 LayerImpl* viewport_scroll =
1912 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 1918 SetupScrollAndContentsLayers(gfx::Size(100, 100));
1913 host_impl_->SetViewportSize(gfx::Size(50, 50)); 1919 host_impl_->SetViewportSize(gfx::Size(50, 50));
1914 1920
1915 // Set up two scrolling children of the root, one of which is a scroll parent 1921 // Set up two scrolling children of the root, one of which is a scroll parent
1916 // to the other. Scrolls shouldn't bubbling from the child. 1922 // to the other. Scrolls shouldn't bubbling from the child.
1917 LayerImpl *parent; 1923 LayerImpl *parent;
1918 LayerImpl *child; 1924 LayerImpl *child;
1919 LayerImpl *child_clip; 1925 LayerImpl *child_clip;
1920 1926
1921 scoped_ptr<LayerImpl> scroll_parent_clip = 1927 std::unique_ptr<LayerImpl> scroll_parent_clip =
1922 LayerImpl::Create(host_impl_->active_tree(), 6); 1928 LayerImpl::Create(host_impl_->active_tree(), 6);
1923 scoped_ptr<LayerImpl> scroll_parent = CreateScrollableLayer( 1929 std::unique_ptr<LayerImpl> scroll_parent =
1924 7, gfx::Size(10, 10), scroll_parent_clip.get()); 1930 CreateScrollableLayer(7, gfx::Size(10, 10), scroll_parent_clip.get());
1925 parent = scroll_parent.get(); 1931 parent = scroll_parent.get();
1926 scroll_parent_clip->AddChild(std::move(scroll_parent)); 1932 scroll_parent_clip->AddChild(std::move(scroll_parent));
1927 1933
1928 viewport_scroll->AddChild(std::move(scroll_parent_clip)); 1934 viewport_scroll->AddChild(std::move(scroll_parent_clip));
1929 1935
1930 scoped_ptr<LayerImpl> scroll_child_clip = 1936 std::unique_ptr<LayerImpl> scroll_child_clip =
1931 LayerImpl::Create(host_impl_->active_tree(), 8); 1937 LayerImpl::Create(host_impl_->active_tree(), 8);
1932 scoped_ptr<LayerImpl> scroll_child = CreateScrollableLayer( 1938 std::unique_ptr<LayerImpl> scroll_child =
1933 9, gfx::Size(10, 10), scroll_child_clip.get()); 1939 CreateScrollableLayer(9, gfx::Size(10, 10), scroll_child_clip.get());
1934 child = scroll_child.get(); 1940 child = scroll_child.get();
1935 scroll_child->SetPosition(gfx::PointF(20.f, 20.f)); 1941 scroll_child->SetPosition(gfx::PointF(20.f, 20.f));
1936 scroll_child_clip->AddChild(std::move(scroll_child)); 1942 scroll_child_clip->AddChild(std::move(scroll_child));
1937 1943
1938 child_clip = scroll_child_clip.get(); 1944 child_clip = scroll_child_clip.get();
1939 viewport_scroll->AddChild(std::move(scroll_child_clip)); 1945 viewport_scroll->AddChild(std::move(scroll_child_clip));
1940 1946
1941 child_clip->SetScrollParent(parent); 1947 child_clip->SetScrollParent(parent);
1942 scoped_ptr<std::set<LayerImpl*>> scroll_children(new std::set<LayerImpl*>); 1948 std::unique_ptr<std::set<LayerImpl*>> scroll_children(
1949 new std::set<LayerImpl*>);
1943 scroll_children->insert(child_clip); 1950 scroll_children->insert(child_clip);
1944 parent->SetScrollChildren(scroll_children.release()); 1951 parent->SetScrollChildren(scroll_children.release());
1945 1952
1946 SetNeedsRebuildPropertyTrees(); 1953 SetNeedsRebuildPropertyTrees();
1947 DrawFrame(); 1954 DrawFrame();
1948 1955
1949 { 1956 {
1950 host_impl_->ScrollBegin(BeginState(gfx::Point(21, 21)).get(), 1957 host_impl_->ScrollBegin(BeginState(gfx::Point(21, 21)).get(),
1951 InputHandler::TOUCHSCREEN); 1958 InputHandler::TOUCHSCREEN);
1952 host_impl_->ScrollBy( 1959 host_impl_->ScrollBy(
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
2018 host_impl_->ScrollBegin(BeginState(gfx::Point(50, 50)).get(), 2025 host_impl_->ScrollBegin(BeginState(gfx::Point(50, 50)).get(),
2019 InputHandler::TOUCHSCREEN); 2026 InputHandler::TOUCHSCREEN);
2020 host_impl_->PinchGestureBegin(); 2027 host_impl_->PinchGestureBegin();
2021 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(50, 50)); 2028 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(50, 50));
2022 host_impl_->PinchGestureEnd(); 2029 host_impl_->PinchGestureEnd();
2023 host_impl_->ScrollEnd(EndState().get()); 2030 host_impl_->ScrollEnd(EndState().get());
2024 EXPECT_FALSE(did_request_next_frame_); 2031 EXPECT_FALSE(did_request_next_frame_);
2025 EXPECT_TRUE(did_request_redraw_); 2032 EXPECT_TRUE(did_request_redraw_);
2026 EXPECT_TRUE(did_request_commit_); 2033 EXPECT_TRUE(did_request_commit_);
2027 2034
2028 scoped_ptr<ScrollAndScaleSet> scroll_info = 2035 std::unique_ptr<ScrollAndScaleSet> scroll_info =
2029 host_impl_->ProcessScrollDeltas(); 2036 host_impl_->ProcessScrollDeltas();
2030 EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta); 2037 EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta);
2031 } 2038 }
2032 2039
2033 // Zoom-in clamping 2040 // Zoom-in clamping
2034 { 2041 {
2035 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, 2042 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
2036 max_page_scale); 2043 max_page_scale);
2037 SetScrollOffsetDelta(scroll_layer, gfx::Vector2d()); 2044 SetScrollOffsetDelta(scroll_layer, gfx::Vector2d());
2038 float page_scale_delta = 10.f; 2045 float page_scale_delta = 10.f;
2039 2046
2040 host_impl_->ScrollBegin(BeginState(gfx::Point(50, 50)).get(), 2047 host_impl_->ScrollBegin(BeginState(gfx::Point(50, 50)).get(),
2041 InputHandler::TOUCHSCREEN); 2048 InputHandler::TOUCHSCREEN);
2042 host_impl_->PinchGestureBegin(); 2049 host_impl_->PinchGestureBegin();
2043 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(50, 50)); 2050 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(50, 50));
2044 host_impl_->PinchGestureEnd(); 2051 host_impl_->PinchGestureEnd();
2045 host_impl_->ScrollEnd(EndState().get()); 2052 host_impl_->ScrollEnd(EndState().get());
2046 2053
2047 scoped_ptr<ScrollAndScaleSet> scroll_info = 2054 std::unique_ptr<ScrollAndScaleSet> scroll_info =
2048 host_impl_->ProcessScrollDeltas(); 2055 host_impl_->ProcessScrollDeltas();
2049 EXPECT_EQ(scroll_info->page_scale_delta, max_page_scale); 2056 EXPECT_EQ(scroll_info->page_scale_delta, max_page_scale);
2050 } 2057 }
2051 2058
2052 // Zoom-out clamping 2059 // Zoom-out clamping
2053 { 2060 {
2054 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, 2061 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
2055 max_page_scale); 2062 max_page_scale);
2056 SetScrollOffsetDelta(scroll_layer, gfx::Vector2d()); 2063 SetScrollOffsetDelta(scroll_layer, gfx::Vector2d());
2057 scroll_layer->layer_tree_impl() 2064 scroll_layer->layer_tree_impl()
2058 ->property_trees() 2065 ->property_trees()
2059 ->scroll_tree.CollectScrollDeltasForTesting(); 2066 ->scroll_tree.CollectScrollDeltasForTesting();
2060 scroll_layer->layer_tree_impl() 2067 scroll_layer->layer_tree_impl()
2061 ->property_trees() 2068 ->property_trees()
2062 ->scroll_tree.UpdateScrollOffsetBaseForTesting( 2069 ->scroll_tree.UpdateScrollOffsetBaseForTesting(
2063 scroll_layer->id(), gfx::ScrollOffset(50, 50)); 2070 scroll_layer->id(), gfx::ScrollOffset(50, 50));
2064 2071
2065 float page_scale_delta = 0.1f; 2072 float page_scale_delta = 0.1f;
2066 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), 2073 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
2067 InputHandler::TOUCHSCREEN); 2074 InputHandler::TOUCHSCREEN);
2068 host_impl_->PinchGestureBegin(); 2075 host_impl_->PinchGestureBegin();
2069 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point()); 2076 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point());
2070 host_impl_->PinchGestureEnd(); 2077 host_impl_->PinchGestureEnd();
2071 host_impl_->ScrollEnd(EndState().get()); 2078 host_impl_->ScrollEnd(EndState().get());
2072 2079
2073 scoped_ptr<ScrollAndScaleSet> scroll_info = 2080 std::unique_ptr<ScrollAndScaleSet> scroll_info =
2074 host_impl_->ProcessScrollDeltas(); 2081 host_impl_->ProcessScrollDeltas();
2075 EXPECT_EQ(scroll_info->page_scale_delta, min_page_scale); 2082 EXPECT_EQ(scroll_info->page_scale_delta, min_page_scale);
2076 2083
2077 EXPECT_TRUE(scroll_info->scrolls.empty()); 2084 EXPECT_TRUE(scroll_info->scrolls.empty());
2078 } 2085 }
2079 2086
2080 // Two-finger panning should not happen based on pinch events only 2087 // Two-finger panning should not happen based on pinch events only
2081 { 2088 {
2082 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, 2089 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
2083 max_page_scale); 2090 max_page_scale);
2084 SetScrollOffsetDelta(scroll_layer, gfx::Vector2d()); 2091 SetScrollOffsetDelta(scroll_layer, gfx::Vector2d());
2085 scroll_layer->layer_tree_impl() 2092 scroll_layer->layer_tree_impl()
2086 ->property_trees() 2093 ->property_trees()
2087 ->scroll_tree.CollectScrollDeltasForTesting(); 2094 ->scroll_tree.CollectScrollDeltasForTesting();
2088 scroll_layer->layer_tree_impl() 2095 scroll_layer->layer_tree_impl()
2089 ->property_trees() 2096 ->property_trees()
2090 ->scroll_tree.UpdateScrollOffsetBaseForTesting( 2097 ->scroll_tree.UpdateScrollOffsetBaseForTesting(
2091 scroll_layer->id(), gfx::ScrollOffset(20, 20)); 2098 scroll_layer->id(), gfx::ScrollOffset(20, 20));
2092 2099
2093 float page_scale_delta = 1.f; 2100 float page_scale_delta = 1.f;
2094 host_impl_->ScrollBegin(BeginState(gfx::Point(10, 10)).get(), 2101 host_impl_->ScrollBegin(BeginState(gfx::Point(10, 10)).get(),
2095 InputHandler::TOUCHSCREEN); 2102 InputHandler::TOUCHSCREEN);
2096 host_impl_->PinchGestureBegin(); 2103 host_impl_->PinchGestureBegin();
2097 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 10)); 2104 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 10));
2098 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(20, 20)); 2105 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(20, 20));
2099 host_impl_->PinchGestureEnd(); 2106 host_impl_->PinchGestureEnd();
2100 host_impl_->ScrollEnd(EndState().get()); 2107 host_impl_->ScrollEnd(EndState().get());
2101 2108
2102 scoped_ptr<ScrollAndScaleSet> scroll_info = 2109 std::unique_ptr<ScrollAndScaleSet> scroll_info =
2103 host_impl_->ProcessScrollDeltas(); 2110 host_impl_->ProcessScrollDeltas();
2104 EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta); 2111 EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta);
2105 EXPECT_TRUE(scroll_info->scrolls.empty()); 2112 EXPECT_TRUE(scroll_info->scrolls.empty());
2106 } 2113 }
2107 2114
2108 // Two-finger panning should work with interleaved scroll events 2115 // Two-finger panning should work with interleaved scroll events
2109 { 2116 {
2110 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, 2117 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
2111 max_page_scale); 2118 max_page_scale);
2112 SetScrollOffsetDelta(scroll_layer, gfx::Vector2d()); 2119 SetScrollOffsetDelta(scroll_layer, gfx::Vector2d());
2113 scroll_layer->layer_tree_impl() 2120 scroll_layer->layer_tree_impl()
2114 ->property_trees() 2121 ->property_trees()
2115 ->scroll_tree.CollectScrollDeltasForTesting(); 2122 ->scroll_tree.CollectScrollDeltasForTesting();
2116 scroll_layer->layer_tree_impl() 2123 scroll_layer->layer_tree_impl()
2117 ->property_trees() 2124 ->property_trees()
2118 ->scroll_tree.UpdateScrollOffsetBaseForTesting( 2125 ->scroll_tree.UpdateScrollOffsetBaseForTesting(
2119 scroll_layer->id(), gfx::ScrollOffset(20, 20)); 2126 scroll_layer->id(), gfx::ScrollOffset(20, 20));
2120 2127
2121 float page_scale_delta = 1.f; 2128 float page_scale_delta = 1.f;
2122 host_impl_->ScrollBegin(BeginState(gfx::Point(10, 10)).get(), 2129 host_impl_->ScrollBegin(BeginState(gfx::Point(10, 10)).get(),
2123 InputHandler::TOUCHSCREEN); 2130 InputHandler::TOUCHSCREEN);
2124 host_impl_->PinchGestureBegin(); 2131 host_impl_->PinchGestureBegin();
2125 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 10)); 2132 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(10, 10));
2126 host_impl_->ScrollBy( 2133 host_impl_->ScrollBy(
2127 UpdateState(gfx::Point(10, 10), gfx::Vector2d(-10, -10)).get()); 2134 UpdateState(gfx::Point(10, 10), gfx::Vector2d(-10, -10)).get());
2128 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(20, 20)); 2135 host_impl_->PinchGestureUpdate(page_scale_delta, gfx::Point(20, 20));
2129 host_impl_->PinchGestureEnd(); 2136 host_impl_->PinchGestureEnd();
2130 host_impl_->ScrollEnd(EndState().get()); 2137 host_impl_->ScrollEnd(EndState().get());
2131 2138
2132 scoped_ptr<ScrollAndScaleSet> scroll_info = 2139 std::unique_ptr<ScrollAndScaleSet> scroll_info =
2133 host_impl_->ProcessScrollDeltas(); 2140 host_impl_->ProcessScrollDeltas();
2134 EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta); 2141 EXPECT_EQ(scroll_info->page_scale_delta, page_scale_delta);
2135 EXPECT_TRUE(ScrollInfoContains(*scroll_info, scroll_layer->id(), 2142 EXPECT_TRUE(ScrollInfoContains(*scroll_info, scroll_layer->id(),
2136 gfx::Vector2d(-10, -10))); 2143 gfx::Vector2d(-10, -10)));
2137 } 2144 }
2138 2145
2139 // Two-finger panning should work when starting fully zoomed out. 2146 // Two-finger panning should work when starting fully zoomed out.
2140 { 2147 {
2141 host_impl_->active_tree()->PushPageScaleFromMainThread(0.5f, 0.5f, 4.f); 2148 host_impl_->active_tree()->PushPageScaleFromMainThread(0.5f, 0.5f, 4.f);
2142 SetScrollOffsetDelta(scroll_layer, gfx::Vector2d()); 2149 SetScrollOffsetDelta(scroll_layer, gfx::Vector2d());
(...skipping 13 matching lines...) Expand all
2156 2163
2157 // Needed so layer transform includes page scale. 2164 // Needed so layer transform includes page scale.
2158 DrawFrame(); 2165 DrawFrame();
2159 2166
2160 host_impl_->ScrollBy( 2167 host_impl_->ScrollBy(
2161 UpdateState(gfx::Point(0, 0), gfx::Vector2d(10, 10)).get()); 2168 UpdateState(gfx::Point(0, 0), gfx::Vector2d(10, 10)).get());
2162 host_impl_->PinchGestureUpdate(1.f, gfx::Point(10, 10)); 2169 host_impl_->PinchGestureUpdate(1.f, gfx::Point(10, 10));
2163 host_impl_->PinchGestureEnd(); 2170 host_impl_->PinchGestureEnd();
2164 host_impl_->ScrollEnd(EndState().get()); 2171 host_impl_->ScrollEnd(EndState().get());
2165 2172
2166 scoped_ptr<ScrollAndScaleSet> scroll_info = 2173 std::unique_ptr<ScrollAndScaleSet> scroll_info =
2167 host_impl_->ProcessScrollDeltas(); 2174 host_impl_->ProcessScrollDeltas();
2168 EXPECT_EQ(scroll_info->page_scale_delta, 2.f); 2175 EXPECT_EQ(scroll_info->page_scale_delta, 2.f);
2169 EXPECT_TRUE(ScrollInfoContains(*scroll_info, scroll_layer->id(), 2176 EXPECT_TRUE(ScrollInfoContains(*scroll_info, scroll_layer->id(),
2170 gfx::Vector2d(10, 10))); 2177 gfx::Vector2d(10, 10)));
2171 } 2178 }
2172 } 2179 }
2173 2180
2174 TEST_F(LayerTreeHostImplTest, PageScaleAnimation) { 2181 TEST_F(LayerTreeHostImplTest, PageScaleAnimation) {
2175 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 2182 SetupScrollAndContentsLayers(gfx::Size(100, 100));
2176 host_impl_->SetViewportSize(gfx::Size(50, 50)); 2183 host_impl_->SetViewportSize(gfx::Size(50, 50));
(...skipping 18 matching lines...) Expand all
2195 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, 2202 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
2196 max_page_scale); 2203 max_page_scale);
2197 scroll_layer->layer_tree_impl() 2204 scroll_layer->layer_tree_impl()
2198 ->property_trees() 2205 ->property_trees()
2199 ->scroll_tree.UpdateScrollOffsetBaseForTesting( 2206 ->scroll_tree.UpdateScrollOffsetBaseForTesting(
2200 scroll_layer->id(), gfx::ScrollOffset(50, 50)); 2207 scroll_layer->id(), gfx::ScrollOffset(50, 50));
2201 2208
2202 did_request_redraw_ = false; 2209 did_request_redraw_ = false;
2203 did_request_next_frame_ = false; 2210 did_request_next_frame_ = false;
2204 host_impl_->active_tree()->SetPendingPageScaleAnimation( 2211 host_impl_->active_tree()->SetPendingPageScaleAnimation(
2205 scoped_ptr<PendingPageScaleAnimation>(new PendingPageScaleAnimation( 2212 std::unique_ptr<PendingPageScaleAnimation>(
2206 gfx::Vector2d(), 2213 new PendingPageScaleAnimation(gfx::Vector2d(), false, 2.f,
2207 false, 2214 duration)));
2208 2.f,
2209 duration)));
2210 host_impl_->ActivateSyncTree(); 2215 host_impl_->ActivateSyncTree();
2211 EXPECT_FALSE(did_request_redraw_); 2216 EXPECT_FALSE(did_request_redraw_);
2212 EXPECT_TRUE(did_request_next_frame_); 2217 EXPECT_TRUE(did_request_next_frame_);
2213 2218
2214 did_request_redraw_ = false; 2219 did_request_redraw_ = false;
2215 did_request_next_frame_ = false; 2220 did_request_next_frame_ = false;
2216 begin_frame_args.frame_time = start_time; 2221 begin_frame_args.frame_time = start_time;
2217 host_impl_->WillBeginImplFrame(begin_frame_args); 2222 host_impl_->WillBeginImplFrame(begin_frame_args);
2218 host_impl_->Animate(); 2223 host_impl_->Animate();
2219 EXPECT_TRUE(did_request_redraw_); 2224 EXPECT_TRUE(did_request_redraw_);
(...skipping 12 matching lines...) Expand all
2232 did_request_redraw_ = false; 2237 did_request_redraw_ = false;
2233 did_request_next_frame_ = false; 2238 did_request_next_frame_ = false;
2234 did_request_commit_ = false; 2239 did_request_commit_ = false;
2235 begin_frame_args.frame_time = end_time; 2240 begin_frame_args.frame_time = end_time;
2236 host_impl_->WillBeginImplFrame(begin_frame_args); 2241 host_impl_->WillBeginImplFrame(begin_frame_args);
2237 host_impl_->Animate(); 2242 host_impl_->Animate();
2238 EXPECT_TRUE(did_request_commit_); 2243 EXPECT_TRUE(did_request_commit_);
2239 EXPECT_FALSE(did_request_next_frame_); 2244 EXPECT_FALSE(did_request_next_frame_);
2240 host_impl_->DidFinishImplFrame(); 2245 host_impl_->DidFinishImplFrame();
2241 2246
2242 scoped_ptr<ScrollAndScaleSet> scroll_info = 2247 std::unique_ptr<ScrollAndScaleSet> scroll_info =
2243 host_impl_->ProcessScrollDeltas(); 2248 host_impl_->ProcessScrollDeltas();
2244 EXPECT_EQ(scroll_info->page_scale_delta, 2); 2249 EXPECT_EQ(scroll_info->page_scale_delta, 2);
2245 EXPECT_TRUE(ScrollInfoContains(*scroll_info, scroll_layer->id(), 2250 EXPECT_TRUE(ScrollInfoContains(*scroll_info, scroll_layer->id(),
2246 gfx::Vector2d(-50, -50))); 2251 gfx::Vector2d(-50, -50)));
2247 } 2252 }
2248 2253
2249 start_time += base::TimeDelta::FromSeconds(10); 2254 start_time += base::TimeDelta::FromSeconds(10);
2250 halfway_through_animation += base::TimeDelta::FromSeconds(10); 2255 halfway_through_animation += base::TimeDelta::FromSeconds(10);
2251 end_time += base::TimeDelta::FromSeconds(10); 2256 end_time += base::TimeDelta::FromSeconds(10);
2252 2257
2253 // Anchor zoom-out 2258 // Anchor zoom-out
2254 { 2259 {
2255 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, 2260 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
2256 max_page_scale); 2261 max_page_scale);
2257 scroll_layer->layer_tree_impl() 2262 scroll_layer->layer_tree_impl()
2258 ->property_trees() 2263 ->property_trees()
2259 ->scroll_tree.UpdateScrollOffsetBaseForTesting( 2264 ->scroll_tree.UpdateScrollOffsetBaseForTesting(
2260 scroll_layer->id(), gfx::ScrollOffset(50, 50)); 2265 scroll_layer->id(), gfx::ScrollOffset(50, 50));
2261 2266
2262 did_request_redraw_ = false; 2267 did_request_redraw_ = false;
2263 did_request_next_frame_ = false; 2268 did_request_next_frame_ = false;
2264 host_impl_->active_tree()->SetPendingPageScaleAnimation( 2269 host_impl_->active_tree()->SetPendingPageScaleAnimation(
2265 scoped_ptr<PendingPageScaleAnimation> (new PendingPageScaleAnimation( 2270 std::unique_ptr<PendingPageScaleAnimation>(
2266 gfx::Vector2d(25, 25), 2271 new PendingPageScaleAnimation(gfx::Vector2d(25, 25), true,
2267 true, 2272 min_page_scale, duration)));
2268 min_page_scale,
2269 duration)));
2270 host_impl_->ActivateSyncTree(); 2273 host_impl_->ActivateSyncTree();
2271 EXPECT_FALSE(did_request_redraw_); 2274 EXPECT_FALSE(did_request_redraw_);
2272 EXPECT_TRUE(did_request_next_frame_); 2275 EXPECT_TRUE(did_request_next_frame_);
2273 2276
2274 did_request_redraw_ = false; 2277 did_request_redraw_ = false;
2275 did_request_next_frame_ = false; 2278 did_request_next_frame_ = false;
2276 begin_frame_args.frame_time = start_time; 2279 begin_frame_args.frame_time = start_time;
2277 host_impl_->WillBeginImplFrame(begin_frame_args); 2280 host_impl_->WillBeginImplFrame(begin_frame_args);
2278 host_impl_->Animate(); 2281 host_impl_->Animate();
2279 EXPECT_TRUE(did_request_redraw_); 2282 EXPECT_TRUE(did_request_redraw_);
2280 EXPECT_TRUE(did_request_next_frame_); 2283 EXPECT_TRUE(did_request_next_frame_);
2281 host_impl_->DidFinishImplFrame(); 2284 host_impl_->DidFinishImplFrame();
2282 2285
2283 did_request_redraw_ = false; 2286 did_request_redraw_ = false;
2284 did_request_commit_ = false; 2287 did_request_commit_ = false;
2285 did_request_next_frame_ = false; 2288 did_request_next_frame_ = false;
2286 begin_frame_args.frame_time = end_time; 2289 begin_frame_args.frame_time = end_time;
2287 host_impl_->WillBeginImplFrame(begin_frame_args); 2290 host_impl_->WillBeginImplFrame(begin_frame_args);
2288 host_impl_->Animate(); 2291 host_impl_->Animate();
2289 EXPECT_TRUE(did_request_redraw_); 2292 EXPECT_TRUE(did_request_redraw_);
2290 EXPECT_FALSE(did_request_next_frame_); 2293 EXPECT_FALSE(did_request_next_frame_);
2291 EXPECT_TRUE(did_request_commit_); 2294 EXPECT_TRUE(did_request_commit_);
2292 host_impl_->DidFinishImplFrame(); 2295 host_impl_->DidFinishImplFrame();
2293 2296
2294 scoped_ptr<ScrollAndScaleSet> scroll_info = 2297 std::unique_ptr<ScrollAndScaleSet> scroll_info =
2295 host_impl_->ProcessScrollDeltas(); 2298 host_impl_->ProcessScrollDeltas();
2296 EXPECT_EQ(scroll_info->page_scale_delta, min_page_scale); 2299 EXPECT_EQ(scroll_info->page_scale_delta, min_page_scale);
2297 // Pushed to (0,0) via clamping against contents layer size. 2300 // Pushed to (0,0) via clamping against contents layer size.
2298 EXPECT_TRUE(ScrollInfoContains(*scroll_info, scroll_layer->id(), 2301 EXPECT_TRUE(ScrollInfoContains(*scroll_info, scroll_layer->id(),
2299 gfx::Vector2d(-50, -50))); 2302 gfx::Vector2d(-50, -50)));
2300 } 2303 }
2301 } 2304 }
2302 2305
2303 TEST_F(LayerTreeHostImplTest, PageScaleAnimationNoOp) { 2306 TEST_F(LayerTreeHostImplTest, PageScaleAnimationNoOp) {
2304 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 2307 SetupScrollAndContentsLayers(gfx::Size(100, 100));
(...skipping 17 matching lines...) Expand all
2322 // Anchor zoom with unchanged page scale should not change scroll or scale. 2325 // Anchor zoom with unchanged page scale should not change scroll or scale.
2323 { 2326 {
2324 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale, 2327 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
2325 max_page_scale); 2328 max_page_scale);
2326 scroll_layer->layer_tree_impl() 2329 scroll_layer->layer_tree_impl()
2327 ->property_trees() 2330 ->property_trees()
2328 ->scroll_tree.UpdateScrollOffsetBaseForTesting( 2331 ->scroll_tree.UpdateScrollOffsetBaseForTesting(
2329 scroll_layer->id(), gfx::ScrollOffset(50, 50)); 2332 scroll_layer->id(), gfx::ScrollOffset(50, 50));
2330 2333
2331 host_impl_->active_tree()->SetPendingPageScaleAnimation( 2334 host_impl_->active_tree()->SetPendingPageScaleAnimation(
2332 scoped_ptr<PendingPageScaleAnimation>(new PendingPageScaleAnimation( 2335 std::unique_ptr<PendingPageScaleAnimation>(
2333 gfx::Vector2d(), 2336 new PendingPageScaleAnimation(gfx::Vector2d(), true, 1.f,
2334 true, 2337 duration)));
2335 1.f,
2336 duration)));
2337 host_impl_->ActivateSyncTree(); 2338 host_impl_->ActivateSyncTree();
2338 begin_frame_args.frame_time = start_time; 2339 begin_frame_args.frame_time = start_time;
2339 host_impl_->WillBeginImplFrame(begin_frame_args); 2340 host_impl_->WillBeginImplFrame(begin_frame_args);
2340 host_impl_->Animate(); 2341 host_impl_->Animate();
2341 host_impl_->DidFinishImplFrame(); 2342 host_impl_->DidFinishImplFrame();
2342 2343
2343 begin_frame_args.frame_time = halfway_through_animation; 2344 begin_frame_args.frame_time = halfway_through_animation;
2344 host_impl_->WillBeginImplFrame(begin_frame_args); 2345 host_impl_->WillBeginImplFrame(begin_frame_args);
2345 host_impl_->Animate(); 2346 host_impl_->Animate();
2346 EXPECT_TRUE(did_request_redraw_); 2347 EXPECT_TRUE(did_request_redraw_);
2347 host_impl_->DidFinishImplFrame(); 2348 host_impl_->DidFinishImplFrame();
2348 2349
2349 begin_frame_args.frame_time = end_time; 2350 begin_frame_args.frame_time = end_time;
2350 host_impl_->WillBeginImplFrame(begin_frame_args); 2351 host_impl_->WillBeginImplFrame(begin_frame_args);
2351 host_impl_->Animate(); 2352 host_impl_->Animate();
2352 EXPECT_TRUE(did_request_commit_); 2353 EXPECT_TRUE(did_request_commit_);
2353 host_impl_->DidFinishImplFrame(); 2354 host_impl_->DidFinishImplFrame();
2354 2355
2355 scoped_ptr<ScrollAndScaleSet> scroll_info = 2356 std::unique_ptr<ScrollAndScaleSet> scroll_info =
2356 host_impl_->ProcessScrollDeltas(); 2357 host_impl_->ProcessScrollDeltas();
2357 EXPECT_EQ(scroll_info->page_scale_delta, 1); 2358 EXPECT_EQ(scroll_info->page_scale_delta, 1);
2358 ExpectNone(*scroll_info, scroll_layer->id()); 2359 ExpectNone(*scroll_info, scroll_layer->id());
2359 } 2360 }
2360 } 2361 }
2361 2362
2362 TEST_F(LayerTreeHostImplTest, PageScaleAnimationTransferedOnSyncTreeActivate) { 2363 TEST_F(LayerTreeHostImplTest, PageScaleAnimationTransferedOnSyncTreeActivate) {
2363 host_impl_->CreatePendingTree(); 2364 host_impl_->CreatePendingTree();
2364 host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f); 2365 host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f);
2365 CreateScrollAndContentsLayers( 2366 CreateScrollAndContentsLayers(
(...skipping 24 matching lines...) Expand all
2390 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE); 2391 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE);
2391 2392
2392 scroll_layer->layer_tree_impl() 2393 scroll_layer->layer_tree_impl()
2393 ->property_trees() 2394 ->property_trees()
2394 ->scroll_tree.UpdateScrollOffsetBaseForTesting(scroll_layer->id(), 2395 ->scroll_tree.UpdateScrollOffsetBaseForTesting(scroll_layer->id(),
2395 gfx::ScrollOffset(50, 50)); 2396 gfx::ScrollOffset(50, 50));
2396 2397
2397 // Make sure TakePageScaleAnimation works properly. 2398 // Make sure TakePageScaleAnimation works properly.
2398 2399
2399 host_impl_->sync_tree()->SetPendingPageScaleAnimation( 2400 host_impl_->sync_tree()->SetPendingPageScaleAnimation(
2400 scoped_ptr<PendingPageScaleAnimation>(new PendingPageScaleAnimation( 2401 std::unique_ptr<PendingPageScaleAnimation>(new PendingPageScaleAnimation(
2401 gfx::Vector2d(), 2402 gfx::Vector2d(), false, target_scale, duration)));
2402 false, 2403 std::unique_ptr<PendingPageScaleAnimation> psa =
2403 target_scale,
2404 duration)));
2405 scoped_ptr<PendingPageScaleAnimation> psa =
2406 host_impl_->sync_tree()->TakePendingPageScaleAnimation(); 2404 host_impl_->sync_tree()->TakePendingPageScaleAnimation();
2407 EXPECT_EQ(target_scale, psa->scale); 2405 EXPECT_EQ(target_scale, psa->scale);
2408 EXPECT_EQ(duration, psa->duration); 2406 EXPECT_EQ(duration, psa->duration);
2409 EXPECT_EQ(nullptr, host_impl_->sync_tree()->TakePendingPageScaleAnimation()); 2407 EXPECT_EQ(nullptr, host_impl_->sync_tree()->TakePendingPageScaleAnimation());
2410 2408
2411 // Recreate the PSA. Nothing should happen here since the tree containing the 2409 // Recreate the PSA. Nothing should happen here since the tree containing the
2412 // PSA hasn't been activated yet. 2410 // PSA hasn't been activated yet.
2413 did_request_redraw_ = false; 2411 did_request_redraw_ = false;
2414 did_request_next_frame_ = false; 2412 did_request_next_frame_ = false;
2415 host_impl_->sync_tree()->SetPendingPageScaleAnimation( 2413 host_impl_->sync_tree()->SetPendingPageScaleAnimation(
2416 scoped_ptr<PendingPageScaleAnimation>(new PendingPageScaleAnimation( 2414 std::unique_ptr<PendingPageScaleAnimation>(new PendingPageScaleAnimation(
2417 gfx::Vector2d(), 2415 gfx::Vector2d(), false, target_scale, duration)));
2418 false,
2419 target_scale,
2420 duration)));
2421 begin_frame_args.frame_time = halfway_through_animation; 2416 begin_frame_args.frame_time = halfway_through_animation;
2422 host_impl_->WillBeginImplFrame(begin_frame_args); 2417 host_impl_->WillBeginImplFrame(begin_frame_args);
2423 host_impl_->Animate(); 2418 host_impl_->Animate();
2424 EXPECT_FALSE(did_request_next_frame_); 2419 EXPECT_FALSE(did_request_next_frame_);
2425 EXPECT_FALSE(did_request_redraw_); 2420 EXPECT_FALSE(did_request_redraw_);
2426 host_impl_->DidFinishImplFrame(); 2421 host_impl_->DidFinishImplFrame();
2427 2422
2428 // Activate the sync tree. This should cause the animation to become enabled. 2423 // Activate the sync tree. This should cause the animation to become enabled.
2429 // It should also clear the pointer on the sync tree. 2424 // It should also clear the pointer on the sync tree.
2430 host_impl_->ActivateSyncTree(); 2425 host_impl_->ActivateSyncTree();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
2472 did_request_redraw_ = false; 2467 did_request_redraw_ = false;
2473 did_request_next_frame_ = false; 2468 did_request_next_frame_ = false;
2474 did_request_commit_ = false; 2469 did_request_commit_ = false;
2475 begin_frame_args.frame_time = end_time; 2470 begin_frame_args.frame_time = end_time;
2476 host_impl_->WillBeginImplFrame(begin_frame_args); 2471 host_impl_->WillBeginImplFrame(begin_frame_args);
2477 host_impl_->Animate(); 2472 host_impl_->Animate();
2478 EXPECT_TRUE(did_request_commit_); 2473 EXPECT_TRUE(did_request_commit_);
2479 EXPECT_FALSE(did_request_next_frame_); 2474 EXPECT_FALSE(did_request_next_frame_);
2480 host_impl_->DidFinishImplFrame(); 2475 host_impl_->DidFinishImplFrame();
2481 2476
2482 scoped_ptr<ScrollAndScaleSet> scroll_info = 2477 std::unique_ptr<ScrollAndScaleSet> scroll_info =
2483 host_impl_->ProcessScrollDeltas(); 2478 host_impl_->ProcessScrollDeltas();
2484 EXPECT_EQ(scroll_info->page_scale_delta, target_scale); 2479 EXPECT_EQ(scroll_info->page_scale_delta, target_scale);
2485 EXPECT_TRUE(ScrollInfoContains(*scroll_info, scroll_layer->id(), 2480 EXPECT_TRUE(ScrollInfoContains(*scroll_info, scroll_layer->id(),
2486 gfx::Vector2d(-50, -50))); 2481 gfx::Vector2d(-50, -50)));
2487 } 2482 }
2488 2483
2489 TEST_F(LayerTreeHostImplTest, PageScaleAnimationCompletedNotification) { 2484 TEST_F(LayerTreeHostImplTest, PageScaleAnimationCompletedNotification) {
2490 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 2485 SetupScrollAndContentsLayers(gfx::Size(100, 100));
2491 host_impl_->SetViewportSize(gfx::Size(50, 50)); 2486 host_impl_->SetViewportSize(gfx::Size(50, 50));
2492 DrawFrame(); 2487 DrawFrame();
(...skipping 11 matching lines...) Expand all
2504 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE); 2499 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE);
2505 2500
2506 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 0.5f, 4.f); 2501 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 0.5f, 4.f);
2507 scroll_layer->layer_tree_impl() 2502 scroll_layer->layer_tree_impl()
2508 ->property_trees() 2503 ->property_trees()
2509 ->scroll_tree.UpdateScrollOffsetBaseForTesting(scroll_layer->id(), 2504 ->scroll_tree.UpdateScrollOffsetBaseForTesting(scroll_layer->id(),
2510 gfx::ScrollOffset(50, 50)); 2505 gfx::ScrollOffset(50, 50));
2511 2506
2512 did_complete_page_scale_animation_ = false; 2507 did_complete_page_scale_animation_ = false;
2513 host_impl_->active_tree()->SetPendingPageScaleAnimation( 2508 host_impl_->active_tree()->SetPendingPageScaleAnimation(
2514 scoped_ptr<PendingPageScaleAnimation>(new PendingPageScaleAnimation( 2509 std::unique_ptr<PendingPageScaleAnimation>(new PendingPageScaleAnimation(
2515 gfx::Vector2d(), false, 2.f, duration))); 2510 gfx::Vector2d(), false, 2.f, duration)));
2516 host_impl_->ActivateSyncTree(); 2511 host_impl_->ActivateSyncTree();
2517 begin_frame_args.frame_time = start_time; 2512 begin_frame_args.frame_time = start_time;
2518 host_impl_->WillBeginImplFrame(begin_frame_args); 2513 host_impl_->WillBeginImplFrame(begin_frame_args);
2519 host_impl_->Animate(); 2514 host_impl_->Animate();
2520 EXPECT_FALSE(did_complete_page_scale_animation_); 2515 EXPECT_FALSE(did_complete_page_scale_animation_);
2521 host_impl_->DidFinishImplFrame(); 2516 host_impl_->DidFinishImplFrame();
2522 2517
2523 begin_frame_args.frame_time = halfway_through_animation; 2518 begin_frame_args.frame_time = halfway_through_animation;
2524 host_impl_->WillBeginImplFrame(begin_frame_args); 2519 host_impl_->WillBeginImplFrame(begin_frame_args);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2593 2588
2594 class LayerTreeHostImplTestScrollbarAnimation : public LayerTreeHostImplTest { 2589 class LayerTreeHostImplTestScrollbarAnimation : public LayerTreeHostImplTest {
2595 protected: 2590 protected:
2596 void SetupLayers(LayerTreeSettings settings) { 2591 void SetupLayers(LayerTreeSettings settings) {
2597 gfx::Size content_size(100, 100); 2592 gfx::Size content_size(100, 100);
2598 2593
2599 LayerTreeHostImplOverridePhysicalTime* host_impl_override_time = 2594 LayerTreeHostImplOverridePhysicalTime* host_impl_override_time =
2600 new LayerTreeHostImplOverridePhysicalTime( 2595 new LayerTreeHostImplOverridePhysicalTime(
2601 settings, this, &task_runner_provider_, &shared_bitmap_manager_, 2596 settings, this, &task_runner_provider_, &shared_bitmap_manager_,
2602 &task_graph_runner_, &stats_instrumentation_); 2597 &task_graph_runner_, &stats_instrumentation_);
2603 host_impl_ = make_scoped_ptr(host_impl_override_time); 2598 host_impl_ = base::WrapUnique(host_impl_override_time);
2604 output_surface_ = CreateOutputSurface(); 2599 output_surface_ = CreateOutputSurface();
2605 host_impl_->SetVisible(true); 2600 host_impl_->SetVisible(true);
2606 host_impl_->InitializeRenderer(output_surface_.get()); 2601 host_impl_->InitializeRenderer(output_surface_.get());
2607 2602
2608 SetupScrollAndContentsLayers(content_size); 2603 SetupScrollAndContentsLayers(content_size);
2609 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 4.f); 2604 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 4.f);
2610 host_impl_->SetViewportSize( 2605 host_impl_->SetViewportSize(
2611 gfx::Size(content_size.width() / 2, content_size.height() / 2)); 2606 gfx::Size(content_size.width() / 2, content_size.height() / 2));
2612 2607
2613 scoped_ptr<SolidColorScrollbarLayerImpl> scrollbar = 2608 std::unique_ptr<SolidColorScrollbarLayerImpl> scrollbar =
2614 SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), 400, 2609 SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), 400,
2615 VERTICAL, 10, 0, false, true); 2610 VERTICAL, 10, 0, false, true);
2616 EXPECT_FLOAT_EQ(0.f, scrollbar->opacity()); 2611 EXPECT_FLOAT_EQ(0.f, scrollbar->opacity());
2617 2612
2618 LayerImpl* scroll = host_impl_->active_tree()->OuterViewportScrollLayer(); 2613 LayerImpl* scroll = host_impl_->active_tree()->OuterViewportScrollLayer();
2619 LayerImpl* root = host_impl_->active_tree()->InnerViewportContainerLayer(); 2614 LayerImpl* root = host_impl_->active_tree()->InnerViewportContainerLayer();
2620 scrollbar->SetScrollLayerId(scroll->id()); 2615 scrollbar->SetScrollLayerId(scroll->id());
2621 root->AddChild(std::move(scrollbar)); 2616 root->AddChild(std::move(scrollbar));
2622 2617
2623 host_impl_->active_tree()->DidBecomeActive(); 2618 host_impl_->active_tree()->DidBecomeActive();
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
2787 void RunTest(LayerTreeSettings::ScrollbarAnimator animator) { 2782 void RunTest(LayerTreeSettings::ScrollbarAnimator animator) {
2788 LayerTreeSettings settings = DefaultSettings(); 2783 LayerTreeSettings settings = DefaultSettings();
2789 settings.scrollbar_animator = animator; 2784 settings.scrollbar_animator = animator;
2790 settings.scrollbar_fade_delay_ms = 20; 2785 settings.scrollbar_fade_delay_ms = 20;
2791 settings.scrollbar_fade_duration_ms = 20; 2786 settings.scrollbar_fade_duration_ms = 20;
2792 gfx::Size content_size(100, 100); 2787 gfx::Size content_size(100, 100);
2793 2788
2794 CreateHostImpl(settings, CreateOutputSurface()); 2789 CreateHostImpl(settings, CreateOutputSurface());
2795 host_impl_->CreatePendingTree(); 2790 host_impl_->CreatePendingTree();
2796 CreateScrollAndContentsLayers(host_impl_->pending_tree(), content_size); 2791 CreateScrollAndContentsLayers(host_impl_->pending_tree(), content_size);
2797 scoped_ptr<SolidColorScrollbarLayerImpl> scrollbar = 2792 std::unique_ptr<SolidColorScrollbarLayerImpl> scrollbar =
2798 SolidColorScrollbarLayerImpl::Create(host_impl_->pending_tree(), 400, 2793 SolidColorScrollbarLayerImpl::Create(host_impl_->pending_tree(), 400,
2799 VERTICAL, 10, 0, false, true); 2794 VERTICAL, 10, 0, false, true);
2800 LayerImpl* scroll = host_impl_->pending_tree()->OuterViewportScrollLayer(); 2795 LayerImpl* scroll = host_impl_->pending_tree()->OuterViewportScrollLayer();
2801 LayerImpl* root = host_impl_->pending_tree()->InnerViewportContainerLayer(); 2796 LayerImpl* root = host_impl_->pending_tree()->InnerViewportContainerLayer();
2802 scrollbar->SetScrollLayerId(scroll->id()); 2797 scrollbar->SetScrollLayerId(scroll->id());
2803 root->AddChild(std::move(scrollbar)); 2798 root->AddChild(std::move(scrollbar));
2804 host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f); 2799 host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f);
2805 host_impl_->pending_tree()->BuildPropertyTreesForTesting(); 2800 host_impl_->pending_tree()->BuildPropertyTreesForTesting();
2806 host_impl_->ActivateSyncTree(); 2801 host_impl_->ActivateSyncTree();
2807 2802
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2854 const int child_clip_id = 14; 2849 const int child_clip_id = 14;
2855 const int child_scroll_id = 15; 2850 const int child_scroll_id = 15;
2856 2851
2857 CreateScrollAndContentsLayers(host_impl_->active_tree(), content_size); 2852 CreateScrollAndContentsLayers(host_impl_->active_tree(), content_size);
2858 host_impl_->active_tree()->InnerViewportContainerLayer()->SetBounds( 2853 host_impl_->active_tree()->InnerViewportContainerLayer()->SetBounds(
2859 inner_viewport_size); 2854 inner_viewport_size);
2860 host_impl_->active_tree()->OuterViewportContainerLayer()->SetBounds( 2855 host_impl_->active_tree()->OuterViewportContainerLayer()->SetBounds(
2861 outer_viewport_size); 2856 outer_viewport_size);
2862 LayerImpl* root_scroll = 2857 LayerImpl* root_scroll =
2863 host_impl_->active_tree()->OuterViewportScrollLayer(); 2858 host_impl_->active_tree()->OuterViewportScrollLayer();
2864 scoped_ptr<SolidColorScrollbarLayerImpl> horiz_scrollbar = 2859 std::unique_ptr<SolidColorScrollbarLayerImpl> horiz_scrollbar =
2865 SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), horiz_id, 2860 SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), horiz_id,
2866 HORIZONTAL, 5, 5, true, true); 2861 HORIZONTAL, 5, 5, true, true);
2867 scoped_ptr<LayerImpl> child = 2862 std::unique_ptr<LayerImpl> child =
2868 LayerImpl::Create(host_impl_->active_tree(), child_scroll_id); 2863 LayerImpl::Create(host_impl_->active_tree(), child_scroll_id);
2869 child->SetBounds(content_size); 2864 child->SetBounds(content_size);
2870 scoped_ptr<LayerImpl> child_clip = 2865 std::unique_ptr<LayerImpl> child_clip =
2871 LayerImpl::Create(host_impl_->active_tree(), child_clip_id); 2866 LayerImpl::Create(host_impl_->active_tree(), child_clip_id);
2872 child->SetBounds(inner_viewport_size); 2867 child->SetBounds(inner_viewport_size);
2873 2868
2874 horiz_scrollbar->SetScrollLayerId(root_scroll->id()); 2869 horiz_scrollbar->SetScrollLayerId(root_scroll->id());
2875 2870
2876 EXPECT_EQ(300, horiz_scrollbar->clip_layer_length()); 2871 EXPECT_EQ(300, horiz_scrollbar->clip_layer_length());
2877 } 2872 }
2878 2873
2879 TEST_F(LayerTreeHostImplTest, ScrollbarRegistration) { 2874 TEST_F(LayerTreeHostImplTest, ScrollbarRegistration) {
2880 LayerTreeSettings settings = DefaultSettings(); 2875 LayerTreeSettings settings = DefaultSettings();
(...skipping 10 matching lines...) Expand all
2891 const int vert_2_id = 12; 2886 const int vert_2_id = 12;
2892 const int horiz_2_id = 13; 2887 const int horiz_2_id = 13;
2893 const int child_clip_id = 14; 2888 const int child_clip_id = 14;
2894 const int child_scroll_id = 15; 2889 const int child_scroll_id = 15;
2895 2890
2896 CreateScrollAndContentsLayers(host_impl_->active_tree(), content_size); 2891 CreateScrollAndContentsLayers(host_impl_->active_tree(), content_size);
2897 host_impl_->active_tree()->InnerViewportContainerLayer()->SetBounds( 2892 host_impl_->active_tree()->InnerViewportContainerLayer()->SetBounds(
2898 viewport_size); 2893 viewport_size);
2899 LayerImpl* root_scroll = 2894 LayerImpl* root_scroll =
2900 host_impl_->active_tree()->OuterViewportScrollLayer(); 2895 host_impl_->active_tree()->OuterViewportScrollLayer();
2901 scoped_ptr<SolidColorScrollbarLayerImpl> vert_1_scrollbar = 2896 std::unique_ptr<SolidColorScrollbarLayerImpl> vert_1_scrollbar =
2902 SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), vert_1_id, 2897 SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), vert_1_id,
2903 VERTICAL, 5, 5, true, true); 2898 VERTICAL, 5, 5, true, true);
2904 scoped_ptr<SolidColorScrollbarLayerImpl> horiz_1_scrollbar = 2899 std::unique_ptr<SolidColorScrollbarLayerImpl> horiz_1_scrollbar =
2905 SolidColorScrollbarLayerImpl::Create( 2900 SolidColorScrollbarLayerImpl::Create(
2906 host_impl_->active_tree(), horiz_1_id, HORIZONTAL, 5, 5, true, true); 2901 host_impl_->active_tree(), horiz_1_id, HORIZONTAL, 5, 5, true, true);
2907 scoped_ptr<SolidColorScrollbarLayerImpl> vert_2_scrollbar = 2902 std::unique_ptr<SolidColorScrollbarLayerImpl> vert_2_scrollbar =
2908 SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), vert_2_id, 2903 SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), vert_2_id,
2909 VERTICAL, 5, 5, true, true); 2904 VERTICAL, 5, 5, true, true);
2910 scoped_ptr<SolidColorScrollbarLayerImpl> horiz_2_scrollbar = 2905 std::unique_ptr<SolidColorScrollbarLayerImpl> horiz_2_scrollbar =
2911 SolidColorScrollbarLayerImpl::Create( 2906 SolidColorScrollbarLayerImpl::Create(
2912 host_impl_->active_tree(), horiz_2_id, HORIZONTAL, 5, 5, true, true); 2907 host_impl_->active_tree(), horiz_2_id, HORIZONTAL, 5, 5, true, true);
2913 scoped_ptr<LayerImpl> child = 2908 std::unique_ptr<LayerImpl> child =
2914 LayerImpl::Create(host_impl_->active_tree(), child_scroll_id); 2909 LayerImpl::Create(host_impl_->active_tree(), child_scroll_id);
2915 child->SetBounds(content_size); 2910 child->SetBounds(content_size);
2916 scoped_ptr<LayerImpl> child_clip = 2911 std::unique_ptr<LayerImpl> child_clip =
2917 LayerImpl::Create(host_impl_->active_tree(), child_clip_id); 2912 LayerImpl::Create(host_impl_->active_tree(), child_clip_id);
2918 child->SetBounds(viewport_size); 2913 child->SetBounds(viewport_size);
2919 LayerImpl* child_ptr = child.get(); 2914 LayerImpl* child_ptr = child.get();
2920 LayerImpl* child_clip_ptr = child_clip.get(); 2915 LayerImpl* child_clip_ptr = child_clip.get();
2921 2916
2922 // Check scrollbar registration on the viewport layers. 2917 // Check scrollbar registration on the viewport layers.
2923 EXPECT_EQ(0ul, host_impl_->ScrollbarsFor(root_scroll->id()).size()); 2918 EXPECT_EQ(0ul, host_impl_->ScrollbarsFor(root_scroll->id()).size());
2924 EXPECT_EQ(nullptr, 2919 EXPECT_EQ(nullptr,
2925 host_impl_->ScrollbarAnimationControllerForId(root_scroll->id())); 2920 host_impl_->ScrollbarAnimationControllerForId(root_scroll->id()));
2926 vert_1_scrollbar->SetScrollLayerId(root_scroll->id()); 2921 vert_1_scrollbar->SetScrollLayerId(root_scroll->id());
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
3012 CreateHostImpl(settings, CreateOutputSurface()); 3007 CreateHostImpl(settings, CreateOutputSurface());
3013 host_impl_->active_tree()->SetDeviceScaleFactor(device_scale_factor); 3008 host_impl_->active_tree()->SetDeviceScaleFactor(device_scale_factor);
3014 host_impl_->SetViewportSize(device_viewport_size); 3009 host_impl_->SetViewportSize(device_viewport_size);
3015 3010
3016 CreateScrollAndContentsLayers(host_impl_->active_tree(), content_size); 3011 CreateScrollAndContentsLayers(host_impl_->active_tree(), content_size);
3017 host_impl_->active_tree()->InnerViewportContainerLayer()->SetBounds( 3012 host_impl_->active_tree()->InnerViewportContainerLayer()->SetBounds(
3018 viewport_size); 3013 viewport_size);
3019 LayerImpl* root_scroll = 3014 LayerImpl* root_scroll =
3020 host_impl_->active_tree()->OuterViewportScrollLayer(); 3015 host_impl_->active_tree()->OuterViewportScrollLayer();
3021 // The scrollbar is on the left side. 3016 // The scrollbar is on the left side.
3022 scoped_ptr<SolidColorScrollbarLayerImpl> scrollbar = 3017 std::unique_ptr<SolidColorScrollbarLayerImpl> scrollbar =
3023 SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), 6, 3018 SolidColorScrollbarLayerImpl::Create(host_impl_->active_tree(), 6,
3024 VERTICAL, 5, 5, true, true); 3019 VERTICAL, 5, 5, true, true);
3025 scrollbar->SetScrollLayerId(root_scroll->id()); 3020 scrollbar->SetScrollLayerId(root_scroll->id());
3026 scrollbar->SetDrawsContent(true); 3021 scrollbar->SetDrawsContent(true);
3027 scrollbar->SetBounds(scrollbar_size); 3022 scrollbar->SetBounds(scrollbar_size);
3028 scrollbar->SetTouchEventHandlerRegion(gfx::Rect(scrollbar_size)); 3023 scrollbar->SetTouchEventHandlerRegion(gfx::Rect(scrollbar_size));
3029 host_impl_->active_tree()->InnerViewportContainerLayer()->AddChild( 3024 host_impl_->active_tree()->InnerViewportContainerLayer()->AddChild(
3030 std::move(scrollbar)); 3025 std::move(scrollbar));
3031 host_impl_->active_tree()->DidBecomeActive(); 3026 host_impl_->active_tree()->DidBecomeActive();
3032 3027
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
3188 EXPECT_EQ(4.f, metadata.page_scale_factor); 3183 EXPECT_EQ(4.f, metadata.page_scale_factor);
3189 EXPECT_EQ(gfx::SizeF(12.5f, 12.5f), metadata.scrollable_viewport_size); 3184 EXPECT_EQ(gfx::SizeF(12.5f, 12.5f), metadata.scrollable_viewport_size);
3190 EXPECT_EQ(gfx::SizeF(100.f, 100.f), metadata.root_layer_size); 3185 EXPECT_EQ(gfx::SizeF(100.f, 100.f), metadata.root_layer_size);
3191 EXPECT_EQ(0.5f, metadata.min_page_scale_factor); 3186 EXPECT_EQ(0.5f, metadata.min_page_scale_factor);
3192 EXPECT_EQ(4.f, metadata.max_page_scale_factor); 3187 EXPECT_EQ(4.f, metadata.max_page_scale_factor);
3193 } 3188 }
3194 } 3189 }
3195 3190
3196 class DidDrawCheckLayer : public LayerImpl { 3191 class DidDrawCheckLayer : public LayerImpl {
3197 public: 3192 public:
3198 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { 3193 static std::unique_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
3199 return make_scoped_ptr(new DidDrawCheckLayer(tree_impl, id)); 3194 return base::WrapUnique(new DidDrawCheckLayer(tree_impl, id));
3200 } 3195 }
3201 3196
3202 bool WillDraw(DrawMode draw_mode, ResourceProvider* provider) override { 3197 bool WillDraw(DrawMode draw_mode, ResourceProvider* provider) override {
3203 will_draw_called_ = true; 3198 will_draw_called_ = true;
3204 if (will_draw_returns_false_) 3199 if (will_draw_returns_false_)
3205 return false; 3200 return false;
3206 return LayerImpl::WillDraw(draw_mode, provider); 3201 return LayerImpl::WillDraw(draw_mode, provider);
3207 } 3202 }
3208 3203
3209 void AppendQuads(RenderPass* render_pass, 3204 void AppendQuads(RenderPass* render_pass,
(...skipping 12 matching lines...) Expand all
3222 bool did_draw_called() const { return did_draw_called_; } 3217 bool did_draw_called() const { return did_draw_called_; }
3223 3218
3224 void set_will_draw_returns_false() { will_draw_returns_false_ = true; } 3219 void set_will_draw_returns_false() { will_draw_returns_false_ = true; }
3225 3220
3226 void ClearDidDrawCheck() { 3221 void ClearDidDrawCheck() {
3227 will_draw_called_ = false; 3222 will_draw_called_ = false;
3228 append_quads_called_ = false; 3223 append_quads_called_ = false;
3229 did_draw_called_ = false; 3224 did_draw_called_ = false;
3230 } 3225 }
3231 3226
3232 static void IgnoreResult(scoped_ptr<CopyOutputResult> result) {} 3227 static void IgnoreResult(std::unique_ptr<CopyOutputResult> result) {}
3233 3228
3234 void AddCopyRequest() { 3229 void AddCopyRequest() {
3235 std::vector<scoped_ptr<CopyOutputRequest>> requests; 3230 std::vector<std::unique_ptr<CopyOutputRequest>> requests;
3236 requests.push_back( 3231 requests.push_back(
3237 CopyOutputRequest::CreateRequest(base::Bind(&IgnoreResult))); 3232 CopyOutputRequest::CreateRequest(base::Bind(&IgnoreResult)));
3238 SetForceRenderSurface(true); 3233 SetForceRenderSurface(true);
3239 PassCopyRequests(&requests); 3234 PassCopyRequests(&requests);
3240 } 3235 }
3241 3236
3242 protected: 3237 protected:
3243 DidDrawCheckLayer(LayerTreeImpl* tree_impl, int id) 3238 DidDrawCheckLayer(LayerTreeImpl* tree_impl, int id)
3244 : LayerImpl(tree_impl, id), 3239 : LayerImpl(tree_impl, id),
3245 will_draw_returns_false_(false), 3240 will_draw_returns_false_(false),
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
3420 EXPECT_TRUE(root->did_draw_called()); 3415 EXPECT_TRUE(root->did_draw_called());
3421 EXPECT_TRUE(layer1->did_draw_called()); 3416 EXPECT_TRUE(layer1->did_draw_called());
3422 EXPECT_TRUE(layer2->did_draw_called()); 3417 EXPECT_TRUE(layer2->did_draw_called());
3423 3418
3424 EXPECT_NE(root->render_surface(), layer1->render_surface()); 3419 EXPECT_NE(root->render_surface(), layer1->render_surface());
3425 EXPECT_TRUE(layer1->render_surface()); 3420 EXPECT_TRUE(layer1->render_surface());
3426 } 3421 }
3427 3422
3428 class MissingTextureAnimatingLayer : public DidDrawCheckLayer { 3423 class MissingTextureAnimatingLayer : public DidDrawCheckLayer {
3429 public: 3424 public:
3430 static scoped_ptr<LayerImpl> Create( 3425 static std::unique_ptr<LayerImpl> Create(
3431 LayerTreeImpl* tree_impl, 3426 LayerTreeImpl* tree_impl,
3432 int id, 3427 int id,
3433 bool tile_missing, 3428 bool tile_missing,
3434 bool had_incomplete_tile, 3429 bool had_incomplete_tile,
3435 bool animating, 3430 bool animating,
3436 ResourceProvider* resource_provider, 3431 ResourceProvider* resource_provider,
3437 scoped_refptr<AnimationTimeline> timeline) { 3432 scoped_refptr<AnimationTimeline> timeline) {
3438 return make_scoped_ptr(new MissingTextureAnimatingLayer( 3433 return base::WrapUnique(new MissingTextureAnimatingLayer(
3439 tree_impl, id, tile_missing, had_incomplete_tile, animating, 3434 tree_impl, id, tile_missing, had_incomplete_tile, animating,
3440 resource_provider, timeline)); 3435 resource_provider, timeline));
3441 } 3436 }
3442 3437
3443 void AppendQuads(RenderPass* render_pass, 3438 void AppendQuads(RenderPass* render_pass,
3444 AppendQuadsData* append_quads_data) override { 3439 AppendQuadsData* append_quads_data) override {
3445 LayerImpl::AppendQuads(render_pass, append_quads_data); 3440 LayerImpl::AppendQuads(render_pass, append_quads_data);
3446 if (had_incomplete_tile_) 3441 if (had_incomplete_tile_)
3447 append_quads_data->num_incomplete_tiles++; 3442 append_quads_data->num_incomplete_tiles++;
3448 if (tile_missing_) 3443 if (tile_missing_)
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
3622 host_impl_->DrawLayers(&frame); 3617 host_impl_->DrawLayers(&frame);
3623 host_impl_->DidDrawAllLayers(frame); 3618 host_impl_->DidDrawAllLayers(frame);
3624 host_impl_->SwapBuffers(frame); 3619 host_impl_->SwapBuffers(frame);
3625 } 3620 }
3626 } 3621 }
3627 3622
3628 TEST_F(LayerTreeHostImplTest, 3623 TEST_F(LayerTreeHostImplTest,
3629 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) { 3624 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) {
3630 CreateHostImpl(DefaultSettings(), 3625 CreateHostImpl(DefaultSettings(),
3631 FakeOutputSurface::CreateSoftware( 3626 FakeOutputSurface::CreateSoftware(
3632 make_scoped_ptr(new SoftwareOutputDevice()))); 3627 base::WrapUnique(new SoftwareOutputDevice())));
3633 3628
3634 const gfx::Transform external_transform; 3629 const gfx::Transform external_transform;
3635 const gfx::Rect external_viewport; 3630 const gfx::Rect external_viewport;
3636 const gfx::Rect external_clip; 3631 const gfx::Rect external_clip;
3637 const bool resourceless_software_draw = true; 3632 const bool resourceless_software_draw = true;
3638 host_impl_->SetExternalTilePriorityConstraints(external_viewport, 3633 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
3639 external_transform); 3634 external_transform);
3640 3635
3641 std::vector<PrepareToDrawSuccessTestCase> cases; 3636 std::vector<PrepareToDrawSuccessTestCase> cases;
3642 3637
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
3710 if (testcase.high_res_required) 3705 if (testcase.high_res_required)
3711 host_impl_->SetRequiresHighResToDraw(); 3706 host_impl_->SetRequiresHighResToDraw();
3712 3707
3713 SetNeedsRebuildPropertyTrees(); 3708 SetNeedsRebuildPropertyTrees();
3714 host_impl_->OnDraw(external_transform, external_viewport, external_clip, 3709 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
3715 resourceless_software_draw); 3710 resourceless_software_draw);
3716 } 3711 }
3717 } 3712 }
3718 3713
3719 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) { 3714 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) {
3720 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); 3715 std::unique_ptr<LayerImpl> root =
3716 LayerImpl::Create(host_impl_->active_tree(), 1);
3721 root->SetScrollClipLayer(Layer::INVALID_ID); 3717 root->SetScrollClipLayer(Layer::INVALID_ID);
3722 root->SetForceRenderSurface(true); 3718 root->SetForceRenderSurface(true);
3723 host_impl_->active_tree()->SetRootLayer(std::move(root)); 3719 host_impl_->active_tree()->SetRootLayer(std::move(root));
3724 SetNeedsRebuildPropertyTrees(); 3720 SetNeedsRebuildPropertyTrees();
3725 DrawFrame(); 3721 DrawFrame();
3726 3722
3727 // Scroll event is ignored because layer is not scrollable. 3723 // Scroll event is ignored because layer is not scrollable.
3728 InputHandler::ScrollStatus status = host_impl_->ScrollBegin( 3724 InputHandler::ScrollStatus status = host_impl_->ScrollBegin(
3729 BeginState(gfx::Point()).get(), InputHandler::WHEEL); 3725 BeginState(gfx::Point()).get(), InputHandler::WHEEL);
3730 EXPECT_EQ(InputHandler::SCROLL_IGNORED, status.thread); 3726 EXPECT_EQ(InputHandler::SCROLL_IGNORED, status.thread);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
3764 // Make the clip size the same as the layer (content) size so the layer is 3760 // Make the clip size the same as the layer (content) size so the layer is
3765 // non-scrollable. 3761 // non-scrollable.
3766 : layer_size_(10, 10), 3762 : layer_size_(10, 10),
3767 clip_size_(layer_size_), 3763 clip_size_(layer_size_),
3768 top_controls_height_(50) { 3764 top_controls_height_(50) {
3769 viewport_size_ = gfx::Size(clip_size_.width(), 3765 viewport_size_ = gfx::Size(clip_size_.width(),
3770 clip_size_.height() + top_controls_height_); 3766 clip_size_.height() + top_controls_height_);
3771 } 3767 }
3772 3768
3773 bool CreateHostImpl(const LayerTreeSettings& settings, 3769 bool CreateHostImpl(const LayerTreeSettings& settings,
3774 scoped_ptr<OutputSurface> output_surface) override { 3770 std::unique_ptr<OutputSurface> output_surface) override {
3775 bool init = LayerTreeHostImplTest::CreateHostImpl( 3771 bool init = LayerTreeHostImplTest::CreateHostImpl(
3776 settings, std::move(output_surface)); 3772 settings, std::move(output_surface));
3777 if (init) { 3773 if (init) {
3778 host_impl_->active_tree()->set_top_controls_height(top_controls_height_); 3774 host_impl_->active_tree()->set_top_controls_height(top_controls_height_);
3779 host_impl_->active_tree()->SetCurrentTopControlsShownRatio(1.f); 3775 host_impl_->active_tree()->SetCurrentTopControlsShownRatio(1.f);
3780 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f); 3776 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 1.f);
3781 } 3777 }
3782 return init; 3778 return init;
3783 } 3779 }
3784 3780
(...skipping 12 matching lines...) Expand all
3797 LayerTreeImpl* tree_impl, 3793 LayerTreeImpl* tree_impl,
3798 const gfx::Size& inner_viewport_size, 3794 const gfx::Size& inner_viewport_size,
3799 const gfx::Size& outer_viewport_size, 3795 const gfx::Size& outer_viewport_size,
3800 const gfx::Size& scroll_layer_size) { 3796 const gfx::Size& scroll_layer_size) {
3801 tree_impl->set_top_controls_shrink_blink_size(true); 3797 tree_impl->set_top_controls_shrink_blink_size(true);
3802 tree_impl->set_top_controls_height(top_controls_height_); 3798 tree_impl->set_top_controls_height(top_controls_height_);
3803 tree_impl->SetCurrentTopControlsShownRatio(1.f); 3799 tree_impl->SetCurrentTopControlsShownRatio(1.f);
3804 tree_impl->PushPageScaleFromMainThread(1.f, 1.f, 1.f); 3800 tree_impl->PushPageScaleFromMainThread(1.f, 1.f, 1.f);
3805 host_impl_->DidChangeTopControlsPosition(); 3801 host_impl_->DidChangeTopControlsPosition();
3806 3802
3807 scoped_ptr<LayerImpl> root = LayerImpl::Create(tree_impl, 1); 3803 std::unique_ptr<LayerImpl> root = LayerImpl::Create(tree_impl, 1);
3808 scoped_ptr<LayerImpl> root_clip = LayerImpl::Create(tree_impl, 2); 3804 std::unique_ptr<LayerImpl> root_clip = LayerImpl::Create(tree_impl, 2);
3809 scoped_ptr<LayerImpl> page_scale = LayerImpl::Create(tree_impl, 3); 3805 std::unique_ptr<LayerImpl> page_scale = LayerImpl::Create(tree_impl, 3);
3810 3806
3811 scoped_ptr<LayerImpl> outer_scroll = LayerImpl::Create(tree_impl, 4); 3807 std::unique_ptr<LayerImpl> outer_scroll = LayerImpl::Create(tree_impl, 4);
3812 scoped_ptr<LayerImpl> outer_clip = LayerImpl::Create(tree_impl, 5); 3808 std::unique_ptr<LayerImpl> outer_clip = LayerImpl::Create(tree_impl, 5);
3813 3809
3814 root_clip->SetBounds(inner_viewport_size); 3810 root_clip->SetBounds(inner_viewport_size);
3815 root->SetScrollClipLayer(root_clip->id()); 3811 root->SetScrollClipLayer(root_clip->id());
3816 root->SetBounds(outer_viewport_size); 3812 root->SetBounds(outer_viewport_size);
3817 root->SetPosition(gfx::PointF()); 3813 root->SetPosition(gfx::PointF());
3818 root->SetDrawsContent(false); 3814 root->SetDrawsContent(false);
3819 root->SetIsContainerForFixedPositionLayers(true); 3815 root->SetIsContainerForFixedPositionLayers(true);
3820 root_clip->SetForceRenderSurface(true); 3816 root_clip->SetForceRenderSurface(true);
3821 outer_clip->SetBounds(outer_viewport_size); 3817 outer_clip->SetBounds(outer_viewport_size);
3822 outer_scroll->SetScrollClipLayer(outer_clip->id()); 3818 outer_scroll->SetScrollClipLayer(outer_clip->id());
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
4124 gfx::Size(100, 50), gfx::Size(100, 100), gfx::Size(100, 100)); 4120 gfx::Size(100, 50), gfx::Size(100, 100), gfx::Size(100, 100));
4125 DrawFrame(); 4121 DrawFrame();
4126 4122
4127 // Show top controls 4123 // Show top controls
4128 EXPECT_EQ(1.f, host_impl_->active_tree()->CurrentTopControlsShownRatio()); 4124 EXPECT_EQ(1.f, host_impl_->active_tree()->CurrentTopControlsShownRatio());
4129 4125
4130 LayerImpl* outer_viewport_scroll_layer = 4126 LayerImpl* outer_viewport_scroll_layer =
4131 host_impl_->active_tree()->OuterViewportScrollLayer(); 4127 host_impl_->active_tree()->OuterViewportScrollLayer();
4132 int id = outer_viewport_scroll_layer->id(); 4128 int id = outer_viewport_scroll_layer->id();
4133 4129
4134 scoped_ptr<LayerImpl> child = 4130 std::unique_ptr<LayerImpl> child =
4135 LayerImpl::Create(host_impl_->active_tree(), id + 2); 4131 LayerImpl::Create(host_impl_->active_tree(), id + 2);
4136 scoped_ptr<LayerImpl> child_clip = 4132 std::unique_ptr<LayerImpl> child_clip =
4137 LayerImpl::Create(host_impl_->active_tree(), id + 3); 4133 LayerImpl::Create(host_impl_->active_tree(), id + 3);
4138 4134
4139 child_clip->SetBounds(sub_content_layer_size); 4135 child_clip->SetBounds(sub_content_layer_size);
4140 child->SetScrollClipLayer(child_clip->id()); 4136 child->SetScrollClipLayer(child_clip->id());
4141 child->SetBounds(sub_content_size); 4137 child->SetBounds(sub_content_size);
4142 child->SetPosition(gfx::PointF()); 4138 child->SetPosition(gfx::PointF());
4143 child->SetDrawsContent(true); 4139 child->SetDrawsContent(true);
4144 child->SetIsContainerForFixedPositionLayers(true); 4140 child->SetIsContainerForFixedPositionLayers(true);
4145 4141
4146 // scroll child to limit 4142 // scroll child to limit
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
4602 EXPECT_EQ(925, inner_scroll->CurrentScrollOffset().y()); 4598 EXPECT_EQ(925, inner_scroll->CurrentScrollOffset().y());
4603 EXPECT_EQ(800, outer_scroll->CurrentScrollOffset().y()); 4599 EXPECT_EQ(800, outer_scroll->CurrentScrollOffset().y());
4604 } 4600 }
4605 4601
4606 TEST_F(LayerTreeHostImplTest, ScrollNonCompositedRoot) { 4602 TEST_F(LayerTreeHostImplTest, ScrollNonCompositedRoot) {
4607 // Test the configuration where a non-composited root layer is embedded in a 4603 // Test the configuration where a non-composited root layer is embedded in a
4608 // scrollable outer layer. 4604 // scrollable outer layer.
4609 gfx::Size surface_size(10, 10); 4605 gfx::Size surface_size(10, 10);
4610 gfx::Size contents_size(20, 20); 4606 gfx::Size contents_size(20, 20);
4611 4607
4612 scoped_ptr<LayerImpl> content_layer = 4608 std::unique_ptr<LayerImpl> content_layer =
4613 LayerImpl::Create(host_impl_->active_tree(), 1); 4609 LayerImpl::Create(host_impl_->active_tree(), 1);
4614 content_layer->SetDrawsContent(true); 4610 content_layer->SetDrawsContent(true);
4615 content_layer->SetPosition(gfx::PointF()); 4611 content_layer->SetPosition(gfx::PointF());
4616 content_layer->SetBounds(contents_size); 4612 content_layer->SetBounds(contents_size);
4617 4613
4618 scoped_ptr<LayerImpl> scroll_clip_layer = 4614 std::unique_ptr<LayerImpl> scroll_clip_layer =
4619 LayerImpl::Create(host_impl_->active_tree(), 3); 4615 LayerImpl::Create(host_impl_->active_tree(), 3);
4620 scroll_clip_layer->SetBounds(surface_size); 4616 scroll_clip_layer->SetBounds(surface_size);
4621 4617
4622 scoped_ptr<LayerImpl> scroll_layer = 4618 std::unique_ptr<LayerImpl> scroll_layer =
4623 LayerImpl::Create(host_impl_->active_tree(), 2); 4619 LayerImpl::Create(host_impl_->active_tree(), 2);
4624 scroll_layer->SetScrollClipLayer(3); 4620 scroll_layer->SetScrollClipLayer(3);
4625 scroll_layer->SetBounds(contents_size); 4621 scroll_layer->SetBounds(contents_size);
4626 scroll_layer->SetPosition(gfx::PointF()); 4622 scroll_layer->SetPosition(gfx::PointF());
4627 scroll_layer->AddChild(std::move(content_layer)); 4623 scroll_layer->AddChild(std::move(content_layer));
4628 scroll_clip_layer->AddChild(std::move(scroll_layer)); 4624 scroll_clip_layer->AddChild(std::move(scroll_layer));
4629 4625
4630 scroll_clip_layer->SetForceRenderSurface(true); 4626 scroll_clip_layer->SetForceRenderSurface(true);
4631 host_impl_->active_tree()->SetRootLayer(std::move(scroll_clip_layer)); 4627 host_impl_->active_tree()->SetRootLayer(std::move(scroll_clip_layer));
4632 host_impl_->SetViewportSize(surface_size); 4628 host_impl_->SetViewportSize(surface_size);
4633 SetNeedsRebuildPropertyTrees(); 4629 SetNeedsRebuildPropertyTrees();
4634 DrawFrame(); 4630 DrawFrame();
4635 4631
4636 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 4632 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
4637 host_impl_->ScrollBegin(BeginState(gfx::Point(5, 5)).get(), 4633 host_impl_->ScrollBegin(BeginState(gfx::Point(5, 5)).get(),
4638 InputHandler::WHEEL) 4634 InputHandler::WHEEL)
4639 .thread); 4635 .thread);
4640 host_impl_->ScrollBy(UpdateState(gfx::Point(), gfx::Vector2d(0, 10)).get()); 4636 host_impl_->ScrollBy(UpdateState(gfx::Point(), gfx::Vector2d(0, 10)).get());
4641 host_impl_->ScrollEnd(EndState().get()); 4637 host_impl_->ScrollEnd(EndState().get());
4642 EXPECT_TRUE(did_request_redraw_); 4638 EXPECT_TRUE(did_request_redraw_);
4643 EXPECT_TRUE(did_request_commit_); 4639 EXPECT_TRUE(did_request_commit_);
4644 } 4640 }
4645 4641
4646 TEST_F(LayerTreeHostImplTest, ScrollChildCallsCommitAndRedraw) { 4642 TEST_F(LayerTreeHostImplTest, ScrollChildCallsCommitAndRedraw) {
4647 gfx::Size surface_size(10, 10); 4643 gfx::Size surface_size(10, 10);
4648 gfx::Size contents_size(20, 20); 4644 gfx::Size contents_size(20, 20);
4649 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); 4645 std::unique_ptr<LayerImpl> root =
4646 LayerImpl::Create(host_impl_->active_tree(), 1);
4650 root->SetBounds(surface_size); 4647 root->SetBounds(surface_size);
4651 root->AddChild(CreateScrollableLayer(2, contents_size, root.get())); 4648 root->AddChild(CreateScrollableLayer(2, contents_size, root.get()));
4652 root->SetForceRenderSurface(true); 4649 root->SetForceRenderSurface(true);
4653 host_impl_->active_tree()->SetRootLayer(std::move(root)); 4650 host_impl_->active_tree()->SetRootLayer(std::move(root));
4654 host_impl_->SetViewportSize(surface_size); 4651 host_impl_->SetViewportSize(surface_size);
4655 SetNeedsRebuildPropertyTrees(); 4652 SetNeedsRebuildPropertyTrees();
4656 DrawFrame(); 4653 DrawFrame();
4657 4654
4658 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 4655 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
4659 host_impl_->ScrollBegin(BeginState(gfx::Point(5, 5)).get(), 4656 host_impl_->ScrollBegin(BeginState(gfx::Point(5, 5)).get(),
4660 InputHandler::WHEEL) 4657 InputHandler::WHEEL)
4661 .thread); 4658 .thread);
4662 host_impl_->ScrollBy(UpdateState(gfx::Point(), gfx::Vector2d(0, 10)).get()); 4659 host_impl_->ScrollBy(UpdateState(gfx::Point(), gfx::Vector2d(0, 10)).get());
4663 host_impl_->ScrollEnd(EndState().get()); 4660 host_impl_->ScrollEnd(EndState().get());
4664 EXPECT_TRUE(did_request_redraw_); 4661 EXPECT_TRUE(did_request_redraw_);
4665 EXPECT_TRUE(did_request_commit_); 4662 EXPECT_TRUE(did_request_commit_);
4666 } 4663 }
4667 4664
4668 TEST_F(LayerTreeHostImplTest, ScrollMissesChild) { 4665 TEST_F(LayerTreeHostImplTest, ScrollMissesChild) {
4669 gfx::Size surface_size(10, 10); 4666 gfx::Size surface_size(10, 10);
4670 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); 4667 std::unique_ptr<LayerImpl> root =
4668 LayerImpl::Create(host_impl_->active_tree(), 1);
4671 root->AddChild(CreateScrollableLayer(2, surface_size, root.get())); 4669 root->AddChild(CreateScrollableLayer(2, surface_size, root.get()));
4672 root->SetForceRenderSurface(true); 4670 root->SetForceRenderSurface(true);
4673 host_impl_->active_tree()->SetRootLayer(std::move(root)); 4671 host_impl_->active_tree()->SetRootLayer(std::move(root));
4674 host_impl_->SetViewportSize(surface_size); 4672 host_impl_->SetViewportSize(surface_size);
4675 SetNeedsRebuildPropertyTrees(); 4673 SetNeedsRebuildPropertyTrees();
4676 DrawFrame(); 4674 DrawFrame();
4677 4675
4678 // Scroll event is ignored because the input coordinate is outside the layer 4676 // Scroll event is ignored because the input coordinate is outside the layer
4679 // boundaries. 4677 // boundaries.
4680 InputHandler::ScrollStatus status = host_impl_->ScrollBegin( 4678 InputHandler::ScrollStatus status = host_impl_->ScrollBegin(
4681 BeginState(gfx::Point(15, 5)).get(), InputHandler::WHEEL); 4679 BeginState(gfx::Point(15, 5)).get(), InputHandler::WHEEL);
4682 EXPECT_EQ(InputHandler::SCROLL_IGNORED, status.thread); 4680 EXPECT_EQ(InputHandler::SCROLL_IGNORED, status.thread);
4683 EXPECT_EQ(MainThreadScrollingReason::kNoScrollingLayer, 4681 EXPECT_EQ(MainThreadScrollingReason::kNoScrollingLayer,
4684 status.main_thread_scrolling_reasons); 4682 status.main_thread_scrolling_reasons);
4685 4683
4686 EXPECT_FALSE(did_request_redraw_); 4684 EXPECT_FALSE(did_request_redraw_);
4687 EXPECT_FALSE(did_request_commit_); 4685 EXPECT_FALSE(did_request_commit_);
4688 } 4686 }
4689 4687
4690 TEST_F(LayerTreeHostImplTest, ScrollMissesBackfacingChild) { 4688 TEST_F(LayerTreeHostImplTest, ScrollMissesBackfacingChild) {
4691 gfx::Size surface_size(10, 10); 4689 gfx::Size surface_size(10, 10);
4692 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); 4690 std::unique_ptr<LayerImpl> root =
4691 LayerImpl::Create(host_impl_->active_tree(), 1);
4693 root->SetForceRenderSurface(true); 4692 root->SetForceRenderSurface(true);
4694 scoped_ptr<LayerImpl> child = 4693 std::unique_ptr<LayerImpl> child =
4695 CreateScrollableLayer(2, surface_size, root.get()); 4694 CreateScrollableLayer(2, surface_size, root.get());
4696 host_impl_->SetViewportSize(surface_size); 4695 host_impl_->SetViewportSize(surface_size);
4697 4696
4698 gfx::Transform matrix; 4697 gfx::Transform matrix;
4699 matrix.RotateAboutXAxis(180.0); 4698 matrix.RotateAboutXAxis(180.0);
4700 child->SetTransform(matrix); 4699 child->SetTransform(matrix);
4701 child->SetDoubleSided(false); 4700 child->SetDoubleSided(false);
4702 4701
4703 root->AddChild(std::move(child)); 4702 root->AddChild(std::move(child));
4704 host_impl_->active_tree()->SetRootLayer(std::move(root)); 4703 host_impl_->active_tree()->SetRootLayer(std::move(root));
4705 SetNeedsRebuildPropertyTrees(); 4704 SetNeedsRebuildPropertyTrees();
4706 DrawFrame(); 4705 DrawFrame();
4707 4706
4708 // Scroll event is ignored because the scrollable layer is not facing the 4707 // Scroll event is ignored because the scrollable layer is not facing the
4709 // viewer and there is nothing scrollable behind it. 4708 // viewer and there is nothing scrollable behind it.
4710 InputHandler::ScrollStatus status = host_impl_->ScrollBegin( 4709 InputHandler::ScrollStatus status = host_impl_->ScrollBegin(
4711 BeginState(gfx::Point(5, 5)).get(), InputHandler::WHEEL); 4710 BeginState(gfx::Point(5, 5)).get(), InputHandler::WHEEL);
4712 EXPECT_EQ(InputHandler::SCROLL_IGNORED, status.thread); 4711 EXPECT_EQ(InputHandler::SCROLL_IGNORED, status.thread);
4713 EXPECT_EQ(MainThreadScrollingReason::kNoScrollingLayer, 4712 EXPECT_EQ(MainThreadScrollingReason::kNoScrollingLayer,
4714 status.main_thread_scrolling_reasons); 4713 status.main_thread_scrolling_reasons);
4715 4714
4716 EXPECT_FALSE(did_request_redraw_); 4715 EXPECT_FALSE(did_request_redraw_);
4717 EXPECT_FALSE(did_request_commit_); 4716 EXPECT_FALSE(did_request_commit_);
4718 } 4717 }
4719 4718
4720 TEST_F(LayerTreeHostImplTest, ScrollBlockedByContentLayer) { 4719 TEST_F(LayerTreeHostImplTest, ScrollBlockedByContentLayer) {
4721 gfx::Size surface_size(10, 10); 4720 gfx::Size surface_size(10, 10);
4722 scoped_ptr<LayerImpl> clip_layer = 4721 std::unique_ptr<LayerImpl> clip_layer =
4723 LayerImpl::Create(host_impl_->active_tree(), 3); 4722 LayerImpl::Create(host_impl_->active_tree(), 3);
4724 scoped_ptr<LayerImpl> content_layer = 4723 std::unique_ptr<LayerImpl> content_layer =
4725 CreateScrollableLayer(1, surface_size, clip_layer.get()); 4724 CreateScrollableLayer(1, surface_size, clip_layer.get());
4726 content_layer->set_main_thread_scrolling_reasons( 4725 content_layer->set_main_thread_scrolling_reasons(
4727 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects); 4726 MainThreadScrollingReason::kHasBackgroundAttachmentFixedObjects);
4728 content_layer->SetScrollClipLayer(Layer::INVALID_ID); 4727 content_layer->SetScrollClipLayer(Layer::INVALID_ID);
4729 4728
4730 // Note: we can use the same clip layer for both since both calls to 4729 // Note: we can use the same clip layer for both since both calls to
4731 // CreateScrollableLayer() use the same surface size. 4730 // CreateScrollableLayer() use the same surface size.
4732 scoped_ptr<LayerImpl> scroll_layer = 4731 std::unique_ptr<LayerImpl> scroll_layer =
4733 CreateScrollableLayer(2, surface_size, clip_layer.get()); 4732 CreateScrollableLayer(2, surface_size, clip_layer.get());
4734 scroll_layer->AddChild(std::move(content_layer)); 4733 scroll_layer->AddChild(std::move(content_layer));
4735 clip_layer->AddChild(std::move(scroll_layer)); 4734 clip_layer->AddChild(std::move(scroll_layer));
4736 clip_layer->SetForceRenderSurface(true); 4735 clip_layer->SetForceRenderSurface(true);
4737 4736
4738 host_impl_->active_tree()->SetRootLayer(std::move(clip_layer)); 4737 host_impl_->active_tree()->SetRootLayer(std::move(clip_layer));
4739 host_impl_->SetViewportSize(surface_size); 4738 host_impl_->SetViewportSize(surface_size);
4740 SetNeedsRebuildPropertyTrees(); 4739 SetNeedsRebuildPropertyTrees();
4741 DrawFrame(); 4740 DrawFrame();
4742 4741
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
4775 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 4774 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
4776 host_impl_->ScrollBegin(BeginState(gfx::Point(5, 5)).get(), 4775 host_impl_->ScrollBegin(BeginState(gfx::Point(5, 5)).get(),
4777 InputHandler::WHEEL) 4776 InputHandler::WHEEL)
4778 .thread); 4777 .thread);
4779 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()); 4778 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
4780 host_impl_->ScrollEnd(EndState().get()); 4779 host_impl_->ScrollEnd(EndState().get());
4781 4780
4782 // Set new page scale from main thread. 4781 // Set new page scale from main thread.
4783 host_impl_->active_tree()->PushPageScaleFromMainThread(page_scale, 1.f, 2.f); 4782 host_impl_->active_tree()->PushPageScaleFromMainThread(page_scale, 1.f, 2.f);
4784 4783
4785 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); 4784 std::unique_ptr<ScrollAndScaleSet> scroll_info =
4785 host_impl_->ProcessScrollDeltas();
4786 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), inner_scroll->id(), 4786 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), inner_scroll->id(),
4787 expected_scroll_delta)); 4787 expected_scroll_delta));
4788 4788
4789 // The scroll range should also have been updated. 4789 // The scroll range should also have been updated.
4790 EXPECT_EQ(expected_max_scroll, root_scroll->MaxScrollOffset()); 4790 EXPECT_EQ(expected_max_scroll, root_scroll->MaxScrollOffset());
4791 4791
4792 // The page scale delta remains constant because the impl thread did not 4792 // The page scale delta remains constant because the impl thread did not
4793 // scale. 4793 // scale.
4794 EXPECT_EQ(1.f, host_impl_->active_tree()->page_scale_delta()); 4794 EXPECT_EQ(1.f, host_impl_->active_tree()->page_scale_delta());
4795 } 4795 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
4827 // Set new page scale on impl thread by pinching. 4827 // Set new page scale on impl thread by pinching.
4828 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), 4828 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
4829 InputHandler::TOUCHSCREEN); 4829 InputHandler::TOUCHSCREEN);
4830 host_impl_->PinchGestureBegin(); 4830 host_impl_->PinchGestureBegin();
4831 host_impl_->PinchGestureUpdate(page_scale, gfx::Point()); 4831 host_impl_->PinchGestureUpdate(page_scale, gfx::Point());
4832 host_impl_->PinchGestureEnd(); 4832 host_impl_->PinchGestureEnd();
4833 host_impl_->ScrollEnd(EndState().get()); 4833 host_impl_->ScrollEnd(EndState().get());
4834 DrawOneFrame(); 4834 DrawOneFrame();
4835 4835
4836 // The scroll delta is not scaled because the main thread did not scale. 4836 // The scroll delta is not scaled because the main thread did not scale.
4837 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); 4837 std::unique_ptr<ScrollAndScaleSet> scroll_info =
4838 host_impl_->ProcessScrollDeltas();
4838 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), inner_scroll->id(), 4839 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), inner_scroll->id(),
4839 expected_scroll_delta)); 4840 expected_scroll_delta));
4840 4841
4841 // The scroll range should also have been updated. 4842 // The scroll range should also have been updated.
4842 EXPECT_EQ(expected_max_scroll, root_scroll->MaxScrollOffset()); 4843 EXPECT_EQ(expected_max_scroll, root_scroll->MaxScrollOffset());
4843 4844
4844 // The page scale delta should match the new scale on the impl side. 4845 // The page scale delta should match the new scale on the impl side.
4845 EXPECT_EQ(page_scale, host_impl_->active_tree()->current_page_scale_factor()); 4846 EXPECT_EQ(page_scale, host_impl_->active_tree()->current_page_scale_factor());
4846 } 4847 }
4847 4848
4848 TEST_F(LayerTreeHostImplTest, PageScaleDeltaAppliedToRootScrollLayerOnly) { 4849 TEST_F(LayerTreeHostImplTest, PageScaleDeltaAppliedToRootScrollLayerOnly) {
4849 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 2.f); 4850 host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 2.f);
4850 gfx::Size surface_size(10, 10); 4851 gfx::Size surface_size(10, 10);
4851 float default_page_scale = 1.f; 4852 float default_page_scale = 1.f;
4852 gfx::Transform default_page_scale_matrix; 4853 gfx::Transform default_page_scale_matrix;
4853 default_page_scale_matrix.Scale(default_page_scale, default_page_scale); 4854 default_page_scale_matrix.Scale(default_page_scale, default_page_scale);
4854 4855
4855 float new_page_scale = 2.f; 4856 float new_page_scale = 2.f;
4856 gfx::Transform new_page_scale_matrix; 4857 gfx::Transform new_page_scale_matrix;
4857 new_page_scale_matrix.Scale(new_page_scale, new_page_scale); 4858 new_page_scale_matrix.Scale(new_page_scale, new_page_scale);
4858 4859
4859 // Create a normal scrollable root layer and another scrollable child layer. 4860 // Create a normal scrollable root layer and another scrollable child layer.
4860 LayerImpl* scroll = SetupScrollAndContentsLayers(surface_size); 4861 LayerImpl* scroll = SetupScrollAndContentsLayers(surface_size);
4861 scroll->SetDrawsContent(true); 4862 scroll->SetDrawsContent(true);
4862 LayerImpl* root = host_impl_->active_tree()->root_layer(); 4863 LayerImpl* root = host_impl_->active_tree()->root_layer();
4863 LayerImpl* child = scroll->children()[0]; 4864 LayerImpl* child = scroll->children()[0];
4864 child->SetDrawsContent(true); 4865 child->SetDrawsContent(true);
4865 4866
4866 scoped_ptr<LayerImpl> scrollable_child_clip = 4867 std::unique_ptr<LayerImpl> scrollable_child_clip =
4867 LayerImpl::Create(host_impl_->active_tree(), 6); 4868 LayerImpl::Create(host_impl_->active_tree(), 6);
4868 scoped_ptr<LayerImpl> scrollable_child = 4869 std::unique_ptr<LayerImpl> scrollable_child =
4869 CreateScrollableLayer(7, surface_size, scrollable_child_clip.get()); 4870 CreateScrollableLayer(7, surface_size, scrollable_child_clip.get());
4870 scrollable_child_clip->AddChild(std::move(scrollable_child)); 4871 scrollable_child_clip->AddChild(std::move(scrollable_child));
4871 child->AddChild(std::move(scrollable_child_clip)); 4872 child->AddChild(std::move(scrollable_child_clip));
4872 LayerImpl* grand_child = child->children()[0]; 4873 LayerImpl* grand_child = child->children()[0];
4873 grand_child->SetDrawsContent(true); 4874 grand_child->SetDrawsContent(true);
4874 4875
4875 // Set new page scale on impl thread by pinching. 4876 // Set new page scale on impl thread by pinching.
4876 SetNeedsRebuildPropertyTrees(); 4877 SetNeedsRebuildPropertyTrees();
4877 RebuildPropertyTrees(); 4878 RebuildPropertyTrees();
4878 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), 4879 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
4922 .thread); 4923 .thread);
4923 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()); 4924 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
4924 host_impl_->ScrollEnd(EndState().get()); 4925 host_impl_->ScrollEnd(EndState().get());
4925 4926
4926 float page_scale = 2.f; 4927 float page_scale = 2.f;
4927 host_impl_->active_tree()->PushPageScaleFromMainThread(page_scale, 1.f, 4928 host_impl_->active_tree()->PushPageScaleFromMainThread(page_scale, 1.f,
4928 page_scale); 4929 page_scale);
4929 4930
4930 DrawOneFrame(); 4931 DrawOneFrame();
4931 4932
4932 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); 4933 std::unique_ptr<ScrollAndScaleSet> scroll_info =
4934 host_impl_->ProcessScrollDeltas();
4933 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), inner_scroll->id(), 4935 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), inner_scroll->id(),
4934 expected_scroll_delta)); 4936 expected_scroll_delta));
4935 4937
4936 // The scroll range should not have changed. 4938 // The scroll range should not have changed.
4937 EXPECT_EQ(outer_scroll->MaxScrollOffset(), expected_max_scroll); 4939 EXPECT_EQ(outer_scroll->MaxScrollOffset(), expected_max_scroll);
4938 4940
4939 // The page scale delta remains constant because the impl thread did not 4941 // The page scale delta remains constant because the impl thread did not
4940 // scale. 4942 // scale.
4941 EXPECT_EQ(1.f, host_impl_->active_tree()->page_scale_delta()); 4943 EXPECT_EQ(1.f, host_impl_->active_tree()->page_scale_delta());
4942 } 4944 }
4943 4945
4944 TEST_F(LayerTreeHostImplTest, ScrollChildBeyondLimit) { 4946 TEST_F(LayerTreeHostImplTest, ScrollChildBeyondLimit) {
4945 // Scroll a child layer beyond its maximum scroll range and make sure the 4947 // Scroll a child layer beyond its maximum scroll range and make sure the
4946 // parent layer isn't scrolled. 4948 // parent layer isn't scrolled.
4947 gfx::Size surface_size(10, 10); 4949 gfx::Size surface_size(10, 10);
4948 gfx::Size content_size(20, 20); 4950 gfx::Size content_size(20, 20);
4949 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); 4951 std::unique_ptr<LayerImpl> root =
4952 LayerImpl::Create(host_impl_->active_tree(), 1);
4950 root->SetBounds(surface_size); 4953 root->SetBounds(surface_size);
4951 root->SetForceRenderSurface(true); 4954 root->SetForceRenderSurface(true);
4952 scoped_ptr<LayerImpl> grand_child = 4955 std::unique_ptr<LayerImpl> grand_child =
4953 CreateScrollableLayer(3, content_size, root.get()); 4956 CreateScrollableLayer(3, content_size, root.get());
4954 4957
4955 scoped_ptr<LayerImpl> child = 4958 std::unique_ptr<LayerImpl> child =
4956 CreateScrollableLayer(2, content_size, root.get()); 4959 CreateScrollableLayer(2, content_size, root.get());
4957 LayerImpl* grand_child_layer = grand_child.get(); 4960 LayerImpl* grand_child_layer = grand_child.get();
4958 child->AddChild(std::move(grand_child)); 4961 child->AddChild(std::move(grand_child));
4959 4962
4960 LayerImpl* child_layer = child.get(); 4963 LayerImpl* child_layer = child.get();
4961 root->AddChild(std::move(child)); 4964 root->AddChild(std::move(child));
4962 host_impl_->active_tree()->SetRootLayer(std::move(root)); 4965 host_impl_->active_tree()->SetRootLayer(std::move(root));
4963 host_impl_->active_tree()->DidBecomeActive(); 4966 host_impl_->active_tree()->DidBecomeActive();
4964 host_impl_->SetViewportSize(surface_size); 4967 host_impl_->SetViewportSize(surface_size);
4965 grand_child_layer->layer_tree_impl() 4968 grand_child_layer->layer_tree_impl()
4966 ->property_trees() 4969 ->property_trees()
4967 ->scroll_tree.UpdateScrollOffsetBaseForTesting(grand_child_layer->id(), 4970 ->scroll_tree.UpdateScrollOffsetBaseForTesting(grand_child_layer->id(),
4968 gfx::ScrollOffset(0, 5)); 4971 gfx::ScrollOffset(0, 5));
4969 child_layer->layer_tree_impl() 4972 child_layer->layer_tree_impl()
4970 ->property_trees() 4973 ->property_trees()
4971 ->scroll_tree.UpdateScrollOffsetBaseForTesting(child_layer->id(), 4974 ->scroll_tree.UpdateScrollOffsetBaseForTesting(child_layer->id(),
4972 gfx::ScrollOffset(3, 0)); 4975 gfx::ScrollOffset(3, 0));
4973 4976
4974 SetNeedsRebuildPropertyTrees(); 4977 SetNeedsRebuildPropertyTrees();
4975 DrawFrame(); 4978 DrawFrame();
4976 { 4979 {
4977 gfx::Vector2d scroll_delta(-8, -7); 4980 gfx::Vector2d scroll_delta(-8, -7);
4978 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 4981 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
4979 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), 4982 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
4980 InputHandler::WHEEL) 4983 InputHandler::WHEEL)
4981 .thread); 4984 .thread);
4982 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()); 4985 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
4983 host_impl_->ScrollEnd(EndState().get()); 4986 host_impl_->ScrollEnd(EndState().get());
4984 4987
4985 scoped_ptr<ScrollAndScaleSet> scroll_info = 4988 std::unique_ptr<ScrollAndScaleSet> scroll_info =
4986 host_impl_->ProcessScrollDeltas(); 4989 host_impl_->ProcessScrollDeltas();
4987 4990
4988 // The grand child should have scrolled up to its limit. 4991 // The grand child should have scrolled up to its limit.
4989 LayerImpl* child = host_impl_->active_tree()->root_layer()->children()[0]; 4992 LayerImpl* child = host_impl_->active_tree()->root_layer()->children()[0];
4990 LayerImpl* grand_child = child->children()[0]; 4993 LayerImpl* grand_child = child->children()[0];
4991 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), grand_child->id(), 4994 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), grand_child->id(),
4992 gfx::Vector2d(0, -5))); 4995 gfx::Vector2d(0, -5)));
4993 4996
4994 // The child should not have scrolled. 4997 // The child should not have scrolled.
4995 ExpectNone(*scroll_info.get(), child->id()); 4998 ExpectNone(*scroll_info.get(), child->id());
4996 } 4999 }
4997 } 5000 }
4998 5001
4999 TEST_F(LayerTreeHostImplTest, ScrollWithoutBubbling) { 5002 TEST_F(LayerTreeHostImplTest, ScrollWithoutBubbling) {
5000 // Scroll a child layer beyond its maximum scroll range and make sure the 5003 // Scroll a child layer beyond its maximum scroll range and make sure the
5001 // the scroll doesn't bubble up to the parent layer. 5004 // the scroll doesn't bubble up to the parent layer.
5002 gfx::Size surface_size(20, 20); 5005 gfx::Size surface_size(20, 20);
5003 gfx::Size viewport_size(10, 10); 5006 gfx::Size viewport_size(10, 10);
5004 scoped_ptr<LayerImpl> root_ptr = 5007 std::unique_ptr<LayerImpl> root_ptr =
5005 LayerImpl::Create(host_impl_->active_tree(), 1); 5008 LayerImpl::Create(host_impl_->active_tree(), 1);
5006 scoped_ptr<LayerImpl> root_clip = 5009 std::unique_ptr<LayerImpl> root_clip =
5007 LayerImpl::Create(host_impl_->active_tree(), 2); 5010 LayerImpl::Create(host_impl_->active_tree(), 2);
5008 root_clip->SetForceRenderSurface(true); 5011 root_clip->SetForceRenderSurface(true);
5009 scoped_ptr<LayerImpl> root_scrolling = 5012 std::unique_ptr<LayerImpl> root_scrolling =
5010 CreateScrollableLayer(3, surface_size, root_clip.get()); 5013 CreateScrollableLayer(3, surface_size, root_clip.get());
5011 root_scrolling->SetIsContainerForFixedPositionLayers(true); 5014 root_scrolling->SetIsContainerForFixedPositionLayers(true);
5012 5015
5013 scoped_ptr<LayerImpl> grand_child = 5016 std::unique_ptr<LayerImpl> grand_child =
5014 CreateScrollableLayer(5, surface_size, root_clip.get()); 5017 CreateScrollableLayer(5, surface_size, root_clip.get());
5015 5018
5016 scoped_ptr<LayerImpl> child = 5019 std::unique_ptr<LayerImpl> child =
5017 CreateScrollableLayer(4, surface_size, root_clip.get()); 5020 CreateScrollableLayer(4, surface_size, root_clip.get());
5018 LayerImpl* grand_child_layer = grand_child.get(); 5021 LayerImpl* grand_child_layer = grand_child.get();
5019 child->AddChild(std::move(grand_child)); 5022 child->AddChild(std::move(grand_child));
5020 5023
5021 LayerImpl* child_layer = child.get(); 5024 LayerImpl* child_layer = child.get();
5022 root_scrolling->AddChild(std::move(child)); 5025 root_scrolling->AddChild(std::move(child));
5023 root_clip->AddChild(std::move(root_scrolling)); 5026 root_clip->AddChild(std::move(root_scrolling));
5024 EXPECT_EQ(viewport_size, root_clip->bounds()); 5027 EXPECT_EQ(viewport_size, root_clip->bounds());
5025 root_ptr->AddChild(std::move(root_clip)); 5028 root_ptr->AddChild(std::move(root_clip));
5026 host_impl_->active_tree()->SetRootLayer(std::move(root_ptr)); 5029 host_impl_->active_tree()->SetRootLayer(std::move(root_ptr));
(...skipping 15 matching lines...) Expand all
5042 DrawFrame(); 5045 DrawFrame();
5043 { 5046 {
5044 gfx::Vector2d scroll_delta(0, -10); 5047 gfx::Vector2d scroll_delta(0, -10);
5045 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 5048 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
5046 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), 5049 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
5047 InputHandler::NON_BUBBLING_GESTURE) 5050 InputHandler::NON_BUBBLING_GESTURE)
5048 .thread); 5051 .thread);
5049 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()); 5052 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
5050 host_impl_->ScrollEnd(EndState().get()); 5053 host_impl_->ScrollEnd(EndState().get());
5051 5054
5052 scoped_ptr<ScrollAndScaleSet> scroll_info = 5055 std::unique_ptr<ScrollAndScaleSet> scroll_info =
5053 host_impl_->ProcessScrollDeltas(); 5056 host_impl_->ProcessScrollDeltas();
5054 5057
5055 // The grand child should have scrolled up to its limit. 5058 // The grand child should have scrolled up to its limit.
5056 LayerImpl* child = host_impl_->active_tree() 5059 LayerImpl* child = host_impl_->active_tree()
5057 ->root_layer() 5060 ->root_layer()
5058 ->children()[0] 5061 ->children()[0]
5059 ->children()[0] 5062 ->children()[0]
5060 ->children()[0]; 5063 ->children()[0];
5061 LayerImpl* grand_child = child->children()[0]; 5064 LayerImpl* grand_child = child->children()[0];
5062 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), grand_child->id(), 5065 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), grand_child->id(),
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
5126 // Should have scrolled by half the amount in layer space (5 - 2/2) 5129 // Should have scrolled by half the amount in layer space (5 - 2/2)
5127 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), grand_child->id(), 5130 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), grand_child->id(),
5128 gfx::Vector2d(0, 4))); 5131 gfx::Vector2d(0, 4)));
5129 } 5132 }
5130 } 5133 }
5131 TEST_F(LayerTreeHostImplTest, ScrollEventBubbling) { 5134 TEST_F(LayerTreeHostImplTest, ScrollEventBubbling) {
5132 // When we try to scroll a non-scrollable child layer, the scroll delta 5135 // When we try to scroll a non-scrollable child layer, the scroll delta
5133 // should be applied to one of its ancestors if possible. 5136 // should be applied to one of its ancestors if possible.
5134 gfx::Size surface_size(10, 10); 5137 gfx::Size surface_size(10, 10);
5135 gfx::Size content_size(20, 20); 5138 gfx::Size content_size(20, 20);
5136 scoped_ptr<LayerImpl> root_ptr = 5139 std::unique_ptr<LayerImpl> root_ptr =
5137 LayerImpl::Create(host_impl_->active_tree(), 4); 5140 LayerImpl::Create(host_impl_->active_tree(), 4);
5138 scoped_ptr<LayerImpl> root_clip = 5141 std::unique_ptr<LayerImpl> root_clip =
5139 LayerImpl::Create(host_impl_->active_tree(), 3); 5142 LayerImpl::Create(host_impl_->active_tree(), 3);
5140 root_clip->SetForceRenderSurface(true); 5143 root_clip->SetForceRenderSurface(true);
5141 scoped_ptr<LayerImpl> root_scroll = 5144 std::unique_ptr<LayerImpl> root_scroll =
5142 CreateScrollableLayer(1, content_size, root_clip.get()); 5145 CreateScrollableLayer(1, content_size, root_clip.get());
5143 // Make 'root' the clip layer for child: since they have the same sizes the 5146 // Make 'root' the clip layer for child: since they have the same sizes the
5144 // child will have zero max_scroll_offset and scrolls will bubble. 5147 // child will have zero max_scroll_offset and scrolls will bubble.
5145 scoped_ptr<LayerImpl> child = 5148 std::unique_ptr<LayerImpl> child =
5146 CreateScrollableLayer(2, content_size, root_scroll.get()); 5149 CreateScrollableLayer(2, content_size, root_scroll.get());
5147 child->SetIsContainerForFixedPositionLayers(true); 5150 child->SetIsContainerForFixedPositionLayers(true);
5148 root_scroll->SetBounds(content_size); 5151 root_scroll->SetBounds(content_size);
5149 5152
5150 int root_scroll_id = root_scroll->id(); 5153 int root_scroll_id = root_scroll->id();
5151 root_scroll->AddChild(std::move(child)); 5154 root_scroll->AddChild(std::move(child));
5152 root_clip->AddChild(std::move(root_scroll)); 5155 root_clip->AddChild(std::move(root_scroll));
5153 root_ptr->AddChild(std::move(root_clip)); 5156 root_ptr->AddChild(std::move(root_clip));
5154 5157
5155 host_impl_->SetViewportSize(surface_size); 5158 host_impl_->SetViewportSize(surface_size);
5156 host_impl_->active_tree()->SetRootLayer(std::move(root_ptr)); 5159 host_impl_->active_tree()->SetRootLayer(std::move(root_ptr));
5157 host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 4, 2, 5160 host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 4, 2,
5158 Layer::INVALID_ID); 5161 Layer::INVALID_ID);
5159 host_impl_->active_tree()->DidBecomeActive(); 5162 host_impl_->active_tree()->DidBecomeActive();
5160 SetNeedsRebuildPropertyTrees(); 5163 SetNeedsRebuildPropertyTrees();
5161 DrawFrame(); 5164 DrawFrame();
5162 { 5165 {
5163 gfx::Vector2d scroll_delta(0, 4); 5166 gfx::Vector2d scroll_delta(0, 4);
5164 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 5167 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
5165 host_impl_->ScrollBegin(BeginState(gfx::Point(5, 5)).get(), 5168 host_impl_->ScrollBegin(BeginState(gfx::Point(5, 5)).get(),
5166 InputHandler::WHEEL) 5169 InputHandler::WHEEL)
5167 .thread); 5170 .thread);
5168 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()); 5171 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
5169 host_impl_->ScrollEnd(EndState().get()); 5172 host_impl_->ScrollEnd(EndState().get());
5170 5173
5171 scoped_ptr<ScrollAndScaleSet> scroll_info = 5174 std::unique_ptr<ScrollAndScaleSet> scroll_info =
5172 host_impl_->ProcessScrollDeltas(); 5175 host_impl_->ProcessScrollDeltas();
5173 5176
5174 // Only the root scroll should have scrolled. 5177 // Only the root scroll should have scrolled.
5175 ASSERT_EQ(scroll_info->scrolls.size(), 1u); 5178 ASSERT_EQ(scroll_info->scrolls.size(), 1u);
5176 EXPECT_TRUE( 5179 EXPECT_TRUE(
5177 ScrollInfoContains(*scroll_info.get(), root_scroll_id, scroll_delta)); 5180 ScrollInfoContains(*scroll_info.get(), root_scroll_id, scroll_delta));
5178 } 5181 }
5179 } 5182 }
5180 5183
5181 TEST_F(LayerTreeHostImplTest, ScrollBeforeRedraw) { 5184 TEST_F(LayerTreeHostImplTest, ScrollBeforeRedraw) {
5182 gfx::Size surface_size(10, 10); 5185 gfx::Size surface_size(10, 10);
5183 scoped_ptr<LayerImpl> root_ptr = 5186 std::unique_ptr<LayerImpl> root_ptr =
5184 LayerImpl::Create(host_impl_->active_tree(), 1); 5187 LayerImpl::Create(host_impl_->active_tree(), 1);
5185 scoped_ptr<LayerImpl> root_clip = 5188 std::unique_ptr<LayerImpl> root_clip =
5186 LayerImpl::Create(host_impl_->active_tree(), 2); 5189 LayerImpl::Create(host_impl_->active_tree(), 2);
5187 scoped_ptr<LayerImpl> root_scroll = 5190 std::unique_ptr<LayerImpl> root_scroll =
5188 CreateScrollableLayer(3, surface_size, root_clip.get()); 5191 CreateScrollableLayer(3, surface_size, root_clip.get());
5189 root_scroll->SetIsContainerForFixedPositionLayers(true); 5192 root_scroll->SetIsContainerForFixedPositionLayers(true);
5190 root_clip->SetForceRenderSurface(true); 5193 root_clip->SetForceRenderSurface(true);
5191 root_clip->AddChild(std::move(root_scroll)); 5194 root_clip->AddChild(std::move(root_scroll));
5192 root_ptr->AddChild(std::move(root_clip)); 5195 root_ptr->AddChild(std::move(root_clip));
5193 host_impl_->active_tree()->SetRootLayer(std::move(root_ptr)); 5196 host_impl_->active_tree()->SetRootLayer(std::move(root_ptr));
5194 host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 3, 5197 host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 3,
5195 Layer::INVALID_ID); 5198 Layer::INVALID_ID);
5196 host_impl_->active_tree()->DidBecomeActive(); 5199 host_impl_->active_tree()->DidBecomeActive();
5197 host_impl_->SetViewportSize(surface_size); 5200 host_impl_->SetViewportSize(surface_size);
5198 5201
5199 // Draw one frame and then immediately rebuild the layer tree to mimic a tree 5202 // Draw one frame and then immediately rebuild the layer tree to mimic a tree
5200 // synchronization. 5203 // synchronization.
5201 SetNeedsRebuildPropertyTrees(); 5204 SetNeedsRebuildPropertyTrees();
5202 DrawFrame(); 5205 DrawFrame();
5203 host_impl_->active_tree()->ClearLayers(); 5206 host_impl_->active_tree()->ClearLayers();
5204 scoped_ptr<LayerImpl> root_ptr2 = 5207 std::unique_ptr<LayerImpl> root_ptr2 =
5205 LayerImpl::Create(host_impl_->active_tree(), 4); 5208 LayerImpl::Create(host_impl_->active_tree(), 4);
5206 scoped_ptr<LayerImpl> root_clip2 = 5209 std::unique_ptr<LayerImpl> root_clip2 =
5207 LayerImpl::Create(host_impl_->active_tree(), 5); 5210 LayerImpl::Create(host_impl_->active_tree(), 5);
5208 scoped_ptr<LayerImpl> root_scroll2 = 5211 std::unique_ptr<LayerImpl> root_scroll2 =
5209 CreateScrollableLayer(6, surface_size, root_clip2.get()); 5212 CreateScrollableLayer(6, surface_size, root_clip2.get());
5210 root_scroll2->SetIsContainerForFixedPositionLayers(true); 5213 root_scroll2->SetIsContainerForFixedPositionLayers(true);
5211 root_clip2->AddChild(std::move(root_scroll2)); 5214 root_clip2->AddChild(std::move(root_scroll2));
5212 root_clip2->SetForceRenderSurface(true); 5215 root_clip2->SetForceRenderSurface(true);
5213 root_ptr2->AddChild(std::move(root_clip2)); 5216 root_ptr2->AddChild(std::move(root_clip2));
5214 host_impl_->active_tree()->SetRootLayer(std::move(root_ptr2)); 5217 host_impl_->active_tree()->SetRootLayer(std::move(root_ptr2));
5215 host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 4, 6, 5218 host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 4, 6,
5216 Layer::INVALID_ID); 5219 Layer::INVALID_ID);
5217 host_impl_->active_tree()->DidBecomeActive(); 5220 host_impl_->active_tree()->DidBecomeActive();
5218 5221
(...skipping 24 matching lines...) Expand all
5243 gfx::Vector2d gesture_scroll_delta(10, 0); 5246 gfx::Vector2d gesture_scroll_delta(10, 0);
5244 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 5247 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
5245 host_impl_ 5248 host_impl_
5246 ->ScrollBegin(BeginState(gfx::Point()).get(), 5249 ->ScrollBegin(BeginState(gfx::Point()).get(),
5247 InputHandler::TOUCHSCREEN) 5250 InputHandler::TOUCHSCREEN)
5248 .thread); 5251 .thread);
5249 host_impl_->ScrollBy(UpdateState(gfx::Point(), gesture_scroll_delta).get()); 5252 host_impl_->ScrollBy(UpdateState(gfx::Point(), gesture_scroll_delta).get());
5250 host_impl_->ScrollEnd(EndState().get()); 5253 host_impl_->ScrollEnd(EndState().get());
5251 5254
5252 // The layer should have scrolled down in its local coordinates. 5255 // The layer should have scrolled down in its local coordinates.
5253 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); 5256 std::unique_ptr<ScrollAndScaleSet> scroll_info =
5257 host_impl_->ProcessScrollDeltas();
5254 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), scroll_layer->id(), 5258 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), scroll_layer->id(),
5255 gfx::Vector2d(0, gesture_scroll_delta.x()))); 5259 gfx::Vector2d(0, gesture_scroll_delta.x())));
5256 5260
5257 // Reset and scroll down with the wheel. 5261 // Reset and scroll down with the wheel.
5258 SetScrollOffsetDelta(scroll_layer, gfx::Vector2dF()); 5262 SetScrollOffsetDelta(scroll_layer, gfx::Vector2dF());
5259 gfx::Vector2d wheel_scroll_delta(0, 10); 5263 gfx::Vector2d wheel_scroll_delta(0, 10);
5260 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 5264 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
5261 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), 5265 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
5262 InputHandler::WHEEL) 5266 InputHandler::WHEEL)
5263 .thread); 5267 .thread);
5264 host_impl_->ScrollBy(UpdateState(gfx::Point(), wheel_scroll_delta).get()); 5268 host_impl_->ScrollBy(UpdateState(gfx::Point(), wheel_scroll_delta).get());
5265 host_impl_->ScrollEnd(EndState().get()); 5269 host_impl_->ScrollEnd(EndState().get());
5266 5270
5267 // The layer should have scrolled down in its local coordinates. 5271 // The layer should have scrolled down in its local coordinates.
5268 scroll_info = host_impl_->ProcessScrollDeltas(); 5272 scroll_info = host_impl_->ProcessScrollDeltas();
5269 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), scroll_layer->id(), 5273 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), scroll_layer->id(),
5270 wheel_scroll_delta)); 5274 wheel_scroll_delta));
5271 } 5275 }
5272 5276
5273 TEST_F(LayerTreeHostImplTest, ScrollNonAxisAlignedRotatedLayer) { 5277 TEST_F(LayerTreeHostImplTest, ScrollNonAxisAlignedRotatedLayer) {
5274 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100)); 5278 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100));
5275 int child_clip_layer_id = 6; 5279 int child_clip_layer_id = 6;
5276 int child_layer_id = 7; 5280 int child_layer_id = 7;
5277 float child_layer_angle = -20.f; 5281 float child_layer_angle = -20.f;
5278 5282
5279 // Create a child layer that is rotated to a non-axis-aligned angle. 5283 // Create a child layer that is rotated to a non-axis-aligned angle.
5280 scoped_ptr<LayerImpl> clip_layer = 5284 std::unique_ptr<LayerImpl> clip_layer =
5281 LayerImpl::Create(host_impl_->active_tree(), child_clip_layer_id); 5285 LayerImpl::Create(host_impl_->active_tree(), child_clip_layer_id);
5282 scoped_ptr<LayerImpl> child = CreateScrollableLayer( 5286 std::unique_ptr<LayerImpl> child = CreateScrollableLayer(
5283 child_layer_id, scroll_layer->bounds(), clip_layer.get()); 5287 child_layer_id, scroll_layer->bounds(), clip_layer.get());
5284 gfx::Transform rotate_transform; 5288 gfx::Transform rotate_transform;
5285 rotate_transform.Translate(-50.0, -50.0); 5289 rotate_transform.Translate(-50.0, -50.0);
5286 rotate_transform.Rotate(child_layer_angle); 5290 rotate_transform.Rotate(child_layer_angle);
5287 rotate_transform.Translate(50.0, 50.0); 5291 rotate_transform.Translate(50.0, 50.0);
5288 clip_layer->SetTransform(rotate_transform); 5292 clip_layer->SetTransform(rotate_transform);
5289 5293
5290 // Only allow vertical scrolling. 5294 // Only allow vertical scrolling.
5291 clip_layer->SetBounds( 5295 clip_layer->SetBounds(
5292 gfx::Size(child->bounds().width(), child->bounds().height() / 2)); 5296 gfx::Size(child->bounds().width(), child->bounds().height() / 2));
(...skipping 19 matching lines...) Expand all
5312 InputHandler::TOUCHSCREEN) 5316 InputHandler::TOUCHSCREEN)
5313 .thread); 5317 .thread);
5314 host_impl_->ScrollBy(UpdateState(gfx::Point(), gesture_scroll_delta).get()); 5318 host_impl_->ScrollBy(UpdateState(gfx::Point(), gesture_scroll_delta).get());
5315 host_impl_->ScrollEnd(EndState().get()); 5319 host_impl_->ScrollEnd(EndState().get());
5316 5320
5317 // The child layer should have scrolled down in its local coordinates an 5321 // The child layer should have scrolled down in its local coordinates an
5318 // amount proportional to the angle between it and the input scroll delta. 5322 // amount proportional to the angle between it and the input scroll delta.
5319 gfx::Vector2d expected_scroll_delta( 5323 gfx::Vector2d expected_scroll_delta(
5320 0, gesture_scroll_delta.y() * 5324 0, gesture_scroll_delta.y() *
5321 std::cos(MathUtil::Deg2Rad(child_layer_angle))); 5325 std::cos(MathUtil::Deg2Rad(child_layer_angle)));
5322 scoped_ptr<ScrollAndScaleSet> scroll_info = 5326 std::unique_ptr<ScrollAndScaleSet> scroll_info =
5323 host_impl_->ProcessScrollDeltas(); 5327 host_impl_->ProcessScrollDeltas();
5324 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), child_layer_id, 5328 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), child_layer_id,
5325 expected_scroll_delta)); 5329 expected_scroll_delta));
5326 5330
5327 // The root scroll layer should not have scrolled, because the input delta 5331 // The root scroll layer should not have scrolled, because the input delta
5328 // was close to the layer's axis of movement. 5332 // was close to the layer's axis of movement.
5329 EXPECT_EQ(scroll_info->scrolls.size(), 1u); 5333 EXPECT_EQ(scroll_info->scrolls.size(), 1u);
5330 } 5334 }
5331 { 5335 {
5332 // Now reset and scroll the same amount horizontally. 5336 // Now reset and scroll the same amount horizontally.
5333 SetScrollOffsetDelta(child_ptr, gfx::Vector2dF()); 5337 SetScrollOffsetDelta(child_ptr, gfx::Vector2dF());
5334 gfx::Vector2d gesture_scroll_delta(10, 0); 5338 gfx::Vector2d gesture_scroll_delta(10, 0);
5335 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 5339 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
5336 host_impl_ 5340 host_impl_
5337 ->ScrollBegin(BeginState(gfx::Point(1, 1)).get(), 5341 ->ScrollBegin(BeginState(gfx::Point(1, 1)).get(),
5338 InputHandler::TOUCHSCREEN) 5342 InputHandler::TOUCHSCREEN)
5339 .thread); 5343 .thread);
5340 host_impl_->ScrollBy(UpdateState(gfx::Point(), gesture_scroll_delta).get()); 5344 host_impl_->ScrollBy(UpdateState(gfx::Point(), gesture_scroll_delta).get());
5341 host_impl_->ScrollEnd(EndState().get()); 5345 host_impl_->ScrollEnd(EndState().get());
5342 5346
5343 // The child layer shouldn't have scrolled. 5347 // The child layer shouldn't have scrolled.
5344 gfx::Vector2d expected_scroll_delta( 5348 gfx::Vector2d expected_scroll_delta(
5345 0, -gesture_scroll_delta.x() * 5349 0, -gesture_scroll_delta.x() *
5346 std::sin(MathUtil::Deg2Rad(child_layer_angle))); 5350 std::sin(MathUtil::Deg2Rad(child_layer_angle)));
5347 scoped_ptr<ScrollAndScaleSet> scroll_info = 5351 std::unique_ptr<ScrollAndScaleSet> scroll_info =
5348 host_impl_->ProcessScrollDeltas(); 5352 host_impl_->ProcessScrollDeltas();
5349 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), child_layer_id, 5353 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), child_layer_id,
5350 expected_scroll_delta)); 5354 expected_scroll_delta));
5351 5355
5352 // The root scroll layer shouldn't have scrolled. 5356 // The root scroll layer shouldn't have scrolled.
5353 ExpectNone(*scroll_info.get(), scroll_layer->id()); 5357 ExpectNone(*scroll_info.get(), scroll_layer->id());
5354 } 5358 }
5355 } 5359 }
5356 5360
5357 TEST_F(LayerTreeHostImplTest, ScrollPerspectiveTransformedLayer) { 5361 TEST_F(LayerTreeHostImplTest, ScrollPerspectiveTransformedLayer) {
5358 // When scrolling an element with perspective, the distance scrolled 5362 // When scrolling an element with perspective, the distance scrolled
5359 // depends on the point at which the scroll begins. 5363 // depends on the point at which the scroll begins.
5360 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100)); 5364 LayerImpl* scroll_layer = SetupScrollAndContentsLayers(gfx::Size(100, 100));
5361 int child_clip_layer_id = 6; 5365 int child_clip_layer_id = 6;
5362 int child_layer_id = 7; 5366 int child_layer_id = 7;
5363 5367
5364 // Create a child layer that is rotated on its x axis, with perspective. 5368 // Create a child layer that is rotated on its x axis, with perspective.
5365 scoped_ptr<LayerImpl> clip_layer = 5369 std::unique_ptr<LayerImpl> clip_layer =
5366 LayerImpl::Create(host_impl_->active_tree(), child_clip_layer_id); 5370 LayerImpl::Create(host_impl_->active_tree(), child_clip_layer_id);
5367 scoped_ptr<LayerImpl> child = CreateScrollableLayer( 5371 std::unique_ptr<LayerImpl> child = CreateScrollableLayer(
5368 child_layer_id, scroll_layer->bounds(), clip_layer.get()); 5372 child_layer_id, scroll_layer->bounds(), clip_layer.get());
5369 LayerImpl* child_ptr = child.get(); 5373 LayerImpl* child_ptr = child.get();
5370 gfx::Transform perspective_transform; 5374 gfx::Transform perspective_transform;
5371 perspective_transform.Translate(-50.0, -50.0); 5375 perspective_transform.Translate(-50.0, -50.0);
5372 perspective_transform.ApplyPerspectiveDepth(20); 5376 perspective_transform.ApplyPerspectiveDepth(20);
5373 perspective_transform.RotateAboutXAxis(45); 5377 perspective_transform.RotateAboutXAxis(45);
5374 perspective_transform.Translate(50.0, 50.0); 5378 perspective_transform.Translate(50.0, 50.0);
5375 clip_layer->SetTransform(perspective_transform); 5379 clip_layer->SetTransform(perspective_transform);
5376 5380
5377 clip_layer->SetBounds(gfx::Size(child_ptr->bounds().width() / 2, 5381 clip_layer->SetBounds(gfx::Size(child_ptr->bounds().width() / 2,
5378 child_ptr->bounds().height() / 2)); 5382 child_ptr->bounds().height() / 2));
5379 // The transform depends on the layer's transform origin, and the child layer 5383 // The transform depends on the layer's transform origin, and the child layer
5380 // is a different size than the clip, so make sure the clip layer's origin 5384 // is a different size than the clip, so make sure the clip layer's origin
5381 // lines up over the child. 5385 // lines up over the child.
5382 clip_layer->SetTransformOrigin(gfx::Point3F( 5386 clip_layer->SetTransformOrigin(gfx::Point3F(
5383 clip_layer->bounds().width(), clip_layer->bounds().height(), 0.f)); 5387 clip_layer->bounds().width(), clip_layer->bounds().height(), 0.f));
5384 clip_layer->AddChild(std::move(child)); 5388 clip_layer->AddChild(std::move(child));
5385 scroll_layer->AddChild(std::move(clip_layer)); 5389 scroll_layer->AddChild(std::move(clip_layer));
5386 5390
5387 gfx::Size surface_size(50, 50); 5391 gfx::Size surface_size(50, 50);
5388 host_impl_->SetViewportSize(surface_size); 5392 host_impl_->SetViewportSize(surface_size);
5389 5393
5390 scoped_ptr<ScrollAndScaleSet> scroll_info; 5394 std::unique_ptr<ScrollAndScaleSet> scroll_info;
5391 5395
5392 gfx::Vector2d gesture_scroll_deltas[4]; 5396 gfx::Vector2d gesture_scroll_deltas[4];
5393 gesture_scroll_deltas[0] = gfx::Vector2d(4, 10); 5397 gesture_scroll_deltas[0] = gfx::Vector2d(4, 10);
5394 gesture_scroll_deltas[1] = gfx::Vector2d(4, 10); 5398 gesture_scroll_deltas[1] = gfx::Vector2d(4, 10);
5395 gesture_scroll_deltas[2] = gfx::Vector2d(10, 0); 5399 gesture_scroll_deltas[2] = gfx::Vector2d(10, 0);
5396 gesture_scroll_deltas[3] = gfx::Vector2d(10, 0); 5400 gesture_scroll_deltas[3] = gfx::Vector2d(10, 0);
5397 5401
5398 gfx::Vector2d expected_scroll_deltas[4]; 5402 gfx::Vector2d expected_scroll_deltas[4];
5399 // Perspective affects the vertical delta by a different 5403 // Perspective affects the vertical delta by a different
5400 // amount depending on the vertical position of the |viewport_point|. 5404 // amount depending on the vertical position of the |viewport_point|.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
5454 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 5458 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
5455 host_impl_ 5459 host_impl_
5456 ->ScrollBegin(BeginState(gfx::Point()).get(), 5460 ->ScrollBegin(BeginState(gfx::Point()).get(),
5457 InputHandler::TOUCHSCREEN) 5461 InputHandler::TOUCHSCREEN)
5458 .thread); 5462 .thread);
5459 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()); 5463 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
5460 host_impl_->ScrollEnd(EndState().get()); 5464 host_impl_->ScrollEnd(EndState().get());
5461 5465
5462 // The layer should have scrolled down in its local coordinates, but half the 5466 // The layer should have scrolled down in its local coordinates, but half the
5463 // amount. 5467 // amount.
5464 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); 5468 std::unique_ptr<ScrollAndScaleSet> scroll_info =
5469 host_impl_->ProcessScrollDeltas();
5465 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), scroll_layer->id(), 5470 EXPECT_TRUE(ScrollInfoContains(*scroll_info.get(), scroll_layer->id(),
5466 gfx::Vector2d(0, scroll_delta.y() / scale))); 5471 gfx::Vector2d(0, scroll_delta.y() / scale)));
5467 5472
5468 // Reset and scroll down with the wheel. 5473 // Reset and scroll down with the wheel.
5469 SetScrollOffsetDelta(scroll_layer, gfx::Vector2dF()); 5474 SetScrollOffsetDelta(scroll_layer, gfx::Vector2dF());
5470 gfx::Vector2d wheel_scroll_delta(0, 10); 5475 gfx::Vector2d wheel_scroll_delta(0, 10);
5471 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 5476 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
5472 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), 5477 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
5473 InputHandler::WHEEL) 5478 InputHandler::WHEEL)
5474 .thread); 5479 .thread);
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
5825 5830
5826 host_impl_->ScrollEnd(EndState().get()); 5831 host_impl_->ScrollEnd(EndState().get());
5827 } 5832 }
5828 5833
5829 5834
5830 TEST_F(LayerTreeHostImplTest, OverscrollChildWithoutBubbling) { 5835 TEST_F(LayerTreeHostImplTest, OverscrollChildWithoutBubbling) {
5831 // Scroll child layers beyond their maximum scroll range and make sure root 5836 // Scroll child layers beyond their maximum scroll range and make sure root
5832 // overscroll does not accumulate. 5837 // overscroll does not accumulate.
5833 InputHandlerScrollResult scroll_result; 5838 InputHandlerScrollResult scroll_result;
5834 gfx::Size surface_size(10, 10); 5839 gfx::Size surface_size(10, 10);
5835 scoped_ptr<LayerImpl> root_clip = 5840 std::unique_ptr<LayerImpl> root_clip =
5836 LayerImpl::Create(host_impl_->active_tree(), 4); 5841 LayerImpl::Create(host_impl_->active_tree(), 4);
5837 root_clip->SetForceRenderSurface(true); 5842 root_clip->SetForceRenderSurface(true);
5838 5843
5839 scoped_ptr<LayerImpl> root = 5844 std::unique_ptr<LayerImpl> root =
5840 CreateScrollableLayer(1, surface_size, root_clip.get()); 5845 CreateScrollableLayer(1, surface_size, root_clip.get());
5841 5846
5842 scoped_ptr<LayerImpl> grand_child = 5847 std::unique_ptr<LayerImpl> grand_child =
5843 CreateScrollableLayer(3, surface_size, root_clip.get()); 5848 CreateScrollableLayer(3, surface_size, root_clip.get());
5844 5849
5845 scoped_ptr<LayerImpl> child = 5850 std::unique_ptr<LayerImpl> child =
5846 CreateScrollableLayer(2, surface_size, root_clip.get()); 5851 CreateScrollableLayer(2, surface_size, root_clip.get());
5847 LayerImpl* grand_child_layer = grand_child.get(); 5852 LayerImpl* grand_child_layer = grand_child.get();
5848 child->AddChild(std::move(grand_child)); 5853 child->AddChild(std::move(grand_child));
5849 5854
5850 LayerImpl* child_layer = child.get(); 5855 LayerImpl* child_layer = child.get();
5851 root->AddChild(std::move(child)); 5856 root->AddChild(std::move(child));
5852 root_clip->AddChild(std::move(root)); 5857 root_clip->AddChild(std::move(root));
5853 child_layer->layer_tree_impl() 5858 child_layer->layer_tree_impl()
5854 ->property_trees() 5859 ->property_trees()
5855 ->scroll_tree.UpdateScrollOffsetBaseForTesting(child_layer->id(), 5860 ->scroll_tree.UpdateScrollOffsetBaseForTesting(child_layer->id(),
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
6029 EXPECT_FALSE(scroll_result.did_scroll); 6034 EXPECT_FALSE(scroll_result.did_scroll);
6030 EXPECT_FALSE(scroll_result.did_overscroll_root); 6035 EXPECT_FALSE(scroll_result.did_overscroll_root);
6031 EXPECT_EQ(gfx::Vector2dF().ToString(), 6036 EXPECT_EQ(gfx::Vector2dF().ToString(),
6032 host_impl_->accumulated_root_overscroll().ToString()); 6037 host_impl_->accumulated_root_overscroll().ToString());
6033 host_impl_->ScrollEnd(EndState().get()); 6038 host_impl_->ScrollEnd(EndState().get());
6034 } 6039 }
6035 } 6040 }
6036 6041
6037 class BlendStateCheckLayer : public LayerImpl { 6042 class BlendStateCheckLayer : public LayerImpl {
6038 public: 6043 public:
6039 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, 6044 static std::unique_ptr<LayerImpl> Create(
6040 int id, 6045 LayerTreeImpl* tree_impl,
6041 ResourceProvider* resource_provider) { 6046 int id,
6042 return make_scoped_ptr( 6047 ResourceProvider* resource_provider) {
6048 return base::WrapUnique(
6043 new BlendStateCheckLayer(tree_impl, id, resource_provider)); 6049 new BlendStateCheckLayer(tree_impl, id, resource_provider));
6044 } 6050 }
6045 6051
6046 void AppendQuads(RenderPass* render_pass, 6052 void AppendQuads(RenderPass* render_pass,
6047 AppendQuadsData* append_quads_data) override { 6053 AppendQuadsData* append_quads_data) override {
6048 quads_appended_ = true; 6054 quads_appended_ = true;
6049 6055
6050 gfx::Rect opaque_rect; 6056 gfx::Rect opaque_rect;
6051 if (contents_opaque()) 6057 if (contents_opaque())
6052 opaque_rect = quad_rect_; 6058 opaque_rect = quad_rect_;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
6111 bool has_render_surface_; 6117 bool has_render_surface_;
6112 bool quads_appended_; 6118 bool quads_appended_;
6113 gfx::Rect quad_rect_; 6119 gfx::Rect quad_rect_;
6114 gfx::Rect opaque_content_rect_; 6120 gfx::Rect opaque_content_rect_;
6115 gfx::Rect quad_visible_rect_; 6121 gfx::Rect quad_visible_rect_;
6116 ResourceId resource_id_; 6122 ResourceId resource_id_;
6117 }; 6123 };
6118 6124
6119 TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) { 6125 TEST_F(LayerTreeHostImplTest, BlendingOffWhenDrawingOpaqueLayers) {
6120 { 6126 {
6121 scoped_ptr<LayerImpl> root = 6127 std::unique_ptr<LayerImpl> root =
6122 LayerImpl::Create(host_impl_->active_tree(), 1); 6128 LayerImpl::Create(host_impl_->active_tree(), 1);
6123 root->SetBounds(gfx::Size(10, 10)); 6129 root->SetBounds(gfx::Size(10, 10));
6124 root->SetDrawsContent(false); 6130 root->SetDrawsContent(false);
6125 root->SetForceRenderSurface(true); 6131 root->SetForceRenderSurface(true);
6126 host_impl_->active_tree()->SetRootLayer(std::move(root)); 6132 host_impl_->active_tree()->SetRootLayer(std::move(root));
6127 } 6133 }
6128 LayerImpl* root = host_impl_->active_tree()->root_layer(); 6134 LayerImpl* root = host_impl_->active_tree()->root_layer();
6129 6135
6130 root->AddChild( 6136 root->AddChild(
6131 BlendStateCheckLayer::Create(host_impl_->active_tree(), 6137 BlendStateCheckLayer::Create(host_impl_->active_tree(),
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
6369 host_impl_->DidDrawAllLayers(frame); 6375 host_impl_->DidDrawAllLayers(frame);
6370 } 6376 }
6371 6377
6372 class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest { 6378 class LayerTreeHostImplViewportCoveredTest : public LayerTreeHostImplTest {
6373 protected: 6379 protected:
6374 LayerTreeHostImplViewportCoveredTest() : 6380 LayerTreeHostImplViewportCoveredTest() :
6375 gutter_quad_material_(DrawQuad::SOLID_COLOR), 6381 gutter_quad_material_(DrawQuad::SOLID_COLOR),
6376 child_(NULL), 6382 child_(NULL),
6377 did_activate_pending_tree_(false) {} 6383 did_activate_pending_tree_(false) {}
6378 6384
6379 scoped_ptr<OutputSurface> CreateFakeOutputSurface(bool software) { 6385 std::unique_ptr<OutputSurface> CreateFakeOutputSurface(bool software) {
6380 if (software) { 6386 if (software) {
6381 return FakeOutputSurface::CreateSoftware( 6387 return FakeOutputSurface::CreateSoftware(
6382 make_scoped_ptr(new SoftwareOutputDevice())); 6388 base::WrapUnique(new SoftwareOutputDevice()));
6383 } 6389 }
6384 return FakeOutputSurface::Create3d(); 6390 return FakeOutputSurface::Create3d();
6385 } 6391 }
6386 6392
6387 void SetupActiveTreeLayers() { 6393 void SetupActiveTreeLayers() {
6388 host_impl_->active_tree()->set_background_color(SK_ColorGRAY); 6394 host_impl_->active_tree()->set_background_color(SK_ColorGRAY);
6389 host_impl_->active_tree()->SetRootLayer( 6395 host_impl_->active_tree()->SetRootLayer(
6390 LayerImpl::Create(host_impl_->active_tree(), 1)); 6396 LayerImpl::Create(host_impl_->active_tree(), 1));
6391 host_impl_->active_tree()->root_layer()->SetForceRenderSurface(true); 6397 host_impl_->active_tree()->root_layer()->SetForceRenderSurface(true);
6392 host_impl_->active_tree()->root_layer()->AddChild( 6398 host_impl_->active_tree()->root_layer()->AddChild(
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
6663 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); 6669 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid());
6664 6670
6665 SetupActiveTreeLayers(); 6671 SetupActiveTreeLayers();
6666 EXPECT_SCOPED(TestEmptyLayerWithOnDraw()); 6672 EXPECT_SCOPED(TestEmptyLayerWithOnDraw());
6667 EXPECT_SCOPED(TestLayerInMiddleOfViewportWithOnDraw()); 6673 EXPECT_SCOPED(TestLayerInMiddleOfViewportWithOnDraw());
6668 EXPECT_SCOPED(TestLayerIsLargerThanViewportWithOnDraw()); 6674 EXPECT_SCOPED(TestLayerIsLargerThanViewportWithOnDraw());
6669 } 6675 }
6670 6676
6671 class FakeDrawableLayerImpl: public LayerImpl { 6677 class FakeDrawableLayerImpl: public LayerImpl {
6672 public: 6678 public:
6673 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { 6679 static std::unique_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
6674 return make_scoped_ptr(new FakeDrawableLayerImpl(tree_impl, id)); 6680 return base::WrapUnique(new FakeDrawableLayerImpl(tree_impl, id));
6675 } 6681 }
6676 protected: 6682 protected:
6677 FakeDrawableLayerImpl(LayerTreeImpl* tree_impl, int id) 6683 FakeDrawableLayerImpl(LayerTreeImpl* tree_impl, int id)
6678 : LayerImpl(tree_impl, id) {} 6684 : LayerImpl(tree_impl, id) {}
6679 }; 6685 };
6680 6686
6681 // Only reshape when we know we are going to draw. Otherwise, the reshape 6687 // Only reshape when we know we are going to draw. Otherwise, the reshape
6682 // can leave the window at the wrong size if we never draw and the proper 6688 // can leave the window at the wrong size if we never draw and the proper
6683 // viewport size is never set. 6689 // viewport size is never set.
6684 TEST_F(LayerTreeHostImplTest, ReshapeNotCalledUntilDraw) { 6690 TEST_F(LayerTreeHostImplTest, ReshapeNotCalledUntilDraw) {
6685 scoped_refptr<TestContextProvider> provider(TestContextProvider::Create()); 6691 scoped_refptr<TestContextProvider> provider(TestContextProvider::Create());
6686 scoped_ptr<OutputSurface> output_surface( 6692 std::unique_ptr<OutputSurface> output_surface(
6687 FakeOutputSurface::Create3d(provider)); 6693 FakeOutputSurface::Create3d(provider));
6688 CreateHostImpl(DefaultSettings(), std::move(output_surface)); 6694 CreateHostImpl(DefaultSettings(), std::move(output_surface));
6689 6695
6690 scoped_ptr<LayerImpl> root = 6696 std::unique_ptr<LayerImpl> root =
6691 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1); 6697 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1);
6692 root->SetBounds(gfx::Size(10, 10)); 6698 root->SetBounds(gfx::Size(10, 10));
6693 root->SetDrawsContent(true); 6699 root->SetDrawsContent(true);
6694 root->SetForceRenderSurface(true); 6700 root->SetForceRenderSurface(true);
6695 host_impl_->active_tree()->SetRootLayer(std::move(root)); 6701 host_impl_->active_tree()->SetRootLayer(std::move(root));
6696 EXPECT_FALSE(provider->TestContext3d()->reshape_called()); 6702 EXPECT_FALSE(provider->TestContext3d()->reshape_called());
6697 provider->TestContext3d()->clear_reshape_called(); 6703 provider->TestContext3d()->clear_reshape_called();
6698 6704
6699 LayerTreeHostImpl::FrameData frame; 6705 LayerTreeHostImpl::FrameData frame;
6700 host_impl_->SetViewportSize(gfx::Size(10, 10)); 6706 host_impl_->SetViewportSize(gfx::Size(10, 10));
(...skipping 29 matching lines...) Expand all
6730 } 6736 }
6731 6737
6732 // Make sure damage tracking propagates all the way to the graphics context, 6738 // Make sure damage tracking propagates all the way to the graphics context,
6733 // where it should request to swap only the sub-buffer that is damaged. 6739 // where it should request to swap only the sub-buffer that is damaged.
6734 TEST_F(LayerTreeHostImplTest, PartialSwapReceivesDamageRect) { 6740 TEST_F(LayerTreeHostImplTest, PartialSwapReceivesDamageRect) {
6735 scoped_refptr<TestContextProvider> context_provider( 6741 scoped_refptr<TestContextProvider> context_provider(
6736 TestContextProvider::Create()); 6742 TestContextProvider::Create());
6737 context_provider->BindToCurrentThread(); 6743 context_provider->BindToCurrentThread();
6738 context_provider->TestContext3d()->set_have_post_sub_buffer(true); 6744 context_provider->TestContext3d()->set_have_post_sub_buffer(true);
6739 6745
6740 scoped_ptr<FakeOutputSurface> output_surface( 6746 std::unique_ptr<FakeOutputSurface> output_surface(
6741 FakeOutputSurface::Create3d(context_provider)); 6747 FakeOutputSurface::Create3d(context_provider));
6742 FakeOutputSurface* fake_output_surface = output_surface.get(); 6748 FakeOutputSurface* fake_output_surface = output_surface.get();
6743 6749
6744 // This test creates its own LayerTreeHostImpl, so 6750 // This test creates its own LayerTreeHostImpl, so
6745 // that we can force partial swap enabled. 6751 // that we can force partial swap enabled.
6746 LayerTreeSettings settings = DefaultSettings(); 6752 LayerTreeSettings settings = DefaultSettings();
6747 settings.renderer_settings.partial_swap_enabled = true; 6753 settings.renderer_settings.partial_swap_enabled = true;
6748 scoped_ptr<LayerTreeHostImpl> layer_tree_host_impl = 6754 std::unique_ptr<LayerTreeHostImpl> layer_tree_host_impl =
6749 LayerTreeHostImpl::Create( 6755 LayerTreeHostImpl::Create(
6750 settings, this, &task_runner_provider_, &stats_instrumentation_, 6756 settings, this, &task_runner_provider_, &stats_instrumentation_,
6751 &shared_bitmap_manager_, NULL, &task_graph_runner_, 0); 6757 &shared_bitmap_manager_, NULL, &task_graph_runner_, 0);
6752 layer_tree_host_impl->SetVisible(true); 6758 layer_tree_host_impl->SetVisible(true);
6753 layer_tree_host_impl->InitializeRenderer(output_surface.get()); 6759 layer_tree_host_impl->InitializeRenderer(output_surface.get());
6754 layer_tree_host_impl->WillBeginImplFrame( 6760 layer_tree_host_impl->WillBeginImplFrame(
6755 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 6761 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
6756 layer_tree_host_impl->SetViewportSize(gfx::Size(500, 500)); 6762 layer_tree_host_impl->SetViewportSize(gfx::Size(500, 500));
6757 6763
6758 scoped_ptr<LayerImpl> root = 6764 std::unique_ptr<LayerImpl> root =
6759 FakeDrawableLayerImpl::Create(layer_tree_host_impl->active_tree(), 1); 6765 FakeDrawableLayerImpl::Create(layer_tree_host_impl->active_tree(), 1);
6760 root->SetForceRenderSurface(true); 6766 root->SetForceRenderSurface(true);
6761 scoped_ptr<LayerImpl> child = 6767 std::unique_ptr<LayerImpl> child =
6762 FakeDrawableLayerImpl::Create(layer_tree_host_impl->active_tree(), 2); 6768 FakeDrawableLayerImpl::Create(layer_tree_host_impl->active_tree(), 2);
6763 child->SetPosition(gfx::PointF(12.f, 13.f)); 6769 child->SetPosition(gfx::PointF(12.f, 13.f));
6764 child->SetBounds(gfx::Size(14, 15)); 6770 child->SetBounds(gfx::Size(14, 15));
6765 child->SetDrawsContent(true); 6771 child->SetDrawsContent(true);
6766 root->SetBounds(gfx::Size(500, 500)); 6772 root->SetBounds(gfx::Size(500, 500));
6767 root->SetDrawsContent(true); 6773 root->SetDrawsContent(true);
6768 root->AddChild(std::move(child)); 6774 root->AddChild(std::move(child));
6769 layer_tree_host_impl->active_tree()->SetRootLayer(std::move(root)); 6775 layer_tree_host_impl->active_tree()->SetRootLayer(std::move(root));
6770 6776
6771 LayerTreeHostImpl::FrameData frame; 6777 LayerTreeHostImpl::FrameData frame;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
6812 layer_tree_host_impl->DrawLayers(&frame); 6818 layer_tree_host_impl->DrawLayers(&frame);
6813 host_impl_->DidDrawAllLayers(frame); 6819 host_impl_->DidDrawAllLayers(frame);
6814 layer_tree_host_impl->SwapBuffers(frame); 6820 layer_tree_host_impl->SwapBuffers(frame);
6815 6821
6816 expected_swap_rect = gfx::Rect(0, 0, 10, 10); 6822 expected_swap_rect = gfx::Rect(0, 0, 10, 10);
6817 EXPECT_EQ(expected_swap_rect.ToString(), 6823 EXPECT_EQ(expected_swap_rect.ToString(),
6818 fake_output_surface->last_swap_rect().ToString()); 6824 fake_output_surface->last_swap_rect().ToString());
6819 } 6825 }
6820 6826
6821 TEST_F(LayerTreeHostImplTest, RootLayerDoesntCreateExtraSurface) { 6827 TEST_F(LayerTreeHostImplTest, RootLayerDoesntCreateExtraSurface) {
6822 scoped_ptr<LayerImpl> root = 6828 std::unique_ptr<LayerImpl> root =
6823 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1); 6829 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1);
6824 scoped_ptr<LayerImpl> child = 6830 std::unique_ptr<LayerImpl> child =
6825 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 2); 6831 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 2);
6826 child->SetBounds(gfx::Size(10, 10)); 6832 child->SetBounds(gfx::Size(10, 10));
6827 child->SetDrawsContent(true); 6833 child->SetDrawsContent(true);
6828 root->SetBounds(gfx::Size(10, 10)); 6834 root->SetBounds(gfx::Size(10, 10));
6829 root->SetDrawsContent(true); 6835 root->SetDrawsContent(true);
6830 root->SetForceRenderSurface(true); 6836 root->SetForceRenderSurface(true);
6831 root->AddChild(std::move(child)); 6837 root->AddChild(std::move(child));
6832 6838
6833 host_impl_->active_tree()->SetRootLayer(std::move(root)); 6839 host_impl_->active_tree()->SetRootLayer(std::move(root));
6834 6840
6835 LayerTreeHostImpl::FrameData frame; 6841 LayerTreeHostImpl::FrameData frame;
6836 6842
6837 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); 6843 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame));
6838 EXPECT_EQ(1u, frame.render_surface_layer_list->size()); 6844 EXPECT_EQ(1u, frame.render_surface_layer_list->size());
6839 EXPECT_EQ(1u, frame.render_passes.size()); 6845 EXPECT_EQ(1u, frame.render_passes.size());
6840 host_impl_->DidDrawAllLayers(frame); 6846 host_impl_->DidDrawAllLayers(frame);
6841 } 6847 }
6842 6848
6843 class FakeLayerWithQuads : public LayerImpl { 6849 class FakeLayerWithQuads : public LayerImpl {
6844 public: 6850 public:
6845 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { 6851 static std::unique_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
6846 return make_scoped_ptr(new FakeLayerWithQuads(tree_impl, id)); 6852 return base::WrapUnique(new FakeLayerWithQuads(tree_impl, id));
6847 } 6853 }
6848 6854
6849 void AppendQuads(RenderPass* render_pass, 6855 void AppendQuads(RenderPass* render_pass,
6850 AppendQuadsData* append_quads_data) override { 6856 AppendQuadsData* append_quads_data) override {
6851 SharedQuadState* shared_quad_state = 6857 SharedQuadState* shared_quad_state =
6852 render_pass->CreateAndAppendSharedQuadState(); 6858 render_pass->CreateAndAppendSharedQuadState();
6853 PopulateSharedQuadState(shared_quad_state); 6859 PopulateSharedQuadState(shared_quad_state);
6854 6860
6855 SkColor gray = SkColorSetRGB(100, 100, 100); 6861 SkColor gray = SkColorSetRGB(100, 100, 100);
6856 gfx::Rect quad_rect(bounds()); 6862 gfx::Rect quad_rect(bounds());
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
6947 6953
6948 EXPECT_CALL(*context_, enable(GL_SCISSOR_TEST)) 6954 EXPECT_CALL(*context_, enable(GL_SCISSOR_TEST))
6949 .Times(0); 6955 .Times(0);
6950 6956
6951 EXPECT_CALL(*context_, scissor(_, _, _, _)) 6957 EXPECT_CALL(*context_, scissor(_, _, _, _))
6952 .Times(0); 6958 .Times(0);
6953 } 6959 }
6954 }; 6960 };
6955 6961
6956 TEST_F(LayerTreeHostImplTest, NoPartialSwap) { 6962 TEST_F(LayerTreeHostImplTest, NoPartialSwap) {
6957 scoped_ptr<MockContext> mock_context_owned(new MockContext); 6963 std::unique_ptr<MockContext> mock_context_owned(new MockContext);
6958 MockContext* mock_context = mock_context_owned.get(); 6964 MockContext* mock_context = mock_context_owned.get();
6959 MockContextHarness harness(mock_context); 6965 MockContextHarness harness(mock_context);
6960 6966
6961 // Run test case 6967 // Run test case
6962 LayerTreeSettings settings = DefaultSettings(); 6968 LayerTreeSettings settings = DefaultSettings();
6963 settings.renderer_settings.partial_swap_enabled = false; 6969 settings.renderer_settings.partial_swap_enabled = false;
6964 CreateHostImpl(settings, 6970 CreateHostImpl(settings,
6965 FakeOutputSurface::Create3d(std::move(mock_context_owned))); 6971 FakeOutputSurface::Create3d(std::move(mock_context_owned)));
6966 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); 6972 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1));
6967 6973
(...skipping 19 matching lines...) Expand all
6987 LayerTreeHostImpl::FrameData frame; 6993 LayerTreeHostImpl::FrameData frame;
6988 SetNeedsRebuildPropertyTrees(); 6994 SetNeedsRebuildPropertyTrees();
6989 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); 6995 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame));
6990 host_impl_->DrawLayers(&frame); 6996 host_impl_->DrawLayers(&frame);
6991 host_impl_->DidDrawAllLayers(frame); 6997 host_impl_->DidDrawAllLayers(frame);
6992 } 6998 }
6993 Mock::VerifyAndClearExpectations(&mock_context); 6999 Mock::VerifyAndClearExpectations(&mock_context);
6994 } 7000 }
6995 7001
6996 TEST_F(LayerTreeHostImplTest, PartialSwap) { 7002 TEST_F(LayerTreeHostImplTest, PartialSwap) {
6997 scoped_ptr<MockContext> context_owned(new MockContext); 7003 std::unique_ptr<MockContext> context_owned(new MockContext);
6998 MockContext* mock_context = context_owned.get(); 7004 MockContext* mock_context = context_owned.get();
6999 MockContextHarness harness(mock_context); 7005 MockContextHarness harness(mock_context);
7000 7006
7001 LayerTreeSettings settings = DefaultSettings(); 7007 LayerTreeSettings settings = DefaultSettings();
7002 settings.renderer_settings.partial_swap_enabled = true; 7008 settings.renderer_settings.partial_swap_enabled = true;
7003 CreateHostImpl(settings, 7009 CreateHostImpl(settings,
7004 FakeOutputSurface::Create3d(std::move(context_owned))); 7010 FakeOutputSurface::Create3d(std::move(context_owned)));
7005 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1)); 7011 SetupRootLayerImpl(FakeLayerWithQuads::Create(host_impl_->active_tree(), 1));
7006 7012
7007 // The first frame is not a partially-swapped one. No scissor should be set. 7013 // The first frame is not a partially-swapped one. No scissor should be set.
(...skipping 16 matching lines...) Expand all
7024 harness.MustDrawSolidQuad(); 7030 harness.MustDrawSolidQuad();
7025 { 7031 {
7026 LayerTreeHostImpl::FrameData frame; 7032 LayerTreeHostImpl::FrameData frame;
7027 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); 7033 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame));
7028 host_impl_->DrawLayers(&frame); 7034 host_impl_->DrawLayers(&frame);
7029 host_impl_->DidDrawAllLayers(frame); 7035 host_impl_->DidDrawAllLayers(frame);
7030 } 7036 }
7031 Mock::VerifyAndClearExpectations(&mock_context); 7037 Mock::VerifyAndClearExpectations(&mock_context);
7032 } 7038 }
7033 7039
7034 static scoped_ptr<LayerTreeHostImpl> SetupLayersForOpacity( 7040 static std::unique_ptr<LayerTreeHostImpl> SetupLayersForOpacity(
7035 LayerTreeSettings settings, 7041 LayerTreeSettings settings,
7036 bool partial_swap, 7042 bool partial_swap,
7037 LayerTreeHostImplClient* client, 7043 LayerTreeHostImplClient* client,
7038 TaskRunnerProvider* task_runner_provider, 7044 TaskRunnerProvider* task_runner_provider,
7039 SharedBitmapManager* manager, 7045 SharedBitmapManager* manager,
7040 TaskGraphRunner* task_graph_runner, 7046 TaskGraphRunner* task_graph_runner,
7041 RenderingStatsInstrumentation* stats_instrumentation, 7047 RenderingStatsInstrumentation* stats_instrumentation,
7042 OutputSurface* output_surface) { 7048 OutputSurface* output_surface) {
7043 settings.renderer_settings.partial_swap_enabled = partial_swap; 7049 settings.renderer_settings.partial_swap_enabled = partial_swap;
7044 scoped_ptr<LayerTreeHostImpl> my_host_impl = LayerTreeHostImpl::Create( 7050 std::unique_ptr<LayerTreeHostImpl> my_host_impl = LayerTreeHostImpl::Create(
7045 settings, client, task_runner_provider, stats_instrumentation, manager, 7051 settings, client, task_runner_provider, stats_instrumentation, manager,
7046 nullptr, task_graph_runner, 0); 7052 nullptr, task_graph_runner, 0);
7047 my_host_impl->SetVisible(true); 7053 my_host_impl->SetVisible(true);
7048 my_host_impl->InitializeRenderer(output_surface); 7054 my_host_impl->InitializeRenderer(output_surface);
7049 my_host_impl->WillBeginImplFrame( 7055 my_host_impl->WillBeginImplFrame(
7050 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 7056 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE));
7051 my_host_impl->SetViewportSize(gfx::Size(100, 100)); 7057 my_host_impl->SetViewportSize(gfx::Size(100, 100));
7052 7058
7053 /* 7059 /*
7054 Layers are created as follows: 7060 Layers are created as follows:
7055 7061
7056 +--------------------+ 7062 +--------------------+
7057 | 1 | 7063 | 1 |
7058 | +-----------+ | 7064 | +-----------+ |
7059 | | 2 | | 7065 | | 2 | |
7060 | | +-------------------+ 7066 | | +-------------------+
7061 | | | 3 | 7067 | | | 3 |
7062 | | +-------------------+ 7068 | | +-------------------+
7063 | | | | 7069 | | | |
7064 | +-----------+ | 7070 | +-----------+ |
7065 | | 7071 | |
7066 | | 7072 | |
7067 +--------------------+ 7073 +--------------------+
7068 7074
7069 Layers 1, 2 have render surfaces 7075 Layers 1, 2 have render surfaces
7070 */ 7076 */
7071 scoped_ptr<LayerImpl> root = 7077 std::unique_ptr<LayerImpl> root =
7072 LayerImpl::Create(my_host_impl->active_tree(), 1); 7078 LayerImpl::Create(my_host_impl->active_tree(), 1);
7073 scoped_ptr<LayerImpl> child = 7079 std::unique_ptr<LayerImpl> child =
7074 LayerImpl::Create(my_host_impl->active_tree(), 2); 7080 LayerImpl::Create(my_host_impl->active_tree(), 2);
7075 scoped_ptr<LayerImpl> grand_child = 7081 std::unique_ptr<LayerImpl> grand_child =
7076 FakeLayerWithQuads::Create(my_host_impl->active_tree(), 3); 7082 FakeLayerWithQuads::Create(my_host_impl->active_tree(), 3);
7077 7083
7078 gfx::Rect root_rect(0, 0, 100, 100); 7084 gfx::Rect root_rect(0, 0, 100, 100);
7079 gfx::Rect child_rect(10, 10, 50, 50); 7085 gfx::Rect child_rect(10, 10, 50, 50);
7080 gfx::Rect grand_child_rect(5, 5, 150, 150); 7086 gfx::Rect grand_child_rect(5, 5, 150, 150);
7081 7087
7082 root->SetForceRenderSurface(true); 7088 root->SetForceRenderSurface(true);
7083 root->SetPosition(gfx::PointF(root_rect.origin())); 7089 root->SetPosition(gfx::PointF(root_rect.origin()));
7084 root->SetBounds(root_rect.size()); 7090 root->SetBounds(root_rect.size());
7085 root->draw_properties().visible_layer_rect = root_rect; 7091 root->draw_properties().visible_layer_rect = root_rect;
(...skipping 18 matching lines...) Expand all
7104 my_host_impl->active_tree()->BuildPropertyTreesForTesting(); 7110 my_host_impl->active_tree()->BuildPropertyTreesForTesting();
7105 return my_host_impl; 7111 return my_host_impl;
7106 } 7112 }
7107 7113
7108 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorPartialSwap) { 7114 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorPartialSwap) {
7109 TestSharedBitmapManager shared_bitmap_manager; 7115 TestSharedBitmapManager shared_bitmap_manager;
7110 TestTaskGraphRunner task_graph_runner; 7116 TestTaskGraphRunner task_graph_runner;
7111 scoped_refptr<TestContextProvider> provider(TestContextProvider::Create()); 7117 scoped_refptr<TestContextProvider> provider(TestContextProvider::Create());
7112 provider->BindToCurrentThread(); 7118 provider->BindToCurrentThread();
7113 provider->TestContext3d()->set_have_post_sub_buffer(true); 7119 provider->TestContext3d()->set_have_post_sub_buffer(true);
7114 scoped_ptr<OutputSurface> output_surface( 7120 std::unique_ptr<OutputSurface> output_surface(
7115 FakeOutputSurface::Create3d(provider)); 7121 FakeOutputSurface::Create3d(provider));
7116 scoped_ptr<LayerTreeHostImpl> my_host_impl = SetupLayersForOpacity( 7122 std::unique_ptr<LayerTreeHostImpl> my_host_impl = SetupLayersForOpacity(
7117 DefaultSettings(), true, this, &task_runner_provider_, 7123 DefaultSettings(), true, this, &task_runner_provider_,
7118 &shared_bitmap_manager, &task_graph_runner, &stats_instrumentation_, 7124 &shared_bitmap_manager, &task_graph_runner, &stats_instrumentation_,
7119 output_surface.get()); 7125 output_surface.get());
7120 { 7126 {
7121 LayerTreeHostImpl::FrameData frame; 7127 LayerTreeHostImpl::FrameData frame;
7122 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame)); 7128 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame));
7123 7129
7124 // Verify all quads have been computed 7130 // Verify all quads have been computed
7125 ASSERT_EQ(2U, frame.render_passes.size()); 7131 ASSERT_EQ(2U, frame.render_passes.size());
7126 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); 7132 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size());
7127 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); 7133 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size());
7128 EXPECT_EQ(DrawQuad::SOLID_COLOR, 7134 EXPECT_EQ(DrawQuad::SOLID_COLOR,
7129 frame.render_passes[0]->quad_list.front()->material); 7135 frame.render_passes[0]->quad_list.front()->material);
7130 EXPECT_EQ(DrawQuad::RENDER_PASS, 7136 EXPECT_EQ(DrawQuad::RENDER_PASS,
7131 frame.render_passes[1]->quad_list.front()->material); 7137 frame.render_passes[1]->quad_list.front()->material);
7132 7138
7133 my_host_impl->DrawLayers(&frame); 7139 my_host_impl->DrawLayers(&frame);
7134 my_host_impl->DidDrawAllLayers(frame); 7140 my_host_impl->DidDrawAllLayers(frame);
7135 } 7141 }
7136 } 7142 }
7137 7143
7138 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) { 7144 TEST_F(LayerTreeHostImplTest, ContributingLayerEmptyScissorNoPartialSwap) {
7139 TestSharedBitmapManager shared_bitmap_manager; 7145 TestSharedBitmapManager shared_bitmap_manager;
7140 TestTaskGraphRunner task_graph_runner; 7146 TestTaskGraphRunner task_graph_runner;
7141 scoped_refptr<TestContextProvider> provider(TestContextProvider::Create()); 7147 scoped_refptr<TestContextProvider> provider(TestContextProvider::Create());
7142 provider->BindToCurrentThread(); 7148 provider->BindToCurrentThread();
7143 provider->TestContext3d()->set_have_post_sub_buffer(true); 7149 provider->TestContext3d()->set_have_post_sub_buffer(true);
7144 scoped_ptr<OutputSurface> output_surface( 7150 std::unique_ptr<OutputSurface> output_surface(
7145 FakeOutputSurface::Create3d(provider)); 7151 FakeOutputSurface::Create3d(provider));
7146 scoped_ptr<LayerTreeHostImpl> my_host_impl = SetupLayersForOpacity( 7152 std::unique_ptr<LayerTreeHostImpl> my_host_impl = SetupLayersForOpacity(
7147 DefaultSettings(), false, this, &task_runner_provider_, 7153 DefaultSettings(), false, this, &task_runner_provider_,
7148 &shared_bitmap_manager, &task_graph_runner, &stats_instrumentation_, 7154 &shared_bitmap_manager, &task_graph_runner, &stats_instrumentation_,
7149 output_surface.get()); 7155 output_surface.get());
7150 { 7156 {
7151 LayerTreeHostImpl::FrameData frame; 7157 LayerTreeHostImpl::FrameData frame;
7152 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame)); 7158 EXPECT_EQ(DRAW_SUCCESS, my_host_impl->PrepareToDraw(&frame));
7153 7159
7154 // Verify all quads have been computed 7160 // Verify all quads have been computed
7155 ASSERT_EQ(2U, frame.render_passes.size()); 7161 ASSERT_EQ(2U, frame.render_passes.size());
7156 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size()); 7162 ASSERT_EQ(1U, frame.render_passes[0]->quad_list.size());
7157 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size()); 7163 ASSERT_EQ(1U, frame.render_passes[1]->quad_list.size());
7158 EXPECT_EQ(DrawQuad::SOLID_COLOR, 7164 EXPECT_EQ(DrawQuad::SOLID_COLOR,
7159 frame.render_passes[0]->quad_list.front()->material); 7165 frame.render_passes[0]->quad_list.front()->material);
7160 EXPECT_EQ(DrawQuad::RENDER_PASS, 7166 EXPECT_EQ(DrawQuad::RENDER_PASS,
7161 frame.render_passes[1]->quad_list.front()->material); 7167 frame.render_passes[1]->quad_list.front()->material);
7162 7168
7163 my_host_impl->DrawLayers(&frame); 7169 my_host_impl->DrawLayers(&frame);
7164 my_host_impl->DidDrawAllLayers(frame); 7170 my_host_impl->DidDrawAllLayers(frame);
7165 } 7171 }
7166 } 7172 }
7167 7173
7168 TEST_F(LayerTreeHostImplTest, LayersFreeTextures) { 7174 TEST_F(LayerTreeHostImplTest, LayersFreeTextures) {
7169 scoped_ptr<TestWebGraphicsContext3D> context = 7175 std::unique_ptr<TestWebGraphicsContext3D> context =
7170 TestWebGraphicsContext3D::Create(); 7176 TestWebGraphicsContext3D::Create();
7171 TestWebGraphicsContext3D* context3d = context.get(); 7177 TestWebGraphicsContext3D* context3d = context.get();
7172 scoped_ptr<OutputSurface> output_surface( 7178 std::unique_ptr<OutputSurface> output_surface(
7173 FakeOutputSurface::Create3d(std::move(context))); 7179 FakeOutputSurface::Create3d(std::move(context)));
7174 CreateHostImpl(DefaultSettings(), std::move(output_surface)); 7180 CreateHostImpl(DefaultSettings(), std::move(output_surface));
7175 7181
7176 scoped_ptr<LayerImpl> root_layer = 7182 std::unique_ptr<LayerImpl> root_layer =
7177 LayerImpl::Create(host_impl_->active_tree(), 1); 7183 LayerImpl::Create(host_impl_->active_tree(), 1);
7178 root_layer->SetBounds(gfx::Size(10, 10)); 7184 root_layer->SetBounds(gfx::Size(10, 10));
7179 root_layer->SetForceRenderSurface(true); 7185 root_layer->SetForceRenderSurface(true);
7180 7186
7181 scoped_refptr<VideoFrame> softwareFrame = 7187 scoped_refptr<VideoFrame> softwareFrame =
7182 media::VideoFrame::CreateColorFrame( 7188 media::VideoFrame::CreateColorFrame(
7183 gfx::Size(4, 4), 0x80, 0x80, 0x80, base::TimeDelta()); 7189 gfx::Size(4, 4), 0x80, 0x80, 0x80, base::TimeDelta());
7184 FakeVideoFrameProvider provider; 7190 FakeVideoFrameProvider provider;
7185 provider.set_frame(softwareFrame); 7191 provider.set_frame(softwareFrame);
7186 scoped_ptr<VideoLayerImpl> video_layer = VideoLayerImpl::Create( 7192 std::unique_ptr<VideoLayerImpl> video_layer = VideoLayerImpl::Create(
7187 host_impl_->active_tree(), 4, &provider, media::VIDEO_ROTATION_0); 7193 host_impl_->active_tree(), 4, &provider, media::VIDEO_ROTATION_0);
7188 video_layer->SetBounds(gfx::Size(10, 10)); 7194 video_layer->SetBounds(gfx::Size(10, 10));
7189 video_layer->SetDrawsContent(true); 7195 video_layer->SetDrawsContent(true);
7190 root_layer->AddChild(std::move(video_layer)); 7196 root_layer->AddChild(std::move(video_layer));
7191 7197
7192 scoped_ptr<IOSurfaceLayerImpl> io_surface_layer = 7198 std::unique_ptr<IOSurfaceLayerImpl> io_surface_layer =
7193 IOSurfaceLayerImpl::Create(host_impl_->active_tree(), 5); 7199 IOSurfaceLayerImpl::Create(host_impl_->active_tree(), 5);
7194 io_surface_layer->SetBounds(gfx::Size(10, 10)); 7200 io_surface_layer->SetBounds(gfx::Size(10, 10));
7195 io_surface_layer->SetDrawsContent(true); 7201 io_surface_layer->SetDrawsContent(true);
7196 io_surface_layer->SetIOSurfaceProperties(1, gfx::Size(10, 10)); 7202 io_surface_layer->SetIOSurfaceProperties(1, gfx::Size(10, 10));
7197 root_layer->AddChild(std::move(io_surface_layer)); 7203 root_layer->AddChild(std::move(io_surface_layer));
7198 7204
7199 host_impl_->active_tree()->SetRootLayer(std::move(root_layer)); 7205 host_impl_->active_tree()->SetRootLayer(std::move(root_layer));
7200 7206
7201 EXPECT_EQ(0u, context3d->NumTextures()); 7207 EXPECT_EQ(0u, context3d->NumTextures());
7202 7208
(...skipping 15 matching lines...) Expand all
7218 class MockDrawQuadsToFillScreenContext : public TestWebGraphicsContext3D { 7224 class MockDrawQuadsToFillScreenContext : public TestWebGraphicsContext3D {
7219 public: 7225 public:
7220 MOCK_METHOD1(useProgram, void(GLuint program)); 7226 MOCK_METHOD1(useProgram, void(GLuint program));
7221 MOCK_METHOD4(drawElements, void(GLenum mode, 7227 MOCK_METHOD4(drawElements, void(GLenum mode,
7222 GLsizei count, 7228 GLsizei count,
7223 GLenum type, 7229 GLenum type,
7224 GLintptr offset)); 7230 GLintptr offset));
7225 }; 7231 };
7226 7232
7227 TEST_F(LayerTreeHostImplTest, HasTransparentBackground) { 7233 TEST_F(LayerTreeHostImplTest, HasTransparentBackground) {
7228 scoped_ptr<MockDrawQuadsToFillScreenContext> mock_context_owned( 7234 std::unique_ptr<MockDrawQuadsToFillScreenContext> mock_context_owned(
7229 new MockDrawQuadsToFillScreenContext); 7235 new MockDrawQuadsToFillScreenContext);
7230 MockDrawQuadsToFillScreenContext* mock_context = mock_context_owned.get(); 7236 MockDrawQuadsToFillScreenContext* mock_context = mock_context_owned.get();
7231 7237
7232 // Run test case 7238 // Run test case
7233 LayerTreeSettings settings = DefaultSettings(); 7239 LayerTreeSettings settings = DefaultSettings();
7234 settings.renderer_settings.partial_swap_enabled = false; 7240 settings.renderer_settings.partial_swap_enabled = false;
7235 CreateHostImpl(settings, 7241 CreateHostImpl(settings,
7236 FakeOutputSurface::Create3d(std::move(mock_context_owned))); 7242 FakeOutputSurface::Create3d(std::move(mock_context_owned)));
7237 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); 7243 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1));
7238 host_impl_->active_tree()->set_background_color(SK_ColorWHITE); 7244 host_impl_->active_tree()->set_background_color(SK_ColorWHITE);
(...skipping 15 matching lines...) Expand all
7254 host_impl_->SetFullRootLayerDamage(); 7260 host_impl_->SetFullRootLayerDamage();
7255 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); 7261 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame));
7256 host_impl_->DrawLayers(&frame); 7262 host_impl_->DrawLayers(&frame);
7257 host_impl_->DidDrawAllLayers(frame); 7263 host_impl_->DidDrawAllLayers(frame);
7258 Mock::VerifyAndClearExpectations(&mock_context); 7264 Mock::VerifyAndClearExpectations(&mock_context);
7259 } 7265 }
7260 7266
7261 class LayerTreeHostImplTestWithDelegatingRenderer 7267 class LayerTreeHostImplTestWithDelegatingRenderer
7262 : public LayerTreeHostImplTest { 7268 : public LayerTreeHostImplTest {
7263 protected: 7269 protected:
7264 scoped_ptr<OutputSurface> CreateOutputSurface() override { 7270 std::unique_ptr<OutputSurface> CreateOutputSurface() override {
7265 return FakeOutputSurface::CreateDelegating3d(); 7271 return FakeOutputSurface::CreateDelegating3d();
7266 } 7272 }
7267 7273
7268 void DrawFrameAndTestDamage(const gfx::Rect& expected_damage) { 7274 void DrawFrameAndTestDamage(const gfx::Rect& expected_damage) {
7269 bool expect_to_draw = !expected_damage.IsEmpty(); 7275 bool expect_to_draw = !expected_damage.IsEmpty();
7270 7276
7271 LayerTreeHostImpl::FrameData frame; 7277 LayerTreeHostImpl::FrameData frame;
7272 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); 7278 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame));
7273 7279
7274 if (!expect_to_draw) { 7280 if (!expect_to_draw) {
(...skipping 21 matching lines...) Expand all
7296 root_render_pass->quad_list.ElementAt(1)->visible_rect); 7302 root_render_pass->quad_list.ElementAt(1)->visible_rect);
7297 } 7303 }
7298 7304
7299 host_impl_->DrawLayers(&frame); 7305 host_impl_->DrawLayers(&frame);
7300 host_impl_->DidDrawAllLayers(frame); 7306 host_impl_->DidDrawAllLayers(frame);
7301 EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame)); 7307 EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame));
7302 } 7308 }
7303 }; 7309 };
7304 7310
7305 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) { 7311 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) {
7306 scoped_ptr<SolidColorLayerImpl> root = 7312 std::unique_ptr<SolidColorLayerImpl> root =
7307 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); 7313 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1);
7308 root->SetPosition(gfx::PointF()); 7314 root->SetPosition(gfx::PointF());
7309 root->SetBounds(gfx::Size(10, 10)); 7315 root->SetBounds(gfx::Size(10, 10));
7310 root->SetDrawsContent(true); 7316 root->SetDrawsContent(true);
7311 root->SetForceRenderSurface(true); 7317 root->SetForceRenderSurface(true);
7312 7318
7313 // Child layer is in the bottom right corner. 7319 // Child layer is in the bottom right corner.
7314 scoped_ptr<SolidColorLayerImpl> child = 7320 std::unique_ptr<SolidColorLayerImpl> child =
7315 SolidColorLayerImpl::Create(host_impl_->active_tree(), 2); 7321 SolidColorLayerImpl::Create(host_impl_->active_tree(), 2);
7316 child->SetPosition(gfx::PointF(9.f, 9.f)); 7322 child->SetPosition(gfx::PointF(9.f, 9.f));
7317 child->SetBounds(gfx::Size(1, 1)); 7323 child->SetBounds(gfx::Size(1, 1));
7318 child->SetDrawsContent(true); 7324 child->SetDrawsContent(true);
7319 root->AddChild(std::move(child)); 7325 root->AddChild(std::move(child));
7320 7326
7321 host_impl_->active_tree()->SetRootLayer(std::move(root)); 7327 host_impl_->active_tree()->SetRootLayer(std::move(root));
7322 7328
7323 // Draw a frame. In the first frame, the entire viewport should be damaged. 7329 // Draw a frame. In the first frame, the entire viewport should be damaged.
7324 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize()); 7330 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize());
(...skipping 30 matching lines...) Expand all
7355 gfx::Size root_size(2000, 1000); 7361 gfx::Size root_size(2000, 1000);
7356 gfx::Size device_viewport_size = 7362 gfx::Size device_viewport_size =
7357 gfx::ScaleToCeiledSize(root_size, device_scale_factor); 7363 gfx::ScaleToCeiledSize(root_size, device_scale_factor);
7358 host_impl_->SetViewportSize(device_viewport_size); 7364 host_impl_->SetViewportSize(device_viewport_size);
7359 7365
7360 host_impl_->CreatePendingTree(); 7366 host_impl_->CreatePendingTree();
7361 host_impl_->pending_tree()->SetDeviceScaleFactor(device_scale_factor); 7367 host_impl_->pending_tree()->SetDeviceScaleFactor(device_scale_factor);
7362 host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f / 16.f, 7368 host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f / 16.f,
7363 16.f); 7369 16.f);
7364 7370
7365 scoped_ptr<LayerImpl> scoped_root = 7371 std::unique_ptr<LayerImpl> scoped_root =
7366 LayerImpl::Create(host_impl_->pending_tree(), 1); 7372 LayerImpl::Create(host_impl_->pending_tree(), 1);
7367 LayerImpl* root = scoped_root.get(); 7373 LayerImpl* root = scoped_root.get();
7368 root->SetForceRenderSurface(true); 7374 root->SetForceRenderSurface(true);
7369 7375
7370 host_impl_->pending_tree()->SetRootLayer(std::move(scoped_root)); 7376 host_impl_->pending_tree()->SetRootLayer(std::move(scoped_root));
7371 7377
7372 scoped_ptr<LayerImpl> scoped_scrolling_layer = 7378 std::unique_ptr<LayerImpl> scoped_scrolling_layer =
7373 LayerImpl::Create(host_impl_->pending_tree(), 2); 7379 LayerImpl::Create(host_impl_->pending_tree(), 2);
7374 LayerImpl* scrolling_layer = scoped_scrolling_layer.get(); 7380 LayerImpl* scrolling_layer = scoped_scrolling_layer.get();
7375 root->AddChild(std::move(scoped_scrolling_layer)); 7381 root->AddChild(std::move(scoped_scrolling_layer));
7376 7382
7377 gfx::Size content_layer_bounds(100000, 100); 7383 gfx::Size content_layer_bounds(100000, 100);
7378 scoped_refptr<FakeRasterSource> raster_source( 7384 scoped_refptr<FakeRasterSource> raster_source(
7379 FakeRasterSource::CreateFilled(content_layer_bounds)); 7385 FakeRasterSource::CreateFilled(content_layer_bounds));
7380 7386
7381 scoped_ptr<FakePictureLayerImpl> scoped_content_layer = 7387 std::unique_ptr<FakePictureLayerImpl> scoped_content_layer =
7382 FakePictureLayerImpl::CreateWithRasterSource(host_impl_->pending_tree(), 7388 FakePictureLayerImpl::CreateWithRasterSource(host_impl_->pending_tree(),
7383 3, raster_source); 7389 3, raster_source);
7384 LayerImpl* content_layer = scoped_content_layer.get(); 7390 LayerImpl* content_layer = scoped_content_layer.get();
7385 scrolling_layer->AddChild(std::move(scoped_content_layer)); 7391 scrolling_layer->AddChild(std::move(scoped_content_layer));
7386 content_layer->SetBounds(content_layer_bounds); 7392 content_layer->SetBounds(content_layer_bounds);
7387 content_layer->SetDrawsContent(true); 7393 content_layer->SetDrawsContent(true);
7388 7394
7389 root->SetBounds(root_size); 7395 root->SetBounds(root_size);
7390 7396
7391 gfx::ScrollOffset scroll_offset(100000, 0); 7397 gfx::ScrollOffset scroll_offset(100000, 0);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
7466 7472
7467 int frames_began_, frames_ended_; 7473 int frames_began_, frames_ended_;
7468 }; 7474 };
7469 7475
7470 TEST_F(LayerTreeHostImplTest, ForcedDrawToSoftwareDeviceBasicRender) { 7476 TEST_F(LayerTreeHostImplTest, ForcedDrawToSoftwareDeviceBasicRender) {
7471 // No main thread evictions in resourceless software mode. 7477 // No main thread evictions in resourceless software mode.
7472 set_reduce_memory_result(false); 7478 set_reduce_memory_result(false);
7473 CountingSoftwareDevice* software_device = new CountingSoftwareDevice(); 7479 CountingSoftwareDevice* software_device = new CountingSoftwareDevice();
7474 EXPECT_TRUE(CreateHostImpl( 7480 EXPECT_TRUE(CreateHostImpl(
7475 DefaultSettings(), 7481 DefaultSettings(),
7476 FakeOutputSurface::CreateSoftware(make_scoped_ptr(software_device)))); 7482 FakeOutputSurface::CreateSoftware(base::WrapUnique(software_device))));
7477 host_impl_->SetViewportSize(gfx::Size(50, 50)); 7483 host_impl_->SetViewportSize(gfx::Size(50, 50));
7478 7484
7479 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 7485 SetupScrollAndContentsLayers(gfx::Size(100, 100));
7480 7486
7481 const gfx::Transform external_transform; 7487 const gfx::Transform external_transform;
7482 const gfx::Rect external_viewport; 7488 const gfx::Rect external_viewport;
7483 const gfx::Rect external_clip; 7489 const gfx::Rect external_clip;
7484 const bool resourceless_software_draw = true; 7490 const bool resourceless_software_draw = true;
7485 host_impl_->SetExternalTilePriorityConstraints(external_viewport, 7491 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
7486 external_transform); 7492 external_transform);
7487 7493
7488 EXPECT_EQ(0, software_device->frames_began_); 7494 EXPECT_EQ(0, software_device->frames_began_);
7489 EXPECT_EQ(0, software_device->frames_ended_); 7495 EXPECT_EQ(0, software_device->frames_ended_);
7490 7496
7491 host_impl_->OnDraw(external_transform, external_viewport, external_clip, 7497 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
7492 resourceless_software_draw); 7498 resourceless_software_draw);
7493 7499
7494 EXPECT_EQ(1, software_device->frames_began_); 7500 EXPECT_EQ(1, software_device->frames_began_);
7495 EXPECT_EQ(1, software_device->frames_ended_); 7501 EXPECT_EQ(1, software_device->frames_ended_);
7496 7502
7497 // Call another API method that is likely to hit nullptr in this mode. 7503 // Call another API method that is likely to hit nullptr in this mode.
7498 scoped_ptr<base::trace_event::TracedValue> state( 7504 std::unique_ptr<base::trace_event::TracedValue> state(
7499 new base::trace_event::TracedValue()); 7505 new base::trace_event::TracedValue());
7500 host_impl_->ActivationStateAsValueInto(state.get()); 7506 host_impl_->ActivationStateAsValueInto(state.get());
7501 } 7507 }
7502 7508
7503 TEST_F(LayerTreeHostImplTest, 7509 TEST_F(LayerTreeHostImplTest,
7504 ForcedDrawToSoftwareDeviceSkipsUnsupportedLayers) { 7510 ForcedDrawToSoftwareDeviceSkipsUnsupportedLayers) {
7505 set_reduce_memory_result(false); 7511 set_reduce_memory_result(false);
7506 EXPECT_TRUE(CreateHostImpl(DefaultSettings(), 7512 EXPECT_TRUE(CreateHostImpl(
7507 FakeOutputSurface::CreateSoftware( 7513 DefaultSettings(), FakeOutputSurface::CreateSoftware(
7508 make_scoped_ptr(new CountingSoftwareDevice)))); 7514 base::WrapUnique(new CountingSoftwareDevice))));
7509 7515
7510 const gfx::Transform external_transform; 7516 const gfx::Transform external_transform;
7511 const gfx::Rect external_viewport; 7517 const gfx::Rect external_viewport;
7512 const gfx::Rect external_clip; 7518 const gfx::Rect external_clip;
7513 const bool resourceless_software_draw = true; 7519 const bool resourceless_software_draw = true;
7514 host_impl_->SetExternalTilePriorityConstraints(external_viewport, 7520 host_impl_->SetExternalTilePriorityConstraints(external_viewport,
7515 external_transform); 7521 external_transform);
7516 7522
7517 // SolidColorLayerImpl will be drawn. 7523 // SolidColorLayerImpl will be drawn.
7518 scoped_ptr<SolidColorLayerImpl> root_layer = 7524 std::unique_ptr<SolidColorLayerImpl> root_layer =
7519 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); 7525 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1);
7520 7526
7521 // VideoLayerImpl will not be drawn. 7527 // VideoLayerImpl will not be drawn.
7522 FakeVideoFrameProvider provider; 7528 FakeVideoFrameProvider provider;
7523 scoped_ptr<VideoLayerImpl> video_layer = VideoLayerImpl::Create( 7529 std::unique_ptr<VideoLayerImpl> video_layer = VideoLayerImpl::Create(
7524 host_impl_->active_tree(), 2, &provider, media::VIDEO_ROTATION_0); 7530 host_impl_->active_tree(), 2, &provider, media::VIDEO_ROTATION_0);
7525 video_layer->SetBounds(gfx::Size(10, 10)); 7531 video_layer->SetBounds(gfx::Size(10, 10));
7526 video_layer->SetDrawsContent(true); 7532 video_layer->SetDrawsContent(true);
7527 root_layer->AddChild(std::move(video_layer)); 7533 root_layer->AddChild(std::move(video_layer));
7528 SetupRootLayerImpl(std::move(root_layer)); 7534 SetupRootLayerImpl(std::move(root_layer));
7529 7535
7530 host_impl_->OnDraw(external_transform, external_viewport, external_clip, 7536 host_impl_->OnDraw(external_transform, external_viewport, external_clip,
7531 resourceless_software_draw); 7537 resourceless_software_draw);
7532 7538
7533 EXPECT_EQ(1u, last_on_draw_frame_->will_draw_layers.size()); 7539 EXPECT_EQ(1u, last_on_draw_frame_->will_draw_layers.size());
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
7619 7625
7620 TEST_F(LayerTreeHostImplTestPrepareTiles, PrepareTilesWhenInvisible) { 7626 TEST_F(LayerTreeHostImplTestPrepareTiles, PrepareTilesWhenInvisible) {
7621 EXPECT_TRUE(fake_host_impl_->prepare_tiles_needed()); 7627 EXPECT_TRUE(fake_host_impl_->prepare_tiles_needed());
7622 host_impl_->SetVisible(false); 7628 host_impl_->SetVisible(false);
7623 EXPECT_FALSE(fake_host_impl_->prepare_tiles_needed()); 7629 EXPECT_FALSE(fake_host_impl_->prepare_tiles_needed());
7624 host_impl_->SetVisible(true); 7630 host_impl_->SetVisible(true);
7625 EXPECT_TRUE(fake_host_impl_->prepare_tiles_needed()); 7631 EXPECT_TRUE(fake_host_impl_->prepare_tiles_needed());
7626 } 7632 }
7627 7633
7628 TEST_F(LayerTreeHostImplTest, UIResourceManagement) { 7634 TEST_F(LayerTreeHostImplTest, UIResourceManagement) {
7629 scoped_ptr<TestWebGraphicsContext3D> context = 7635 std::unique_ptr<TestWebGraphicsContext3D> context =
7630 TestWebGraphicsContext3D::Create(); 7636 TestWebGraphicsContext3D::Create();
7631 TestWebGraphicsContext3D* context3d = context.get(); 7637 TestWebGraphicsContext3D* context3d = context.get();
7632 scoped_ptr<FakeOutputSurface> output_surface = FakeOutputSurface::Create3d(); 7638 std::unique_ptr<FakeOutputSurface> output_surface =
7639 FakeOutputSurface::Create3d();
7633 CreateHostImpl(DefaultSettings(), std::move(output_surface)); 7640 CreateHostImpl(DefaultSettings(), std::move(output_surface));
7634 7641
7635 EXPECT_EQ(0u, context3d->NumTextures()); 7642 EXPECT_EQ(0u, context3d->NumTextures());
7636 7643
7637 UIResourceId ui_resource_id = 1; 7644 UIResourceId ui_resource_id = 1;
7638 bool is_opaque = false; 7645 bool is_opaque = false;
7639 UIResourceBitmap bitmap(gfx::Size(1, 1), is_opaque); 7646 UIResourceBitmap bitmap(gfx::Size(1, 1), is_opaque);
7640 host_impl_->CreateUIResource(ui_resource_id, bitmap); 7647 host_impl_->CreateUIResource(ui_resource_id, bitmap);
7641 EXPECT_EQ(1u, context3d->NumTextures()); 7648 EXPECT_EQ(1u, context3d->NumTextures());
7642 ResourceId id1 = host_impl_->ResourceIdForUIResource(ui_resource_id); 7649 ResourceId id1 = host_impl_->ResourceIdForUIResource(ui_resource_id);
(...skipping 19 matching lines...) Expand all
7662 host_impl_->DeleteUIResource(ui_resource_id); 7669 host_impl_->DeleteUIResource(ui_resource_id);
7663 EXPECT_EQ(0u, host_impl_->ResourceIdForUIResource(ui_resource_id)); 7670 EXPECT_EQ(0u, host_impl_->ResourceIdForUIResource(ui_resource_id));
7664 EXPECT_EQ(0u, context3d->NumTextures()); 7671 EXPECT_EQ(0u, context3d->NumTextures());
7665 7672
7666 // Should not change state for multiple deletion on one UIResourceId 7673 // Should not change state for multiple deletion on one UIResourceId
7667 host_impl_->DeleteUIResource(ui_resource_id); 7674 host_impl_->DeleteUIResource(ui_resource_id);
7668 EXPECT_EQ(0u, context3d->NumTextures()); 7675 EXPECT_EQ(0u, context3d->NumTextures());
7669 } 7676 }
7670 7677
7671 TEST_F(LayerTreeHostImplTest, CreateETC1UIResource) { 7678 TEST_F(LayerTreeHostImplTest, CreateETC1UIResource) {
7672 scoped_ptr<TestWebGraphicsContext3D> context = 7679 std::unique_ptr<TestWebGraphicsContext3D> context =
7673 TestWebGraphicsContext3D::Create(); 7680 TestWebGraphicsContext3D::Create();
7674 TestWebGraphicsContext3D* context3d = context.get(); 7681 TestWebGraphicsContext3D* context3d = context.get();
7675 CreateHostImpl(DefaultSettings(), FakeOutputSurface::Create3d()); 7682 CreateHostImpl(DefaultSettings(), FakeOutputSurface::Create3d());
7676 7683
7677 EXPECT_EQ(0u, context3d->NumTextures()); 7684 EXPECT_EQ(0u, context3d->NumTextures());
7678 7685
7679 gfx::Size size(4, 4); 7686 gfx::Size size(4, 4);
7680 // SkImageInfo has no support for ETC1. The |info| below contains the right 7687 // SkImageInfo has no support for ETC1. The |info| below contains the right
7681 // total pixel size for the bitmap but not the right height and width. The 7688 // total pixel size for the bitmap but not the right height and width. The
7682 // correct width/height are passed directly to UIResourceBitmap. 7689 // correct width/height are passed directly to UIResourceBitmap.
7683 SkImageInfo info = 7690 SkImageInfo info =
7684 SkImageInfo::Make(4, 2, kAlpha_8_SkColorType, kPremul_SkAlphaType); 7691 SkImageInfo::Make(4, 2, kAlpha_8_SkColorType, kPremul_SkAlphaType);
7685 skia::RefPtr<SkPixelRef> pixel_ref = 7692 skia::RefPtr<SkPixelRef> pixel_ref =
7686 skia::AdoptRef(SkMallocPixelRef::NewAllocate(info, 0, 0)); 7693 skia::AdoptRef(SkMallocPixelRef::NewAllocate(info, 0, 0));
7687 pixel_ref->setImmutable(); 7694 pixel_ref->setImmutable();
7688 UIResourceBitmap bitmap(pixel_ref, size); 7695 UIResourceBitmap bitmap(pixel_ref, size);
7689 UIResourceId ui_resource_id = 1; 7696 UIResourceId ui_resource_id = 1;
7690 host_impl_->CreateUIResource(ui_resource_id, bitmap); 7697 host_impl_->CreateUIResource(ui_resource_id, bitmap);
7691 EXPECT_EQ(1u, context3d->NumTextures()); 7698 EXPECT_EQ(1u, context3d->NumTextures());
7692 ResourceId id1 = host_impl_->ResourceIdForUIResource(ui_resource_id); 7699 ResourceId id1 = host_impl_->ResourceIdForUIResource(ui_resource_id);
7693 EXPECT_NE(0u, id1); 7700 EXPECT_NE(0u, id1);
7694 } 7701 }
7695 7702
7696 void ShutdownReleasesContext_Callback(scoped_ptr<CopyOutputResult> result) { 7703 void ShutdownReleasesContext_Callback(
7697 } 7704 std::unique_ptr<CopyOutputResult> result) {}
7698 7705
7699 TEST_F(LayerTreeHostImplTest, ShutdownReleasesContext) { 7706 TEST_F(LayerTreeHostImplTest, ShutdownReleasesContext) {
7700 scoped_refptr<TestContextProvider> context_provider = 7707 scoped_refptr<TestContextProvider> context_provider =
7701 TestContextProvider::Create(); 7708 TestContextProvider::Create();
7702 7709
7703 CreateHostImpl(DefaultSettings(), 7710 CreateHostImpl(DefaultSettings(),
7704 FakeOutputSurface::Create3d(context_provider)); 7711 FakeOutputSurface::Create3d(context_provider));
7705 7712
7706 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); 7713 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1));
7707 7714
7708 std::vector<scoped_ptr<CopyOutputRequest>> requests; 7715 std::vector<std::unique_ptr<CopyOutputRequest>> requests;
7709 requests.push_back(CopyOutputRequest::CreateRequest( 7716 requests.push_back(CopyOutputRequest::CreateRequest(
7710 base::Bind(&ShutdownReleasesContext_Callback))); 7717 base::Bind(&ShutdownReleasesContext_Callback)));
7711 7718
7712 LayerImpl* root = host_impl_->active_tree()->root_layer(); 7719 LayerImpl* root = host_impl_->active_tree()->root_layer();
7713 root->PassCopyRequests(&requests); 7720 root->PassCopyRequests(&requests);
7714 7721
7715 LayerTreeHostImpl::FrameData frame; 7722 LayerTreeHostImpl::FrameData frame;
7716 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); 7723 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame));
7717 host_impl_->DrawLayers(&frame); 7724 host_impl_->DrawLayers(&frame);
7718 host_impl_->DidDrawAllLayers(frame); 7725 host_impl_->DidDrawAllLayers(frame);
7719 7726
7720 // The CopyOutputResult's callback has a ref on the ContextProvider and a 7727 // The CopyOutputResult's callback has a ref on the ContextProvider and a
7721 // texture in a texture mailbox. 7728 // texture in a texture mailbox.
7722 EXPECT_FALSE(context_provider->HasOneRef()); 7729 EXPECT_FALSE(context_provider->HasOneRef());
7723 EXPECT_EQ(1u, context_provider->TestContext3d()->NumTextures()); 7730 EXPECT_EQ(1u, context_provider->TestContext3d()->NumTextures());
7724 7731
7725 host_impl_ = nullptr; 7732 host_impl_ = nullptr;
7726 7733
7727 // The CopyOutputResult's callback was cancelled, the CopyOutputResult 7734 // The CopyOutputResult's callback was cancelled, the CopyOutputResult
7728 // released, and the texture deleted. 7735 // released, and the texture deleted.
7729 EXPECT_TRUE(context_provider->HasOneRef()); 7736 EXPECT_TRUE(context_provider->HasOneRef());
7730 EXPECT_EQ(0u, context_provider->TestContext3d()->NumTextures()); 7737 EXPECT_EQ(0u, context_provider->TestContext3d()->NumTextures());
7731 } 7738 }
7732 7739
7733 TEST_F(LayerTreeHostImplTest, TouchFlingShouldNotBubble) { 7740 TEST_F(LayerTreeHostImplTest, TouchFlingShouldNotBubble) {
7734 // When flinging via touch, only the child should scroll (we should not 7741 // When flinging via touch, only the child should scroll (we should not
7735 // bubble). 7742 // bubble).
7736 gfx::Size surface_size(10, 10); 7743 gfx::Size surface_size(10, 10);
7737 gfx::Size content_size(20, 20); 7744 gfx::Size content_size(20, 20);
7738 scoped_ptr<LayerImpl> root_ptr = 7745 std::unique_ptr<LayerImpl> root_ptr =
7739 LayerImpl::Create(host_impl_->active_tree(), 4); 7746 LayerImpl::Create(host_impl_->active_tree(), 4);
7740 scoped_ptr<LayerImpl> root_clip = 7747 std::unique_ptr<LayerImpl> root_clip =
7741 LayerImpl::Create(host_impl_->active_tree(), 3); 7748 LayerImpl::Create(host_impl_->active_tree(), 3);
7742 root_clip->SetForceRenderSurface(true); 7749 root_clip->SetForceRenderSurface(true);
7743 7750
7744 scoped_ptr<LayerImpl> root_scroll = 7751 std::unique_ptr<LayerImpl> root_scroll =
7745 CreateScrollableLayer(1, content_size, root_clip.get()); 7752 CreateScrollableLayer(1, content_size, root_clip.get());
7746 root_scroll->SetIsContainerForFixedPositionLayers(true); 7753 root_scroll->SetIsContainerForFixedPositionLayers(true);
7747 scoped_ptr<LayerImpl> child = 7754 std::unique_ptr<LayerImpl> child =
7748 CreateScrollableLayer(2, content_size, root_clip.get()); 7755 CreateScrollableLayer(2, content_size, root_clip.get());
7749 7756
7750 root_scroll->AddChild(std::move(child)); 7757 root_scroll->AddChild(std::move(child));
7751 int root_id = root_scroll->id(); 7758 int root_id = root_scroll->id();
7752 root_clip->AddChild(std::move(root_scroll)); 7759 root_clip->AddChild(std::move(root_scroll));
7753 root_ptr->AddChild(std::move(root_clip)); 7760 root_ptr->AddChild(std::move(root_clip));
7754 7761
7755 host_impl_->SetViewportSize(surface_size); 7762 host_impl_->SetViewportSize(surface_size);
7756 host_impl_->active_tree()->SetRootLayer(std::move(root_ptr)); 7763 host_impl_->active_tree()->SetRootLayer(std::move(root_ptr));
7757 host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 4, 1, 7764 host_impl_->active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 4, 1,
(...skipping 10 matching lines...) Expand all
7768 7775
7769 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 7776 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
7770 host_impl_->FlingScrollBegin().thread); 7777 host_impl_->FlingScrollBegin().thread);
7771 7778
7772 gfx::Vector2d scroll_delta(0, 100); 7779 gfx::Vector2d scroll_delta(0, 100);
7773 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()); 7780 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
7774 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()); 7781 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
7775 7782
7776 host_impl_->ScrollEnd(EndState().get()); 7783 host_impl_->ScrollEnd(EndState().get());
7777 7784
7778 scoped_ptr<ScrollAndScaleSet> scroll_info = 7785 std::unique_ptr<ScrollAndScaleSet> scroll_info =
7779 host_impl_->ProcessScrollDeltas(); 7786 host_impl_->ProcessScrollDeltas();
7780 7787
7781 // Only the child should have scrolled. 7788 // Only the child should have scrolled.
7782 ASSERT_EQ(1u, scroll_info->scrolls.size()); 7789 ASSERT_EQ(1u, scroll_info->scrolls.size());
7783 ExpectNone(*scroll_info.get(), root_id); 7790 ExpectNone(*scroll_info.get(), root_id);
7784 } 7791 }
7785 } 7792 }
7786 7793
7787 TEST_F(LayerTreeHostImplTest, TouchFlingShouldContinueScrollingCurrentLayer) { 7794 TEST_F(LayerTreeHostImplTest, TouchFlingShouldContinueScrollingCurrentLayer) {
7788 // Scroll a child layer beyond its maximum scroll range and make sure the 7795 // Scroll a child layer beyond its maximum scroll range and make sure the
7789 // the scroll doesn't bubble up to the parent layer. 7796 // the scroll doesn't bubble up to the parent layer.
7790 gfx::Size surface_size(10, 10); 7797 gfx::Size surface_size(10, 10);
7791 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); 7798 std::unique_ptr<LayerImpl> root =
7799 LayerImpl::Create(host_impl_->active_tree(), 1);
7792 root->SetForceRenderSurface(true); 7800 root->SetForceRenderSurface(true);
7793 scoped_ptr<LayerImpl> root_scrolling = 7801 std::unique_ptr<LayerImpl> root_scrolling =
7794 CreateScrollableLayer(2, surface_size, root.get()); 7802 CreateScrollableLayer(2, surface_size, root.get());
7795 7803
7796 scoped_ptr<LayerImpl> grand_child = 7804 std::unique_ptr<LayerImpl> grand_child =
7797 CreateScrollableLayer(4, surface_size, root.get()); 7805 CreateScrollableLayer(4, surface_size, root.get());
7798 grand_child->layer_tree_impl() 7806 grand_child->layer_tree_impl()
7799 ->property_trees() 7807 ->property_trees()
7800 ->scroll_tree.UpdateScrollOffsetBaseForTesting(grand_child->id(), 7808 ->scroll_tree.UpdateScrollOffsetBaseForTesting(grand_child->id(),
7801 gfx::ScrollOffset(0, 2)); 7809 gfx::ScrollOffset(0, 2));
7802 7810
7803 scoped_ptr<LayerImpl> child = 7811 std::unique_ptr<LayerImpl> child =
7804 CreateScrollableLayer(3, surface_size, root.get()); 7812 CreateScrollableLayer(3, surface_size, root.get());
7805 child->layer_tree_impl() 7813 child->layer_tree_impl()
7806 ->property_trees() 7814 ->property_trees()
7807 ->scroll_tree.UpdateScrollOffsetBaseForTesting(child->id(), 7815 ->scroll_tree.UpdateScrollOffsetBaseForTesting(child->id(),
7808 gfx::ScrollOffset(0, 4)); 7816 gfx::ScrollOffset(0, 4));
7809 child->AddChild(std::move(grand_child)); 7817 child->AddChild(std::move(grand_child));
7810 7818
7811 root_scrolling->AddChild(std::move(child)); 7819 root_scrolling->AddChild(std::move(child));
7812 root->AddChild(std::move(root_scrolling)); 7820 root->AddChild(std::move(root_scrolling));
7813 host_impl_->active_tree()->SetRootLayer(std::move(root)); 7821 host_impl_->active_tree()->SetRootLayer(std::move(root));
7814 host_impl_->active_tree()->DidBecomeActive(); 7822 host_impl_->active_tree()->DidBecomeActive();
7815 host_impl_->SetViewportSize(surface_size); 7823 host_impl_->SetViewportSize(surface_size);
7816 SetNeedsRebuildPropertyTrees(); 7824 SetNeedsRebuildPropertyTrees();
7817 DrawFrame(); 7825 DrawFrame();
7818 { 7826 {
7819 scoped_ptr<ScrollAndScaleSet> scroll_info; 7827 std::unique_ptr<ScrollAndScaleSet> scroll_info;
7820 LayerImpl* child = 7828 LayerImpl* child =
7821 host_impl_->active_tree()->root_layer()->children()[0]->children()[0]; 7829 host_impl_->active_tree()->root_layer()->children()[0]->children()[0];
7822 LayerImpl* grand_child = child->children()[0]; 7830 LayerImpl* grand_child = child->children()[0];
7823 7831
7824 gfx::Vector2d scroll_delta(0, -2); 7832 gfx::Vector2d scroll_delta(0, -2);
7825 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 7833 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
7826 host_impl_ 7834 host_impl_
7827 ->ScrollBegin(BeginState(gfx::Point()).get(), 7835 ->ScrollBegin(BeginState(gfx::Point()).get(),
7828 InputHandler::TOUCHSCREEN) 7836 InputHandler::TOUCHSCREEN)
7829 .thread); 7837 .thread);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
7869 .did_scroll); 7877 .did_scroll);
7870 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), grand_child); 7878 EXPECT_EQ(host_impl_->CurrentlyScrollingLayer(), grand_child);
7871 host_impl_->ScrollEnd(EndState().get()); 7879 host_impl_->ScrollEnd(EndState().get());
7872 } 7880 }
7873 } 7881 }
7874 7882
7875 TEST_F(LayerTreeHostImplTest, WheelFlingShouldntBubble) { 7883 TEST_F(LayerTreeHostImplTest, WheelFlingShouldntBubble) {
7876 // When flinging via wheel, we shouldn't bubble. 7884 // When flinging via wheel, we shouldn't bubble.
7877 gfx::Size surface_size(10, 10); 7885 gfx::Size surface_size(10, 10);
7878 gfx::Size content_size(20, 20); 7886 gfx::Size content_size(20, 20);
7879 scoped_ptr<LayerImpl> root_clip = 7887 std::unique_ptr<LayerImpl> root_clip =
7880 LayerImpl::Create(host_impl_->active_tree(), 3); 7888 LayerImpl::Create(host_impl_->active_tree(), 3);
7881 root_clip->SetForceRenderSurface(true); 7889 root_clip->SetForceRenderSurface(true);
7882 scoped_ptr<LayerImpl> root_scroll = 7890 std::unique_ptr<LayerImpl> root_scroll =
7883 CreateScrollableLayer(1, content_size, root_clip.get()); 7891 CreateScrollableLayer(1, content_size, root_clip.get());
7884 int root_scroll_id = root_scroll->id(); 7892 int root_scroll_id = root_scroll->id();
7885 scoped_ptr<LayerImpl> child = 7893 std::unique_ptr<LayerImpl> child =
7886 CreateScrollableLayer(2, content_size, root_clip.get()); 7894 CreateScrollableLayer(2, content_size, root_clip.get());
7887 7895
7888 root_scroll->AddChild(std::move(child)); 7896 root_scroll->AddChild(std::move(child));
7889 root_clip->AddChild(std::move(root_scroll)); 7897 root_clip->AddChild(std::move(root_scroll));
7890 7898
7891 host_impl_->SetViewportSize(surface_size); 7899 host_impl_->SetViewportSize(surface_size);
7892 host_impl_->active_tree()->SetRootLayer(std::move(root_clip)); 7900 host_impl_->active_tree()->SetRootLayer(std::move(root_clip));
7893 host_impl_->active_tree()->DidBecomeActive(); 7901 host_impl_->active_tree()->DidBecomeActive();
7894 SetNeedsRebuildPropertyTrees(); 7902 SetNeedsRebuildPropertyTrees();
7895 DrawFrame(); 7903 DrawFrame();
7896 { 7904 {
7897 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 7905 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
7898 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), 7906 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
7899 InputHandler::WHEEL) 7907 InputHandler::WHEEL)
7900 .thread); 7908 .thread);
7901 7909
7902 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 7910 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
7903 host_impl_->FlingScrollBegin().thread); 7911 host_impl_->FlingScrollBegin().thread);
7904 7912
7905 gfx::Vector2d scroll_delta(0, 100); 7913 gfx::Vector2d scroll_delta(0, 100);
7906 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()); 7914 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
7907 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()); 7915 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get());
7908 7916
7909 host_impl_->ScrollEnd(EndState().get()); 7917 host_impl_->ScrollEnd(EndState().get());
7910 7918
7911 scoped_ptr<ScrollAndScaleSet> scroll_info = 7919 std::unique_ptr<ScrollAndScaleSet> scroll_info =
7912 host_impl_->ProcessScrollDeltas(); 7920 host_impl_->ProcessScrollDeltas();
7913 7921
7914 // The root shouldn't have scrolled. 7922 // The root shouldn't have scrolled.
7915 ASSERT_EQ(1u, scroll_info->scrolls.size()); 7923 ASSERT_EQ(1u, scroll_info->scrolls.size());
7916 ExpectNone(*scroll_info.get(), root_scroll_id); 7924 ExpectNone(*scroll_info.get(), root_scroll_id);
7917 } 7925 }
7918 } 7926 }
7919 7927
7920 TEST_F(LayerTreeHostImplTest, ScrollUnknownNotOnAncestorChain) { 7928 TEST_F(LayerTreeHostImplTest, ScrollUnknownNotOnAncestorChain) {
7921 // If we ray cast a scroller that is not on the first layer's ancestor chain, 7929 // If we ray cast a scroller that is not on the first layer's ancestor chain,
7922 // we should return SCROLL_UNKNOWN. 7930 // we should return SCROLL_UNKNOWN.
7923 gfx::Size content_size(100, 100); 7931 gfx::Size content_size(100, 100);
7924 SetupScrollAndContentsLayers(content_size); 7932 SetupScrollAndContentsLayers(content_size);
7925 7933
7926 int scroll_layer_id = 2; 7934 int scroll_layer_id = 2;
7927 LayerImpl* scroll_layer = 7935 LayerImpl* scroll_layer =
7928 host_impl_->active_tree()->LayerById(scroll_layer_id); 7936 host_impl_->active_tree()->LayerById(scroll_layer_id);
7929 scroll_layer->SetDrawsContent(true); 7937 scroll_layer->SetDrawsContent(true);
7930 7938
7931 int page_scale_layer_id = 5; 7939 int page_scale_layer_id = 5;
7932 LayerImpl* page_scale_layer = 7940 LayerImpl* page_scale_layer =
7933 host_impl_->active_tree()->LayerById(page_scale_layer_id); 7941 host_impl_->active_tree()->LayerById(page_scale_layer_id);
7934 7942
7935 int occluder_layer_id = 6; 7943 int occluder_layer_id = 6;
7936 scoped_ptr<LayerImpl> occluder_layer = 7944 std::unique_ptr<LayerImpl> occluder_layer =
7937 LayerImpl::Create(host_impl_->active_tree(), occluder_layer_id); 7945 LayerImpl::Create(host_impl_->active_tree(), occluder_layer_id);
7938 occluder_layer->SetDrawsContent(true); 7946 occluder_layer->SetDrawsContent(true);
7939 occluder_layer->SetBounds(content_size); 7947 occluder_layer->SetBounds(content_size);
7940 occluder_layer->SetPosition(gfx::PointF()); 7948 occluder_layer->SetPosition(gfx::PointF());
7941 7949
7942 // The parent of the occluder is *above* the scroller. 7950 // The parent of the occluder is *above* the scroller.
7943 page_scale_layer->AddChild(std::move(occluder_layer)); 7951 page_scale_layer->AddChild(std::move(occluder_layer));
7944 7952
7945 SetNeedsRebuildPropertyTrees(); 7953 SetNeedsRebuildPropertyTrees();
7946 DrawFrame(); 7954 DrawFrame();
(...skipping 11 matching lines...) Expand all
7958 // should also return SCROLL_UNKNOWN. 7966 // should also return SCROLL_UNKNOWN.
7959 gfx::Size content_size(100, 100); 7967 gfx::Size content_size(100, 100);
7960 SetupScrollAndContentsLayers(content_size); 7968 SetupScrollAndContentsLayers(content_size);
7961 7969
7962 int scroll_layer_id = 2; 7970 int scroll_layer_id = 2;
7963 LayerImpl* scroll_layer = 7971 LayerImpl* scroll_layer =
7964 host_impl_->active_tree()->LayerById(scroll_layer_id); 7972 host_impl_->active_tree()->LayerById(scroll_layer_id);
7965 scroll_layer->SetDrawsContent(true); 7973 scroll_layer->SetDrawsContent(true);
7966 7974
7967 int occluder_layer_id = 6; 7975 int occluder_layer_id = 6;
7968 scoped_ptr<LayerImpl> occluder_layer = 7976 std::unique_ptr<LayerImpl> occluder_layer =
7969 LayerImpl::Create(host_impl_->active_tree(), occluder_layer_id); 7977 LayerImpl::Create(host_impl_->active_tree(), occluder_layer_id);
7970 occluder_layer->SetDrawsContent(true); 7978 occluder_layer->SetDrawsContent(true);
7971 occluder_layer->SetBounds(content_size); 7979 occluder_layer->SetBounds(content_size);
7972 occluder_layer->SetPosition(gfx::PointF(-10.f, -10.f)); 7980 occluder_layer->SetPosition(gfx::PointF(-10.f, -10.f));
7973 7981
7974 int child_scroll_clip_layer_id = 7; 7982 int child_scroll_clip_layer_id = 7;
7975 scoped_ptr<LayerImpl> child_scroll_clip = 7983 std::unique_ptr<LayerImpl> child_scroll_clip =
7976 LayerImpl::Create(host_impl_->active_tree(), child_scroll_clip_layer_id); 7984 LayerImpl::Create(host_impl_->active_tree(), child_scroll_clip_layer_id);
7977 7985
7978 int child_scroll_layer_id = 8; 7986 int child_scroll_layer_id = 8;
7979 scoped_ptr<LayerImpl> child_scroll = CreateScrollableLayer( 7987 std::unique_ptr<LayerImpl> child_scroll = CreateScrollableLayer(
7980 child_scroll_layer_id, content_size, child_scroll_clip.get()); 7988 child_scroll_layer_id, content_size, child_scroll_clip.get());
7981 7989
7982 child_scroll->SetPosition(gfx::PointF(10.f, 10.f)); 7990 child_scroll->SetPosition(gfx::PointF(10.f, 10.f));
7983 7991
7984 child_scroll->AddChild(std::move(occluder_layer)); 7992 child_scroll->AddChild(std::move(occluder_layer));
7985 child_scroll_clip->AddChild(std::move(child_scroll)); 7993 child_scroll_clip->AddChild(std::move(child_scroll));
7986 scroll_layer->AddChild(std::move(child_scroll_clip)); 7994 scroll_layer->AddChild(std::move(child_scroll_clip));
7987 7995
7988 SetNeedsRebuildPropertyTrees(); 7996 SetNeedsRebuildPropertyTrees();
7989 DrawFrame(); 7997 DrawFrame();
7990 7998
7991 InputHandler::ScrollStatus status = host_impl_->ScrollBegin( 7999 InputHandler::ScrollStatus status = host_impl_->ScrollBegin(
7992 BeginState(gfx::Point()).get(), InputHandler::WHEEL); 8000 BeginState(gfx::Point()).get(), InputHandler::WHEEL);
7993 EXPECT_EQ(InputHandler::SCROLL_UNKNOWN, status.thread); 8001 EXPECT_EQ(InputHandler::SCROLL_UNKNOWN, status.thread);
7994 EXPECT_EQ(MainThreadScrollingReason::kFailedHitTest, 8002 EXPECT_EQ(MainThreadScrollingReason::kFailedHitTest,
7995 status.main_thread_scrolling_reasons); 8003 status.main_thread_scrolling_reasons);
7996 } 8004 }
7997 8005
7998 TEST_F(LayerTreeHostImplTest, NotScrollInvisibleScroller) { 8006 TEST_F(LayerTreeHostImplTest, NotScrollInvisibleScroller) {
7999 gfx::Size content_size(100, 100); 8007 gfx::Size content_size(100, 100);
8000 SetupScrollAndContentsLayers(content_size); 8008 SetupScrollAndContentsLayers(content_size);
8001 8009
8002 LayerImpl* root = host_impl_->active_tree()->LayerById(1); 8010 LayerImpl* root = host_impl_->active_tree()->LayerById(1);
8003 8011
8004 int scroll_layer_id = 2; 8012 int scroll_layer_id = 2;
8005 LayerImpl* scroll_layer = 8013 LayerImpl* scroll_layer =
8006 host_impl_->active_tree()->LayerById(scroll_layer_id); 8014 host_impl_->active_tree()->LayerById(scroll_layer_id);
8007 8015
8008 int child_scroll_layer_id = 7; 8016 int child_scroll_layer_id = 7;
8009 scoped_ptr<LayerImpl> child_scroll = 8017 std::unique_ptr<LayerImpl> child_scroll =
8010 CreateScrollableLayer(child_scroll_layer_id, content_size, root); 8018 CreateScrollableLayer(child_scroll_layer_id, content_size, root);
8011 child_scroll->SetDrawsContent(false); 8019 child_scroll->SetDrawsContent(false);
8012 8020
8013 scroll_layer->AddChild(std::move(child_scroll)); 8021 scroll_layer->AddChild(std::move(child_scroll));
8014 8022
8015 SetNeedsRebuildPropertyTrees(); 8023 SetNeedsRebuildPropertyTrees();
8016 DrawFrame(); 8024 DrawFrame();
8017 8025
8018 // We should not have scrolled |child_scroll| even though we technically "hit" 8026 // We should not have scrolled |child_scroll| even though we technically "hit"
8019 // it. The reason for this is that if the scrolling the scroll would not move 8027 // it. The reason for this is that if the scrolling the scroll would not move
8020 // any layer that is a drawn RSLL member, then we can ignore the hit. 8028 // any layer that is a drawn RSLL member, then we can ignore the hit.
8021 // 8029 //
8022 // Why SCROLL_STARTED? In this case, it's because we've bubbled out and 8030 // Why SCROLL_STARTED? In this case, it's because we've bubbled out and
8023 // started scrolling the inner viewport. 8031 // started scrolling the inner viewport.
8024 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 8032 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
8025 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), 8033 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
8026 InputHandler::WHEEL) 8034 InputHandler::WHEEL)
8027 .thread); 8035 .thread);
8028 8036
8029 EXPECT_EQ(2, host_impl_->CurrentlyScrollingLayer()->id()); 8037 EXPECT_EQ(2, host_impl_->CurrentlyScrollingLayer()->id());
8030 } 8038 }
8031 8039
8032 TEST_F(LayerTreeHostImplTest, ScrollInvisibleScrollerWithVisibleDescendent) { 8040 TEST_F(LayerTreeHostImplTest, ScrollInvisibleScrollerWithVisibleDescendent) {
8033 gfx::Size content_size(100, 100); 8041 gfx::Size content_size(100, 100);
8034 SetupScrollAndContentsLayers(content_size); 8042 SetupScrollAndContentsLayers(content_size);
8035 8043
8036 LayerImpl* root = host_impl_->active_tree()->LayerById(1); 8044 LayerImpl* root = host_impl_->active_tree()->LayerById(1);
8037 LayerImpl* root_scroll_layer = host_impl_->active_tree()->LayerById(2); 8045 LayerImpl* root_scroll_layer = host_impl_->active_tree()->LayerById(2);
8038 8046
8039 scoped_ptr<LayerImpl> invisible_scroll_layer = 8047 std::unique_ptr<LayerImpl> invisible_scroll_layer =
8040 CreateScrollableLayer(7, content_size, root); 8048 CreateScrollableLayer(7, content_size, root);
8041 invisible_scroll_layer->SetDrawsContent(false); 8049 invisible_scroll_layer->SetDrawsContent(false);
8042 8050
8043 scoped_ptr<LayerImpl> child_layer = 8051 std::unique_ptr<LayerImpl> child_layer =
8044 LayerImpl::Create(host_impl_->active_tree(), 8); 8052 LayerImpl::Create(host_impl_->active_tree(), 8);
8045 child_layer->SetDrawsContent(false); 8053 child_layer->SetDrawsContent(false);
8046 8054
8047 scoped_ptr<LayerImpl> grand_child_layer = 8055 std::unique_ptr<LayerImpl> grand_child_layer =
8048 LayerImpl::Create(host_impl_->active_tree(), 9); 8056 LayerImpl::Create(host_impl_->active_tree(), 9);
8049 grand_child_layer->SetDrawsContent(true); 8057 grand_child_layer->SetDrawsContent(true);
8050 grand_child_layer->SetBounds(content_size); 8058 grand_child_layer->SetBounds(content_size);
8051 // Move the grand child so it's not hit by our test point. 8059 // Move the grand child so it's not hit by our test point.
8052 grand_child_layer->SetPosition(gfx::PointF(10.f, 10.f)); 8060 grand_child_layer->SetPosition(gfx::PointF(10.f, 10.f));
8053 8061
8054 child_layer->AddChild(std::move(grand_child_layer)); 8062 child_layer->AddChild(std::move(grand_child_layer));
8055 invisible_scroll_layer->AddChild(std::move(child_layer)); 8063 invisible_scroll_layer->AddChild(std::move(child_layer));
8056 root_scroll_layer->AddChild(std::move(invisible_scroll_layer)); 8064 root_scroll_layer->AddChild(std::move(invisible_scroll_layer));
8057 8065
(...skipping 18 matching lines...) Expand all
8076 gfx::Size content_size(100, 100); 8084 gfx::Size content_size(100, 100);
8077 SetupScrollAndContentsLayers(content_size); 8085 SetupScrollAndContentsLayers(content_size);
8078 8086
8079 LayerImpl* root = host_impl_->active_tree()->LayerById(1); 8087 LayerImpl* root = host_impl_->active_tree()->LayerById(1);
8080 8088
8081 int scroll_layer_id = 2; 8089 int scroll_layer_id = 2;
8082 LayerImpl* scroll_layer = 8090 LayerImpl* scroll_layer =
8083 host_impl_->active_tree()->LayerById(scroll_layer_id); 8091 host_impl_->active_tree()->LayerById(scroll_layer_id);
8084 8092
8085 int scroll_child_id = 6; 8093 int scroll_child_id = 6;
8086 scoped_ptr<LayerImpl> scroll_child = 8094 std::unique_ptr<LayerImpl> scroll_child =
8087 LayerImpl::Create(host_impl_->active_tree(), scroll_child_id); 8095 LayerImpl::Create(host_impl_->active_tree(), scroll_child_id);
8088 scroll_child->SetDrawsContent(true); 8096 scroll_child->SetDrawsContent(true);
8089 scroll_child->SetBounds(content_size); 8097 scroll_child->SetBounds(content_size);
8090 // Move the scroll child so it's not hit by our test point. 8098 // Move the scroll child so it's not hit by our test point.
8091 scroll_child->SetPosition(gfx::PointF(10.f, 10.f)); 8099 scroll_child->SetPosition(gfx::PointF(10.f, 10.f));
8092 8100
8093 int invisible_scroll_layer_id = 7; 8101 int invisible_scroll_layer_id = 7;
8094 scoped_ptr<LayerImpl> invisible_scroll = 8102 std::unique_ptr<LayerImpl> invisible_scroll =
8095 CreateScrollableLayer(invisible_scroll_layer_id, content_size, root); 8103 CreateScrollableLayer(invisible_scroll_layer_id, content_size, root);
8096 invisible_scroll->SetDrawsContent(false); 8104 invisible_scroll->SetDrawsContent(false);
8097 8105
8098 int container_id = 8; 8106 int container_id = 8;
8099 scoped_ptr<LayerImpl> container = 8107 std::unique_ptr<LayerImpl> container =
8100 LayerImpl::Create(host_impl_->active_tree(), container_id); 8108 LayerImpl::Create(host_impl_->active_tree(), container_id);
8101 8109
8102 scoped_ptr<std::set<LayerImpl*>> scroll_children(new std::set<LayerImpl*>); 8110 std::unique_ptr<std::set<LayerImpl*>> scroll_children(
8111 new std::set<LayerImpl*>);
8103 scroll_children->insert(scroll_child.get()); 8112 scroll_children->insert(scroll_child.get());
8104 invisible_scroll->SetScrollChildren(scroll_children.release()); 8113 invisible_scroll->SetScrollChildren(scroll_children.release());
8105 8114
8106 scroll_child->SetScrollParent(invisible_scroll.get()); 8115 scroll_child->SetScrollParent(invisible_scroll.get());
8107 8116
8108 container->AddChild(std::move(invisible_scroll)); 8117 container->AddChild(std::move(invisible_scroll));
8109 container->AddChild(std::move(scroll_child)); 8118 container->AddChild(std::move(scroll_child));
8110 8119
8111 scroll_layer->AddChild(std::move(container)); 8120 scroll_layer->AddChild(std::move(container));
8112 8121
8113 SetNeedsRebuildPropertyTrees(); 8122 SetNeedsRebuildPropertyTrees();
8114 DrawFrame(); 8123 DrawFrame();
8115 8124
8116 // We should have scrolled |child_scroll| even though it is invisible. 8125 // We should have scrolled |child_scroll| even though it is invisible.
8117 // The reason for this is that if the scrolling the scroll would move a layer 8126 // The reason for this is that if the scrolling the scroll would move a layer
8118 // that is a drawn RSLL member, then we should accept this hit. 8127 // that is a drawn RSLL member, then we should accept this hit.
8119 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 8128 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
8120 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), 8129 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(),
8121 InputHandler::WHEEL) 8130 InputHandler::WHEEL)
8122 .thread); 8131 .thread);
8123 8132
8124 EXPECT_EQ(7, host_impl_->CurrentlyScrollingLayer()->id()); 8133 EXPECT_EQ(7, host_impl_->CurrentlyScrollingLayer()->id());
8125 } 8134 }
8126 8135
8127 // Make sure LatencyInfo carried by LatencyInfoSwapPromise are passed 8136 // Make sure LatencyInfo carried by LatencyInfoSwapPromise are passed
8128 // to CompositorFrameMetadata after SwapBuffers(); 8137 // to CompositorFrameMetadata after SwapBuffers();
8129 TEST_F(LayerTreeHostImplTest, LatencyInfoPassedToCompositorFrameMetadata) { 8138 TEST_F(LayerTreeHostImplTest, LatencyInfoPassedToCompositorFrameMetadata) {
8130 scoped_ptr<SolidColorLayerImpl> root = 8139 std::unique_ptr<SolidColorLayerImpl> root =
8131 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); 8140 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1);
8132 root->SetPosition(gfx::PointF()); 8141 root->SetPosition(gfx::PointF());
8133 root->SetBounds(gfx::Size(10, 10)); 8142 root->SetBounds(gfx::Size(10, 10));
8134 root->SetDrawsContent(true); 8143 root->SetDrawsContent(true);
8135 root->SetForceRenderSurface(true); 8144 root->SetForceRenderSurface(true);
8136 8145
8137 host_impl_->active_tree()->SetRootLayer(std::move(root)); 8146 host_impl_->active_tree()->SetRootLayer(std::move(root));
8138 8147
8139 FakeOutputSurface* fake_output_surface = 8148 FakeOutputSurface* fake_output_surface =
8140 static_cast<FakeOutputSurface*>(host_impl_->output_surface()); 8149 static_cast<FakeOutputSurface*>(host_impl_->output_surface());
8141 8150
8142 const std::vector<ui::LatencyInfo>& metadata_latency_before = 8151 const std::vector<ui::LatencyInfo>& metadata_latency_before =
8143 fake_output_surface->last_sent_frame().metadata.latency_info; 8152 fake_output_surface->last_sent_frame().metadata.latency_info;
8144 EXPECT_TRUE(metadata_latency_before.empty()); 8153 EXPECT_TRUE(metadata_latency_before.empty());
8145 8154
8146 ui::LatencyInfo latency_info; 8155 ui::LatencyInfo latency_info;
8147 latency_info.AddLatencyNumber( 8156 latency_info.AddLatencyNumber(
8148 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, 0); 8157 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, 0);
8149 scoped_ptr<SwapPromise> swap_promise( 8158 std::unique_ptr<SwapPromise> swap_promise(
8150 new LatencyInfoSwapPromise(latency_info)); 8159 new LatencyInfoSwapPromise(latency_info));
8151 host_impl_->active_tree()->QueuePinnedSwapPromise(std::move(swap_promise)); 8160 host_impl_->active_tree()->QueuePinnedSwapPromise(std::move(swap_promise));
8152 host_impl_->SetNeedsRedraw(); 8161 host_impl_->SetNeedsRedraw();
8153 8162
8154 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize()); 8163 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize());
8155 LayerTreeHostImpl::FrameData frame; 8164 LayerTreeHostImpl::FrameData frame;
8156 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); 8165 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame));
8157 host_impl_->DrawLayers(&frame); 8166 host_impl_->DrawLayers(&frame);
8158 host_impl_->DidDrawAllLayers(frame); 8167 host_impl_->DidDrawAllLayers(frame);
8159 EXPECT_TRUE(host_impl_->SwapBuffers(frame)); 8168 EXPECT_TRUE(host_impl_->SwapBuffers(frame));
8160 8169
8161 const std::vector<ui::LatencyInfo>& metadata_latency_after = 8170 const std::vector<ui::LatencyInfo>& metadata_latency_after =
8162 fake_output_surface->last_sent_frame().metadata.latency_info; 8171 fake_output_surface->last_sent_frame().metadata.latency_info;
8163 EXPECT_EQ(1u, metadata_latency_after.size()); 8172 EXPECT_EQ(1u, metadata_latency_after.size());
8164 EXPECT_TRUE(metadata_latency_after[0].FindLatency( 8173 EXPECT_TRUE(metadata_latency_after[0].FindLatency(
8165 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, NULL)); 8174 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, NULL));
8166 } 8175 }
8167 8176
8168 TEST_F(LayerTreeHostImplTest, SelectionBoundsPassedToCompositorFrameMetadata) { 8177 TEST_F(LayerTreeHostImplTest, SelectionBoundsPassedToCompositorFrameMetadata) {
8169 int root_layer_id = 1; 8178 int root_layer_id = 1;
8170 scoped_ptr<SolidColorLayerImpl> root = 8179 std::unique_ptr<SolidColorLayerImpl> root =
8171 SolidColorLayerImpl::Create(host_impl_->active_tree(), root_layer_id); 8180 SolidColorLayerImpl::Create(host_impl_->active_tree(), root_layer_id);
8172 root->SetPosition(gfx::PointF()); 8181 root->SetPosition(gfx::PointF());
8173 root->SetBounds(gfx::Size(10, 10)); 8182 root->SetBounds(gfx::Size(10, 10));
8174 root->SetDrawsContent(true); 8183 root->SetDrawsContent(true);
8175 root->SetForceRenderSurface(true); 8184 root->SetForceRenderSurface(true);
8176 8185
8177 host_impl_->active_tree()->SetRootLayer(std::move(root)); 8186 host_impl_->active_tree()->SetRootLayer(std::move(root));
8178 8187
8179 // Ensure the default frame selection bounds are empty. 8188 // Ensure the default frame selection bounds are empty.
8180 FakeOutputSurface* fake_output_surface = 8189 FakeOutputSurface* fake_output_surface =
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
8243 int* set_needs_redraw_count_; 8252 int* set_needs_redraw_count_;
8244 int* forward_to_main_count_; 8253 int* forward_to_main_count_;
8245 }; 8254 };
8246 8255
8247 TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) { 8256 TEST_F(LayerTreeHostImplTest, SimpleSwapPromiseMonitor) {
8248 int set_needs_commit_count = 0; 8257 int set_needs_commit_count = 0;
8249 int set_needs_redraw_count = 0; 8258 int set_needs_redraw_count = 0;
8250 int forward_to_main_count = 0; 8259 int forward_to_main_count = 0;
8251 8260
8252 { 8261 {
8253 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( 8262 std::unique_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor(
8254 new SimpleSwapPromiseMonitor(NULL, 8263 new SimpleSwapPromiseMonitor(
8255 host_impl_.get(), 8264 NULL, host_impl_.get(), &set_needs_commit_count,
8256 &set_needs_commit_count, 8265 &set_needs_redraw_count, &forward_to_main_count));
8257 &set_needs_redraw_count,
8258 &forward_to_main_count));
8259 host_impl_->SetNeedsRedraw(); 8266 host_impl_->SetNeedsRedraw();
8260 EXPECT_EQ(0, set_needs_commit_count); 8267 EXPECT_EQ(0, set_needs_commit_count);
8261 EXPECT_EQ(1, set_needs_redraw_count); 8268 EXPECT_EQ(1, set_needs_redraw_count);
8262 EXPECT_EQ(0, forward_to_main_count); 8269 EXPECT_EQ(0, forward_to_main_count);
8263 } 8270 }
8264 8271
8265 // Now the monitor is destroyed, SetNeedsRedraw() is no longer being 8272 // Now the monitor is destroyed, SetNeedsRedraw() is no longer being
8266 // monitored. 8273 // monitored.
8267 host_impl_->SetNeedsRedraw(); 8274 host_impl_->SetNeedsRedraw();
8268 EXPECT_EQ(0, set_needs_commit_count); 8275 EXPECT_EQ(0, set_needs_commit_count);
8269 EXPECT_EQ(1, set_needs_redraw_count); 8276 EXPECT_EQ(1, set_needs_redraw_count);
8270 EXPECT_EQ(0, forward_to_main_count); 8277 EXPECT_EQ(0, forward_to_main_count);
8271 8278
8272 { 8279 {
8273 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( 8280 std::unique_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor(
8274 new SimpleSwapPromiseMonitor(NULL, 8281 new SimpleSwapPromiseMonitor(
8275 host_impl_.get(), 8282 NULL, host_impl_.get(), &set_needs_commit_count,
8276 &set_needs_commit_count, 8283 &set_needs_redraw_count, &forward_to_main_count));
8277 &set_needs_redraw_count,
8278 &forward_to_main_count));
8279 host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10)); 8284 host_impl_->SetNeedsRedrawRect(gfx::Rect(10, 10));
8280 EXPECT_EQ(0, set_needs_commit_count); 8285 EXPECT_EQ(0, set_needs_commit_count);
8281 EXPECT_EQ(2, set_needs_redraw_count); 8286 EXPECT_EQ(2, set_needs_redraw_count);
8282 EXPECT_EQ(0, forward_to_main_count); 8287 EXPECT_EQ(0, forward_to_main_count);
8283 } 8288 }
8284 8289
8285 { 8290 {
8286 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( 8291 std::unique_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor(
8287 new SimpleSwapPromiseMonitor(NULL, 8292 new SimpleSwapPromiseMonitor(
8288 host_impl_.get(), 8293 NULL, host_impl_.get(), &set_needs_commit_count,
8289 &set_needs_commit_count, 8294 &set_needs_redraw_count, &forward_to_main_count));
8290 &set_needs_redraw_count,
8291 &forward_to_main_count));
8292 // Empty damage rect won't signal the monitor. 8295 // Empty damage rect won't signal the monitor.
8293 host_impl_->SetNeedsRedrawRect(gfx::Rect()); 8296 host_impl_->SetNeedsRedrawRect(gfx::Rect());
8294 EXPECT_EQ(0, set_needs_commit_count); 8297 EXPECT_EQ(0, set_needs_commit_count);
8295 EXPECT_EQ(2, set_needs_redraw_count); 8298 EXPECT_EQ(2, set_needs_redraw_count);
8296 EXPECT_EQ(0, forward_to_main_count); 8299 EXPECT_EQ(0, forward_to_main_count);
8297 } 8300 }
8298 8301
8299 { 8302 {
8300 set_needs_commit_count = 0; 8303 set_needs_commit_count = 0;
8301 set_needs_redraw_count = 0; 8304 set_needs_redraw_count = 0;
8302 forward_to_main_count = 0; 8305 forward_to_main_count = 0;
8303 scoped_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor( 8306 std::unique_ptr<SimpleSwapPromiseMonitor> swap_promise_monitor(
8304 new SimpleSwapPromiseMonitor(NULL, 8307 new SimpleSwapPromiseMonitor(
8305 host_impl_.get(), 8308 NULL, host_impl_.get(), &set_needs_commit_count,
8306 &set_needs_commit_count, 8309 &set_needs_redraw_count, &forward_to_main_count));
8307 &set_needs_redraw_count,
8308 &forward_to_main_count));
8309 SetupScrollAndContentsLayers(gfx::Size(100, 100)); 8310 SetupScrollAndContentsLayers(gfx::Size(100, 100));
8310 8311
8311 // Scrolling normally should not trigger any forwarding. 8312 // Scrolling normally should not trigger any forwarding.
8312 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 8313 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
8313 host_impl_ 8314 host_impl_
8314 ->ScrollBegin(BeginState(gfx::Point()).get(), 8315 ->ScrollBegin(BeginState(gfx::Point()).get(),
8315 InputHandler::TOUCHSCREEN) 8316 InputHandler::TOUCHSCREEN)
8316 .thread); 8317 .thread);
8317 EXPECT_TRUE( 8318 EXPECT_TRUE(
8318 host_impl_->ScrollBy( 8319 host_impl_->ScrollBy(
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after
8824 void SetupVirtualViewportLayers(const gfx::Size& content_size, 8825 void SetupVirtualViewportLayers(const gfx::Size& content_size,
8825 const gfx::Size& outer_viewport, 8826 const gfx::Size& outer_viewport,
8826 const gfx::Size& inner_viewport) { 8827 const gfx::Size& inner_viewport) {
8827 LayerTreeImpl* layer_tree_impl = host_impl_->active_tree(); 8828 LayerTreeImpl* layer_tree_impl = host_impl_->active_tree();
8828 const int kOuterViewportClipLayerId = 6; 8829 const int kOuterViewportClipLayerId = 6;
8829 const int kOuterViewportScrollLayerId = 7; 8830 const int kOuterViewportScrollLayerId = 7;
8830 const int kInnerViewportScrollLayerId = 2; 8831 const int kInnerViewportScrollLayerId = 2;
8831 const int kInnerViewportClipLayerId = 4; 8832 const int kInnerViewportClipLayerId = 4;
8832 const int kPageScaleLayerId = 5; 8833 const int kPageScaleLayerId = 5;
8833 8834
8834 scoped_ptr<LayerImpl> inner_scroll = 8835 std::unique_ptr<LayerImpl> inner_scroll =
8835 LayerImpl::Create(layer_tree_impl, kInnerViewportScrollLayerId); 8836 LayerImpl::Create(layer_tree_impl, kInnerViewportScrollLayerId);
8836 inner_scroll->SetIsContainerForFixedPositionLayers(true); 8837 inner_scroll->SetIsContainerForFixedPositionLayers(true);
8837 inner_scroll->layer_tree_impl() 8838 inner_scroll->layer_tree_impl()
8838 ->property_trees() 8839 ->property_trees()
8839 ->scroll_tree.UpdateScrollOffsetBaseForTesting(inner_scroll->id(), 8840 ->scroll_tree.UpdateScrollOffsetBaseForTesting(inner_scroll->id(),
8840 gfx::ScrollOffset()); 8841 gfx::ScrollOffset());
8841 8842
8842 scoped_ptr<LayerImpl> inner_clip = 8843 std::unique_ptr<LayerImpl> inner_clip =
8843 LayerImpl::Create(layer_tree_impl, kInnerViewportClipLayerId); 8844 LayerImpl::Create(layer_tree_impl, kInnerViewportClipLayerId);
8844 inner_clip->SetBounds(inner_viewport); 8845 inner_clip->SetBounds(inner_viewport);
8845 8846
8846 scoped_ptr<LayerImpl> page_scale = 8847 std::unique_ptr<LayerImpl> page_scale =
8847 LayerImpl::Create(layer_tree_impl, kPageScaleLayerId); 8848 LayerImpl::Create(layer_tree_impl, kPageScaleLayerId);
8848 8849
8849 inner_scroll->SetScrollClipLayer(inner_clip->id()); 8850 inner_scroll->SetScrollClipLayer(inner_clip->id());
8850 inner_scroll->SetBounds(outer_viewport); 8851 inner_scroll->SetBounds(outer_viewport);
8851 inner_scroll->SetPosition(gfx::PointF()); 8852 inner_scroll->SetPosition(gfx::PointF());
8852 8853
8853 scoped_ptr<LayerImpl> outer_clip = 8854 std::unique_ptr<LayerImpl> outer_clip =
8854 LayerImpl::Create(layer_tree_impl, kOuterViewportClipLayerId); 8855 LayerImpl::Create(layer_tree_impl, kOuterViewportClipLayerId);
8855 outer_clip->SetBounds(outer_viewport); 8856 outer_clip->SetBounds(outer_viewport);
8856 outer_clip->SetIsContainerForFixedPositionLayers(true); 8857 outer_clip->SetIsContainerForFixedPositionLayers(true);
8857 8858
8858 scoped_ptr<LayerImpl> outer_scroll = 8859 std::unique_ptr<LayerImpl> outer_scroll =
8859 LayerImpl::Create(layer_tree_impl, kOuterViewportScrollLayerId); 8860 LayerImpl::Create(layer_tree_impl, kOuterViewportScrollLayerId);
8860 outer_scroll->SetScrollClipLayer(outer_clip->id()); 8861 outer_scroll->SetScrollClipLayer(outer_clip->id());
8861 outer_scroll->layer_tree_impl() 8862 outer_scroll->layer_tree_impl()
8862 ->property_trees() 8863 ->property_trees()
8863 ->scroll_tree.UpdateScrollOffsetBaseForTesting(outer_scroll->id(), 8864 ->scroll_tree.UpdateScrollOffsetBaseForTesting(outer_scroll->id(),
8864 gfx::ScrollOffset()); 8865 gfx::ScrollOffset());
8865 outer_scroll->SetBounds(content_size); 8866 outer_scroll->SetBounds(content_size);
8866 outer_scroll->SetPosition(gfx::PointF()); 8867 outer_scroll->SetPosition(gfx::PointF());
8867 8868
8868 scoped_ptr<LayerImpl> contents = 8869 std::unique_ptr<LayerImpl> contents = LayerImpl::Create(layer_tree_impl, 8);
8869 LayerImpl::Create(layer_tree_impl, 8);
8870 contents->SetDrawsContent(true); 8870 contents->SetDrawsContent(true);
8871 contents->SetBounds(content_size); 8871 contents->SetBounds(content_size);
8872 contents->SetPosition(gfx::PointF()); 8872 contents->SetPosition(gfx::PointF());
8873 8873
8874 outer_scroll->AddChild(std::move(contents)); 8874 outer_scroll->AddChild(std::move(contents));
8875 outer_clip->AddChild(std::move(outer_scroll)); 8875 outer_clip->AddChild(std::move(outer_scroll));
8876 inner_scroll->AddChild(std::move(outer_clip)); 8876 inner_scroll->AddChild(std::move(outer_clip));
8877 page_scale->AddChild(std::move(inner_scroll)); 8877 page_scale->AddChild(std::move(inner_scroll));
8878 inner_clip->AddChild(std::move(page_scale)); 8878 inner_clip->AddChild(std::move(page_scale));
8879 8879
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
9049 TouchFlingDoesntSwitchScrollingLayer) { 9049 TouchFlingDoesntSwitchScrollingLayer) {
9050 gfx::Size content_size = gfx::Size(100, 160); 9050 gfx::Size content_size = gfx::Size(100, 160);
9051 gfx::Size outer_viewport = gfx::Size(50, 80); 9051 gfx::Size outer_viewport = gfx::Size(50, 80);
9052 gfx::Size inner_viewport = gfx::Size(25, 40); 9052 gfx::Size inner_viewport = gfx::Size(25, 40);
9053 9053
9054 SetupVirtualViewportLayers(content_size, outer_viewport, inner_viewport); 9054 SetupVirtualViewportLayers(content_size, outer_viewport, inner_viewport);
9055 9055
9056 LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer(); 9056 LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer();
9057 LayerImpl* inner_scroll = host_impl_->InnerViewportScrollLayer(); 9057 LayerImpl* inner_scroll = host_impl_->InnerViewportScrollLayer();
9058 9058
9059 scoped_ptr<LayerImpl> child = 9059 std::unique_ptr<LayerImpl> child =
9060 CreateScrollableLayer(10, outer_viewport, outer_scroll); 9060 CreateScrollableLayer(10, outer_viewport, outer_scroll);
9061 LayerImpl* child_scroll = child.get(); 9061 LayerImpl* child_scroll = child.get();
9062 outer_scroll->children()[0]->AddChild(std::move(child)); 9062 outer_scroll->children()[0]->AddChild(std::move(child));
9063 9063
9064 SetNeedsRebuildPropertyTrees(); 9064 SetNeedsRebuildPropertyTrees();
9065 DrawFrame(); 9065 DrawFrame();
9066 { 9066 {
9067 scoped_ptr<ScrollAndScaleSet> scroll_info; 9067 std::unique_ptr<ScrollAndScaleSet> scroll_info;
9068 9068
9069 gfx::Vector2d scroll_delta(0, inner_viewport.height()); 9069 gfx::Vector2d scroll_delta(0, inner_viewport.height());
9070 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 9070 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
9071 host_impl_ 9071 host_impl_
9072 ->ScrollBegin(BeginState(gfx::Point()).get(), 9072 ->ScrollBegin(BeginState(gfx::Point()).get(),
9073 InputHandler::TOUCHSCREEN) 9073 InputHandler::TOUCHSCREEN)
9074 .thread); 9074 .thread);
9075 EXPECT_TRUE( 9075 EXPECT_TRUE(
9076 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get()) 9076 host_impl_->ScrollBy(UpdateState(gfx::Point(), scroll_delta).get())
9077 .did_scroll); 9077 .did_scroll);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
9117 ScrollBeginEventThatTargetsViewportLayerSkipsHitTest) { 9117 ScrollBeginEventThatTargetsViewportLayerSkipsHitTest) {
9118 gfx::Size content_size = gfx::Size(100, 160); 9118 gfx::Size content_size = gfx::Size(100, 160);
9119 gfx::Size outer_viewport = gfx::Size(50, 80); 9119 gfx::Size outer_viewport = gfx::Size(50, 80);
9120 gfx::Size inner_viewport = gfx::Size(25, 40); 9120 gfx::Size inner_viewport = gfx::Size(25, 40);
9121 9121
9122 SetupVirtualViewportLayers(content_size, outer_viewport, inner_viewport); 9122 SetupVirtualViewportLayers(content_size, outer_viewport, inner_viewport);
9123 9123
9124 LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer(); 9124 LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer();
9125 LayerImpl* inner_scroll = host_impl_->InnerViewportScrollLayer(); 9125 LayerImpl* inner_scroll = host_impl_->InnerViewportScrollLayer();
9126 9126
9127 scoped_ptr<LayerImpl> child = 9127 std::unique_ptr<LayerImpl> child =
9128 CreateScrollableLayer(10, outer_viewport, outer_scroll); 9128 CreateScrollableLayer(10, outer_viewport, outer_scroll);
9129 LayerImpl* child_scroll = child.get(); 9129 LayerImpl* child_scroll = child.get();
9130 outer_scroll->children()[0]->AddChild(std::move(child)); 9130 outer_scroll->children()[0]->AddChild(std::move(child));
9131 9131
9132 SetNeedsRebuildPropertyTrees(); 9132 SetNeedsRebuildPropertyTrees();
9133 DrawFrame(); 9133 DrawFrame();
9134 9134
9135 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 9135 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
9136 host_impl_ 9136 host_impl_
9137 ->RootScrollBegin(BeginState(gfx::Point()).get(), 9137 ->RootScrollBegin(BeginState(gfx::Point()).get(),
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
9284 // Different draw params does swap. 9284 // Different draw params does swap.
9285 did_request_redraw_ = false; 9285 did_request_redraw_ = false;
9286 host_impl_->OnDraw(draw_transform, draw_viewport2, clip, 9286 host_impl_->OnDraw(draw_transform, draw_viewport2, clip,
9287 resourceless_software_draw); 9287 resourceless_software_draw);
9288 EXPECT_TRUE(did_request_redraw_); 9288 EXPECT_TRUE(did_request_redraw_);
9289 EXPECT_FALSE(last_on_draw_frame_->has_no_damage); 9289 EXPECT_FALSE(last_on_draw_frame_->has_no_damage);
9290 } 9290 }
9291 9291
9292 class ResourcelessSoftwareLayerTreeHostImplTest : public LayerTreeHostImplTest { 9292 class ResourcelessSoftwareLayerTreeHostImplTest : public LayerTreeHostImplTest {
9293 protected: 9293 protected:
9294 scoped_ptr<OutputSurface> CreateOutputSurface() override { 9294 std::unique_ptr<OutputSurface> CreateOutputSurface() override {
9295 return FakeOutputSurface::Create3dWithResourcelessSoftwareSupport(); 9295 return FakeOutputSurface::Create3dWithResourcelessSoftwareSupport();
9296 } 9296 }
9297 }; 9297 };
9298 9298
9299 TEST_F(ResourcelessSoftwareLayerTreeHostImplTest, 9299 TEST_F(ResourcelessSoftwareLayerTreeHostImplTest,
9300 ResourcelessSoftwareSetNeedsRedraw) { 9300 ResourcelessSoftwareSetNeedsRedraw) {
9301 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); 9301 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1));
9302 9302
9303 const gfx::Size viewport_size(100, 100); 9303 const gfx::Size viewport_size(100, 100);
9304 host_impl_->SetViewportSize(viewport_size); 9304 host_impl_->SetViewportSize(viewport_size);
(...skipping 23 matching lines...) Expand all
9328 } 9328 }
9329 9329
9330 TEST_F(ResourcelessSoftwareLayerTreeHostImplTest, 9330 TEST_F(ResourcelessSoftwareLayerTreeHostImplTest,
9331 ResourcelessSoftwareDrawSkipsUpdateTiles) { 9331 ResourcelessSoftwareDrawSkipsUpdateTiles) {
9332 const gfx::Size viewport_size(100, 100); 9332 const gfx::Size viewport_size(100, 100);
9333 host_impl_->SetViewportSize(viewport_size); 9333 host_impl_->SetViewportSize(viewport_size);
9334 9334
9335 host_impl_->CreatePendingTree(); 9335 host_impl_->CreatePendingTree();
9336 scoped_refptr<FakeRasterSource> raster_source( 9336 scoped_refptr<FakeRasterSource> raster_source(
9337 FakeRasterSource::CreateFilled(viewport_size)); 9337 FakeRasterSource::CreateFilled(viewport_size));
9338 scoped_ptr<FakePictureLayerImpl> layer( 9338 std::unique_ptr<FakePictureLayerImpl> layer(
9339 FakePictureLayerImpl::CreateWithRasterSource(host_impl_->pending_tree(), 9339 FakePictureLayerImpl::CreateWithRasterSource(host_impl_->pending_tree(),
9340 11, raster_source)); 9340 11, raster_source));
9341 layer->SetBounds(viewport_size); 9341 layer->SetBounds(viewport_size);
9342 layer->SetDrawsContent(true); 9342 layer->SetDrawsContent(true);
9343 host_impl_->pending_tree()->SetRootLayer(std::move(layer)); 9343 host_impl_->pending_tree()->SetRootLayer(std::move(layer));
9344 9344
9345 host_impl_->pending_tree()->BuildPropertyTreesForTesting(); 9345 host_impl_->pending_tree()->BuildPropertyTreesForTesting();
9346 host_impl_->ActivateSyncTree(); 9346 host_impl_->ActivateSyncTree();
9347 9347
9348 const gfx::Transform draw_transform; 9348 const gfx::Transform draw_transform;
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
9639 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, 9639 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD,
9640 host_impl_->ScrollBegin(BeginState(gfx::Point(0, y)).get(), 9640 host_impl_->ScrollBegin(BeginState(gfx::Point(0, y)).get(),
9641 InputHandler::WHEEL) 9641 InputHandler::WHEEL)
9642 .thread); 9642 .thread);
9643 EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(0, y), 9643 EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(0, y),
9644 InputHandler::WHEEL)); 9644 InputHandler::WHEEL));
9645 host_impl_->ScrollBy( 9645 host_impl_->ScrollBy(
9646 UpdateState(gfx::Point(0, y), gfx::Vector2d(0, 50)).get()); 9646 UpdateState(gfx::Point(0, y), gfx::Vector2d(0, 50)).get());
9647 EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(0, y + 50), 9647 EXPECT_TRUE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(0, y + 50),
9648 InputHandler::WHEEL)); 9648 InputHandler::WHEEL));
9649 scoped_ptr<ScrollState> scroll_state_end = EndState(); 9649 std::unique_ptr<ScrollState> scroll_state_end = EndState();
9650 host_impl_->ScrollEnd(scroll_state_end.get()); 9650 host_impl_->ScrollEnd(scroll_state_end.get());
9651 EXPECT_FALSE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(), 9651 EXPECT_FALSE(host_impl_->IsCurrentlyScrollingLayerAt(gfx::Point(),
9652 InputHandler::WHEEL)); 9652 InputHandler::WHEEL));
9653 9653
9654 // The instant scroll should have marked the smooth scroll animation as 9654 // The instant scroll should have marked the smooth scroll animation as
9655 // aborted. 9655 // aborted.
9656 EXPECT_FALSE(host_impl_->animation_host()->HasActiveAnimationForTesting( 9656 EXPECT_FALSE(host_impl_->animation_host()->HasActiveAnimationForTesting(
9657 scrolling_layer->id())); 9657 scrolling_layer->id()));
9658 9658
9659 EXPECT_VECTOR2DF_EQ(gfx::ScrollOffset(0, y + 50), 9659 EXPECT_VECTOR2DF_EQ(gfx::ScrollOffset(0, y + 50),
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
10005 host_impl_->DidFinishImplFrame(); 10005 host_impl_->DidFinishImplFrame();
10006 } 10006 }
10007 10007
10008 TEST_F(LayerTreeHostImplTest, InvalidLayerNotAddedToRasterQueue) { 10008 TEST_F(LayerTreeHostImplTest, InvalidLayerNotAddedToRasterQueue) {
10009 host_impl_->CreatePendingTree(); 10009 host_impl_->CreatePendingTree();
10010 10010
10011 Region empty_invalidation; 10011 Region empty_invalidation;
10012 scoped_refptr<RasterSource> raster_source_with_tiles( 10012 scoped_refptr<RasterSource> raster_source_with_tiles(
10013 FakeRasterSource::CreateFilled(gfx::Size(10, 10))); 10013 FakeRasterSource::CreateFilled(gfx::Size(10, 10)));
10014 10014
10015 scoped_ptr<FakePictureLayerImpl> layer = 10015 std::unique_ptr<FakePictureLayerImpl> layer =
10016 FakePictureLayerImpl::Create(host_impl_->pending_tree(), 11); 10016 FakePictureLayerImpl::Create(host_impl_->pending_tree(), 11);
10017 layer->SetBounds(gfx::Size(10, 10)); 10017 layer->SetBounds(gfx::Size(10, 10));
10018 layer->set_gpu_raster_max_texture_size(host_impl_->device_viewport_size()); 10018 layer->set_gpu_raster_max_texture_size(host_impl_->device_viewport_size());
10019 layer->SetDrawsContent(true); 10019 layer->SetDrawsContent(true);
10020 layer->tilings()->AddTiling(1.0f, raster_source_with_tiles); 10020 layer->tilings()->AddTiling(1.0f, raster_source_with_tiles);
10021 layer->UpdateRasterSource(raster_source_with_tiles, &empty_invalidation, 10021 layer->UpdateRasterSource(raster_source_with_tiles, &empty_invalidation,
10022 nullptr); 10022 nullptr);
10023 layer->tilings()->tiling_at(0)->set_resolution( 10023 layer->tilings()->tiling_at(0)->set_resolution(
10024 TileResolution::HIGH_RESOLUTION); 10024 TileResolution::HIGH_RESOLUTION);
10025 layer->tilings()->tiling_at(0)->CreateAllTilesForTesting(); 10025 layer->tilings()->tiling_at(0)->CreateAllTilesForTesting();
10026 layer->tilings()->tiling_at(0)->ComputeTilePriorityRects( 10026 layer->tilings()->tiling_at(0)->ComputeTilePriorityRects(
10027 gfx::Rect(gfx::Size(10, 10)), 1.f, 1.0, Occlusion()); 10027 gfx::Rect(gfx::Size(10, 10)), 1.f, 1.0, Occlusion());
10028 host_impl_->pending_tree()->SetRootLayer(std::move(layer)); 10028 host_impl_->pending_tree()->SetRootLayer(std::move(layer));
10029 10029
10030 FakePictureLayerImpl* root_layer = static_cast<FakePictureLayerImpl*>( 10030 FakePictureLayerImpl* root_layer = static_cast<FakePictureLayerImpl*>(
10031 host_impl_->pending_tree()->root_layer()); 10031 host_impl_->pending_tree()->root_layer());
10032 10032
10033 root_layer->set_has_valid_tile_priorities(true); 10033 root_layer->set_has_valid_tile_priorities(true);
10034 scoped_ptr<RasterTilePriorityQueue> non_empty_raster_priority_queue_all = 10034 std::unique_ptr<RasterTilePriorityQueue> non_empty_raster_priority_queue_all =
10035 host_impl_->BuildRasterQueue(TreePriority::SAME_PRIORITY_FOR_BOTH_TREES, 10035 host_impl_->BuildRasterQueue(TreePriority::SAME_PRIORITY_FOR_BOTH_TREES,
10036 RasterTilePriorityQueue::Type::ALL); 10036 RasterTilePriorityQueue::Type::ALL);
10037 EXPECT_FALSE(non_empty_raster_priority_queue_all->IsEmpty()); 10037 EXPECT_FALSE(non_empty_raster_priority_queue_all->IsEmpty());
10038 10038
10039 root_layer->set_has_valid_tile_priorities(false); 10039 root_layer->set_has_valid_tile_priorities(false);
10040 scoped_ptr<RasterTilePriorityQueue> empty_raster_priority_queue_all = 10040 std::unique_ptr<RasterTilePriorityQueue> empty_raster_priority_queue_all =
10041 host_impl_->BuildRasterQueue(TreePriority::SAME_PRIORITY_FOR_BOTH_TREES, 10041 host_impl_->BuildRasterQueue(TreePriority::SAME_PRIORITY_FOR_BOTH_TREES,
10042 RasterTilePriorityQueue::Type::ALL); 10042 RasterTilePriorityQueue::Type::ALL);
10043 EXPECT_TRUE(empty_raster_priority_queue_all->IsEmpty()); 10043 EXPECT_TRUE(empty_raster_priority_queue_all->IsEmpty());
10044 } 10044 }
10045 10045
10046 TEST_F(LayerTreeHostImplTest, DidBecomeActive) { 10046 TEST_F(LayerTreeHostImplTest, DidBecomeActive) {
10047 host_impl_->CreatePendingTree(); 10047 host_impl_->CreatePendingTree();
10048 host_impl_->ActivateSyncTree(); 10048 host_impl_->ActivateSyncTree();
10049 host_impl_->CreatePendingTree(); 10049 host_impl_->CreatePendingTree();
10050 10050
10051 LayerTreeImpl* pending_tree = host_impl_->pending_tree(); 10051 LayerTreeImpl* pending_tree = host_impl_->pending_tree();
10052 10052
10053 scoped_ptr<FakePictureLayerImpl> pending_layer = 10053 std::unique_ptr<FakePictureLayerImpl> pending_layer =
10054 FakePictureLayerImpl::Create(pending_tree, 10); 10054 FakePictureLayerImpl::Create(pending_tree, 10);
10055 FakePictureLayerImpl* raw_pending_layer = pending_layer.get(); 10055 FakePictureLayerImpl* raw_pending_layer = pending_layer.get();
10056 pending_tree->SetRootLayer(std::move(pending_layer)); 10056 pending_tree->SetRootLayer(std::move(pending_layer));
10057 ASSERT_EQ(raw_pending_layer, pending_tree->root_layer()); 10057 ASSERT_EQ(raw_pending_layer, pending_tree->root_layer());
10058 10058
10059 EXPECT_EQ(0u, raw_pending_layer->did_become_active_call_count()); 10059 EXPECT_EQ(0u, raw_pending_layer->did_become_active_call_count());
10060 pending_tree->DidBecomeActive(); 10060 pending_tree->DidBecomeActive();
10061 EXPECT_EQ(1u, raw_pending_layer->did_become_active_call_count()); 10061 EXPECT_EQ(1u, raw_pending_layer->did_become_active_call_count());
10062 10062
10063 scoped_ptr<FakePictureLayerImpl> mask_layer = 10063 std::unique_ptr<FakePictureLayerImpl> mask_layer =
10064 FakePictureLayerImpl::Create(pending_tree, 11); 10064 FakePictureLayerImpl::Create(pending_tree, 11);
10065 FakePictureLayerImpl* raw_mask_layer = mask_layer.get(); 10065 FakePictureLayerImpl* raw_mask_layer = mask_layer.get();
10066 raw_pending_layer->SetMaskLayer(std::move(mask_layer)); 10066 raw_pending_layer->SetMaskLayer(std::move(mask_layer));
10067 ASSERT_EQ(raw_mask_layer, raw_pending_layer->mask_layer()); 10067 ASSERT_EQ(raw_mask_layer, raw_pending_layer->mask_layer());
10068 10068
10069 EXPECT_EQ(1u, raw_pending_layer->did_become_active_call_count()); 10069 EXPECT_EQ(1u, raw_pending_layer->did_become_active_call_count());
10070 EXPECT_EQ(0u, raw_mask_layer->did_become_active_call_count()); 10070 EXPECT_EQ(0u, raw_mask_layer->did_become_active_call_count());
10071 pending_tree->DidBecomeActive(); 10071 pending_tree->DidBecomeActive();
10072 EXPECT_EQ(2u, raw_pending_layer->did_become_active_call_count()); 10072 EXPECT_EQ(2u, raw_pending_layer->did_become_active_call_count());
10073 EXPECT_EQ(1u, raw_mask_layer->did_become_active_call_count()); 10073 EXPECT_EQ(1u, raw_mask_layer->did_become_active_call_count());
10074 10074
10075 scoped_ptr<FakePictureLayerImpl> replica_layer = 10075 std::unique_ptr<FakePictureLayerImpl> replica_layer =
10076 FakePictureLayerImpl::Create(pending_tree, 12); 10076 FakePictureLayerImpl::Create(pending_tree, 12);
10077 scoped_ptr<FakePictureLayerImpl> replica_mask_layer = 10077 std::unique_ptr<FakePictureLayerImpl> replica_mask_layer =
10078 FakePictureLayerImpl::Create(pending_tree, 13); 10078 FakePictureLayerImpl::Create(pending_tree, 13);
10079 FakePictureLayerImpl* raw_replica_mask_layer = replica_mask_layer.get(); 10079 FakePictureLayerImpl* raw_replica_mask_layer = replica_mask_layer.get();
10080 replica_layer->SetMaskLayer(std::move(replica_mask_layer)); 10080 replica_layer->SetMaskLayer(std::move(replica_mask_layer));
10081 raw_pending_layer->SetReplicaLayer(std::move(replica_layer)); 10081 raw_pending_layer->SetReplicaLayer(std::move(replica_layer));
10082 ASSERT_EQ(raw_replica_mask_layer, 10082 ASSERT_EQ(raw_replica_mask_layer,
10083 raw_pending_layer->replica_layer()->mask_layer()); 10083 raw_pending_layer->replica_layer()->mask_layer());
10084 10084
10085 EXPECT_EQ(2u, raw_pending_layer->did_become_active_call_count()); 10085 EXPECT_EQ(2u, raw_pending_layer->did_become_active_call_count());
10086 EXPECT_EQ(1u, raw_mask_layer->did_become_active_call_count()); 10086 EXPECT_EQ(1u, raw_mask_layer->did_become_active_call_count());
10087 EXPECT_EQ(0u, raw_replica_mask_layer->did_become_active_call_count()); 10087 EXPECT_EQ(0u, raw_replica_mask_layer->did_become_active_call_count());
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
10146 EXPECT_EQ(0, num_lost_surfaces_); 10146 EXPECT_EQ(0, num_lost_surfaces_);
10147 host_impl_->DidLoseOutputSurface(); 10147 host_impl_->DidLoseOutputSurface();
10148 EXPECT_EQ(1, num_lost_surfaces_); 10148 EXPECT_EQ(1, num_lost_surfaces_);
10149 host_impl_->DidLoseOutputSurface(); 10149 host_impl_->DidLoseOutputSurface();
10150 EXPECT_LE(1, num_lost_surfaces_); 10150 EXPECT_LE(1, num_lost_surfaces_);
10151 } 10151 }
10152 10152
10153 size_t CountRenderPassesWithId(const RenderPassList& list, RenderPassId id) { 10153 size_t CountRenderPassesWithId(const RenderPassList& list, RenderPassId id) {
10154 return std::count_if( 10154 return std::count_if(
10155 list.begin(), list.end(), 10155 list.begin(), list.end(),
10156 [id](const scoped_ptr<RenderPass>& p) { return p->id == id; }); 10156 [id](const std::unique_ptr<RenderPass>& p) { return p->id == id; });
10157 } 10157 }
10158 10158
10159 TEST_F(LayerTreeHostImplTest, RemoveUnreferencedRenderPass) { 10159 TEST_F(LayerTreeHostImplTest, RemoveUnreferencedRenderPass) {
10160 LayerTreeHostImpl::FrameData frame; 10160 LayerTreeHostImpl::FrameData frame;
10161 frame.render_passes.push_back(RenderPass::Create()); 10161 frame.render_passes.push_back(RenderPass::Create());
10162 RenderPass* pass3 = frame.render_passes.back().get(); 10162 RenderPass* pass3 = frame.render_passes.back().get();
10163 frame.render_passes.push_back(RenderPass::Create()); 10163 frame.render_passes.push_back(RenderPass::Create());
10164 RenderPass* pass2 = frame.render_passes.back().get(); 10164 RenderPass* pass2 = frame.render_passes.back().get();
10165 frame.render_passes.push_back(RenderPass::Create()); 10165 frame.render_passes.push_back(RenderPass::Create());
10166 RenderPass* pass1 = frame.render_passes.back().get(); 10166 RenderPass* pass1 = frame.render_passes.back().get();
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
10365 host_impl_->gpu_rasterization_status()); 10365 host_impl_->gpu_rasterization_status());
10366 EXPECT_FALSE(host_impl_->use_gpu_rasterization()); 10366 EXPECT_FALSE(host_impl_->use_gpu_rasterization());
10367 10367
10368 host_impl_->SetHasGpuRasterizationTrigger(true); 10368 host_impl_->SetHasGpuRasterizationTrigger(true);
10369 host_impl_->SetContentIsSuitableForGpuRasterization(false); 10369 host_impl_->SetContentIsSuitableForGpuRasterization(false);
10370 EXPECT_EQ(GpuRasterizationStatus::OFF_CONTENT, 10370 EXPECT_EQ(GpuRasterizationStatus::OFF_CONTENT,
10371 host_impl_->gpu_rasterization_status()); 10371 host_impl_->gpu_rasterization_status());
10372 EXPECT_FALSE(host_impl_->use_gpu_rasterization()); 10372 EXPECT_FALSE(host_impl_->use_gpu_rasterization());
10373 EXPECT_FALSE(host_impl_->use_msaa()); 10373 EXPECT_FALSE(host_impl_->use_msaa());
10374 10374
10375 scoped_ptr<TestWebGraphicsContext3D> context_with_msaa = 10375 std::unique_ptr<TestWebGraphicsContext3D> context_with_msaa =
10376 TestWebGraphicsContext3D::Create(); 10376 TestWebGraphicsContext3D::Create();
10377 context_with_msaa->SetMaxSamples(8); 10377 context_with_msaa->SetMaxSamples(8);
10378 10378
10379 LayerTreeSettings msaaSettings = GpuRasterizationEnabledSettings(); 10379 LayerTreeSettings msaaSettings = GpuRasterizationEnabledSettings();
10380 msaaSettings.gpu_rasterization_msaa_sample_count = 4; 10380 msaaSettings.gpu_rasterization_msaa_sample_count = 4;
10381 EXPECT_TRUE(CreateHostImpl( 10381 EXPECT_TRUE(CreateHostImpl(
10382 msaaSettings, FakeOutputSurface::Create3d(std::move(context_with_msaa)))); 10382 msaaSettings, FakeOutputSurface::Create3d(std::move(context_with_msaa))));
10383 host_impl_->SetHasGpuRasterizationTrigger(true); 10383 host_impl_->SetHasGpuRasterizationTrigger(true);
10384 host_impl_->SetContentIsSuitableForGpuRasterization(false); 10384 host_impl_->SetContentIsSuitableForGpuRasterization(false);
10385 EXPECT_EQ(GpuRasterizationStatus::MSAA_CONTENT, 10385 EXPECT_EQ(GpuRasterizationStatus::MSAA_CONTENT,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
10438 host_impl_->SetHasGpuRasterizationTrigger(true); 10438 host_impl_->SetHasGpuRasterizationTrigger(true);
10439 host_impl_->SetContentIsSuitableForGpuRasterization(false); 10439 host_impl_->SetContentIsSuitableForGpuRasterization(false);
10440 EXPECT_EQ(GpuRasterizationStatus::OFF_CONTENT, 10440 EXPECT_EQ(GpuRasterizationStatus::OFF_CONTENT,
10441 host_impl_->gpu_rasterization_status()); 10441 host_impl_->gpu_rasterization_status());
10442 EXPECT_FALSE(host_impl_->use_gpu_rasterization()); 10442 EXPECT_FALSE(host_impl_->use_gpu_rasterization());
10443 } 10443 }
10444 10444
10445 // A mock output surface which lets us detect calls to ForceReclaimResources. 10445 // A mock output surface which lets us detect calls to ForceReclaimResources.
10446 class MockReclaimResourcesOutputSurface : public FakeOutputSurface { 10446 class MockReclaimResourcesOutputSurface : public FakeOutputSurface {
10447 public: 10447 public:
10448 static scoped_ptr<MockReclaimResourcesOutputSurface> Create3d() { 10448 static std::unique_ptr<MockReclaimResourcesOutputSurface> Create3d() {
10449 return make_scoped_ptr(new MockReclaimResourcesOutputSurface( 10449 return base::WrapUnique(new MockReclaimResourcesOutputSurface(
10450 TestContextProvider::Create(), TestContextProvider::CreateWorker(), 10450 TestContextProvider::Create(), TestContextProvider::CreateWorker(),
10451 false)); 10451 false));
10452 } 10452 }
10453 10453
10454 MOCK_METHOD0(ForceReclaimResources, void()); 10454 MOCK_METHOD0(ForceReclaimResources, void());
10455 10455
10456 protected: 10456 protected:
10457 MockReclaimResourcesOutputSurface( 10457 MockReclaimResourcesOutputSurface(
10458 scoped_refptr<ContextProvider> context_provider, 10458 scoped_refptr<ContextProvider> context_provider,
10459 scoped_refptr<ContextProvider> worker_context_provider, 10459 scoped_refptr<ContextProvider> worker_context_provider,
10460 bool delegated_rendering) 10460 bool delegated_rendering)
10461 : FakeOutputSurface(context_provider, 10461 : FakeOutputSurface(context_provider,
10462 worker_context_provider, 10462 worker_context_provider,
10463 delegated_rendering) {} 10463 delegated_rendering) {}
10464 }; 10464 };
10465 10465
10466 // Display::Draw (and the planned Display Scheduler) currently rely on resources 10466 // Display::Draw (and the planned Display Scheduler) currently rely on resources
10467 // being reclaimed to block drawing between BeginCommit / Swap. This test 10467 // being reclaimed to block drawing between BeginCommit / Swap. This test
10468 // ensures that BeginCommit triggers ForceReclaimResources. See 10468 // ensures that BeginCommit triggers ForceReclaimResources. See
10469 // crbug.com/489515. 10469 // crbug.com/489515.
10470 TEST_F(LayerTreeHostImplTest, BeginCommitReclaimsResources) { 10470 TEST_F(LayerTreeHostImplTest, BeginCommitReclaimsResources) {
10471 scoped_ptr<MockReclaimResourcesOutputSurface> output_surface( 10471 std::unique_ptr<MockReclaimResourcesOutputSurface> output_surface(
10472 MockReclaimResourcesOutputSurface::Create3d()); 10472 MockReclaimResourcesOutputSurface::Create3d());
10473 // Hold an unowned pointer to the output surface to use for mock expectations. 10473 // Hold an unowned pointer to the output surface to use for mock expectations.
10474 MockReclaimResourcesOutputSurface* mock_output_surface = output_surface.get(); 10474 MockReclaimResourcesOutputSurface* mock_output_surface = output_surface.get();
10475 10475
10476 CreateHostImpl(DefaultSettings(), std::move(output_surface)); 10476 CreateHostImpl(DefaultSettings(), std::move(output_surface));
10477 EXPECT_CALL(*mock_output_surface, ForceReclaimResources()).Times(1); 10477 EXPECT_CALL(*mock_output_surface, ForceReclaimResources()).Times(1);
10478 host_impl_->BeginCommit(); 10478 host_impl_->BeginCommit();
10479 } 10479 }
10480 10480
10481 TEST_F(LayerTreeHostImplTest, UpdatePageScaleFactorOnActiveTree) { 10481 TEST_F(LayerTreeHostImplTest, UpdatePageScaleFactorOnActiveTree) {
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
10608 // There should not be any jitter measured till we hit the fixed point hits 10608 // There should not be any jitter measured till we hit the fixed point hits
10609 // threshold. 10609 // threshold.
10610 float expected_jitter = 10610 float expected_jitter =
10611 (i == pending_tree->kFixedPointHitsThreshold) ? 500 : 0; 10611 (i == pending_tree->kFixedPointHitsThreshold) ? 500 : 0;
10612 EXPECT_EQ(jitter, expected_jitter); 10612 EXPECT_EQ(jitter, expected_jitter);
10613 } 10613 }
10614 } 10614 }
10615 10615
10616 } // namespace 10616 } // namespace
10617 } // namespace cc 10617 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.cc ('k') | cc/trees/layer_tree_host_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698