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

Side by Side Diff: cc/trees/property_tree.cc

Issue 2621403003: cc: Don't create SyncedPropety instances on the main thread. (Closed)
Patch Set: Created 3 years, 11 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"
(...skipping 1108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1119 // because we do not want to simply copy the map when property tree is 1119 // because we do not want to simply copy the map when property tree is
1120 // propagating from pending to active. 1120 // propagating from pending to active.
1121 // In the main to pending case, we do want to copy it, but this can be done by 1121 // In the main to pending case, we do want to copy it, but this can be done by
1122 // calling UpdateScrollOffsetMap after the assignment; 1122 // calling UpdateScrollOffsetMap after the assignment;
1123 // In the other case, we want pending and active property trees to share the 1123 // In the other case, we want pending and active property trees to share the
1124 // same map. 1124 // same map.
1125 return *this; 1125 return *this;
1126 } 1126 }
1127 1127
1128 bool ScrollTree::operator==(const ScrollTree& other) const { 1128 bool ScrollTree::operator==(const ScrollTree& other) const {
1129 const ScrollTree::ScrollOffsetMap& other_scroll_offset_map = 1129 if (layer_id_to_scroll_offset_map_ != other.layer_id_to_scroll_offset_map_)
1130 other.scroll_offset_map();
1131 if (layer_id_to_scroll_offset_map_.size() != other_scroll_offset_map.size())
1132 return false; 1130 return false;
1133 1131 if (layer_id_to_synced_scroll_offset_map_ !=
1134 for (auto map_entry : layer_id_to_scroll_offset_map_) { 1132 other.layer_id_to_synced_scroll_offset_map_)
1135 int key = map_entry.first; 1133 return false;
1136 if (other_scroll_offset_map.find(key) == other_scroll_offset_map.end() ||
1137 map_entry.second != layer_id_to_scroll_offset_map_.at(key))
1138 return false;
1139 }
1140 1134
1141 bool is_currently_scrolling_node_equal = 1135 bool is_currently_scrolling_node_equal =
1142 currently_scrolling_node_id_ == other.currently_scrolling_node_id_; 1136 currently_scrolling_node_id_ == other.currently_scrolling_node_id_;
1143 1137
1144 return PropertyTree::operator==(other) && is_currently_scrolling_node_equal; 1138 return PropertyTree::operator==(other) && is_currently_scrolling_node_equal;
1145 } 1139 }
1146 1140
1141 #if DCHECK_IS_ON()
1142 void ScrollTree::CopyCompleteTreeState(const ScrollTree& other) {
1143 currently_scrolling_node_id_ = other.currently_scrolling_node_id_;
1144 layer_id_to_scrollbars_enabled_map_ =
1145 other.layer_id_to_scrollbars_enabled_map_;
1146 layer_id_to_scroll_offset_map_ = other.layer_id_to_scroll_offset_map_;
1147 layer_id_to_synced_scroll_offset_map_ =
1148 other.layer_id_to_synced_scroll_offset_map_;
1149 }
1150 #endif
1151
1147 void ScrollTree::clear() { 1152 void ScrollTree::clear() {
1148 PropertyTree<ScrollNode>::clear(); 1153 PropertyTree<ScrollNode>::clear();
1149 1154
1150 if (property_trees()->is_main_thread) { 1155 if (property_trees()->is_main_thread) {
1151 currently_scrolling_node_id_ = kInvalidNodeId; 1156 currently_scrolling_node_id_ = kInvalidNodeId;
1152 layer_id_to_scroll_offset_map_.clear(); 1157 layer_id_to_scroll_offset_map_.clear();
1153 } 1158 }
1154 1159
1155 #if DCHECK_IS_ON() 1160 #if DCHECK_IS_ON()
1156 ScrollTree tree; 1161 ScrollTree tree;
1157 if (!property_trees()->is_main_thread) { 1162 if (!property_trees()->is_main_thread) {
1163 DCHECK(layer_id_to_scroll_offset_map_.empty());
1158 tree.currently_scrolling_node_id_ = currently_scrolling_node_id_; 1164 tree.currently_scrolling_node_id_ = currently_scrolling_node_id_;
1159 tree.layer_id_to_scroll_offset_map_ = layer_id_to_scroll_offset_map_; 1165 tree.layer_id_to_synced_scroll_offset_map_ =
1166 layer_id_to_synced_scroll_offset_map_;
1160 } 1167 }
1161 DCHECK(tree == *this); 1168 DCHECK(tree == *this);
1162 #endif 1169 #endif
1163 } 1170 }
1164 1171
1165 gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scroll_node_id) const { 1172 gfx::ScrollOffset ScrollTree::MaxScrollOffset(int scroll_node_id) const {
1166 const ScrollNode* scroll_node = Node(scroll_node_id); 1173 const ScrollNode* scroll_node = Node(scroll_node_id);
1167 gfx::SizeF scroll_bounds = 1174 gfx::SizeF scroll_bounds =
1168 gfx::SizeF(scroll_node->bounds.width(), scroll_node->bounds.height()); 1175 gfx::SizeF(scroll_node->bounds.width(), scroll_node->bounds.height());
1169 1176
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1262 gfx::Transform screen_space_transform( 1269 gfx::Transform screen_space_transform(
1263 1, 0, 0, 1, scroll_node->offset_to_transform_parent.x(), 1270 1, 0, 0, 1, scroll_node->offset_to_transform_parent.x(),
1264 scroll_node->offset_to_transform_parent.y()); 1271 scroll_node->offset_to_transform_parent.y());
1265 screen_space_transform.ConcatTransform( 1272 screen_space_transform.ConcatTransform(
1266 transform_tree.ToScreen(transform_node->id)); 1273 transform_tree.ToScreen(transform_node->id));
1267 if (scroll_node->should_flatten) 1274 if (scroll_node->should_flatten)
1268 screen_space_transform.FlattenTo2d(); 1275 screen_space_transform.FlattenTo2d();
1269 return screen_space_transform; 1276 return screen_space_transform;
1270 } 1277 }
1271 1278
1272 SyncedScrollOffset* ScrollTree::synced_scroll_offset(int layer_id) { 1279 SyncedScrollOffset* ScrollTree::GetOrCreateSyncedScrollOffset(int layer_id) {
1273 if (layer_id_to_scroll_offset_map_.find(layer_id) == 1280 DCHECK(!property_trees()->is_main_thread);
1274 layer_id_to_scroll_offset_map_.end()) { 1281 if (layer_id_to_synced_scroll_offset_map_.find(layer_id) ==
1275 layer_id_to_scroll_offset_map_[layer_id] = new SyncedScrollOffset; 1282 layer_id_to_synced_scroll_offset_map_.end()) {
1283 layer_id_to_synced_scroll_offset_map_[layer_id] = new SyncedScrollOffset;
1276 } 1284 }
1277 return layer_id_to_scroll_offset_map_[layer_id].get(); 1285 return layer_id_to_synced_scroll_offset_map_[layer_id].get();
1278 } 1286 }
1279 1287
1280 const SyncedScrollOffset* ScrollTree::synced_scroll_offset(int layer_id) const { 1288 const SyncedScrollOffset* ScrollTree::synced_scroll_offset(int layer_id) const {
1281 if (layer_id_to_scroll_offset_map_.find(layer_id) == 1289 DCHECK(!property_trees()->is_main_thread);
1282 layer_id_to_scroll_offset_map_.end()) { 1290 if (layer_id_to_synced_scroll_offset_map_.find(layer_id) ==
1291 layer_id_to_synced_scroll_offset_map_.end()) {
1283 return nullptr; 1292 return nullptr;
1284 } 1293 }
1285 return layer_id_to_scroll_offset_map_.at(layer_id).get(); 1294 return layer_id_to_synced_scroll_offset_map_.at(layer_id).get();
1286 } 1295 }
1287 1296
1288 const gfx::ScrollOffset ScrollTree::current_scroll_offset(int layer_id) const { 1297 const gfx::ScrollOffset ScrollTree::current_scroll_offset(int layer_id) const {
1298 if (property_trees()->is_main_thread) {
1299 ScrollOffsetMap::const_iterator it =
1300 layer_id_to_scroll_offset_map_.find(layer_id);
1301 return it != layer_id_to_scroll_offset_map_.end() ? it->second
1302 : gfx::ScrollOffset();
1303 }
1289 return synced_scroll_offset(layer_id) 1304 return synced_scroll_offset(layer_id)
1290 ? synced_scroll_offset(layer_id)->Current( 1305 ? synced_scroll_offset(layer_id)->Current(
1291 property_trees()->is_active) 1306 property_trees()->is_active)
1292 : gfx::ScrollOffset(); 1307 : gfx::ScrollOffset();
1293 } 1308 }
1294 1309
1295 gfx::ScrollOffset ScrollTree::PullDeltaForMainThread( 1310 gfx::ScrollOffset ScrollTree::PullDeltaForMainThread(
1296 SyncedScrollOffset* scroll_offset) { 1311 SyncedScrollOffset* scroll_offset) {
1297 // TODO(flackr): We should pass the fractional scroll deltas when Blink fully 1312 // TODO(flackr): We should pass the fractional scroll deltas when Blink fully
1298 // supports fractional scrolls. 1313 // supports fractional scrolls.
1299 // TODO(flackr): We should ideally round the fractional scrolls in the same 1314 // TODO(flackr): We should ideally round the fractional scrolls in the same
1300 // direction as the scroll will be snapped but for common cases this is 1315 // direction as the scroll will be snapped but for common cases this is
1301 // equivalent to rounding to the nearest integer offset. 1316 // equivalent to rounding to the nearest integer offset.
1302 gfx::ScrollOffset current_offset = 1317 gfx::ScrollOffset current_offset =
1303 scroll_offset->Current(property_trees()->is_active); 1318 scroll_offset->Current(property_trees()->is_active);
1304 gfx::ScrollOffset rounded_offset = 1319 gfx::ScrollOffset rounded_offset =
1305 gfx::ScrollOffset(roundf(current_offset.x()), roundf(current_offset.y())); 1320 gfx::ScrollOffset(roundf(current_offset.x()), roundf(current_offset.y()));
1306 scroll_offset->SetCurrent(rounded_offset); 1321 scroll_offset->SetCurrent(rounded_offset);
1307 gfx::ScrollOffset delta = scroll_offset->PullDeltaForMainThread(); 1322 gfx::ScrollOffset delta = scroll_offset->PullDeltaForMainThread();
1308 scroll_offset->SetCurrent(current_offset); 1323 scroll_offset->SetCurrent(current_offset);
1309 return delta; 1324 return delta;
1310 } 1325 }
1311 1326
1312 void ScrollTree::CollectScrollDeltas(ScrollAndScaleSet* scroll_info, 1327 void ScrollTree::CollectScrollDeltas(ScrollAndScaleSet* scroll_info,
1313 int inner_viewport_layer_id) { 1328 int inner_viewport_layer_id) {
1314 for (auto map_entry : layer_id_to_scroll_offset_map_) { 1329 DCHECK(!property_trees()->is_main_thread);
1330 for (auto map_entry : layer_id_to_synced_scroll_offset_map_) {
1315 gfx::ScrollOffset scroll_delta = 1331 gfx::ScrollOffset scroll_delta =
1316 PullDeltaForMainThread(map_entry.second.get()); 1332 PullDeltaForMainThread(map_entry.second.get());
1317 1333
1318 gfx::Vector2d scroll_delta_vector(scroll_delta.x(), scroll_delta.y()); 1334 gfx::Vector2d scroll_delta_vector(scroll_delta.x(), scroll_delta.y());
1319 int layer_id = map_entry.first; 1335 int layer_id = map_entry.first;
1320 1336
1321 if (!scroll_delta.IsZero()) { 1337 if (!scroll_delta.IsZero()) {
1322 if (layer_id == inner_viewport_layer_id) { 1338 if (layer_id == inner_viewport_layer_id) {
1323 // Inner (visual) viewport is stored separately. 1339 // Inner (visual) viewport is stored separately.
1324 scroll_info->inner_viewport_scroll.layer_id = layer_id; 1340 scroll_info->inner_viewport_scroll.layer_id = layer_id;
1325 scroll_info->inner_viewport_scroll.scroll_delta = scroll_delta_vector; 1341 scroll_info->inner_viewport_scroll.scroll_delta = scroll_delta_vector;
1326 } else { 1342 } else {
1327 LayerTreeHostCommon::ScrollUpdateInfo scroll; 1343 LayerTreeHostCommon::ScrollUpdateInfo scroll;
1328 scroll.layer_id = layer_id; 1344 scroll.layer_id = layer_id;
1329 scroll.scroll_delta = scroll_delta_vector; 1345 scroll.scroll_delta = scroll_delta_vector;
1330 scroll_info->scrolls.push_back(scroll); 1346 scroll_info->scrolls.push_back(scroll);
1331 } 1347 }
1332 } 1348 }
1333 } 1349 }
1334 } 1350 }
1335 1351
1336 void ScrollTree::CollectScrollDeltasForTesting() { 1352 void ScrollTree::CollectScrollDeltasForTesting() {
1337 for (auto map_entry : layer_id_to_scroll_offset_map_) { 1353 for (auto map_entry : layer_id_to_synced_scroll_offset_map_) {
1338 PullDeltaForMainThread(map_entry.second.get()); 1354 PullDeltaForMainThread(map_entry.second.get());
1339 } 1355 }
1340 } 1356 }
1341 1357
1342 void ScrollTree::UpdateScrollOffsetMapEntry( 1358 void ScrollTree::PushScrollUpdatesFromMainThread(
1343 int key, 1359 PropertyTrees* main_property_trees,
1344 ScrollTree::ScrollOffsetMap* new_scroll_offset_map, 1360 LayerTreeImpl* sync_tree) {
1345 LayerTreeImpl* layer_tree_impl) { 1361 DCHECK(!property_trees()->is_main_thread);
1346 bool changed = false; 1362 const ScrollOffsetMap& main_scroll_offset_map =
1347 // If we are pushing scroll offset from main to pending tree, we create a new 1363 main_property_trees->scroll_tree.layer_id_to_scroll_offset_map_;
1348 // instance of synced scroll offset; if we are pushing from pending to active,
1349 // we reuse the pending tree's value in the map.
1350 if (!property_trees()->is_active) {
1351 changed = synced_scroll_offset(key)->PushFromMainThread(
1352 new_scroll_offset_map->at(key)->PendingBase());
1353 1364
1354 if (new_scroll_offset_map->at(key)->clobber_active_value()) { 1365 // We first want to clear SyncedProperty instances for layers which were
1355 synced_scroll_offset(key)->set_clobber_active_value(); 1366 // destroyed on the main thread.
ajuma 2017/01/11 22:35:51 More precisely, destroyed or became non-scrollable
Khushal 2017/01/11 23:04:53 Done.
1356 } 1367 for (auto map_entry = layer_id_to_synced_scroll_offset_map_.begin();
1357 if (changed) { 1368 map_entry != layer_id_to_synced_scroll_offset_map_.end();) {
1358 layer_tree_impl->DidUpdateScrollOffset(key); 1369 int layer_id = map_entry->first;
1359 } 1370 if (main_scroll_offset_map.find(layer_id) == main_scroll_offset_map.end())
1360 } else { 1371 map_entry = layer_id_to_synced_scroll_offset_map_.erase(map_entry);
1361 layer_id_to_scroll_offset_map_[key] = new_scroll_offset_map->at(key); 1372 else
1362 changed |= synced_scroll_offset(key)->PushPendingToActive(); 1373 map_entry++;
1363 if (changed) { 1374 }
1364 layer_tree_impl->DidUpdateScrollOffset(key); 1375
1365 } 1376 for (auto map_entry : main_scroll_offset_map) {
1377 int layer_id = map_entry.first;
1378 SyncedScrollOffset* synced_scroll_offset =
1379 GetOrCreateSyncedScrollOffset(layer_id);
1380
1381 bool changed = synced_scroll_offset->PushFromMainThread(map_entry.second);
1382 // If we are committing directly to the active tree, push pending to active
1383 // here.
1384 if (property_trees()->is_active)
1385 changed |= synced_scroll_offset->PushPendingToActive();
1386
1387 if (changed)
1388 sync_tree->DidUpdateScrollOffset(layer_id);
1366 } 1389 }
1367 } 1390 }
1368 1391
1369 void ScrollTree::UpdateScrollOffsetMap( 1392 void ScrollTree::PushScrollUpdatesFromPendingTree(
1370 ScrollTree::ScrollOffsetMap* new_scroll_offset_map, 1393 PropertyTrees* pending_property_trees,
1371 LayerTreeImpl* layer_tree_impl) { 1394 LayerTreeImpl* active_tree) {
1372 if (layer_tree_impl && !layer_tree_impl->LayerListIsEmpty()) { 1395 DCHECK(property_trees()->is_active);
1373 DCHECK(!property_trees()->is_main_thread); 1396 DCHECK(!pending_property_trees->is_main_thread);
1374 for (auto map_entry = layer_id_to_scroll_offset_map_.begin(); 1397 DCHECK(!pending_property_trees->is_active);
1375 map_entry != layer_id_to_scroll_offset_map_.end();) {
1376 int key = map_entry->first;
1377 if (new_scroll_offset_map->find(key) != new_scroll_offset_map->end()) {
1378 UpdateScrollOffsetMapEntry(key, new_scroll_offset_map, layer_tree_impl);
1379 ++map_entry;
1380 } else {
1381 map_entry = layer_id_to_scroll_offset_map_.erase(map_entry);
1382 }
1383 }
1384 1398
1385 for (auto& map_entry : *new_scroll_offset_map) { 1399 // When pushing to the active tree, we can simply copy over the map from the
1386 int key = map_entry.first; 1400 // pending tree. The pending and active tree hold a reference to the same
1387 if (layer_id_to_scroll_offset_map_.find(key) == 1401 // SyncedProperty instances.
1388 layer_id_to_scroll_offset_map_.end()) 1402 layer_id_to_synced_scroll_offset_map_.clear();
1389 UpdateScrollOffsetMapEntry(key, new_scroll_offset_map, layer_tree_impl); 1403 for (auto map_entry : pending_property_trees->scroll_tree
1390 } 1404 .layer_id_to_synced_scroll_offset_map_) {
1405 layer_id_to_synced_scroll_offset_map_[map_entry.first] = map_entry.second;
1406 if (map_entry.second->PushPendingToActive())
1407 active_tree->DidUpdateScrollOffset(map_entry.first);
1391 } 1408 }
1392 } 1409 }
1393 1410
1394 ScrollTree::ScrollOffsetMap& ScrollTree::scroll_offset_map() {
1395 return layer_id_to_scroll_offset_map_;
1396 }
1397
1398 const ScrollTree::ScrollOffsetMap& ScrollTree::scroll_offset_map() const {
1399 return layer_id_to_scroll_offset_map_;
1400 }
1401
1402 void ScrollTree::ApplySentScrollDeltasFromAbortedCommit() { 1411 void ScrollTree::ApplySentScrollDeltasFromAbortedCommit() {
1403 DCHECK(property_trees()->is_active); 1412 DCHECK(property_trees()->is_active);
1404 for (auto& map_entry : layer_id_to_scroll_offset_map_) 1413 for (auto& map_entry : layer_id_to_synced_scroll_offset_map_)
1405 map_entry.second->AbortCommit(); 1414 map_entry.second->AbortCommit();
1406 } 1415 }
1407 1416
1408 bool ScrollTree::SetBaseScrollOffset(int layer_id, 1417 bool ScrollTree::SetBaseScrollOffset(int layer_id,
1409 const gfx::ScrollOffset& scroll_offset) { 1418 const gfx::ScrollOffset& scroll_offset) {
1410 return synced_scroll_offset(layer_id)->PushFromMainThread(scroll_offset); 1419 if (property_trees()->is_main_thread) {
1420 layer_id_to_scroll_offset_map_[layer_id] = scroll_offset;
1421 return true;
1422 }
1423
1424 // Scroll offset updates on the impl thread should only be for layers which
1425 // were created on the main thread. But this method is called when we build
1426 // PropertyTrees on the impl thread from LayerTreeImpl.
1427 return GetOrCreateSyncedScrollOffset(layer_id)->PushFromMainThread(
1428 scroll_offset);
1411 } 1429 }
1412 1430
1413 bool ScrollTree::SetScrollOffset(int layer_id, 1431 bool ScrollTree::SetScrollOffset(int layer_id,
1414 const gfx::ScrollOffset& scroll_offset) { 1432 const gfx::ScrollOffset& scroll_offset) {
1415 if (property_trees()->is_main_thread) 1433 if (property_trees()->is_main_thread) {
1416 return synced_scroll_offset(layer_id)->PushFromMainThread(scroll_offset); 1434 layer_id_to_scroll_offset_map_[layer_id] = scroll_offset;
1417 else if (property_trees()->is_active) 1435 return true;
ajuma 2017/01/11 22:35:51 Should this first check if the value changed?
Khushal 2017/01/11 23:04:53 We don't use the result on the main thread side, o
1418 return synced_scroll_offset(layer_id)->SetCurrent(scroll_offset); 1436 }
1437
1438 if (property_trees()->is_active) {
1439 return GetOrCreateSyncedScrollOffset(layer_id)->SetCurrent(scroll_offset);
1440 }
1441
1419 return false; 1442 return false;
1420 } 1443 }
1421 1444
1422 bool ScrollTree::UpdateScrollOffsetBaseForTesting( 1445 bool ScrollTree::UpdateScrollOffsetBaseForTesting(
1423 int layer_id, 1446 int layer_id,
1424 const gfx::ScrollOffset& offset) { 1447 const gfx::ScrollOffset& offset) {
1425 DCHECK(!property_trees()->is_main_thread); 1448 DCHECK(!property_trees()->is_main_thread);
1426 bool changed = synced_scroll_offset(layer_id)->PushFromMainThread(offset); 1449 SyncedScrollOffset* synced_scroll_offset =
1450 GetOrCreateSyncedScrollOffset(layer_id);
1451 bool changed = synced_scroll_offset->PushFromMainThread(offset);
1427 if (property_trees()->is_active) 1452 if (property_trees()->is_active)
1428 changed |= synced_scroll_offset(layer_id)->PushPendingToActive(); 1453 changed |= synced_scroll_offset->PushPendingToActive();
1429 return changed; 1454 return changed;
1430 } 1455 }
1431 1456
1432 bool ScrollTree::SetScrollOffsetDeltaForTesting(int layer_id, 1457 bool ScrollTree::SetScrollOffsetDeltaForTesting(int layer_id,
1433 const gfx::Vector2dF& delta) { 1458 const gfx::Vector2dF& delta) {
1434 return synced_scroll_offset(layer_id)->SetCurrent( 1459 return GetOrCreateSyncedScrollOffset(layer_id)->SetCurrent(
1435 synced_scroll_offset(layer_id)->ActiveBase() + gfx::ScrollOffset(delta)); 1460 synced_scroll_offset(layer_id)->ActiveBase() + gfx::ScrollOffset(delta));
1436 } 1461 }
1437 1462
1438 const gfx::ScrollOffset ScrollTree::GetScrollOffsetBaseForTesting( 1463 const gfx::ScrollOffset ScrollTree::GetScrollOffsetBaseForTesting(
1439 int layer_id) const { 1464 int layer_id) const {
1440 DCHECK(!property_trees()->is_main_thread); 1465 DCHECK(!property_trees()->is_main_thread);
1441 if (synced_scroll_offset(layer_id)) 1466 if (synced_scroll_offset(layer_id))
1442 return property_trees()->is_active 1467 return property_trees()->is_active
1443 ? synced_scroll_offset(layer_id)->ActiveBase() 1468 ? synced_scroll_offset(layer_id)->ActiveBase()
1444 : synced_scroll_offset(layer_id)->PendingBase(); 1469 : synced_scroll_offset(layer_id)->PendingBase();
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
1594 changed = false; 1619 changed = false;
1595 non_root_surfaces_enabled = true; 1620 non_root_surfaces_enabled = true;
1596 sequence_number++; 1621 sequence_number++;
1597 1622
1598 #if DCHECK_IS_ON() 1623 #if DCHECK_IS_ON()
1599 PropertyTrees tree; 1624 PropertyTrees tree;
1600 tree.transform_tree = transform_tree; 1625 tree.transform_tree = transform_tree;
1601 tree.effect_tree = effect_tree; 1626 tree.effect_tree = effect_tree;
1602 tree.clip_tree = clip_tree; 1627 tree.clip_tree = clip_tree;
1603 tree.scroll_tree = scroll_tree; 1628 tree.scroll_tree = scroll_tree;
1604 // Scroll offset map and currently scrolling node id may not be copied 1629 tree.scroll_tree.CopyCompleteTreeState(scroll_tree);
1605 // during operator=.
1606 ScrollTree::ScrollOffsetMap& map = tree.scroll_tree.scroll_offset_map();
1607 map = scroll_tree.scroll_offset_map();
1608 tree.scroll_tree.set_currently_scrolling_node(
1609 scroll_tree.CurrentlyScrollingNodeId());
1610 1630
1611 tree.sequence_number = sequence_number; 1631 tree.sequence_number = sequence_number;
1612 tree.is_main_thread = is_main_thread; 1632 tree.is_main_thread = is_main_thread;
1613 tree.is_active = is_active; 1633 tree.is_active = is_active;
1614 DCHECK(tree == *this); 1634 DCHECK(tree == *this);
1615 #endif 1635 #endif
1616 } 1636 }
1617 1637
1618 void PropertyTrees::SetInnerViewportContainerBoundsDelta( 1638 void PropertyTrees::SetInnerViewportContainerBoundsDelta(
1619 gfx::Vector2dF bounds_delta) { 1639 gfx::Vector2dF bounds_delta) {
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
2052 2072
2053 const EffectNode* effect_node = effect_tree.Node(effect_id); 2073 const EffectNode* effect_node = effect_tree.Node(effect_id);
2054 2074
2055 bool success = GetFromTarget(transform_id, effect_id, transform); 2075 bool success = GetFromTarget(transform_id, effect_id, transform);
2056 transform->Scale(effect_node->surface_contents_scale.x(), 2076 transform->Scale(effect_node->surface_contents_scale.x(),
2057 effect_node->surface_contents_scale.y()); 2077 effect_node->surface_contents_scale.y());
2058 return success; 2078 return success;
2059 } 2079 }
2060 2080
2061 } // namespace cc 2081 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698