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

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: Remove scroll_offset() from LayerImpl 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 25 matching lines...) Expand all
36 #include "cc/trees/layer_tree_settings.h" 36 #include "cc/trees/layer_tree_settings.h"
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* tree_impl, int id)
47 : LayerImpl(layer_impl, id, new LayerImpl::SyncedScrollOffset) {
48 }
49
50 LayerImpl::LayerImpl(LayerTreeImpl* tree_impl,
51 int id,
52 scoped_refptr<SyncedScrollOffset> scroll_offset)
53 : parent_(nullptr), 47 : parent_(nullptr),
54 scroll_parent_(nullptr), 48 scroll_parent_(nullptr),
55 clip_parent_(nullptr), 49 clip_parent_(nullptr),
56 mask_layer_id_(-1), 50 mask_layer_id_(-1),
57 replica_layer_id_(-1), 51 replica_layer_id_(-1),
58 layer_id_(id), 52 layer_id_(id),
59 layer_tree_impl_(tree_impl), 53 layer_tree_impl_(tree_impl),
60 scroll_offset_(scroll_offset),
61 scroll_clip_layer_id_(Layer::INVALID_ID), 54 scroll_clip_layer_id_(Layer::INVALID_ID),
62 main_thread_scrolling_reasons_( 55 main_thread_scrolling_reasons_(
63 MainThreadScrollingReason::kNotScrollingOnMain), 56 MainThreadScrollingReason::kNotScrollingOnMain),
64 user_scrollable_horizontal_(true), 57 user_scrollable_horizontal_(true),
65 user_scrollable_vertical_(true), 58 user_scrollable_vertical_(true),
66 double_sided_(true), 59 double_sided_(true),
67 should_flatten_transform_(true), 60 should_flatten_transform_(true),
68 should_flatten_transform_from_property_tree_(false), 61 should_flatten_transform_from_property_tree_(false),
69 layer_property_changed_(false), 62 layer_property_changed_(false),
70 masks_to_bounds_(false), 63 masks_to_bounds_(false),
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 475
483 bool LayerImpl::scrollable() const { 476 bool LayerImpl::scrollable() const {
484 return scroll_clip_layer_id_ != Layer::INVALID_ID; 477 return scroll_clip_layer_id_ != Layer::INVALID_ID;
485 } 478 }
486 479
487 bool LayerImpl::user_scrollable(ScrollbarOrientation orientation) const { 480 bool LayerImpl::user_scrollable(ScrollbarOrientation orientation) const {
488 return (orientation == HORIZONTAL) ? user_scrollable_horizontal_ 481 return (orientation == HORIZONTAL) ? user_scrollable_horizontal_
489 : user_scrollable_vertical_; 482 : user_scrollable_vertical_;
490 } 483 }
491 484
492 void LayerImpl::ApplySentScrollDeltasFromAbortedCommit() {
493 DCHECK(layer_tree_impl()->IsActiveTree());
494 scroll_offset_->AbortCommit();
495 }
496
497 skia::RefPtr<SkPicture> LayerImpl::GetPicture() { 485 skia::RefPtr<SkPicture> LayerImpl::GetPicture() {
498 return skia::RefPtr<SkPicture>(); 486 return skia::RefPtr<SkPicture>();
499 } 487 }
500 488
501 scoped_ptr<LayerImpl> LayerImpl::CreateLayerImpl(LayerTreeImpl* tree_impl) { 489 scoped_ptr<LayerImpl> LayerImpl::CreateLayerImpl(LayerTreeImpl* tree_impl) {
502 return LayerImpl::Create(tree_impl, layer_id_, scroll_offset_); 490 return LayerImpl::Create(tree_impl, layer_id_);
503 } 491 }
504 492
505 void LayerImpl::set_main_thread_scrolling_reasons( 493 void LayerImpl::set_main_thread_scrolling_reasons(
506 uint32_t main_thread_scrolling_reasons) { 494 uint32_t main_thread_scrolling_reasons) {
507 if (main_thread_scrolling_reasons_ == main_thread_scrolling_reasons) 495 if (main_thread_scrolling_reasons_ == main_thread_scrolling_reasons)
508 return; 496 return;
509 497
510 if (main_thread_scrolling_reasons & 498 if (main_thread_scrolling_reasons &
511 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects && 499 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects &&
512 layer_tree_impl()) { 500 layer_tree_impl()) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 layer->NoteLayerPropertyChanged(); 552 layer->NoteLayerPropertyChanged();
565 553
566 layer->SetScrollClipLayer(scroll_clip_layer_id_); 554 layer->SetScrollClipLayer(scroll_clip_layer_id_);
567 layer->SetElementId(element_id_); 555 layer->SetElementId(element_id_);
568 layer->SetMutableProperties(mutable_properties_); 556 layer->SetMutableProperties(mutable_properties_);
569 layer->set_user_scrollable_horizontal(user_scrollable_horizontal_); 557 layer->set_user_scrollable_horizontal(user_scrollable_horizontal_);
570 layer->set_user_scrollable_vertical(user_scrollable_vertical_); 558 layer->set_user_scrollable_vertical(user_scrollable_vertical_);
571 559
572 layer->SetScrollCompensationAdjustment(scroll_compensation_adjustment_); 560 layer->SetScrollCompensationAdjustment(scroll_compensation_adjustment_);
573 561
574 layer->PushScrollOffset(nullptr);
575
576 layer->Set3dSortingContextId(sorting_context_id_); 562 layer->Set3dSortingContextId(sorting_context_id_);
577 layer->SetNumDescendantsThatDrawContent(num_descendants_that_draw_content_); 563 layer->SetNumDescendantsThatDrawContent(num_descendants_that_draw_content_);
578 564
579 layer->SetTransformTreeIndex(transform_tree_index_); 565 layer->SetTransformTreeIndex(transform_tree_index_);
580 layer->SetClipTreeIndex(clip_tree_index_); 566 layer->SetClipTreeIndex(clip_tree_index_);
581 layer->SetEffectTreeIndex(effect_tree_index_); 567 layer->SetEffectTreeIndex(effect_tree_index_);
582 layer->SetScrollTreeIndex(scroll_tree_index_); 568 layer->SetScrollTreeIndex(scroll_tree_index_);
583 layer->set_offset_to_transform_parent(offset_to_transform_parent_); 569 layer->set_offset_to_transform_parent(offset_to_transform_parent_);
584 570
585 LayerImpl* scroll_parent = nullptr; 571 LayerImpl* scroll_parent = nullptr;
(...skipping 720 matching lines...) Expand 10 before | Expand all | Expand 10 after
1306 frame_timing_requests_ = requests; 1292 frame_timing_requests_ = requests;
1307 frame_timing_requests_dirty_ = true; 1293 frame_timing_requests_dirty_ = true;
1308 SetNeedsPushProperties(); 1294 SetNeedsPushProperties();
1309 } 1295 }
1310 1296
1311 void LayerImpl::GatherFrameTimingRequestIds(std::vector<int64_t>* request_ids) { 1297 void LayerImpl::GatherFrameTimingRequestIds(std::vector<int64_t>* request_ids) {
1312 for (const auto& request : frame_timing_requests_) 1298 for (const auto& request : frame_timing_requests_)
1313 request_ids->push_back(request.id()); 1299 request_ids->push_back(request.id());
1314 } 1300 }
1315 1301
1302 const SyncedScrollOffset* LayerImpl::synced_scroll_offset() const {
1303 return layer_tree_impl()->property_trees()->scroll_tree.synced_scroll_offset(
1304 id());
1305 }
1306
1307 SyncedScrollOffset* LayerImpl::synced_scroll_offset() {
1308 return layer_tree_impl()->property_trees()->scroll_tree.synced_scroll_offset(
1309 id());
1310 }
1311
1316 void LayerImpl::SetTransform(const gfx::Transform& transform) { 1312 void LayerImpl::SetTransform(const gfx::Transform& transform) {
1317 if (transform_ == transform) 1313 if (transform_ == transform)
1318 return; 1314 return;
1319 1315
1320 transform_ = transform; 1316 transform_ = transform;
1321 transform_is_invertible_ = transform_.IsInvertible(); 1317 transform_is_invertible_ = transform_.IsInvertible();
1322 } 1318 }
1323 1319
1324 void LayerImpl::SetTransformAndInvertibility(const gfx::Transform& transform, 1320 void LayerImpl::SetTransformAndInvertibility(const gfx::Transform& transform,
1325 bool transform_is_invertible) { 1321 bool transform_is_invertible) {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1450 update_rect_ = update_rect; 1446 update_rect_ = update_rect;
1451 SetNeedsPushProperties(); 1447 SetNeedsPushProperties();
1452 } 1448 }
1453 1449
1454 void LayerImpl::AddDamageRect(const gfx::Rect& damage_rect) { 1450 void LayerImpl::AddDamageRect(const gfx::Rect& damage_rect) {
1455 damage_rect_.Union(damage_rect); 1451 damage_rect_.Union(damage_rect);
1456 } 1452 }
1457 1453
1458 void LayerImpl::SetCurrentScrollOffset(const gfx::ScrollOffset& scroll_offset) { 1454 void LayerImpl::SetCurrentScrollOffset(const gfx::ScrollOffset& scroll_offset) {
1459 DCHECK(IsActive()); 1455 DCHECK(IsActive());
1460 if (scroll_offset_->SetCurrent(scroll_offset)) 1456 if (synced_scroll_offset()->SetCurrent(scroll_offset))
1461 DidUpdateScrollOffset(); 1457 DidUpdateScrollOffset();
1462 } 1458 }
1463 1459
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 { 1460 gfx::ScrollOffset LayerImpl::CurrentScrollOffset() const {
1493 return scroll_offset_->Current(IsActive()); 1461 return synced_scroll_offset()->Current(IsActive());
1494 } 1462 }
1495 1463
1496 gfx::Vector2dF LayerImpl::ScrollDelta() const { 1464 gfx::Vector2dF LayerImpl::ScrollDelta() const {
1497 if (IsActive()) 1465 if (IsActive())
1498 return gfx::Vector2dF(scroll_offset_->Delta().x(), 1466 return gfx::Vector2dF(synced_scroll_offset()->Delta().x(),
1499 scroll_offset_->Delta().y()); 1467 synced_scroll_offset()->Delta().y());
1500 else 1468 else
1501 return gfx::Vector2dF(scroll_offset_->PendingDelta().get().x(), 1469 return gfx::Vector2dF(synced_scroll_offset()->PendingDelta().get().x(),
1502 scroll_offset_->PendingDelta().get().y()); 1470 synced_scroll_offset()->PendingDelta().get().y());
1503 } 1471 }
1504 1472
1505 void LayerImpl::SetScrollDelta(const gfx::Vector2dF& delta) { 1473 void LayerImpl::SetScrollDelta(const gfx::Vector2dF& delta) {
1506 DCHECK(IsActive()); 1474 DCHECK(IsActive());
1507 DCHECK(scrollable() || delta.IsZero()); 1475 DCHECK(scrollable() || delta.IsZero());
1508 SetCurrentScrollOffset(scroll_offset_->ActiveBase() + 1476 SetCurrentScrollOffset(synced_scroll_offset()->ActiveBase() +
1509 gfx::ScrollOffset(delta)); 1477 gfx::ScrollOffset(delta));
1510 } 1478 }
1511 1479
1512 gfx::ScrollOffset LayerImpl::BaseScrollOffset() const { 1480 gfx::ScrollOffset LayerImpl::BaseScrollOffset() const {
1513 if (IsActive()) 1481 if (IsActive())
1514 return scroll_offset_->ActiveBase(); 1482 return synced_scroll_offset()->ActiveBase();
1515 else 1483 else
1516 return scroll_offset_->PendingBase(); 1484 return synced_scroll_offset()->PendingBase();
1517 } 1485 }
1518 1486
1519 void LayerImpl::PushScrollOffset(const gfx::ScrollOffset* scroll_offset) { 1487 void LayerImpl::PushScrollOffsetFromMainThread(
1520 DCHECK(scroll_offset || IsActive()); 1488 const gfx::ScrollOffset& scroll_offset) {
1521 bool changed = false; 1489 bool changed = false;
1522 if (scroll_offset) { 1490 DCHECK(!IsActive() || !layer_tree_impl_->FindPendingTreeLayerById(id()));
1523 DCHECK(!IsActive() || !layer_tree_impl_->FindPendingTreeLayerById(id())); 1491 changed |= synced_scroll_offset()->PushFromMainThread(scroll_offset);
1524 changed |= scroll_offset_->PushFromMainThread(*scroll_offset); 1492
1525 }
1526 if (IsActive()) { 1493 if (IsActive()) {
1527 changed |= scroll_offset_->PushPendingToActive(); 1494 changed |= synced_scroll_offset()->PushPendingToActive();
1528 } 1495 }
1529 1496
1530 if (changed) 1497 if (changed)
1531 DidUpdateScrollOffset(); 1498 DidUpdateScrollOffset();
1532 } 1499 }
1533 1500
1534 void LayerImpl::UpdatePropertyTreeScrollOffset() { 1501 void LayerImpl::UpdatePropertyTreeScrollOffset() {
1535 // TODO(enne): in the future, scrolling should update the scroll tree 1502 // TODO(enne): in the future, scrolling should update the scroll tree
1536 // directly instead of going through layers. 1503 // directly instead of going through layers.
1537 if (transform_tree_index_ != -1) { 1504 if (transform_tree_index_ != -1) {
1538 TransformTree& transform_tree = 1505 TransformTree& transform_tree =
1539 layer_tree_impl()->property_trees()->transform_tree; 1506 layer_tree_impl()->property_trees()->transform_tree;
1540 TransformNode* node = transform_tree.Node(transform_tree_index_); 1507 TransformNode* node = transform_tree.Node(transform_tree_index_);
1541 gfx::ScrollOffset current_offset = scroll_offset_->Current(IsActive()); 1508 gfx::ScrollOffset current_offset =
1509 synced_scroll_offset()->Current(IsActive());
1542 if (node->data.scroll_offset != current_offset) { 1510 if (node->data.scroll_offset != current_offset) {
1543 node->data.scroll_offset = current_offset; 1511 node->data.scroll_offset = current_offset;
1544 node->data.needs_local_transform_update = true; 1512 node->data.needs_local_transform_update = true;
1545 transform_tree.set_needs_update(true); 1513 transform_tree.set_needs_update(true);
1546 } 1514 }
1547 } 1515 }
1548 } 1516 }
1549 1517
1550 void LayerImpl::DidUpdateScrollOffset() { 1518 void LayerImpl::DidUpdateScrollOffset() {
1551 DCHECK(scroll_offset_);
1552
1553 layer_tree_impl()->DidUpdateScrollState(id()); 1519 layer_tree_impl()->DidUpdateScrollState(id());
1554 NoteLayerPropertyChangedForSubtree(); 1520 NoteLayerPropertyChangedForSubtree();
1555
1556 UpdatePropertyTreeScrollOffset(); 1521 UpdatePropertyTreeScrollOffset();
1557 1522
1558 // Inform the pending twin that a property changed. 1523 // Inform the pending twin that a property changed.
1559 if (layer_tree_impl()->IsActiveTree()) { 1524 if (layer_tree_impl()->IsActiveTree()) {
1560 LayerImpl* pending_twin = layer_tree_impl()->FindPendingTreeLayerById(id()); 1525 LayerImpl* pending_twin = layer_tree_impl()->FindPendingTreeLayerById(id());
1561 if (pending_twin) 1526 if (pending_twin)
1562 pending_twin->DidUpdateScrollOffset(); 1527 pending_twin->DidUpdateScrollOffset();
1563 } 1528 }
1564 } 1529 }
1565 1530
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1649 1614
1650 state->SetInteger("draws_content", DrawsContent()); 1615 state->SetInteger("draws_content", DrawsContent());
1651 state->SetInteger("gpu_memory_usage", 1616 state->SetInteger("gpu_memory_usage",
1652 base::saturated_cast<int>(GPUMemoryUsageInBytes())); 1617 base::saturated_cast<int>(GPUMemoryUsageInBytes()));
1653 1618
1654 if (mutable_properties_ != MutableProperty::kNone) { 1619 if (mutable_properties_ != MutableProperty::kNone) {
1655 state->SetInteger("element_id", base::saturated_cast<int>(element_id_)); 1620 state->SetInteger("element_id", base::saturated_cast<int>(element_id_));
1656 state->SetInteger("mutable_properties", mutable_properties_); 1621 state->SetInteger("mutable_properties", mutable_properties_);
1657 } 1622 }
1658 1623
1659 MathUtil::AddToTracedValue( 1624 MathUtil::AddToTracedValue("scroll_offset",
1660 "scroll_offset", scroll_offset_ ? scroll_offset_->Current(IsActive()) 1625 synced_scroll_offset()
1661 : gfx::ScrollOffset(), 1626 ? synced_scroll_offset()->Current(IsActive())
1662 state); 1627 : gfx::ScrollOffset(),
1628 state);
1663 1629
1664 MathUtil::AddToTracedValue("transform_origin", transform_origin_, state); 1630 MathUtil::AddToTracedValue("transform_origin", transform_origin_, state);
1665 1631
1666 bool clipped; 1632 bool clipped;
1667 gfx::QuadF layer_quad = 1633 gfx::QuadF layer_quad =
1668 MathUtil::MapQuad(ScreenSpaceTransform(), 1634 MathUtil::MapQuad(ScreenSpaceTransform(),
1669 gfx::QuadF(gfx::RectF(gfx::Rect(bounds()))), &clipped); 1635 gfx::QuadF(gfx::RectF(gfx::Rect(bounds()))), &clipped);
1670 MathUtil::AddToTracedValue("layer_quad", layer_quad, state); 1636 MathUtil::AddToTracedValue("layer_quad", layer_quad, state);
1671 if (!touch_event_handler_region_.IsEmpty()) { 1637 if (!touch_event_handler_region_.IsEmpty()) {
1672 state->BeginArray("touch_event_handler_region"); 1638 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) { 1815 .layer_transforms_should_scale_layer_contents) {
1850 return default_scale; 1816 return default_scale;
1851 } 1817 }
1852 1818
1853 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( 1819 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents(
1854 DrawTransform(), default_scale); 1820 DrawTransform(), default_scale);
1855 return std::max(transform_scales.x(), transform_scales.y()); 1821 return std::max(transform_scales.x(), transform_scales.y());
1856 } 1822 }
1857 1823
1858 } // namespace cc 1824 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698