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

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: Rebase and add comment 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
« no previous file with comments | « cc/layers/layer_impl.h ('k') | cc/layers/layer_impl_unittest.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 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 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 476
484 bool LayerImpl::scrollable() const { 477 bool LayerImpl::scrollable() const {
485 return scroll_clip_layer_id_ != Layer::INVALID_ID; 478 return scroll_clip_layer_id_ != Layer::INVALID_ID;
486 } 479 }
487 480
488 bool LayerImpl::user_scrollable(ScrollbarOrientation orientation) const { 481 bool LayerImpl::user_scrollable(ScrollbarOrientation orientation) const {
489 return (orientation == HORIZONTAL) ? user_scrollable_horizontal_ 482 return (orientation == HORIZONTAL) ? user_scrollable_horizontal_
490 : user_scrollable_vertical_; 483 : user_scrollable_vertical_;
491 } 484 }
492 485
493 void LayerImpl::ApplySentScrollDeltasFromAbortedCommit() {
494 DCHECK(layer_tree_impl()->IsActiveTree());
495 scroll_offset_->AbortCommit();
496 }
497
498 skia::RefPtr<SkPicture> LayerImpl::GetPicture() { 486 skia::RefPtr<SkPicture> LayerImpl::GetPicture() {
499 return skia::RefPtr<SkPicture>(); 487 return skia::RefPtr<SkPicture>();
500 } 488 }
501 489
502 scoped_ptr<LayerImpl> LayerImpl::CreateLayerImpl(LayerTreeImpl* tree_impl) { 490 scoped_ptr<LayerImpl> LayerImpl::CreateLayerImpl(LayerTreeImpl* tree_impl) {
503 return LayerImpl::Create(tree_impl, layer_id_, scroll_offset_); 491 return LayerImpl::Create(tree_impl, layer_id_);
504 } 492 }
505 493
506 void LayerImpl::set_main_thread_scrolling_reasons( 494 void LayerImpl::set_main_thread_scrolling_reasons(
507 uint32_t main_thread_scrolling_reasons) { 495 uint32_t main_thread_scrolling_reasons) {
508 if (main_thread_scrolling_reasons_ == main_thread_scrolling_reasons) 496 if (main_thread_scrolling_reasons_ == main_thread_scrolling_reasons)
509 return; 497 return;
510 498
511 if (main_thread_scrolling_reasons & 499 if (main_thread_scrolling_reasons &
512 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects && 500 MainThreadScrollingReason::kHasNonLayerViewportConstrainedObjects &&
513 layer_tree_impl()) { 501 layer_tree_impl()) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 layer->NoteLayerPropertyChanged(); 554 layer->NoteLayerPropertyChanged();
567 555
568 layer->SetScrollClipLayer(scroll_clip_layer_id_); 556 layer->SetScrollClipLayer(scroll_clip_layer_id_);
569 layer->SetElementId(element_id_); 557 layer->SetElementId(element_id_);
570 layer->SetMutableProperties(mutable_properties_); 558 layer->SetMutableProperties(mutable_properties_);
571 layer->set_user_scrollable_horizontal(user_scrollable_horizontal_); 559 layer->set_user_scrollable_horizontal(user_scrollable_horizontal_);
572 layer->set_user_scrollable_vertical(user_scrollable_vertical_); 560 layer->set_user_scrollable_vertical(user_scrollable_vertical_);
573 561
574 layer->SetScrollCompensationAdjustment(scroll_compensation_adjustment_); 562 layer->SetScrollCompensationAdjustment(scroll_compensation_adjustment_);
575 563
576 layer->PushScrollOffset(nullptr);
577
578 layer->Set3dSortingContextId(sorting_context_id_); 564 layer->Set3dSortingContextId(sorting_context_id_);
579 layer->SetNumDescendantsThatDrawContent(num_descendants_that_draw_content_); 565 layer->SetNumDescendantsThatDrawContent(num_descendants_that_draw_content_);
580 566
581 layer->SetTransformTreeIndex(transform_tree_index_); 567 layer->SetTransformTreeIndex(transform_tree_index_);
582 layer->SetClipTreeIndex(clip_tree_index_); 568 layer->SetClipTreeIndex(clip_tree_index_);
583 layer->SetEffectTreeIndex(effect_tree_index_); 569 layer->SetEffectTreeIndex(effect_tree_index_);
584 layer->SetScrollTreeIndex(scroll_tree_index_); 570 layer->SetScrollTreeIndex(scroll_tree_index_);
585 layer->set_offset_to_transform_parent(offset_to_transform_parent_); 571 layer->set_offset_to_transform_parent(offset_to_transform_parent_);
586 572
587 LayerImpl* scroll_parent = nullptr; 573 LayerImpl* scroll_parent = nullptr;
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
1295 frame_timing_requests_ = requests; 1281 frame_timing_requests_ = requests;
1296 frame_timing_requests_dirty_ = true; 1282 frame_timing_requests_dirty_ = true;
1297 SetNeedsPushProperties(); 1283 SetNeedsPushProperties();
1298 } 1284 }
1299 1285
1300 void LayerImpl::GatherFrameTimingRequestIds(std::vector<int64_t>* request_ids) { 1286 void LayerImpl::GatherFrameTimingRequestIds(std::vector<int64_t>* request_ids) {
1301 for (const auto& request : frame_timing_requests_) 1287 for (const auto& request : frame_timing_requests_)
1302 request_ids->push_back(request.id()); 1288 request_ids->push_back(request.id());
1303 } 1289 }
1304 1290
1291 const SyncedScrollOffset* LayerImpl::synced_scroll_offset() const {
1292 return layer_tree_impl()->property_trees()->scroll_tree.synced_scroll_offset(
1293 id());
1294 }
1295
1296 SyncedScrollOffset* LayerImpl::synced_scroll_offset() {
1297 return layer_tree_impl()->property_trees()->scroll_tree.synced_scroll_offset(
1298 id());
1299 }
1300
1305 void LayerImpl::SetTransform(const gfx::Transform& transform) { 1301 void LayerImpl::SetTransform(const gfx::Transform& transform) {
1306 if (transform_ == transform) 1302 if (transform_ == transform)
1307 return; 1303 return;
1308 1304
1309 transform_ = transform; 1305 transform_ = transform;
1310 transform_is_invertible_ = transform_.IsInvertible(); 1306 transform_is_invertible_ = transform_.IsInvertible();
1311 } 1307 }
1312 1308
1313 void LayerImpl::SetTransformAndInvertibility(const gfx::Transform& transform, 1309 void LayerImpl::SetTransformAndInvertibility(const gfx::Transform& transform,
1314 bool transform_is_invertible) { 1310 bool transform_is_invertible) {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1439 update_rect_ = update_rect; 1435 update_rect_ = update_rect;
1440 SetNeedsPushProperties(); 1436 SetNeedsPushProperties();
1441 } 1437 }
1442 1438
1443 void LayerImpl::AddDamageRect(const gfx::Rect& damage_rect) { 1439 void LayerImpl::AddDamageRect(const gfx::Rect& damage_rect) {
1444 damage_rect_.Union(damage_rect); 1440 damage_rect_.Union(damage_rect);
1445 } 1441 }
1446 1442
1447 void LayerImpl::SetCurrentScrollOffset(const gfx::ScrollOffset& scroll_offset) { 1443 void LayerImpl::SetCurrentScrollOffset(const gfx::ScrollOffset& scroll_offset) {
1448 DCHECK(IsActive()); 1444 DCHECK(IsActive());
1449 if (scroll_offset_->SetCurrent(scroll_offset)) 1445 if (synced_scroll_offset()->SetCurrent(scroll_offset))
1450 DidUpdateScrollOffset(); 1446 DidUpdateScrollOffset();
1451 } 1447 }
1452 1448
1453 void LayerImpl::PushScrollOffsetFromMainThread(
1454 const gfx::ScrollOffset& scroll_offset) {
1455 PushScrollOffset(&scroll_offset);
1456 }
1457
1458 void LayerImpl::PushScrollOffsetFromMainThreadAndClobberActiveValue(
1459 const gfx::ScrollOffset& scroll_offset) {
1460 scroll_offset_->set_clobber_active_value();
1461 PushScrollOffset(&scroll_offset);
1462 }
1463
1464 gfx::ScrollOffset LayerImpl::PullDeltaForMainThread() {
1465 // TODO(miletus): Remove all this temporary flooring machinery when
1466 // Blink fully supports fractional scrolls.
1467 gfx::ScrollOffset current_offset = CurrentScrollOffset();
1468 gfx::ScrollOffset current_delta = IsActive()
1469 ? scroll_offset_->Delta()
1470 : scroll_offset_->PendingDelta().get();
1471 gfx::ScrollOffset floored_delta(floor(current_delta.x()),
1472 floor(current_delta.y()));
1473 gfx::ScrollOffset diff_delta = floored_delta - current_delta;
1474 gfx::ScrollOffset tmp_offset = current_offset + diff_delta;
1475 scroll_offset_->SetCurrent(tmp_offset);
1476 gfx::ScrollOffset delta = scroll_offset_->PullDeltaForMainThread();
1477 scroll_offset_->SetCurrent(current_offset);
1478 return delta;
1479 }
1480
1481 gfx::ScrollOffset LayerImpl::CurrentScrollOffset() const { 1449 gfx::ScrollOffset LayerImpl::CurrentScrollOffset() const {
1482 return scroll_offset_->Current(IsActive()); 1450 return synced_scroll_offset()->Current(IsActive());
1483 } 1451 }
1484 1452
1485 gfx::Vector2dF LayerImpl::ScrollDelta() const { 1453 gfx::Vector2dF LayerImpl::ScrollDelta() const {
1486 if (IsActive()) 1454 if (IsActive())
1487 return gfx::Vector2dF(scroll_offset_->Delta().x(), 1455 return gfx::Vector2dF(synced_scroll_offset()->Delta().x(),
1488 scroll_offset_->Delta().y()); 1456 synced_scroll_offset()->Delta().y());
1489 else 1457 else
1490 return gfx::Vector2dF(scroll_offset_->PendingDelta().get().x(), 1458 return gfx::Vector2dF(synced_scroll_offset()->PendingDelta().get().x(),
1491 scroll_offset_->PendingDelta().get().y()); 1459 synced_scroll_offset()->PendingDelta().get().y());
1492 } 1460 }
1493 1461
1494 void LayerImpl::SetScrollDelta(const gfx::Vector2dF& delta) { 1462 void LayerImpl::SetScrollDelta(const gfx::Vector2dF& delta) {
1495 DCHECK(IsActive()); 1463 DCHECK(IsActive());
1496 DCHECK(scrollable() || delta.IsZero()); 1464 DCHECK(scrollable() || delta.IsZero());
1497 SetCurrentScrollOffset(scroll_offset_->ActiveBase() + 1465 SetCurrentScrollOffset(synced_scroll_offset()->ActiveBase() +
1498 gfx::ScrollOffset(delta)); 1466 gfx::ScrollOffset(delta));
1499 } 1467 }
1500 1468
1501 gfx::ScrollOffset LayerImpl::BaseScrollOffset() const { 1469 gfx::ScrollOffset LayerImpl::BaseScrollOffset() const {
1502 if (IsActive()) 1470 if (IsActive())
1503 return scroll_offset_->ActiveBase(); 1471 return synced_scroll_offset()->ActiveBase();
1504 else 1472 else
1505 return scroll_offset_->PendingBase(); 1473 return synced_scroll_offset()->PendingBase();
1506 } 1474 }
1507 1475
1508 void LayerImpl::PushScrollOffset(const gfx::ScrollOffset* scroll_offset) { 1476 void LayerImpl::PushScrollOffsetFromMainThread(
1509 DCHECK(scroll_offset || IsActive()); 1477 const gfx::ScrollOffset& scroll_offset) {
1510 bool changed = false; 1478 bool changed = false;
1511 if (scroll_offset) { 1479 DCHECK(!IsActive() || !layer_tree_impl_->FindPendingTreeLayerById(id()));
1512 DCHECK(!IsActive() || !layer_tree_impl_->FindPendingTreeLayerById(id())); 1480 changed |= synced_scroll_offset()->PushFromMainThread(scroll_offset);
1513 changed |= scroll_offset_->PushFromMainThread(*scroll_offset); 1481
1514 }
1515 if (IsActive()) { 1482 if (IsActive()) {
1516 changed |= scroll_offset_->PushPendingToActive(); 1483 changed |= synced_scroll_offset()->PushPendingToActive();
1517 } 1484 }
1518 1485
1519 if (changed) 1486 if (changed)
1520 DidUpdateScrollOffset(); 1487 DidUpdateScrollOffset();
1521 } 1488 }
1522 1489
1523 void LayerImpl::UpdatePropertyTreeScrollOffset() { 1490 void LayerImpl::UpdatePropertyTreeScrollOffset() {
1524 // TODO(enne): in the future, scrolling should update the scroll tree 1491 // TODO(enne): in the future, scrolling should update the scroll tree
1525 // directly instead of going through layers. 1492 // directly instead of going through layers.
1526 if (transform_tree_index_ != -1) { 1493 if (transform_tree_index_ != -1) {
1527 TransformTree& transform_tree = 1494 TransformTree& transform_tree =
1528 layer_tree_impl()->property_trees()->transform_tree; 1495 layer_tree_impl()->property_trees()->transform_tree;
1529 TransformNode* node = transform_tree.Node(transform_tree_index_); 1496 TransformNode* node = transform_tree.Node(transform_tree_index_);
1530 gfx::ScrollOffset current_offset = scroll_offset_->Current(IsActive()); 1497 gfx::ScrollOffset current_offset =
1498 synced_scroll_offset()->Current(IsActive());
1531 if (node->data.scroll_offset != current_offset) { 1499 if (node->data.scroll_offset != current_offset) {
1532 node->data.scroll_offset = current_offset; 1500 node->data.scroll_offset = current_offset;
1533 node->data.needs_local_transform_update = true; 1501 node->data.needs_local_transform_update = true;
1534 transform_tree.set_needs_update(true); 1502 transform_tree.set_needs_update(true);
1535 } 1503 }
1536 } 1504 }
1537 } 1505 }
1538 1506
1539 void LayerImpl::DidUpdateScrollOffset() { 1507 void LayerImpl::DidUpdateScrollOffset() {
1540 DCHECK(scroll_offset_);
1541
1542 layer_tree_impl()->DidUpdateScrollState(id()); 1508 layer_tree_impl()->DidUpdateScrollState(id());
1543 1509
1544 if (transform_tree_index_ != -1) { 1510 if (transform_tree_index_ != -1) {
1545 UpdatePropertyTreeScrollOffset(); 1511 UpdatePropertyTreeScrollOffset();
1546 TransformTree& transform_tree = 1512 TransformTree& transform_tree =
1547 layer_tree_impl()->property_trees()->transform_tree; 1513 layer_tree_impl()->property_trees()->transform_tree;
1548 TransformNode* node = transform_tree.Node(transform_tree_index_); 1514 TransformNode* node = transform_tree.Node(transform_tree_index_);
1549 node->data.transform_changed = true; 1515 node->data.transform_changed = true;
1550 layer_tree_impl()->property_trees()->changed = true; 1516 layer_tree_impl()->property_trees()->changed = true;
1551 layer_tree_impl()->set_needs_update_draw_properties(); 1517 layer_tree_impl()->set_needs_update_draw_properties();
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1646 1612
1647 state->SetInteger("draws_content", DrawsContent()); 1613 state->SetInteger("draws_content", DrawsContent());
1648 state->SetInteger("gpu_memory_usage", 1614 state->SetInteger("gpu_memory_usage",
1649 base::saturated_cast<int>(GPUMemoryUsageInBytes())); 1615 base::saturated_cast<int>(GPUMemoryUsageInBytes()));
1650 1616
1651 if (mutable_properties_ != MutableProperty::kNone) { 1617 if (mutable_properties_ != MutableProperty::kNone) {
1652 state->SetInteger("element_id", base::saturated_cast<int>(element_id_)); 1618 state->SetInteger("element_id", base::saturated_cast<int>(element_id_));
1653 state->SetInteger("mutable_properties", mutable_properties_); 1619 state->SetInteger("mutable_properties", mutable_properties_);
1654 } 1620 }
1655 1621
1656 MathUtil::AddToTracedValue( 1622 MathUtil::AddToTracedValue("scroll_offset",
1657 "scroll_offset", scroll_offset_ ? scroll_offset_->Current(IsActive()) 1623 synced_scroll_offset()
1658 : gfx::ScrollOffset(), 1624 ? synced_scroll_offset()->Current(IsActive())
1659 state); 1625 : gfx::ScrollOffset(),
1626 state);
1660 1627
1661 MathUtil::AddToTracedValue("transform_origin", transform_origin_, state); 1628 MathUtil::AddToTracedValue("transform_origin", transform_origin_, state);
1662 1629
1663 bool clipped; 1630 bool clipped;
1664 gfx::QuadF layer_quad = 1631 gfx::QuadF layer_quad =
1665 MathUtil::MapQuad(ScreenSpaceTransform(), 1632 MathUtil::MapQuad(ScreenSpaceTransform(),
1666 gfx::QuadF(gfx::RectF(gfx::Rect(bounds()))), &clipped); 1633 gfx::QuadF(gfx::RectF(gfx::Rect(bounds()))), &clipped);
1667 MathUtil::AddToTracedValue("layer_quad", layer_quad, state); 1634 MathUtil::AddToTracedValue("layer_quad", layer_quad, state);
1668 if (!touch_event_handler_region_.IsEmpty()) { 1635 if (!touch_event_handler_region_.IsEmpty()) {
1669 state->BeginArray("touch_event_handler_region"); 1636 state->BeginArray("touch_event_handler_region");
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1846 .layer_transforms_should_scale_layer_contents) { 1813 .layer_transforms_should_scale_layer_contents) {
1847 return default_scale; 1814 return default_scale;
1848 } 1815 }
1849 1816
1850 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( 1817 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents(
1851 DrawTransform(), default_scale); 1818 DrawTransform(), default_scale);
1852 return std::max(transform_scales.x(), transform_scales.y()); 1819 return std::max(transform_scales.x(), transform_scales.y());
1853 } 1820 }
1854 1821
1855 } // namespace cc 1822 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/layer_impl.h ('k') | cc/layers/layer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698