| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/layers/layer_impl.h" | 5 #include "cc/layers/layer_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <utility> | 10 #include <utility> |
| 11 | 11 |
| 12 #include "base/json/json_reader.h" | 12 #include "base/json/json_reader.h" |
| 13 #include "base/numerics/safe_conversions.h" | 13 #include "base/numerics/safe_conversions.h" |
| 14 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
| 15 #include "base/trace_event/trace_event.h" | 15 #include "base/trace_event/trace_event.h" |
| 16 #include "base/trace_event/trace_event_argument.h" | 16 #include "base/trace_event/trace_event_argument.h" |
| 17 #include "cc/animation/animation_registrar.h" | 17 #include "cc/animation/animation_registrar.h" |
| 18 #include "cc/animation/mutable_properties.h" | 18 #include "cc/animation/mutable_properties.h" |
| 19 #include "cc/base/math_util.h" | 19 #include "cc/base/math_util.h" |
| 20 #include "cc/base/simple_enclosed_region.h" | 20 #include "cc/base/simple_enclosed_region.h" |
| 21 #include "cc/debug/debug_colors.h" | 21 #include "cc/debug/debug_colors.h" |
| 22 #include "cc/debug/layer_tree_debug_state.h" | 22 #include "cc/debug/layer_tree_debug_state.h" |
| 23 #include "cc/debug/micro_benchmark_impl.h" | 23 #include "cc/debug/micro_benchmark_impl.h" |
| 24 #include "cc/debug/traced_value.h" | 24 #include "cc/debug/traced_value.h" |
| 25 #include "cc/input/main_thread_scrolling_reason.h" |
| 25 #include "cc/input/scroll_state.h" | 26 #include "cc/input/scroll_state.h" |
| 26 #include "cc/layers/layer.h" | 27 #include "cc/layers/layer.h" |
| 27 #include "cc/layers/layer_utils.h" | 28 #include "cc/layers/layer_utils.h" |
| 28 #include "cc/output/copy_output_request.h" | 29 #include "cc/output/copy_output_request.h" |
| 29 #include "cc/quads/debug_border_draw_quad.h" | 30 #include "cc/quads/debug_border_draw_quad.h" |
| 30 #include "cc/quads/render_pass.h" | 31 #include "cc/quads/render_pass.h" |
| 31 #include "cc/trees/draw_property_utils.h" | 32 #include "cc/trees/draw_property_utils.h" |
| 32 #include "cc/trees/layer_tree_host_common.h" | 33 #include "cc/trees/layer_tree_host_common.h" |
| 33 #include "cc/trees/layer_tree_impl.h" | 34 #include "cc/trees/layer_tree_impl.h" |
| 34 #include "cc/trees/layer_tree_settings.h" | 35 #include "cc/trees/layer_tree_settings.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 50 scoped_refptr<SyncedScrollOffset> scroll_offset) | 51 scoped_refptr<SyncedScrollOffset> scroll_offset) |
| 51 : parent_(nullptr), | 52 : parent_(nullptr), |
| 52 scroll_parent_(nullptr), | 53 scroll_parent_(nullptr), |
| 53 clip_parent_(nullptr), | 54 clip_parent_(nullptr), |
| 54 mask_layer_id_(-1), | 55 mask_layer_id_(-1), |
| 55 replica_layer_id_(-1), | 56 replica_layer_id_(-1), |
| 56 layer_id_(id), | 57 layer_id_(id), |
| 57 layer_tree_impl_(tree_impl), | 58 layer_tree_impl_(tree_impl), |
| 58 scroll_offset_(scroll_offset), | 59 scroll_offset_(scroll_offset), |
| 59 scroll_clip_layer_id_(Layer::INVALID_ID), | 60 scroll_clip_layer_id_(Layer::INVALID_ID), |
| 60 main_thread_scrolling_reasons_(InputHandler::NOT_SCROLLING_ON_MAIN), | 61 main_thread_scrolling_reasons_( |
| 62 MainThreadScrollingReason::kNotScrollingOnMain), |
| 61 have_wheel_event_handlers_(false), | 63 have_wheel_event_handlers_(false), |
| 62 have_scroll_event_handlers_(false), | 64 have_scroll_event_handlers_(false), |
| 63 scroll_blocks_on_(SCROLL_BLOCKS_ON_NONE), | 65 scroll_blocks_on_(SCROLL_BLOCKS_ON_NONE), |
| 64 user_scrollable_horizontal_(true), | 66 user_scrollable_horizontal_(true), |
| 65 user_scrollable_vertical_(true), | 67 user_scrollable_vertical_(true), |
| 66 stacking_order_changed_(false), | 68 stacking_order_changed_(false), |
| 67 double_sided_(true), | 69 double_sided_(true), |
| 68 should_flatten_transform_(true), | 70 should_flatten_transform_(true), |
| 69 should_flatten_transform_from_property_tree_(false), | 71 should_flatten_transform_from_property_tree_(false), |
| 70 layer_property_changed_(false), | 72 layer_property_changed_(false), |
| (...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 502 DCHECK(layer_tree_impl()->IsActiveTree()); | 504 DCHECK(layer_tree_impl()->IsActiveTree()); |
| 503 scroll_offset_->AbortCommit(); | 505 scroll_offset_->AbortCommit(); |
| 504 } | 506 } |
| 505 | 507 |
| 506 InputHandler::ScrollStatus LayerImpl::TryScroll( | 508 InputHandler::ScrollStatus LayerImpl::TryScroll( |
| 507 const gfx::PointF& screen_space_point, | 509 const gfx::PointF& screen_space_point, |
| 508 InputHandler::ScrollInputType type, | 510 InputHandler::ScrollInputType type, |
| 509 ScrollBlocksOn effective_block_mode) const { | 511 ScrollBlocksOn effective_block_mode) const { |
| 510 InputHandler::ScrollStatus scroll_status; | 512 InputHandler::ScrollStatus scroll_status; |
| 511 scroll_status.main_thread_scrolling_reasons = | 513 scroll_status.main_thread_scrolling_reasons = |
| 512 InputHandler::NOT_SCROLLING_ON_MAIN; | 514 MainThreadScrollingReason::kNotScrollingOnMain; |
| 513 if (should_scroll_on_main_thread()) { | 515 if (should_scroll_on_main_thread()) { |
| 514 TRACE_EVENT0("cc", "LayerImpl::TryScroll: Failed ShouldScrollOnMainThread"); | 516 TRACE_EVENT0("cc", "LayerImpl::TryScroll: Failed ShouldScrollOnMainThread"); |
| 515 scroll_status.thread = InputHandler::SCROLL_ON_MAIN_THREAD; | 517 scroll_status.thread = InputHandler::SCROLL_ON_MAIN_THREAD; |
| 516 scroll_status.main_thread_scrolling_reasons = | 518 scroll_status.main_thread_scrolling_reasons = |
| 517 main_thread_scrolling_reasons_; | 519 main_thread_scrolling_reasons_; |
| 518 return scroll_status; | 520 return scroll_status; |
| 519 } | 521 } |
| 520 | 522 |
| 521 gfx::Transform screen_space_transform = ScreenSpaceTransform(); | 523 gfx::Transform screen_space_transform = ScreenSpaceTransform(); |
| 522 if (!screen_space_transform.IsInvertible()) { | 524 if (!screen_space_transform.IsInvertible()) { |
| 523 TRACE_EVENT0("cc", "LayerImpl::TryScroll: Ignored NonInvertibleTransform"); | 525 TRACE_EVENT0("cc", "LayerImpl::TryScroll: Ignored NonInvertibleTransform"); |
| 524 scroll_status.thread = InputHandler::SCROLL_IGNORED; | 526 scroll_status.thread = InputHandler::SCROLL_IGNORED; |
| 525 scroll_status.main_thread_scrolling_reasons = | 527 scroll_status.main_thread_scrolling_reasons = |
| 526 InputHandler::NON_INVERTIBLE_TRANSFORM; | 528 MainThreadScrollingReason::kNonInvertibleTransform; |
| 527 return scroll_status; | 529 return scroll_status; |
| 528 } | 530 } |
| 529 | 531 |
| 530 if (!non_fast_scrollable_region().IsEmpty()) { | 532 if (!non_fast_scrollable_region().IsEmpty()) { |
| 531 bool clipped = false; | 533 bool clipped = false; |
| 532 gfx::Transform inverse_screen_space_transform( | 534 gfx::Transform inverse_screen_space_transform( |
| 533 gfx::Transform::kSkipInitialization); | 535 gfx::Transform::kSkipInitialization); |
| 534 if (!screen_space_transform.GetInverse(&inverse_screen_space_transform)) { | 536 if (!screen_space_transform.GetInverse(&inverse_screen_space_transform)) { |
| 535 // TODO(shawnsingh): We shouldn't be applying a projection if screen space | 537 // TODO(shawnsingh): We shouldn't be applying a projection if screen space |
| 536 // transform is uninvertible here. Perhaps we should be returning | 538 // transform is uninvertible here. Perhaps we should be returning |
| 537 // SCROLL_ON_MAIN_THREAD in this case? | 539 // SCROLL_ON_MAIN_THREAD in this case? |
| 538 } | 540 } |
| 539 | 541 |
| 540 gfx::PointF hit_test_point_in_layer_space = MathUtil::ProjectPoint( | 542 gfx::PointF hit_test_point_in_layer_space = MathUtil::ProjectPoint( |
| 541 inverse_screen_space_transform, screen_space_point, &clipped); | 543 inverse_screen_space_transform, screen_space_point, &clipped); |
| 542 if (!clipped && | 544 if (!clipped && |
| 543 non_fast_scrollable_region().Contains( | 545 non_fast_scrollable_region().Contains( |
| 544 gfx::ToRoundedPoint(hit_test_point_in_layer_space))) { | 546 gfx::ToRoundedPoint(hit_test_point_in_layer_space))) { |
| 545 TRACE_EVENT0("cc", | 547 TRACE_EVENT0("cc", |
| 546 "LayerImpl::tryScroll: Failed NonFastScrollableRegion"); | 548 "LayerImpl::tryScroll: Failed NonFastScrollableRegion"); |
| 547 scroll_status.thread = InputHandler::SCROLL_ON_MAIN_THREAD; | 549 scroll_status.thread = InputHandler::SCROLL_ON_MAIN_THREAD; |
| 548 scroll_status.main_thread_scrolling_reasons = | 550 scroll_status.main_thread_scrolling_reasons = |
| 549 InputHandler::NON_FAST_SCROLLABLE_REGION; | 551 MainThreadScrollingReason::kNonFastScrollableRegion; |
| 550 return scroll_status; | 552 return scroll_status; |
| 551 } | 553 } |
| 552 } | 554 } |
| 553 | 555 |
| 554 if (have_scroll_event_handlers() && | 556 if (have_scroll_event_handlers() && |
| 555 effective_block_mode & SCROLL_BLOCKS_ON_SCROLL_EVENT) { | 557 effective_block_mode & SCROLL_BLOCKS_ON_SCROLL_EVENT) { |
| 556 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed ScrollEventHandlers"); | 558 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed ScrollEventHandlers"); |
| 557 scroll_status.thread = InputHandler::SCROLL_ON_MAIN_THREAD; | 559 scroll_status.thread = InputHandler::SCROLL_ON_MAIN_THREAD; |
| 558 scroll_status.main_thread_scrolling_reasons = InputHandler::EVENT_HANDLERS; | 560 scroll_status.main_thread_scrolling_reasons = |
| 561 MainThreadScrollingReason::kEventHandlers; |
| 559 return scroll_status; | 562 return scroll_status; |
| 560 } | 563 } |
| 561 | 564 |
| 562 if ((type == InputHandler::WHEEL || type == InputHandler::ANIMATED_WHEEL) && | 565 if ((type == InputHandler::WHEEL || type == InputHandler::ANIMATED_WHEEL) && |
| 563 have_wheel_event_handlers() && | 566 have_wheel_event_handlers() && |
| 564 effective_block_mode & SCROLL_BLOCKS_ON_WHEEL_EVENT) { | 567 effective_block_mode & SCROLL_BLOCKS_ON_WHEEL_EVENT) { |
| 565 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed WheelEventHandlers"); | 568 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Failed WheelEventHandlers"); |
| 566 scroll_status.thread = InputHandler::SCROLL_ON_MAIN_THREAD; | 569 scroll_status.thread = InputHandler::SCROLL_ON_MAIN_THREAD; |
| 567 scroll_status.main_thread_scrolling_reasons = InputHandler::EVENT_HANDLERS; | 570 scroll_status.main_thread_scrolling_reasons = |
| 571 MainThreadScrollingReason::kEventHandlers; |
| 568 return scroll_status; | 572 return scroll_status; |
| 569 } | 573 } |
| 570 | 574 |
| 571 if (!scrollable()) { | 575 if (!scrollable()) { |
| 572 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Ignored not scrollable"); | 576 TRACE_EVENT0("cc", "LayerImpl::tryScroll: Ignored not scrollable"); |
| 573 scroll_status.thread = InputHandler::SCROLL_IGNORED; | 577 scroll_status.thread = InputHandler::SCROLL_IGNORED; |
| 574 scroll_status.main_thread_scrolling_reasons = InputHandler::NOT_SCROLLABLE; | 578 scroll_status.main_thread_scrolling_reasons = |
| 579 MainThreadScrollingReason::kNotScrollable; |
| 575 return scroll_status; | 580 return scroll_status; |
| 576 } | 581 } |
| 577 | 582 |
| 578 gfx::ScrollOffset max_scroll_offset = MaxScrollOffset(); | 583 gfx::ScrollOffset max_scroll_offset = MaxScrollOffset(); |
| 579 if (max_scroll_offset.x() <= 0 && max_scroll_offset.y() <= 0) { | 584 if (max_scroll_offset.x() <= 0 && max_scroll_offset.y() <= 0) { |
| 580 TRACE_EVENT0("cc", | 585 TRACE_EVENT0("cc", |
| 581 "LayerImpl::tryScroll: Ignored. Technically scrollable," | 586 "LayerImpl::tryScroll: Ignored. Technically scrollable," |
| 582 " but has no affordance in either direction."); | 587 " but has no affordance in either direction."); |
| 583 scroll_status.thread = InputHandler::SCROLL_IGNORED; | 588 scroll_status.thread = InputHandler::SCROLL_IGNORED; |
| 584 scroll_status.main_thread_scrolling_reasons = InputHandler::NOT_SCROLLABLE; | 589 scroll_status.main_thread_scrolling_reasons = |
| 590 MainThreadScrollingReason::kNotScrollable; |
| 585 return scroll_status; | 591 return scroll_status; |
| 586 } | 592 } |
| 587 | 593 |
| 588 scroll_status.thread = InputHandler::SCROLL_ON_IMPL_THREAD; | 594 scroll_status.thread = InputHandler::SCROLL_ON_IMPL_THREAD; |
| 589 return scroll_status; | 595 return scroll_status; |
| 590 } | 596 } |
| 591 | 597 |
| 592 skia::RefPtr<SkPicture> LayerImpl::GetPicture() { | 598 skia::RefPtr<SkPicture> LayerImpl::GetPicture() { |
| 593 return skia::RefPtr<SkPicture>(); | 599 return skia::RefPtr<SkPicture>(); |
| 594 } | 600 } |
| (...skipping 1342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1937 .layer_transforms_should_scale_layer_contents) { | 1943 .layer_transforms_should_scale_layer_contents) { |
| 1938 return default_scale; | 1944 return default_scale; |
| 1939 } | 1945 } |
| 1940 | 1946 |
| 1941 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( | 1947 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( |
| 1942 DrawTransform(), default_scale); | 1948 DrawTransform(), default_scale); |
| 1943 return std::max(transform_scales.x(), transform_scales.y()); | 1949 return std::max(transform_scales.x(), transform_scales.y()); |
| 1944 } | 1950 } |
| 1945 | 1951 |
| 1946 } // namespace cc | 1952 } // namespace cc |
| OLD | NEW |