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" |
(...skipping 1108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |