| OLD | NEW |
| 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 Loading... |
| 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; |
| 1303 // layer_id_to_scroll_offset_map_ is intentionally omitted in operator=, |
| 1304 // because we do not want to simply copy the map when property tree is |
| 1305 // propagating from pending to active. |
| 1306 // In the main to pending case, we do want to copy it, but this can be done by |
| 1307 // calling UpdateScrollOffsetMap after the assignment; |
| 1308 // In the other case, we want pending and active property trees to share the |
| 1309 // same map. |
| 1310 return *this; |
| 1311 } |
| 1312 |
| 1294 bool ScrollTree::operator==(const ScrollTree& other) const { | 1313 bool ScrollTree::operator==(const ScrollTree& other) const { |
| 1295 return PropertyTree::operator==(other) && | 1314 const ScrollTree::ScrollOffsetMap& other_scroll_offset_map = |
| 1296 CurrentlyScrollingNode() == other.CurrentlyScrollingNode(); | 1315 other.scroll_offset_map(); |
| 1316 if (layer_id_to_scroll_offset_map_.size() != other_scroll_offset_map.size()) |
| 1317 return false; |
| 1318 |
| 1319 for (auto map_entry : layer_id_to_scroll_offset_map_) { |
| 1320 int key = map_entry.first; |
| 1321 if (other_scroll_offset_map.find(key) == other_scroll_offset_map.end() || |
| 1322 map_entry.second != layer_id_to_scroll_offset_map_.at(key)) |
| 1323 return false; |
| 1324 } |
| 1325 |
| 1326 bool is_currently_scrolling_node_equal = |
| 1327 (currently_scrolling_node_id_ == -1) |
| 1328 ? (!other.CurrentlyScrollingNode()) |
| 1329 : (other.CurrentlyScrollingNode() && |
| 1330 currently_scrolling_node_id_ == |
| 1331 other.CurrentlyScrollingNode()->id); |
| 1332 |
| 1333 return PropertyTree::operator==(other) && is_currently_scrolling_node_equal; |
| 1297 } | 1334 } |
| 1298 | 1335 |
| 1299 void ScrollTree::ToProtobuf(proto::PropertyTree* proto) const { | 1336 void ScrollTree::ToProtobuf(proto::PropertyTree* proto) const { |
| 1300 DCHECK(!proto->has_property_type()); | 1337 DCHECK(!proto->has_property_type()); |
| 1301 proto->set_property_type(proto::PropertyTree::Scroll); | 1338 proto->set_property_type(proto::PropertyTree::Scroll); |
| 1302 | 1339 |
| 1303 PropertyTree::ToProtobuf(proto); | 1340 PropertyTree::ToProtobuf(proto); |
| 1304 proto::ScrollTreeData* data = proto->mutable_scroll_tree_data(); | 1341 proto::ScrollTreeData* data = proto->mutable_scroll_tree_data(); |
| 1305 | 1342 |
| 1306 data->set_currently_scrolling_node_id(currently_scrolling_node_id_); | 1343 data->set_currently_scrolling_node_id(currently_scrolling_node_id_); |
| 1344 for (auto i : layer_id_to_scroll_offset_map_) { |
| 1345 data->add_layer_id_to_scroll_offset_map(); |
| 1346 proto::ScrollOffsetMapEntry* entry = |
| 1347 data->mutable_layer_id_to_scroll_offset_map( |
| 1348 data->layer_id_to_scroll_offset_map_size() - 1); |
| 1349 entry->set_layer_id(i.first); |
| 1350 SyncedScrollOffsetToProto(*i.second.get(), entry->mutable_scroll_offset()); |
| 1351 } |
| 1307 } | 1352 } |
| 1308 | 1353 |
| 1309 void ScrollTree::FromProtobuf(const proto::PropertyTree& proto) { | 1354 void ScrollTree::FromProtobuf(const proto::PropertyTree& proto) { |
| 1310 DCHECK(proto.has_property_type()); | 1355 DCHECK(proto.has_property_type()); |
| 1311 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Scroll); | 1356 DCHECK_EQ(proto.property_type(), proto::PropertyTree::Scroll); |
| 1312 | 1357 |
| 1313 PropertyTree::FromProtobuf(proto); | 1358 PropertyTree::FromProtobuf(proto); |
| 1314 const proto::ScrollTreeData& data = proto.scroll_tree_data(); | 1359 const proto::ScrollTreeData& data = proto.scroll_tree_data(); |
| 1315 | 1360 |
| 1316 currently_scrolling_node_id_ = data.currently_scrolling_node_id(); | 1361 currently_scrolling_node_id_ = data.currently_scrolling_node_id(); |
| 1362 |
| 1363 for (int i = 0; i < data.layer_id_to_scroll_offset_map_size(); ++i) { |
| 1364 const proto::ScrollOffsetMapEntry entry = |
| 1365 data.layer_id_to_scroll_offset_map(i); |
| 1366 layer_id_to_scroll_offset_map_[entry.layer_id()] = new SyncedScrollOffset(); |
| 1367 ProtoToSyncedScrollOffset( |
| 1368 entry.scroll_offset(), |
| 1369 layer_id_to_scroll_offset_map_[entry.layer_id()].get()); |
| 1370 } |
| 1371 } |
| 1372 |
| 1373 void ScrollTree::clear() { |
| 1374 PropertyTree<ScrollNode>::clear(); |
| 1375 |
| 1376 if (property_trees()->is_main_thread) { |
| 1377 currently_scrolling_node_id_ = -1; |
| 1378 layer_id_to_scroll_offset_map_.clear(); |
| 1379 } |
| 1317 } | 1380 } |
| 1318 | 1381 |
| 1319 gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scroll_node_id) const { | 1382 gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scroll_node_id) const { |
| 1320 const ScrollNode* scroll_node = Node(scroll_node_id); | 1383 const ScrollNode* scroll_node = Node(scroll_node_id); |
| 1321 gfx::SizeF scroll_bounds = gfx::SizeF(scroll_node->data.bounds.width(), | 1384 gfx::SizeF scroll_bounds = gfx::SizeF(scroll_node->data.bounds.width(), |
| 1322 scroll_node->data.bounds.height()); | 1385 scroll_node->data.bounds.height()); |
| 1323 | 1386 |
| 1324 if (scroll_node->data.is_inner_viewport_scroll_layer) { | 1387 if (scroll_node->data.is_inner_viewport_scroll_layer) { |
| 1325 scroll_bounds.Enlarge( | 1388 scroll_bounds.Enlarge( |
| 1326 property_trees()->inner_viewport_scroll_bounds_delta().x(), | 1389 property_trees()->inner_viewport_scroll_bounds_delta().x(), |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1392 property_trees()->transform_tree.Node(scroll_node->data.transform_id); | 1455 property_trees()->transform_tree.Node(scroll_node->data.transform_id); |
| 1393 gfx::Transform screen_space_transform( | 1456 gfx::Transform screen_space_transform( |
| 1394 1, 0, 0, 1, scroll_node->data.offset_to_transform_parent.x(), | 1457 1, 0, 0, 1, scroll_node->data.offset_to_transform_parent.x(), |
| 1395 scroll_node->data.offset_to_transform_parent.y()); | 1458 scroll_node->data.offset_to_transform_parent.y()); |
| 1396 screen_space_transform.ConcatTransform(transform_node->data.to_screen); | 1459 screen_space_transform.ConcatTransform(transform_node->data.to_screen); |
| 1397 if (scroll_node->data.should_flatten) | 1460 if (scroll_node->data.should_flatten) |
| 1398 screen_space_transform.FlattenTo2d(); | 1461 screen_space_transform.FlattenTo2d(); |
| 1399 return screen_space_transform; | 1462 return screen_space_transform; |
| 1400 } | 1463 } |
| 1401 | 1464 |
| 1465 // TODO(sunxd): Make this function private once scroll offset access is fully |
| 1466 // directed to scroll tree. |
| 1467 SyncedScrollOffset* ScrollTree::synced_scroll_offset(int layer_id) { |
| 1468 if (layer_id_to_scroll_offset_map_.find(layer_id) == |
| 1469 layer_id_to_scroll_offset_map_.end()) { |
| 1470 layer_id_to_scroll_offset_map_[layer_id] = new SyncedScrollOffset; |
| 1471 } |
| 1472 return layer_id_to_scroll_offset_map_[layer_id].get(); |
| 1473 } |
| 1474 |
| 1475 gfx::ScrollOffset ScrollTree::PullDeltaForMainThread( |
| 1476 SyncedScrollOffset* scroll_offset) { |
| 1477 // TODO(miletus): Remove all this temporary flooring machinery when |
| 1478 // Blink fully supports fractional scrolls. |
| 1479 gfx::ScrollOffset current_offset = |
| 1480 scroll_offset->Current(property_trees()->is_active); |
| 1481 gfx::ScrollOffset current_delta = property_trees()->is_active |
| 1482 ? scroll_offset->Delta() |
| 1483 : scroll_offset->PendingDelta().get(); |
| 1484 gfx::ScrollOffset floored_delta(floor(current_delta.x()), |
| 1485 floor(current_delta.y())); |
| 1486 gfx::ScrollOffset diff_delta = floored_delta - current_delta; |
| 1487 gfx::ScrollOffset tmp_offset = current_offset + diff_delta; |
| 1488 scroll_offset->SetCurrent(tmp_offset); |
| 1489 gfx::ScrollOffset delta = scroll_offset->PullDeltaForMainThread(); |
| 1490 scroll_offset->SetCurrent(current_offset); |
| 1491 return delta; |
| 1492 } |
| 1493 |
| 1494 void ScrollTree::CollectScrollDeltas(ScrollAndScaleSet* scroll_info) { |
| 1495 for (auto map_entry : layer_id_to_scroll_offset_map_) { |
| 1496 gfx::ScrollOffset scroll_delta = |
| 1497 PullDeltaForMainThread(map_entry.second.get()); |
| 1498 |
| 1499 if (!scroll_delta.IsZero()) { |
| 1500 LayerTreeHostCommon::ScrollUpdateInfo scroll; |
| 1501 scroll.layer_id = map_entry.first; |
| 1502 scroll.scroll_delta = gfx::Vector2d(scroll_delta.x(), scroll_delta.y()); |
| 1503 scroll_info->scrolls.push_back(scroll); |
| 1504 } |
| 1505 } |
| 1506 } |
| 1507 |
| 1508 void ScrollTree::UpdateScrollOffsetMapEntry( |
| 1509 int key, |
| 1510 ScrollTree::ScrollOffsetMap* new_scroll_offset_map, |
| 1511 LayerTreeImpl* layer_tree_impl) { |
| 1512 bool changed = false; |
| 1513 // If we are pushing scroll offset from main to pending tree, we create a new |
| 1514 // instance of synced scroll offset; if we are pushing from pending to active, |
| 1515 // we reuse the pending tree's value in the map. |
| 1516 if (!property_trees()->is_active) { |
| 1517 changed = synced_scroll_offset(key)->PushFromMainThread( |
| 1518 new_scroll_offset_map->at(key)->PendingBase()); |
| 1519 |
| 1520 if (new_scroll_offset_map->at(key)->clobber_active_value()) { |
| 1521 synced_scroll_offset(key)->set_clobber_active_value(); |
| 1522 } |
| 1523 if (changed) |
| 1524 layer_tree_impl->LayerById(key)->DidUpdateScrollOffset(); |
| 1525 } else { |
| 1526 layer_id_to_scroll_offset_map_[key] = new_scroll_offset_map->at(key); |
| 1527 changed |= synced_scroll_offset(key)->PushPendingToActive(); |
| 1528 if (changed) |
| 1529 layer_tree_impl->LayerById(key)->DidUpdateScrollOffset(); |
| 1530 } |
| 1531 } |
| 1532 |
| 1533 void ScrollTree::UpdateScrollOffsetMap( |
| 1534 ScrollTree::ScrollOffsetMap* new_scroll_offset_map, |
| 1535 LayerTreeImpl* layer_tree_impl) { |
| 1536 if (layer_tree_impl && layer_tree_impl->root_layer()) { |
| 1537 DCHECK(!property_trees()->is_main_thread); |
| 1538 for (auto map_entry = layer_id_to_scroll_offset_map_.begin(); |
| 1539 map_entry != layer_id_to_scroll_offset_map_.end();) { |
| 1540 int key = map_entry->first; |
| 1541 if (new_scroll_offset_map->find(key) != new_scroll_offset_map->end()) { |
| 1542 UpdateScrollOffsetMapEntry(key, new_scroll_offset_map, layer_tree_impl); |
| 1543 ++map_entry; |
| 1544 } else { |
| 1545 map_entry = layer_id_to_scroll_offset_map_.erase(map_entry); |
| 1546 } |
| 1547 } |
| 1548 |
| 1549 for (auto& map_entry : *new_scroll_offset_map) { |
| 1550 int key = map_entry.first; |
| 1551 if (layer_id_to_scroll_offset_map_.find(key) == |
| 1552 layer_id_to_scroll_offset_map_.end()) |
| 1553 UpdateScrollOffsetMapEntry(key, new_scroll_offset_map, layer_tree_impl); |
| 1554 } |
| 1555 } |
| 1556 } |
| 1557 |
| 1558 ScrollTree::ScrollOffsetMap& ScrollTree::scroll_offset_map() { |
| 1559 return layer_id_to_scroll_offset_map_; |
| 1560 } |
| 1561 |
| 1562 const ScrollTree::ScrollOffsetMap& ScrollTree::scroll_offset_map() const { |
| 1563 return layer_id_to_scroll_offset_map_; |
| 1564 } |
| 1565 |
| 1566 void ScrollTree::ApplySentScrollDeltasFromAbortedCommit() { |
| 1567 DCHECK(property_trees()->is_active); |
| 1568 for (auto& map_entry : layer_id_to_scroll_offset_map_) |
| 1569 map_entry.second->AbortCommit(); |
| 1570 } |
| 1571 |
| 1572 bool ScrollTree::SetScrollOffset(int layer_id, |
| 1573 const gfx::ScrollOffset& scroll_offset) { |
| 1574 if (property_trees()->is_main_thread) |
| 1575 return synced_scroll_offset(layer_id)->PushFromMainThread(scroll_offset); |
| 1576 else if (property_trees()->is_active) |
| 1577 return synced_scroll_offset(layer_id)->SetCurrent(scroll_offset); |
| 1578 return false; |
| 1579 } |
| 1580 |
| 1402 PropertyTrees::PropertyTrees() | 1581 PropertyTrees::PropertyTrees() |
| 1403 : needs_rebuild(true), | 1582 : needs_rebuild(true), |
| 1404 non_root_surfaces_enabled(true), | 1583 non_root_surfaces_enabled(true), |
| 1405 changed(false), | 1584 changed(false), |
| 1406 full_tree_damaged(false), | 1585 full_tree_damaged(false), |
| 1407 sequence_number(0) { | 1586 sequence_number(0), |
| 1587 is_main_thread(true), |
| 1588 is_active(false) { |
| 1408 transform_tree.SetPropertyTrees(this); | 1589 transform_tree.SetPropertyTrees(this); |
| 1409 effect_tree.SetPropertyTrees(this); | 1590 effect_tree.SetPropertyTrees(this); |
| 1410 clip_tree.SetPropertyTrees(this); | 1591 clip_tree.SetPropertyTrees(this); |
| 1411 scroll_tree.SetPropertyTrees(this); | 1592 scroll_tree.SetPropertyTrees(this); |
| 1412 } | 1593 } |
| 1413 | 1594 |
| 1414 PropertyTrees::~PropertyTrees() {} | 1595 PropertyTrees::~PropertyTrees() {} |
| 1415 | 1596 |
| 1416 bool PropertyTrees::operator==(const PropertyTrees& other) const { | 1597 bool PropertyTrees::operator==(const PropertyTrees& other) const { |
| 1417 return transform_tree == other.transform_tree && | 1598 return transform_tree == other.transform_tree && |
| 1418 effect_tree == other.effect_tree && clip_tree == other.clip_tree && | 1599 effect_tree == other.effect_tree && clip_tree == other.clip_tree && |
| 1419 scroll_tree == other.scroll_tree && | 1600 scroll_tree == other.scroll_tree && |
| 1420 needs_rebuild == other.needs_rebuild && changed == other.changed && | 1601 needs_rebuild == other.needs_rebuild && changed == other.changed && |
| 1421 full_tree_damaged == other.full_tree_damaged && | 1602 full_tree_damaged == other.full_tree_damaged && |
| 1603 is_main_thread == other.is_main_thread && |
| 1604 is_active == other.is_active && |
| 1422 non_root_surfaces_enabled == other.non_root_surfaces_enabled && | 1605 non_root_surfaces_enabled == other.non_root_surfaces_enabled && |
| 1423 sequence_number == other.sequence_number; | 1606 sequence_number == other.sequence_number; |
| 1424 } | 1607 } |
| 1425 | 1608 |
| 1426 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) { | 1609 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) { |
| 1427 transform_tree = from.transform_tree; | 1610 transform_tree = from.transform_tree; |
| 1428 effect_tree = from.effect_tree; | 1611 effect_tree = from.effect_tree; |
| 1429 clip_tree = from.clip_tree; | 1612 clip_tree = from.clip_tree; |
| 1430 scroll_tree = from.scroll_tree; | 1613 scroll_tree = from.scroll_tree; |
| 1431 needs_rebuild = from.needs_rebuild; | 1614 needs_rebuild = from.needs_rebuild; |
| 1432 changed = from.changed; | 1615 changed = from.changed; |
| 1433 full_tree_damaged = from.full_tree_damaged; | 1616 full_tree_damaged = from.full_tree_damaged; |
| 1434 non_root_surfaces_enabled = from.non_root_surfaces_enabled; | 1617 non_root_surfaces_enabled = from.non_root_surfaces_enabled; |
| 1435 sequence_number = from.sequence_number; | 1618 sequence_number = from.sequence_number; |
| 1619 is_main_thread = from.is_main_thread; |
| 1620 is_active = from.is_active; |
| 1436 inner_viewport_container_bounds_delta_ = | 1621 inner_viewport_container_bounds_delta_ = |
| 1437 from.inner_viewport_container_bounds_delta(); | 1622 from.inner_viewport_container_bounds_delta(); |
| 1438 outer_viewport_container_bounds_delta_ = | 1623 outer_viewport_container_bounds_delta_ = |
| 1439 from.outer_viewport_container_bounds_delta(); | 1624 from.outer_viewport_container_bounds_delta(); |
| 1440 inner_viewport_scroll_bounds_delta_ = | 1625 inner_viewport_scroll_bounds_delta_ = |
| 1441 from.inner_viewport_scroll_bounds_delta(); | 1626 from.inner_viewport_scroll_bounds_delta(); |
| 1442 transform_tree.SetPropertyTrees(this); | 1627 transform_tree.SetPropertyTrees(this); |
| 1443 effect_tree.SetPropertyTrees(this); | 1628 effect_tree.SetPropertyTrees(this); |
| 1444 clip_tree.SetPropertyTrees(this); | 1629 clip_tree.SetPropertyTrees(this); |
| 1445 scroll_tree.SetPropertyTrees(this); | 1630 scroll_tree.SetPropertyTrees(this); |
| 1446 return *this; | 1631 return *this; |
| 1447 } | 1632 } |
| 1448 | 1633 |
| 1449 void PropertyTrees::ToProtobuf(proto::PropertyTrees* proto) const { | 1634 void PropertyTrees::ToProtobuf(proto::PropertyTrees* proto) const { |
| 1450 // TODO(khushalsagar): Add support for sending diffs when serializaing | 1635 // TODO(khushalsagar): Add support for sending diffs when serializaing |
| 1451 // property trees. See crbug/555370. | 1636 // property trees. See crbug/555370. |
| 1452 transform_tree.ToProtobuf(proto->mutable_transform_tree()); | 1637 transform_tree.ToProtobuf(proto->mutable_transform_tree()); |
| 1453 effect_tree.ToProtobuf(proto->mutable_effect_tree()); | 1638 effect_tree.ToProtobuf(proto->mutable_effect_tree()); |
| 1454 clip_tree.ToProtobuf(proto->mutable_clip_tree()); | 1639 clip_tree.ToProtobuf(proto->mutable_clip_tree()); |
| 1455 scroll_tree.ToProtobuf(proto->mutable_scroll_tree()); | 1640 scroll_tree.ToProtobuf(proto->mutable_scroll_tree()); |
| 1456 proto->set_needs_rebuild(needs_rebuild); | 1641 proto->set_needs_rebuild(needs_rebuild); |
| 1457 proto->set_changed(changed); | 1642 proto->set_changed(changed); |
| 1458 proto->set_full_tree_damaged(full_tree_damaged); | 1643 proto->set_full_tree_damaged(full_tree_damaged); |
| 1459 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled); | 1644 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled); |
| 1645 proto->set_is_main_thread(is_main_thread); |
| 1646 proto->set_is_active(is_active); |
| 1460 | 1647 |
| 1461 // TODO(khushalsagar): Consider using the sequence number to decide if | 1648 // TODO(khushalsagar): Consider using the sequence number to decide if |
| 1462 // property trees need to be serialized again for a commit. See crbug/555370. | 1649 // property trees need to be serialized again for a commit. See crbug/555370. |
| 1463 proto->set_sequence_number(sequence_number); | 1650 proto->set_sequence_number(sequence_number); |
| 1464 } | 1651 } |
| 1465 | 1652 |
| 1466 // static | 1653 // static |
| 1467 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) { | 1654 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) { |
| 1468 transform_tree.FromProtobuf(proto.transform_tree()); | 1655 transform_tree.FromProtobuf(proto.transform_tree()); |
| 1469 effect_tree.FromProtobuf(proto.effect_tree()); | 1656 effect_tree.FromProtobuf(proto.effect_tree()); |
| 1470 clip_tree.FromProtobuf(proto.clip_tree()); | 1657 clip_tree.FromProtobuf(proto.clip_tree()); |
| 1471 scroll_tree.FromProtobuf(proto.scroll_tree()); | 1658 scroll_tree.FromProtobuf(proto.scroll_tree()); |
| 1472 | 1659 |
| 1473 needs_rebuild = proto.needs_rebuild(); | 1660 needs_rebuild = proto.needs_rebuild(); |
| 1474 changed = proto.changed(); | 1661 changed = proto.changed(); |
| 1475 full_tree_damaged = proto.full_tree_damaged(); | 1662 full_tree_damaged = proto.full_tree_damaged(); |
| 1476 non_root_surfaces_enabled = proto.non_root_surfaces_enabled(); | 1663 non_root_surfaces_enabled = proto.non_root_surfaces_enabled(); |
| 1477 sequence_number = proto.sequence_number(); | 1664 sequence_number = proto.sequence_number(); |
| 1665 is_main_thread = proto.is_main_thread(); |
| 1666 is_active = proto.is_active(); |
| 1478 | 1667 |
| 1479 transform_tree.SetPropertyTrees(this); | 1668 transform_tree.SetPropertyTrees(this); |
| 1480 effect_tree.SetPropertyTrees(this); | 1669 effect_tree.SetPropertyTrees(this); |
| 1481 clip_tree.SetPropertyTrees(this); | 1670 clip_tree.SetPropertyTrees(this); |
| 1482 scroll_tree.SetPropertyTrees(this); | 1671 scroll_tree.SetPropertyTrees(this); |
| 1483 } | 1672 } |
| 1484 | 1673 |
| 1485 void PropertyTrees::SetInnerViewportContainerBoundsDelta( | 1674 void PropertyTrees::SetInnerViewportContainerBoundsDelta( |
| 1486 gfx::Vector2dF bounds_delta) { | 1675 gfx::Vector2dF bounds_delta) { |
| 1487 if (inner_viewport_container_bounds_delta_ == bounds_delta) | 1676 if (inner_viewport_container_bounds_delta_ == bounds_delta) |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1533 break; | 1722 break; |
| 1534 case ALL_TREES: | 1723 case ALL_TREES: |
| 1535 transform_tree.ResetChangeTracking(); | 1724 transform_tree.ResetChangeTracking(); |
| 1536 effect_tree.ResetChangeTracking(); | 1725 effect_tree.ResetChangeTracking(); |
| 1537 } | 1726 } |
| 1538 changed = false; | 1727 changed = false; |
| 1539 full_tree_damaged = false; | 1728 full_tree_damaged = false; |
| 1540 } | 1729 } |
| 1541 | 1730 |
| 1542 } // namespace cc | 1731 } // namespace cc |
| OLD | NEW |