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

Side by Side Diff: cc/layers/layer_impl.cc

Issue 1736073002: cc: Move SyncedScrollOffset to scroll tree (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Resolve comments Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 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>
(...skipping 26 matching lines...) Expand all
37 #include "cc/trees/proxy.h" 37 #include "cc/trees/proxy.h"
38 #include "ui/gfx/geometry/box_f.h" 38 #include "ui/gfx/geometry/box_f.h"
39 #include "ui/gfx/geometry/point_conversions.h" 39 #include "ui/gfx/geometry/point_conversions.h"
40 #include "ui/gfx/geometry/quad_f.h" 40 #include "ui/gfx/geometry/quad_f.h"
41 #include "ui/gfx/geometry/rect_conversions.h" 41 #include "ui/gfx/geometry/rect_conversions.h"
42 #include "ui/gfx/geometry/size_conversions.h" 42 #include "ui/gfx/geometry/size_conversions.h"
43 #include "ui/gfx/geometry/vector2d_conversions.h" 43 #include "ui/gfx/geometry/vector2d_conversions.h"
44 44
45 namespace cc { 45 namespace cc {
46 LayerImpl::LayerImpl(LayerTreeImpl* layer_impl, int id) 46 LayerImpl::LayerImpl(LayerTreeImpl* layer_impl, int id)
47 : LayerImpl(layer_impl, id, new LayerImpl::SyncedScrollOffset) { 47 : LayerImpl(layer_impl, id, new SyncedScrollOffset) {}
48 }
49 48
50 LayerImpl::LayerImpl(LayerTreeImpl* tree_impl, 49 LayerImpl::LayerImpl(LayerTreeImpl* tree_impl,
51 int id, 50 int id,
52 scoped_refptr<SyncedScrollOffset> scroll_offset) 51 scoped_refptr<SyncedScrollOffset> scroll_offset)
ajuma 2016/03/02 18:43:09 scroll_offset seems to be unused now, so should be
sunxd 2016/03/02 20:52:55 Done.
53 : parent_(nullptr), 52 : parent_(nullptr),
54 scroll_parent_(nullptr), 53 scroll_parent_(nullptr),
55 clip_parent_(nullptr), 54 clip_parent_(nullptr),
56 mask_layer_id_(-1), 55 mask_layer_id_(-1),
57 replica_layer_id_(-1), 56 replica_layer_id_(-1),
58 layer_id_(id), 57 layer_id_(id),
59 layer_tree_impl_(tree_impl), 58 layer_tree_impl_(tree_impl),
60 scroll_offset_(scroll_offset),
61 scroll_clip_layer_id_(Layer::INVALID_ID), 59 scroll_clip_layer_id_(Layer::INVALID_ID),
62 main_thread_scrolling_reasons_( 60 main_thread_scrolling_reasons_(
63 MainThreadScrollingReason::kNotScrollingOnMain), 61 MainThreadScrollingReason::kNotScrollingOnMain),
64 user_scrollable_horizontal_(true), 62 user_scrollable_horizontal_(true),
65 user_scrollable_vertical_(true), 63 user_scrollable_vertical_(true),
66 double_sided_(true), 64 double_sided_(true),
67 should_flatten_transform_(true), 65 should_flatten_transform_(true),
68 should_flatten_transform_from_property_tree_(false), 66 should_flatten_transform_from_property_tree_(false),
69 layer_property_changed_(false), 67 layer_property_changed_(false),
70 masks_to_bounds_(false), 68 masks_to_bounds_(false),
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 480
483 bool LayerImpl::scrollable() const { 481 bool LayerImpl::scrollable() const {
484 return scroll_clip_layer_id_ != Layer::INVALID_ID; 482 return scroll_clip_layer_id_ != Layer::INVALID_ID;
485 } 483 }
486 484
487 bool LayerImpl::user_scrollable(ScrollbarOrientation orientation) const { 485 bool LayerImpl::user_scrollable(ScrollbarOrientation orientation) const {
488 return (orientation == HORIZONTAL) ? user_scrollable_horizontal_ 486 return (orientation == HORIZONTAL) ? user_scrollable_horizontal_
489 : user_scrollable_vertical_; 487 : user_scrollable_vertical_;
490 } 488 }
491 489
492 void LayerImpl::ApplySentScrollDeltasFromAbortedCommit() {
493 DCHECK(layer_tree_impl()->IsActiveTree());
494 scroll_offset_->AbortCommit();
495 }
496
497 skia::RefPtr<SkPicture> LayerImpl::GetPicture() { 490 skia::RefPtr<SkPicture> LayerImpl::GetPicture() {
498 return skia::RefPtr<SkPicture>(); 491 return skia::RefPtr<SkPicture>();
499 } 492 }
500 493
501 scoped_ptr<LayerImpl> LayerImpl::CreateLayerImpl(LayerTreeImpl* tree_impl) { 494 scoped_ptr<LayerImpl> LayerImpl::CreateLayerImpl(LayerTreeImpl* tree_impl) {
502 return LayerImpl::Create(tree_impl, layer_id_, scroll_offset_); 495 return LayerImpl::Create(tree_impl, layer_id_);
503 } 496 }
504 497
505 void LayerImpl::set_main_thread_scrolling_reasons( 498 void LayerImpl::set_main_thread_scrolling_reasons(
506 uint32_t main_thread_scrolling_reasons) { 499 uint32_t main_thread_scrolling_reasons) {
507 if (main_thread_scrolling_reasons_ == main_thread_scrolling_reasons) 500 if (main_thread_scrolling_reasons_ == main_thread_scrolling_reasons)
508 return; 501 return;
509 502
510 if (main_thread_scrolling_reasons & 503 if (main_thread_scrolling_reasons &
511 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects && 504 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects &&
512 layer_tree_impl()) { 505 layer_tree_impl()) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 layer->NoteLayerPropertyChanged(); 557 layer->NoteLayerPropertyChanged();
565 558
566 layer->SetScrollClipLayer(scroll_clip_layer_id_); 559 layer->SetScrollClipLayer(scroll_clip_layer_id_);
567 layer->SetElementId(element_id_); 560 layer->SetElementId(element_id_);
568 layer->SetMutableProperties(mutable_properties_); 561 layer->SetMutableProperties(mutable_properties_);
569 layer->set_user_scrollable_horizontal(user_scrollable_horizontal_); 562 layer->set_user_scrollable_horizontal(user_scrollable_horizontal_);
570 layer->set_user_scrollable_vertical(user_scrollable_vertical_); 563 layer->set_user_scrollable_vertical(user_scrollable_vertical_);
571 564
572 layer->SetScrollCompensationAdjustment(scroll_compensation_adjustment_); 565 layer->SetScrollCompensationAdjustment(scroll_compensation_adjustment_);
573 566
574 layer->PushScrollOffset(nullptr);
575
576 layer->Set3dSortingContextId(sorting_context_id_); 567 layer->Set3dSortingContextId(sorting_context_id_);
577 layer->SetNumDescendantsThatDrawContent(num_descendants_that_draw_content_); 568 layer->SetNumDescendantsThatDrawContent(num_descendants_that_draw_content_);
578 569
579 layer->SetTransformTreeIndex(transform_tree_index_); 570 layer->SetTransformTreeIndex(transform_tree_index_);
580 layer->SetClipTreeIndex(clip_tree_index_); 571 layer->SetClipTreeIndex(clip_tree_index_);
581 layer->SetEffectTreeIndex(effect_tree_index_); 572 layer->SetEffectTreeIndex(effect_tree_index_);
582 layer->SetScrollTreeIndex(scroll_tree_index_); 573 layer->SetScrollTreeIndex(scroll_tree_index_);
583 layer->set_offset_to_transform_parent(offset_to_transform_parent_); 574 layer->set_offset_to_transform_parent(offset_to_transform_parent_);
584 575
585 LayerImpl* scroll_parent = nullptr; 576 LayerImpl* scroll_parent = nullptr;
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after
1306 frame_timing_requests_ = requests; 1297 frame_timing_requests_ = requests;
1307 frame_timing_requests_dirty_ = true; 1298 frame_timing_requests_dirty_ = true;
1308 SetNeedsPushProperties(); 1299 SetNeedsPushProperties();
1309 } 1300 }
1310 1301
1311 void LayerImpl::GatherFrameTimingRequestIds(std::vector<int64_t>* request_ids) { 1302 void LayerImpl::GatherFrameTimingRequestIds(std::vector<int64_t>* request_ids) {
1312 for (const auto& request : frame_timing_requests_) 1303 for (const auto& request : frame_timing_requests_)
1313 request_ids->push_back(request.id()); 1304 request_ids->push_back(request.id());
1314 } 1305 }
1315 1306
1307 const SyncedScrollOffset* LayerImpl::synced_scroll_offset() const {
1308 return layer_tree_impl()->property_trees()->scroll_tree.synced_scroll_offset(
1309 id());
1310 }
1311
1312 SyncedScrollOffset* LayerImpl::synced_scroll_offset() {
1313 return layer_tree_impl()->property_trees()->scroll_tree.synced_scroll_offset(
1314 id());
1315 }
1316
1316 void LayerImpl::SetTransform(const gfx::Transform& transform) { 1317 void LayerImpl::SetTransform(const gfx::Transform& transform) {
1317 if (transform_ == transform) 1318 if (transform_ == transform)
1318 return; 1319 return;
1319 1320
1320 transform_ = transform; 1321 transform_ = transform;
1321 transform_is_invertible_ = transform_.IsInvertible(); 1322 transform_is_invertible_ = transform_.IsInvertible();
1322 } 1323 }
1323 1324
1324 void LayerImpl::SetTransformAndInvertibility(const gfx::Transform& transform, 1325 void LayerImpl::SetTransformAndInvertibility(const gfx::Transform& transform,
1325 bool transform_is_invertible) { 1326 bool transform_is_invertible) {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1450 update_rect_ = update_rect; 1451 update_rect_ = update_rect;
1451 SetNeedsPushProperties(); 1452 SetNeedsPushProperties();
1452 } 1453 }
1453 1454
1454 void LayerImpl::AddDamageRect(const gfx::Rect& damage_rect) { 1455 void LayerImpl::AddDamageRect(const gfx::Rect& damage_rect) {
1455 damage_rect_.Union(damage_rect); 1456 damage_rect_.Union(damage_rect);
1456 } 1457 }
1457 1458
1458 void LayerImpl::SetCurrentScrollOffset(const gfx::ScrollOffset& scroll_offset) { 1459 void LayerImpl::SetCurrentScrollOffset(const gfx::ScrollOffset& scroll_offset) {
1459 DCHECK(IsActive()); 1460 DCHECK(IsActive());
1460 if (scroll_offset_->SetCurrent(scroll_offset)) 1461 if (synced_scroll_offset()->SetCurrent(scroll_offset))
1461 DidUpdateScrollOffset(); 1462 DidUpdateScrollOffset();
1462 } 1463 }
1463 1464
1464 void LayerImpl::PushScrollOffsetFromMainThread(
1465 const gfx::ScrollOffset& scroll_offset) {
1466 PushScrollOffset(&scroll_offset);
1467 }
1468
1469 void LayerImpl::PushScrollOffsetFromMainThreadAndClobberActiveValue(
1470 const gfx::ScrollOffset& scroll_offset) {
1471 scroll_offset_->set_clobber_active_value();
1472 PushScrollOffset(&scroll_offset);
1473 }
1474
1475 gfx::ScrollOffset LayerImpl::PullDeltaForMainThread() {
1476 // TODO(miletus): Remove all this temporary flooring machinery when
1477 // Blink fully supports fractional scrolls.
1478 gfx::ScrollOffset current_offset = CurrentScrollOffset();
1479 gfx::ScrollOffset current_delta = IsActive()
1480 ? scroll_offset_->Delta()
1481 : scroll_offset_->PendingDelta().get();
1482 gfx::ScrollOffset floored_delta(floor(current_delta.x()),
1483 floor(current_delta.y()));
1484 gfx::ScrollOffset diff_delta = floored_delta - current_delta;
1485 gfx::ScrollOffset tmp_offset = current_offset + diff_delta;
1486 scroll_offset_->SetCurrent(tmp_offset);
1487 gfx::ScrollOffset delta = scroll_offset_->PullDeltaForMainThread();
1488 scroll_offset_->SetCurrent(current_offset);
1489 return delta;
1490 }
1491
1492 gfx::ScrollOffset LayerImpl::CurrentScrollOffset() const { 1465 gfx::ScrollOffset LayerImpl::CurrentScrollOffset() const {
1493 return scroll_offset_->Current(IsActive()); 1466 return synced_scroll_offset()->Current(IsActive());
1494 } 1467 }
1495 1468
1496 gfx::Vector2dF LayerImpl::ScrollDelta() const { 1469 gfx::Vector2dF LayerImpl::ScrollDelta() const {
1497 if (IsActive()) 1470 if (IsActive())
1498 return gfx::Vector2dF(scroll_offset_->Delta().x(), 1471 return gfx::Vector2dF(synced_scroll_offset()->Delta().x(),
1499 scroll_offset_->Delta().y()); 1472 synced_scroll_offset()->Delta().y());
1500 else 1473 else
1501 return gfx::Vector2dF(scroll_offset_->PendingDelta().get().x(), 1474 return gfx::Vector2dF(synced_scroll_offset()->PendingDelta().get().x(),
1502 scroll_offset_->PendingDelta().get().y()); 1475 synced_scroll_offset()->PendingDelta().get().y());
1503 } 1476 }
1504 1477
1505 void LayerImpl::SetScrollDelta(const gfx::Vector2dF& delta) { 1478 void LayerImpl::SetScrollDelta(const gfx::Vector2dF& delta) {
1506 DCHECK(IsActive()); 1479 DCHECK(IsActive());
1507 DCHECK(scrollable() || delta.IsZero()); 1480 DCHECK(scrollable() || delta.IsZero());
1508 SetCurrentScrollOffset(scroll_offset_->ActiveBase() + 1481 SetCurrentScrollOffset(synced_scroll_offset()->ActiveBase() +
1509 gfx::ScrollOffset(delta)); 1482 gfx::ScrollOffset(delta));
1510 } 1483 }
1511 1484
1512 gfx::ScrollOffset LayerImpl::BaseScrollOffset() const { 1485 gfx::ScrollOffset LayerImpl::BaseScrollOffset() const {
1513 if (IsActive()) 1486 if (IsActive())
1514 return scroll_offset_->ActiveBase(); 1487 return synced_scroll_offset()->ActiveBase();
1515 else 1488 else
1516 return scroll_offset_->PendingBase(); 1489 return synced_scroll_offset()->PendingBase();
1517 } 1490 }
1518 1491
1519 void LayerImpl::PushScrollOffset(const gfx::ScrollOffset* scroll_offset) { 1492 void LayerImpl::PushScrollOffsetFromMainThread(
1520 DCHECK(scroll_offset || IsActive()); 1493 const gfx::ScrollOffset& scroll_offset) {
1521 bool changed = false; 1494 bool changed = false;
1522 if (scroll_offset) { 1495 DCHECK(!IsActive() || !layer_tree_impl_->FindPendingTreeLayerById(id()));
1523 DCHECK(!IsActive() || !layer_tree_impl_->FindPendingTreeLayerById(id())); 1496 changed |= synced_scroll_offset()->PushFromMainThread(scroll_offset);
1524 changed |= scroll_offset_->PushFromMainThread(*scroll_offset); 1497
1525 }
1526 if (IsActive()) { 1498 if (IsActive()) {
1527 changed |= scroll_offset_->PushPendingToActive(); 1499 changed |= synced_scroll_offset()->PushPendingToActive();
1528 } 1500 }
1529 1501
1530 if (changed) 1502 if (changed)
1531 DidUpdateScrollOffset(); 1503 DidUpdateScrollOffset();
1532 } 1504 }
1533 1505
1534 void LayerImpl::UpdatePropertyTreeScrollOffset() { 1506 void LayerImpl::UpdatePropertyTreeScrollOffset() {
1535 // TODO(enne): in the future, scrolling should update the scroll tree 1507 // TODO(enne): in the future, scrolling should update the scroll tree
1536 // directly instead of going through layers. 1508 // directly instead of going through layers.
1537 if (transform_tree_index_ != -1) { 1509 if (transform_tree_index_ != -1) {
1538 TransformTree& transform_tree = 1510 TransformTree& transform_tree =
1539 layer_tree_impl()->property_trees()->transform_tree; 1511 layer_tree_impl()->property_trees()->transform_tree;
1540 TransformNode* node = transform_tree.Node(transform_tree_index_); 1512 TransformNode* node = transform_tree.Node(transform_tree_index_);
1541 gfx::ScrollOffset current_offset = scroll_offset_->Current(IsActive()); 1513 gfx::ScrollOffset current_offset =
1514 synced_scroll_offset()->Current(IsActive());
1542 if (node->data.scroll_offset != current_offset) { 1515 if (node->data.scroll_offset != current_offset) {
1543 node->data.scroll_offset = current_offset; 1516 node->data.scroll_offset = current_offset;
1544 node->data.needs_local_transform_update = true; 1517 node->data.needs_local_transform_update = true;
1545 transform_tree.set_needs_update(true); 1518 transform_tree.set_needs_update(true);
1546 } 1519 }
1547 } 1520 }
1548 } 1521 }
1549 1522
1550 void LayerImpl::DidUpdateScrollOffset() { 1523 void LayerImpl::DidUpdateScrollOffset() {
1551 DCHECK(scroll_offset_);
1552
1553 layer_tree_impl()->DidUpdateScrollState(id()); 1524 layer_tree_impl()->DidUpdateScrollState(id());
1554 NoteLayerPropertyChangedForSubtree(); 1525 NoteLayerPropertyChangedForSubtree();
1555
1556 UpdatePropertyTreeScrollOffset(); 1526 UpdatePropertyTreeScrollOffset();
1557 1527
1558 // Inform the pending twin that a property changed. 1528 // Inform the pending twin that a property changed.
1559 if (layer_tree_impl()->IsActiveTree()) { 1529 if (layer_tree_impl()->IsActiveTree()) {
1560 LayerImpl* pending_twin = layer_tree_impl()->FindPendingTreeLayerById(id()); 1530 LayerImpl* pending_twin = layer_tree_impl()->FindPendingTreeLayerById(id());
1561 if (pending_twin) 1531 if (pending_twin)
1562 pending_twin->DidUpdateScrollOffset(); 1532 pending_twin->DidUpdateScrollOffset();
1563 } 1533 }
1564 } 1534 }
1565 1535
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1649 1619
1650 state->SetInteger("draws_content", DrawsContent()); 1620 state->SetInteger("draws_content", DrawsContent());
1651 state->SetInteger("gpu_memory_usage", 1621 state->SetInteger("gpu_memory_usage",
1652 base::saturated_cast<int>(GPUMemoryUsageInBytes())); 1622 base::saturated_cast<int>(GPUMemoryUsageInBytes()));
1653 1623
1654 if (mutable_properties_ != MutableProperty::kNone) { 1624 if (mutable_properties_ != MutableProperty::kNone) {
1655 state->SetInteger("element_id", base::saturated_cast<int>(element_id_)); 1625 state->SetInteger("element_id", base::saturated_cast<int>(element_id_));
1656 state->SetInteger("mutable_properties", mutable_properties_); 1626 state->SetInteger("mutable_properties", mutable_properties_);
1657 } 1627 }
1658 1628
1659 MathUtil::AddToTracedValue( 1629 MathUtil::AddToTracedValue("scroll_offset",
1660 "scroll_offset", scroll_offset_ ? scroll_offset_->Current(IsActive()) 1630 synced_scroll_offset()
1661 : gfx::ScrollOffset(), 1631 ? synced_scroll_offset()->Current(IsActive())
1662 state); 1632 : gfx::ScrollOffset(),
1633 state);
1663 1634
1664 MathUtil::AddToTracedValue("transform_origin", transform_origin_, state); 1635 MathUtil::AddToTracedValue("transform_origin", transform_origin_, state);
1665 1636
1666 bool clipped; 1637 bool clipped;
1667 gfx::QuadF layer_quad = 1638 gfx::QuadF layer_quad =
1668 MathUtil::MapQuad(ScreenSpaceTransform(), 1639 MathUtil::MapQuad(ScreenSpaceTransform(),
1669 gfx::QuadF(gfx::RectF(gfx::Rect(bounds()))), &clipped); 1640 gfx::QuadF(gfx::RectF(gfx::Rect(bounds()))), &clipped);
1670 MathUtil::AddToTracedValue("layer_quad", layer_quad, state); 1641 MathUtil::AddToTracedValue("layer_quad", layer_quad, state);
1671 if (!touch_event_handler_region_.IsEmpty()) { 1642 if (!touch_event_handler_region_.IsEmpty()) {
1672 state->BeginArray("touch_event_handler_region"); 1643 state->BeginArray("touch_event_handler_region");
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1849 .layer_transforms_should_scale_layer_contents) { 1820 .layer_transforms_should_scale_layer_contents) {
1850 return default_scale; 1821 return default_scale;
1851 } 1822 }
1852 1823
1853 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( 1824 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents(
1854 DrawTransform(), default_scale); 1825 DrawTransform(), default_scale);
1855 return std::max(transform_scales.x(), transform_scales.y()); 1826 return std::max(transform_scales.x(), transform_scales.y());
1856 } 1827 }
1857 1828
1858 } // namespace cc 1829 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698