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