| 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" |
| 14 #include "cc/layers/layer_list_impl.h" |
| 13 #include "cc/proto/gfx_conversions.h" | 15 #include "cc/proto/gfx_conversions.h" |
| 14 #include "cc/proto/property_tree.pb.h" | 16 #include "cc/proto/property_tree.pb.h" |
| 15 #include "cc/proto/scroll_offset.pb.h" | 17 #include "cc/proto/scroll_offset.pb.h" |
| 18 #include "cc/proto/synced_property_conversions.h" |
| 16 #include "cc/proto/transform.pb.h" | 19 #include "cc/proto/transform.pb.h" |
| 17 #include "cc/proto/vector2df.pb.h" | 20 #include "cc/proto/vector2df.pb.h" |
| 21 #include "cc/trees/layer_tree_host_common.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 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 Loading... |
| 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 LayerListImpl* layer_list_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_list_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_list_impl->LayerById(key)->DidUpdateScrollOffset(); |
| 1521 } |
| 1522 } |
| 1523 |
| 1524 void ScrollTree::UpdateScrollOffsetMap( |
| 1525 ScrollTree::ScrollOffsetMap* new_scroll_offset_map, |
| 1526 LayerListImpl* layer_list_impl) { |
| 1527 if (!layer_list_impl) { |
| 1528 return; |
| 1529 } |
| 1530 |
| 1531 DCHECK(!property_trees()->is_main_thread); |
| 1532 for (auto map_entry = layer_id_to_scroll_offset_map_.begin(); |
| 1533 map_entry != layer_id_to_scroll_offset_map_.end();) { |
| 1534 int key = map_entry->first; |
| 1535 if (new_scroll_offset_map->find(key) != new_scroll_offset_map->end()) { |
| 1536 UpdateScrollOffsetMapEntry(key, new_scroll_offset_map, layer_list_impl); |
| 1537 ++map_entry; |
| 1538 } else { |
| 1539 map_entry = layer_id_to_scroll_offset_map_.erase(map_entry); |
| 1540 } |
| 1541 } |
| 1542 |
| 1543 for (auto& map_entry : *new_scroll_offset_map) { |
| 1544 int key = map_entry.first; |
| 1545 if (layer_id_to_scroll_offset_map_.find(key) == |
| 1546 layer_id_to_scroll_offset_map_.end()) |
| 1547 UpdateScrollOffsetMapEntry(key, new_scroll_offset_map, layer_list_impl); |
| 1548 } |
| 1549 } |
| 1550 |
| 1551 ScrollTree::ScrollOffsetMap& ScrollTree::scroll_offset_map() { |
| 1552 return layer_id_to_scroll_offset_map_; |
| 1553 } |
| 1554 |
| 1555 const ScrollTree::ScrollOffsetMap& ScrollTree::scroll_offset_map() const { |
| 1556 return layer_id_to_scroll_offset_map_; |
| 1557 } |
| 1558 |
| 1559 void ScrollTree::ApplySentScrollDeltasFromAbortedCommit() { |
| 1560 DCHECK(property_trees()->is_active); |
| 1561 for (auto& map_entry : layer_id_to_scroll_offset_map_) |
| 1562 map_entry.second->AbortCommit(); |
| 1563 } |
| 1564 |
| 1402 PropertyTrees::PropertyTrees() | 1565 PropertyTrees::PropertyTrees() |
| 1403 : needs_rebuild(true), | 1566 : needs_rebuild(true), |
| 1404 non_root_surfaces_enabled(true), | 1567 non_root_surfaces_enabled(true), |
| 1405 changed(false), | 1568 changed(false), |
| 1406 sequence_number(0) { | 1569 sequence_number(0), |
| 1570 is_main_thread(true), |
| 1571 is_active(false) { |
| 1407 transform_tree.SetPropertyTrees(this); | 1572 transform_tree.SetPropertyTrees(this); |
| 1408 effect_tree.SetPropertyTrees(this); | 1573 effect_tree.SetPropertyTrees(this); |
| 1409 clip_tree.SetPropertyTrees(this); | 1574 clip_tree.SetPropertyTrees(this); |
| 1410 scroll_tree.SetPropertyTrees(this); | 1575 scroll_tree.SetPropertyTrees(this); |
| 1411 } | 1576 } |
| 1412 | 1577 |
| 1413 PropertyTrees::~PropertyTrees() {} | 1578 PropertyTrees::~PropertyTrees() {} |
| 1414 | 1579 |
| 1415 bool PropertyTrees::operator==(const PropertyTrees& other) const { | 1580 bool PropertyTrees::operator==(const PropertyTrees& other) const { |
| 1416 return transform_tree == other.transform_tree && | 1581 return transform_tree == other.transform_tree && |
| 1417 effect_tree == other.effect_tree && clip_tree == other.clip_tree && | 1582 effect_tree == other.effect_tree && clip_tree == other.clip_tree && |
| 1418 scroll_tree == other.scroll_tree && | 1583 scroll_tree == other.scroll_tree && |
| 1419 needs_rebuild == other.needs_rebuild && changed == other.changed && | 1584 needs_rebuild == other.needs_rebuild && |
| 1585 is_main_thread == other.is_main_thread && |
| 1586 is_active == other.is_active && |
| 1420 non_root_surfaces_enabled == other.non_root_surfaces_enabled && | 1587 non_root_surfaces_enabled == other.non_root_surfaces_enabled && |
| 1421 sequence_number == other.sequence_number; | 1588 sequence_number == other.sequence_number; |
| 1422 } | 1589 } |
| 1423 | 1590 |
| 1424 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) { | 1591 PropertyTrees& PropertyTrees::operator=(const PropertyTrees& from) { |
| 1425 transform_tree = from.transform_tree; | 1592 transform_tree = from.transform_tree; |
| 1426 effect_tree = from.effect_tree; | 1593 effect_tree = from.effect_tree; |
| 1427 clip_tree = from.clip_tree; | 1594 clip_tree = from.clip_tree; |
| 1428 scroll_tree = from.scroll_tree; | 1595 scroll_tree = from.scroll_tree; |
| 1429 needs_rebuild = from.needs_rebuild; | 1596 needs_rebuild = from.needs_rebuild; |
| 1430 changed = from.changed; | 1597 changed = from.changed; |
| 1431 non_root_surfaces_enabled = from.non_root_surfaces_enabled; | 1598 non_root_surfaces_enabled = from.non_root_surfaces_enabled; |
| 1432 sequence_number = from.sequence_number; | 1599 sequence_number = from.sequence_number; |
| 1600 is_main_thread = from.is_main_thread; |
| 1601 is_active = from.is_active; |
| 1433 inner_viewport_container_bounds_delta_ = | 1602 inner_viewport_container_bounds_delta_ = |
| 1434 from.inner_viewport_container_bounds_delta(); | 1603 from.inner_viewport_container_bounds_delta(); |
| 1435 outer_viewport_container_bounds_delta_ = | 1604 outer_viewport_container_bounds_delta_ = |
| 1436 from.outer_viewport_container_bounds_delta(); | 1605 from.outer_viewport_container_bounds_delta(); |
| 1437 inner_viewport_scroll_bounds_delta_ = | 1606 inner_viewport_scroll_bounds_delta_ = |
| 1438 from.inner_viewport_scroll_bounds_delta(); | 1607 from.inner_viewport_scroll_bounds_delta(); |
| 1439 transform_tree.SetPropertyTrees(this); | 1608 transform_tree.SetPropertyTrees(this); |
| 1440 effect_tree.SetPropertyTrees(this); | 1609 effect_tree.SetPropertyTrees(this); |
| 1441 clip_tree.SetPropertyTrees(this); | 1610 clip_tree.SetPropertyTrees(this); |
| 1442 scroll_tree.SetPropertyTrees(this); | 1611 scroll_tree.SetPropertyTrees(this); |
| 1443 return *this; | 1612 return *this; |
| 1444 } | 1613 } |
| 1445 | 1614 |
| 1446 void PropertyTrees::ToProtobuf(proto::PropertyTrees* proto) const { | 1615 void PropertyTrees::ToProtobuf(proto::PropertyTrees* proto) const { |
| 1447 // TODO(khushalsagar): Add support for sending diffs when serializaing | 1616 // TODO(khushalsagar): Add support for sending diffs when serializaing |
| 1448 // property trees. See crbug/555370. | 1617 // property trees. See crbug/555370. |
| 1449 transform_tree.ToProtobuf(proto->mutable_transform_tree()); | 1618 transform_tree.ToProtobuf(proto->mutable_transform_tree()); |
| 1450 effect_tree.ToProtobuf(proto->mutable_effect_tree()); | 1619 effect_tree.ToProtobuf(proto->mutable_effect_tree()); |
| 1451 clip_tree.ToProtobuf(proto->mutable_clip_tree()); | 1620 clip_tree.ToProtobuf(proto->mutable_clip_tree()); |
| 1452 scroll_tree.ToProtobuf(proto->mutable_scroll_tree()); | 1621 scroll_tree.ToProtobuf(proto->mutable_scroll_tree()); |
| 1453 proto->set_needs_rebuild(needs_rebuild); | 1622 proto->set_needs_rebuild(needs_rebuild); |
| 1454 proto->set_changed(changed); | 1623 proto->set_changed(changed); |
| 1455 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled); | 1624 proto->set_non_root_surfaces_enabled(non_root_surfaces_enabled); |
| 1625 proto->set_is_main_thread(is_main_thread); |
| 1626 proto->set_is_active(is_active); |
| 1456 | 1627 |
| 1457 // TODO(khushalsagar): Consider using the sequence number to decide if | 1628 // TODO(khushalsagar): Consider using the sequence number to decide if |
| 1458 // property trees need to be serialized again for a commit. See crbug/555370. | 1629 // property trees need to be serialized again for a commit. See crbug/555370. |
| 1459 proto->set_sequence_number(sequence_number); | 1630 proto->set_sequence_number(sequence_number); |
| 1460 } | 1631 } |
| 1461 | 1632 |
| 1462 // static | 1633 // static |
| 1463 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) { | 1634 void PropertyTrees::FromProtobuf(const proto::PropertyTrees& proto) { |
| 1464 transform_tree.FromProtobuf(proto.transform_tree()); | 1635 transform_tree.FromProtobuf(proto.transform_tree()); |
| 1465 effect_tree.FromProtobuf(proto.effect_tree()); | 1636 effect_tree.FromProtobuf(proto.effect_tree()); |
| 1466 clip_tree.FromProtobuf(proto.clip_tree()); | 1637 clip_tree.FromProtobuf(proto.clip_tree()); |
| 1467 scroll_tree.FromProtobuf(proto.scroll_tree()); | 1638 scroll_tree.FromProtobuf(proto.scroll_tree()); |
| 1468 | 1639 |
| 1469 needs_rebuild = proto.needs_rebuild(); | 1640 needs_rebuild = proto.needs_rebuild(); |
| 1470 changed = proto.changed(); | 1641 changed = proto.changed(); |
| 1471 non_root_surfaces_enabled = proto.non_root_surfaces_enabled(); | 1642 non_root_surfaces_enabled = proto.non_root_surfaces_enabled(); |
| 1472 sequence_number = proto.sequence_number(); | 1643 sequence_number = proto.sequence_number(); |
| 1644 is_main_thread = proto.is_main_thread(); |
| 1645 is_active = proto.is_active(); |
| 1473 | 1646 |
| 1474 transform_tree.SetPropertyTrees(this); | 1647 transform_tree.SetPropertyTrees(this); |
| 1475 effect_tree.SetPropertyTrees(this); | 1648 effect_tree.SetPropertyTrees(this); |
| 1476 clip_tree.SetPropertyTrees(this); | 1649 clip_tree.SetPropertyTrees(this); |
| 1477 scroll_tree.SetPropertyTrees(this); | 1650 scroll_tree.SetPropertyTrees(this); |
| 1478 } | 1651 } |
| 1479 | 1652 |
| 1480 void PropertyTrees::SetInnerViewportContainerBoundsDelta( | 1653 void PropertyTrees::SetInnerViewportContainerBoundsDelta( |
| 1481 gfx::Vector2dF bounds_delta) { | 1654 gfx::Vector2dF bounds_delta) { |
| 1482 if (inner_viewport_container_bounds_delta_ == bounds_delta) | 1655 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) { | 1677 for (int id = 1; id < static_cast<int>(effect_tree.size()); ++id) { |
| 1505 EffectNode* node = effect_tree.Node(id); | 1678 EffectNode* node = effect_tree.Node(id); |
| 1506 if (node->data.opacity_changed) { | 1679 if (node->data.opacity_changed) { |
| 1507 EffectNode* target_node = tree->effect_tree.Node(node->id); | 1680 EffectNode* target_node = tree->effect_tree.Node(node->id); |
| 1508 target_node->data.opacity_changed = true; | 1681 target_node->data.opacity_changed = true; |
| 1509 } | 1682 } |
| 1510 } | 1683 } |
| 1511 } | 1684 } |
| 1512 | 1685 |
| 1513 } // namespace cc | 1686 } // namespace cc |
| OLD | NEW |