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

Side by Side Diff: cc/trees/property_tree.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "cc/base/math_util.h" 11 #include "cc/base/math_util.h"
12 #include "cc/input/main_thread_scrolling_reason.h" 12 #include "cc/input/main_thread_scrolling_reason.h"
13 #include "cc/layers/layer_impl.h"
13 #include "cc/proto/gfx_conversions.h" 14 #include "cc/proto/gfx_conversions.h"
14 #include "cc/proto/property_tree.pb.h" 15 #include "cc/proto/property_tree.pb.h"
15 #include "cc/proto/scroll_offset.pb.h" 16 #include "cc/proto/scroll_offset.pb.h"
17 #include "cc/proto/synced_property_conversions.h"
16 #include "cc/proto/transform.pb.h" 18 #include "cc/proto/transform.pb.h"
17 #include "cc/proto/vector2df.pb.h" 19 #include "cc/proto/vector2df.pb.h"
20 #include "cc/trees/layer_tree_host_common.h"
21 #include "cc/trees/layer_tree_impl.h"
18 #include "cc/trees/property_tree.h" 22 #include "cc/trees/property_tree.h"
19 #include "ui/gfx/geometry/vector2d_conversions.h" 23 #include "ui/gfx/geometry/vector2d_conversions.h"
20 24
21 namespace cc { 25 namespace cc {
22 26
23 template <typename T> 27 template <typename T>
24 bool TreeNode<T>::operator==(const TreeNode<T>& other) const { 28 bool TreeNode<T>::operator==(const TreeNode<T>& other) const {
25 return id == other.id && parent_id == other.parent_id && 29 return id == other.id && parent_id == other.parent_id &&
26 owner_id == other.owner_id && data == other.data; 30 owner_id == other.owner_id && data == other.data;
27 } 31 }
(...skipping 1252 matching lines...) Expand 10 before | Expand all | Expand 10 after
1280 PropertyTree::ToProtobuf(proto); 1284 PropertyTree::ToProtobuf(proto);
1281 } 1285 }
1282 1286
1283 void EffectTree::FromProtobuf(const proto::PropertyTree& proto) { 1287 void EffectTree::FromProtobuf(const proto::PropertyTree& proto) {
1284 DCHECK(proto.has_property_type()); 1288 DCHECK(proto.has_property_type());
1285 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Effect); 1289 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Effect);
1286 1290
1287 PropertyTree::FromProtobuf(proto); 1291 PropertyTree::FromProtobuf(proto);
1288 } 1292 }
1289 1293
1290 ScrollTree::ScrollTree() : currently_scrolling_node_id_(-1) {} 1294 ScrollTree::ScrollTree()
1295 : currently_scrolling_node_id_(-1),
1296 layer_id_to_scroll_offset_map_(ScrollTree::ScrollOffsetMap()) {}
1291 1297
1292 ScrollTree::~ScrollTree() {} 1298 ScrollTree::~ScrollTree() {}
1293 1299
1300 ScrollTree& ScrollTree::operator=(const ScrollTree& from) {
1301 PropertyTree::operator=(from);
1302 currently_scrolling_node_id_ = -1;
ajuma 2016/03/02 18:43:10 The layer_id_to_scroll_offset_map_ is intentionall
sunxd 2016/03/02 20:52:55 Done.
1303 return *this;
1304 }
1305
1294 bool ScrollTree::operator==(const ScrollTree& other) const { 1306 bool ScrollTree::operator==(const ScrollTree& other) const {
1295 return PropertyTree::operator==(other) && 1307 const ScrollTree::ScrollOffsetMap& other_scroll_offset_map =
1296 CurrentlyScrollingNode() == other.CurrentlyScrollingNode(); 1308 other.scroll_offset_map();
1309 if (layer_id_to_scroll_offset_map_.size() != other_scroll_offset_map.size())
1310 return false;
1311
1312 for (auto map_entry : layer_id_to_scroll_offset_map_) {
1313 int key = map_entry.first;
1314 if (other_scroll_offset_map.find(key) == other_scroll_offset_map.end() ||
1315 map_entry.second != layer_id_to_scroll_offset_map_.at(key))
1316 return false;
1317 }
1318
1319 bool is_currently_scrolling_node_equal =
1320 (currently_scrolling_node_id_ == -1)
1321 ? (!other.CurrentlyScrollingNode())
1322 : (other.CurrentlyScrollingNode() &&
1323 currently_scrolling_node_id_ ==
1324 other.CurrentlyScrollingNode()->id);
1325
1326 return PropertyTree::operator==(other) && is_currently_scrolling_node_equal;
1297 } 1327 }
1298 1328
1299 void ScrollTree::ToProtobuf(proto::PropertyTree* proto) const { 1329 void ScrollTree::ToProtobuf(proto::PropertyTree* proto) const {
1300 DCHECK(!proto->has_property_type()); 1330 DCHECK(!proto->has_property_type());
1301 proto->set_property_type(proto::PropertyTree::Scroll); 1331 proto->set_property_type(proto::PropertyTree::Scroll);
1302 1332
1303 PropertyTree::ToProtobuf(proto); 1333 PropertyTree::ToProtobuf(proto);
1304 proto::ScrollTreeData* data = proto->mutable_scroll_tree_data(); 1334 proto::ScrollTreeData* data = proto->mutable_scroll_tree_data();
1305 1335
1306 data->set_currently_scrolling_node_id(currently_scrolling_node_id_); 1336 data->set_currently_scrolling_node_id(currently_scrolling_node_id_);
1337 for (auto i : layer_id_to_scroll_offset_map_) {
1338 data->add_layer_id_to_scroll_offset_map();
1339 proto::ScrollOffsetMapEntry* entry =
1340 data->mutable_layer_id_to_scroll_offset_map(
1341 data->layer_id_to_scroll_offset_map_size() - 1);
1342 entry->set_layer_id(i.first);
1343 SyncedScrollOffsetToProto(*i.second.get(), entry->mutable_scroll_offset());
1344 }
1307 } 1345 }
1308 1346
1309 void ScrollTree::FromProtobuf(const proto::PropertyTree& proto) { 1347 void ScrollTree::FromProtobuf(const proto::PropertyTree& proto) {
1310 DCHECK(proto.has_property_type()); 1348 DCHECK(proto.has_property_type());
1311 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Scroll); 1349 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Scroll);
1312 1350
1313 PropertyTree::FromProtobuf(proto); 1351 PropertyTree::FromProtobuf(proto);
1314 const proto::ScrollTreeData& data = proto.scroll_tree_data(); 1352 const proto::ScrollTreeData& data = proto.scroll_tree_data();
1315 1353
1316 currently_scrolling_node_id_ = data.currently_scrolling_node_id(); 1354 currently_scrolling_node_id_ = data.currently_scrolling_node_id();
1355
1356 for (int i = 0; i < data.layer_id_to_scroll_offset_map_size(); ++i) {
1357 const proto::ScrollOffsetMapEntry entry =
1358 data.layer_id_to_scroll_offset_map(i);
1359 layer_id_to_scroll_offset_map_[entry.layer_id()] = new SyncedScrollOffset();
1360 ProtoToSyncedScrollOffset(
1361 entry.scroll_offset(),
1362 layer_id_to_scroll_offset_map_[entry.layer_id()].get());
1363 }
1364 }
1365
1366 void ScrollTree::clear() {
1367 PropertyTree<ScrollNode>::clear();
1368
1369 if (property_trees()->is_main_thread) {
1370 currently_scrolling_node_id_ = -1;
1371 layer_id_to_scroll_offset_map_.clear();
1372 }
1317 } 1373 }
1318 1374
1319 gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scroll_node_id) const { 1375 gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scroll_node_id) const {
1320 const ScrollNode* scroll_node = Node(scroll_node_id); 1376 const ScrollNode* scroll_node = Node(scroll_node_id);
1321 gfx::SizeF scroll_bounds = gfx::SizeF(scroll_node->data.bounds.width(), 1377 gfx::SizeF scroll_bounds = gfx::SizeF(scroll_node->data.bounds.width(),
1322 scroll_node->data.bounds.height()); 1378 scroll_node->data.bounds.height());
1323 1379
1324 if (scroll_node->data.is_inner_viewport_scroll_layer) { 1380 if (scroll_node->data.is_inner_viewport_scroll_layer) {
1325 scroll_bounds.Enlarge( 1381 scroll_bounds.Enlarge(
1326 property_trees()->inner_viewport_scroll_bounds_delta().x(), 1382 property_trees()->inner_viewport_scroll_bounds_delta().x(),
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1392 property_trees()->transform_tree.Node(scroll_node->data.transform_id); 1448 property_trees()->transform_tree.Node(scroll_node->data.transform_id);
1393 gfx::Transform screen_space_transform( 1449 gfx::Transform screen_space_transform(
1394 1, 0, 0, 1, scroll_node->data.offset_to_transform_parent.x(), 1450 1, 0, 0, 1, scroll_node->data.offset_to_transform_parent.x(),
1395 scroll_node->data.offset_to_transform_parent.y()); 1451 scroll_node->data.offset_to_transform_parent.y());
1396 screen_space_transform.ConcatTransform(transform_node->data.to_screen); 1452 screen_space_transform.ConcatTransform(transform_node->data.to_screen);
1397 if (scroll_node->data.should_flatten) 1453 if (scroll_node->data.should_flatten)
1398 screen_space_transform.FlattenTo2d(); 1454 screen_space_transform.FlattenTo2d();
1399 return screen_space_transform; 1455 return screen_space_transform;
1400 } 1456 }
1401 1457
1458 SyncedScrollOffset* ScrollTree::synced_scroll_offset(int layer_id) {
1459 if (layer_id_to_scroll_offset_map_.find(layer_id) ==
1460 layer_id_to_scroll_offset_map_.end()) {
1461 layer_id_to_scroll_offset_map_[layer_id] = new SyncedScrollOffset;
1462 }
1463 return layer_id_to_scroll_offset_map_[layer_id].get();
1464 }
1465
1466 gfx::ScrollOffset ScrollTree::PullDeltaForMainThread(
1467 SyncedScrollOffset* scroll_offset) {
1468 // TODO(miletus): Remove all this temporary flooring machinery when
1469 // Blink fully supports fractional scrolls.
1470 gfx::ScrollOffset current_offset =
1471 scroll_offset->Current(property_trees()->is_active);
1472 gfx::ScrollOffset current_delta = property_trees()->is_active
1473 ? scroll_offset->Delta()
1474 : scroll_offset->PendingDelta().get();
1475 gfx::ScrollOffset floored_delta(floor(current_delta.x()),
1476 floor(current_delta.y()));
1477 gfx::ScrollOffset diff_delta = floored_delta - current_delta;
1478 gfx::ScrollOffset tmp_offset = current_offset + diff_delta;
1479 scroll_offset->SetCurrent(tmp_offset);
1480 gfx::ScrollOffset delta = scroll_offset->PullDeltaForMainThread();
1481 scroll_offset->SetCurrent(current_offset);
1482 return delta;
1483 }
1484
1485 void ScrollTree::CollectScrollDeltas(ScrollAndScaleSet* scroll_info) {
1486 for (auto map_entry : layer_id_to_scroll_offset_map_) {
1487 gfx::ScrollOffset scroll_delta =
1488 PullDeltaForMainThread(map_entry.second.get());
1489
1490 if (!scroll_delta.IsZero()) {
1491 LayerTreeHostCommon::ScrollUpdateInfo scroll;
1492 scroll.layer_id = map_entry.first;
1493 scroll.scroll_delta = gfx::Vector2d(scroll_delta.x(), scroll_delta.y());
1494 scroll_info->scrolls.push_back(scroll);
1495 }
1496 }
1497 }
1498
1499 void ScrollTree::UpdateScrollOffsetMapEntry(
1500 int key,
1501 ScrollTree::ScrollOffsetMap* new_scroll_offset_map,
1502 LayerTreeImpl* layer_tree_impl) {
1503 bool changed = false;
1504 // If we are pushing scroll offset from main to pending tree, we create a new
1505 // instance of synced scroll offset; if we are pushing from pending to active,
1506 // we reuse the pending tree's value in the map.
1507 if (!property_trees()->is_active) {
1508 changed = synced_scroll_offset(key)->PushFromMainThread(
1509 new_scroll_offset_map->at(key)->PendingBase());
1510
1511 if (new_scroll_offset_map->at(key)->clobber_active_value()) {
1512 synced_scroll_offset(key)->set_clobber_active_value();
1513 }
1514 if (changed)
1515 layer_tree_impl->LayerById(key)->DidUpdateScrollOffset();
1516 } else {
1517 layer_id_to_scroll_offset_map_[key] = new_scroll_offset_map->at(key);
1518 changed |= synced_scroll_offset(key)->PushPendingToActive();
1519 if (changed)
1520 layer_tree_impl->LayerById(key)->DidUpdateScrollOffset();
1521 }
1522 }
1523
1524 void ScrollTree::UpdateScrollOffsetMap(
1525 ScrollTree::ScrollOffsetMap* new_scroll_offset_map,
1526 LayerTreeImpl* layer_tree_impl) {
1527 if (layer_tree_impl && layer_tree_impl->root_layer()) {
1528 DCHECK(!property_trees()->is_main_thread);
1529 for (auto map_entry = layer_id_to_scroll_offset_map_.begin();
1530 map_entry != layer_id_to_scroll_offset_map_.end();) {
1531 int key = map_entry->first;
1532 if (new_scroll_offset_map->find(key) != new_scroll_offset_map->end()) {
1533 UpdateScrollOffsetMapEntry(key, new_scroll_offset_map, layer_tree_impl);
1534 ++map_entry;
1535 } else {
1536 map_entry = layer_id_to_scroll_offset_map_.erase(map_entry);
1537 }
1538 }
1539
1540 for (auto& map_entry : *new_scroll_offset_map) {
1541 int key = map_entry.first;
1542 if (layer_id_to_scroll_offset_map_.find(key) ==
1543 layer_id_to_scroll_offset_map_.end())
1544 UpdateScrollOffsetMapEntry(key, new_scroll_offset_map, layer_tree_impl);
1545 }
1546 }
1547 }
1548
1549 ScrollTree::ScrollOffsetMap& ScrollTree::scroll_offset_map() {
1550 return layer_id_to_scroll_offset_map_;
1551 }
1552
1553 const ScrollTree::ScrollOffsetMap& ScrollTree::scroll_offset_map() const {
1554 return layer_id_to_scroll_offset_map_;
1555 }
1556
1557 void ScrollTree::ApplySentScrollDeltasFromAbortedCommit() {
1558 DCHECK(property_trees()->is_active);
1559 for (auto& map_entry : layer_id_to_scroll_offset_map_)
1560 map_entry.second->AbortCommit();
1561 }
1562
1563 bool ScrollTree::SetScrollOffset(int layer_id,
1564 const gfx::ScrollOffset& scroll_offset) {
1565 if (property_trees()->is_main_thread)
1566 return synced_scroll_offset(layer_id)->PushFromMainThread(scroll_offset);
1567 else if (property_trees()->is_active)
1568 return synced_scroll_offset(layer_id)->SetCurrent(scroll_offset);
1569 return false;
1570 }
1571
1402 PropertyTrees::PropertyTrees() 1572 PropertyTrees::PropertyTrees()
1403 : needs_rebuild(true), 1573 : needs_rebuild(true),
1404 non_root_surfaces_enabled(true), 1574 non_root_surfaces_enabled(true),
1405 changed(false), 1575 changed(false),
1406 sequence_number(0) { 1576 sequence_number(0),
1577 is_main_thread(true),
1578 is_active(false) {
1407 transform_tree.SetPropertyTrees(this); 1579 transform_tree.SetPropertyTrees(this);
1408 effect_tree.SetPropertyTrees(this); 1580 effect_tree.SetPropertyTrees(this);
1409 clip_tree.SetPropertyTrees(this); 1581 clip_tree.SetPropertyTrees(this);
1410 scroll_tree.SetPropertyTrees(this); 1582 scroll_tree.SetPropertyTrees(this);
1411 } 1583 }
1412 1584
1413 PropertyTrees::~PropertyTrees() {} 1585 PropertyTrees::~PropertyTrees() {}
1414 1586
1415 bool PropertyTrees::operator==(const PropertyTrees& other) const { 1587 bool PropertyTrees::operator==(const PropertyTrees& other) const {
1416 return transform_tree == other.transform_tree && 1588 return transform_tree == other.transform_tree &&
1417 effect_tree == other.effect_tree && clip_tree == other.clip_tree && 1589 effect_tree == other.effect_tree && clip_tree == other.clip_tree &&
1418 scroll_tree == other.scroll_tree && 1590 scroll_tree == other.scroll_tree &&
1419 needs_rebuild == other.needs_rebuild && changed == other.changed && 1591 needs_rebuild == other.needs_rebuild &&
1592 is_main_thread == other.is_main_thread &&
1593 is_active == other.is_active &&
1420 non_root_surfaces_enabled == other.non_root_surfaces_enabled && 1594 non_root_surfaces_enabled == other.non_root_surfaces_enabled &&
1421 sequence_number == other.sequence_number; 1595 sequence_number == other.sequence_number;
1422 } 1596 }
1423 1597
1424 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) { 1598 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) {
1425 transform_tree = from.transform_tree; 1599 transform_tree = from.transform_tree;
1426 effect_tree = from.effect_tree; 1600 effect_tree = from.effect_tree;
1427 clip_tree = from.clip_tree; 1601 clip_tree = from.clip_tree;
1428 scroll_tree = from.scroll_tree; 1602 scroll_tree = from.scroll_tree;
1429 needs_rebuild = from.needs_rebuild; 1603 needs_rebuild = from.needs_rebuild;
1430 changed = from.changed; 1604 changed = from.changed;
1431 non_root_surfaces_enabled = from.non_root_surfaces_enabled; 1605 non_root_surfaces_enabled = from.non_root_surfaces_enabled;
1432 sequence_number = from.sequence_number; 1606 sequence_number = from.sequence_number;
1607 is_main_thread = from.is_main_thread;
1608 is_active = from.is_active;
1433 inner_viewport_container_bounds_delta_ = 1609 inner_viewport_container_bounds_delta_ =
1434 from.inner_viewport_container_bounds_delta(); 1610 from.inner_viewport_container_bounds_delta();
1435 outer_viewport_container_bounds_delta_ = 1611 outer_viewport_container_bounds_delta_ =
1436 from.outer_viewport_container_bounds_delta(); 1612 from.outer_viewport_container_bounds_delta();
1437 inner_viewport_scroll_bounds_delta_ = 1613 inner_viewport_scroll_bounds_delta_ =
1438 from.inner_viewport_scroll_bounds_delta(); 1614 from.inner_viewport_scroll_bounds_delta();
1439 transform_tree.SetPropertyTrees(this); 1615 transform_tree.SetPropertyTrees(this);
1440 effect_tree.SetPropertyTrees(this); 1616 effect_tree.SetPropertyTrees(this);
1441 clip_tree.SetPropertyTrees(this); 1617 clip_tree.SetPropertyTrees(this);
1442 scroll_tree.SetPropertyTrees(this); 1618 scroll_tree.SetPropertyTrees(this);
1443 return *this; 1619 return *this;
1444 } 1620 }
1445 1621
1446 void PropertyTrees::ToProtobuf(proto::PropertyTrees* proto) const { 1622 void PropertyTrees::ToProtobuf(proto::PropertyTrees* proto) const {
1447 // TODO(khushalsagar): Add support for sending diffs when serializaing 1623 // TODO(khushalsagar): Add support for sending diffs when serializaing
1448 // property trees. See crbug/555370. 1624 // property trees. See crbug/555370.
1449 transform_tree.ToProtobuf(proto->mutable_transform_tree()); 1625 transform_tree.ToProtobuf(proto->mutable_transform_tree());
1450 effect_tree.ToProtobuf(proto->mutable_effect_tree()); 1626 effect_tree.ToProtobuf(proto->mutable_effect_tree());
1451 clip_tree.ToProtobuf(proto->mutable_clip_tree()); 1627 clip_tree.ToProtobuf(proto->mutable_clip_tree());
1452 scroll_tree.ToProtobuf(proto->mutable_scroll_tree()); 1628 scroll_tree.ToProtobuf(proto->mutable_scroll_tree());
1453 proto->set_needs_rebuild(needs_rebuild); 1629 proto->set_needs_rebuild(needs_rebuild);
1454 proto->set_changed(changed); 1630 proto->set_changed(changed);
1455 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled); 1631 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled);
1632 proto->set_is_main_thread(is_main_thread);
1633 proto->set_is_active(is_active);
1456 1634
1457 // TODO(khushalsagar): Consider using the sequence number to decide if 1635 // TODO(khushalsagar): Consider using the sequence number to decide if
1458 // property trees need to be serialized again for a commit. See crbug/555370. 1636 // property trees need to be serialized again for a commit. See crbug/555370.
1459 proto->set_sequence_number(sequence_number); 1637 proto->set_sequence_number(sequence_number);
1460 } 1638 }
1461 1639
1462 // static 1640 // static
1463 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) { 1641 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) {
1464 transform_tree.FromProtobuf(proto.transform_tree()); 1642 transform_tree.FromProtobuf(proto.transform_tree());
1465 effect_tree.FromProtobuf(proto.effect_tree()); 1643 effect_tree.FromProtobuf(proto.effect_tree());
1466 clip_tree.FromProtobuf(proto.clip_tree()); 1644 clip_tree.FromProtobuf(proto.clip_tree());
1467 scroll_tree.FromProtobuf(proto.scroll_tree()); 1645 scroll_tree.FromProtobuf(proto.scroll_tree());
1468 1646
1469 needs_rebuild = proto.needs_rebuild(); 1647 needs_rebuild = proto.needs_rebuild();
1470 changed = proto.changed(); 1648 changed = proto.changed();
1471 non_root_surfaces_enabled = proto.non_root_surfaces_enabled(); 1649 non_root_surfaces_enabled = proto.non_root_surfaces_enabled();
1472 sequence_number = proto.sequence_number(); 1650 sequence_number = proto.sequence_number();
1651 is_main_thread = proto.is_main_thread();
1652 is_active = proto.is_active();
1473 1653
1474 transform_tree.SetPropertyTrees(this); 1654 transform_tree.SetPropertyTrees(this);
1475 effect_tree.SetPropertyTrees(this); 1655 effect_tree.SetPropertyTrees(this);
1476 clip_tree.SetPropertyTrees(this); 1656 clip_tree.SetPropertyTrees(this);
1477 scroll_tree.SetPropertyTrees(this); 1657 scroll_tree.SetPropertyTrees(this);
1478 } 1658 }
1479 1659
1480 void PropertyTrees::SetInnerViewportContainerBoundsDelta( 1660 void PropertyTrees::SetInnerViewportContainerBoundsDelta(
1481 gfx::Vector2dF bounds_delta) { 1661 gfx::Vector2dF bounds_delta) {
1482 if (inner_viewport_container_bounds_delta_ == bounds_delta) 1662 if (inner_viewport_container_bounds_delta_ == bounds_delta)
(...skipping 28 matching lines...) Expand all
1511 for (int id = 1; id < static_cast<int>(transform_tree.size()); ++id) { 1691 for (int id = 1; id < static_cast<int>(transform_tree.size()); ++id) {
1512 TransformNode* node = transform_tree.Node(id); 1692 TransformNode* node = transform_tree.Node(id);
1513 if (node->data.transform_changed) { 1693 if (node->data.transform_changed) {
1514 TransformNode* target_node = tree->transform_tree.Node(node->id); 1694 TransformNode* target_node = tree->transform_tree.Node(node->id);
1515 target_node->data.transform_changed = true; 1695 target_node->data.transform_changed = true;
1516 } 1696 }
1517 } 1697 }
1518 } 1698 }
1519 1699
1520 } // namespace cc 1700 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698