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

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

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 #ifndef CC_TREES_PROPERTY_TREE_H_ 5 #ifndef CC_TREES_PROPERTY_TREE_H_
6 #define CC_TREES_PROPERTY_TREE_H_ 6 #define CC_TREES_PROPERTY_TREE_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 class CC_EXPORT ScrollTree final : public PropertyTree<ScrollNode> { 356 class CC_EXPORT ScrollTree final : public PropertyTree<ScrollNode> {
357 public: 357 public:
358 ScrollTree(); 358 ScrollTree();
359 ~ScrollTree(); 359 ~ScrollTree();
360 360
361 ScrollTree& operator=(const ScrollTree& from); 361 ScrollTree& operator=(const ScrollTree& from);
362 bool operator==(const ScrollTree& other) const; 362 bool operator==(const ScrollTree& other) const;
363 363
364 void clear(); 364 void clear();
365 365
366 typedef std::unordered_map<int, scoped_refptr<SyncedScrollOffset>>
367 ScrollOffsetMap;
368 typedef std::unordered_map<int, bool> ScrollbarsEnabledMap; 366 typedef std::unordered_map<int, bool> ScrollbarsEnabledMap;
369 367
370 gfx::ScrollOffset MaxScrollOffset(int scroll_node_id) const; 368 gfx::ScrollOffset MaxScrollOffset(int scroll_node_id) const;
371 void OnScrollOffsetAnimated(int layer_id, 369 void OnScrollOffsetAnimated(int layer_id,
372 int transform_tree_index, 370 int transform_tree_index,
373 int scroll_tree_index, 371 int scroll_tree_index,
374 const gfx::ScrollOffset& scroll_offset, 372 const gfx::ScrollOffset& scroll_offset,
375 LayerTreeImpl* layer_tree_impl); 373 LayerTreeImpl* layer_tree_impl);
376 gfx::Size scroll_clip_layer_bounds(int scroll_node_id) const; 374 gfx::Size scroll_clip_layer_bounds(int scroll_node_id) const;
377 ScrollNode* CurrentlyScrollingNode(); 375 ScrollNode* CurrentlyScrollingNode();
378 const ScrollNode* CurrentlyScrollingNode() const; 376 const ScrollNode* CurrentlyScrollingNode() const;
379 #if DCHECK_IS_ON() 377 #if DCHECK_IS_ON()
380 int CurrentlyScrollingNodeId() const; 378 int CurrentlyScrollingNodeId() const;
381 #endif 379 #endif
382 void set_currently_scrolling_node(int scroll_node_id); 380 void set_currently_scrolling_node(int scroll_node_id);
383 gfx::Transform ScreenSpaceTransform(int scroll_node_id) const; 381 gfx::Transform ScreenSpaceTransform(int scroll_node_id) const;
384 382
383 // Returns the current scroll offset. On the main thread this would return the
384 // value from the LayerTree while on the impl thread this is the current value
ajuma 2017/01/11 22:35:51 nit: "for the LayerTree" might be clearer that we'
Khushal 2017/01/11 23:04:53 Makes sense. Done.
385 // on the active tree.
385 const gfx::ScrollOffset current_scroll_offset(int layer_id) const; 386 const gfx::ScrollOffset current_scroll_offset(int layer_id) const;
387
388 // Collects deltas for scroll changes on the impl thread that need to be
389 // reported to the main thread during the main frame. As such, should only be
390 // called on the impl thread side PropertyTrees.
386 void CollectScrollDeltas(ScrollAndScaleSet* scroll_info, 391 void CollectScrollDeltas(ScrollAndScaleSet* scroll_info,
387 int inner_viewport_layer_id); 392 int inner_viewport_layer_id);
388 void UpdateScrollOffsetMap(ScrollOffsetMap* new_scroll_offset_map, 393
389 LayerTreeImpl* layer_tree_impl); 394 // Applies deltas sent in the previous main frame onto the impl thread state.
390 ScrollOffsetMap& scroll_offset_map(); 395 // Should only be called on the impl thread side PropertyTrees.
391 const ScrollOffsetMap& scroll_offset_map() const;
392 void ApplySentScrollDeltasFromAbortedCommit(); 396 void ApplySentScrollDeltasFromAbortedCommit();
397
398 // Pushes scroll updates from the ScrollTree on the main thread onto the
399 // impl thread associated state.
400 void PushScrollUpdatesFromMainThread(PropertyTrees* main_property_trees,
401 LayerTreeImpl* sync_tree);
402
403 // Pushes scroll updates from the ScrollTree on the pending tree onto the
404 // active tree associated state.
405 void PushScrollUpdatesFromPendingTree(PropertyTrees* pending_property_trees,
406 LayerTreeImpl* active_tree);
407
393 bool SetBaseScrollOffset(int layer_id, 408 bool SetBaseScrollOffset(int layer_id,
394 const gfx::ScrollOffset& scroll_offset); 409 const gfx::ScrollOffset& scroll_offset);
395 bool SetScrollOffset(int layer_id, const gfx::ScrollOffset& scroll_offset); 410 bool SetScrollOffset(int layer_id, const gfx::ScrollOffset& scroll_offset);
396 void SetScrollOffsetClobberActiveValue(int layer_id) { 411 void SetScrollOffsetClobberActiveValue(int layer_id) {
397 synced_scroll_offset(layer_id)->set_clobber_active_value(); 412 GetOrCreateSyncedScrollOffset(layer_id)->set_clobber_active_value();
398 } 413 }
399 bool UpdateScrollOffsetBaseForTesting(int layer_id, 414 bool UpdateScrollOffsetBaseForTesting(int layer_id,
400 const gfx::ScrollOffset& offset); 415 const gfx::ScrollOffset& offset);
401 bool SetScrollOffsetDeltaForTesting(int layer_id, 416 bool SetScrollOffsetDeltaForTesting(int layer_id,
402 const gfx::Vector2dF& delta); 417 const gfx::Vector2dF& delta);
403 const gfx::ScrollOffset GetScrollOffsetBaseForTesting(int layer_id) const; 418 const gfx::ScrollOffset GetScrollOffsetBaseForTesting(int layer_id) const;
404 const gfx::ScrollOffset GetScrollOffsetDeltaForTesting(int layer_id) const; 419 const gfx::ScrollOffset GetScrollOffsetDeltaForTesting(int layer_id) const;
405 void CollectScrollDeltasForTesting(); 420 void CollectScrollDeltasForTesting();
406 421
407 void DistributeScroll(ScrollNode* scroll_node, ScrollState* scroll_state); 422 void DistributeScroll(ScrollNode* scroll_node, ScrollState* scroll_state);
408 gfx::Vector2dF ScrollBy(ScrollNode* scroll_node, 423 gfx::Vector2dF ScrollBy(ScrollNode* scroll_node,
409 const gfx::Vector2dF& scroll, 424 const gfx::Vector2dF& scroll,
410 LayerTreeImpl* layer_tree_impl); 425 LayerTreeImpl* layer_tree_impl);
411 gfx::ScrollOffset ClampScrollOffsetToLimits(gfx::ScrollOffset offset, 426 gfx::ScrollOffset ClampScrollOffsetToLimits(gfx::ScrollOffset offset,
412 ScrollNode* scroll_node) const; 427 ScrollNode* scroll_node) const;
413 428
429 const SyncedScrollOffset* synced_scroll_offset(int layer_id) const;
ajuma 2017/01/11 22:35:51 I know you're just moving this code in this CL, bu
Khushal 2017/01/11 23:04:53 Good point. Done.
430
431 #if DCHECK_IS_ON()
432 void CopyCompleteTreeState(const ScrollTree& other);
433 #endif
434
414 private: 435 private:
436 using ScrollOffsetMap = std::unordered_map<int, gfx::ScrollOffset>;
437 using SyncedScrollOffsetMap =
438 std::unordered_map<int, scoped_refptr<SyncedScrollOffset>>;
439
415 int currently_scrolling_node_id_; 440 int currently_scrolling_node_id_;
416 ScrollOffsetMap layer_id_to_scroll_offset_map_;
417 ScrollbarsEnabledMap layer_id_to_scrollbars_enabled_map_; 441 ScrollbarsEnabledMap layer_id_to_scrollbars_enabled_map_;
418 442
419 SyncedScrollOffset* synced_scroll_offset(int layer_id); 443 // On the main thread we store the scroll offsets directly since the main
420 const SyncedScrollOffset* synced_scroll_offset(int layer_id) const; 444 // thread only needs to keep track of the current main thread state. The impl
445 // thread stores a map of SyncedProperty instances in order to track
446 // additional state necessary to synchronize scroll changes between the main
447 // and impl threads.
448 ScrollOffsetMap layer_id_to_scroll_offset_map_;
449 SyncedScrollOffsetMap layer_id_to_synced_scroll_offset_map_;
450
451 SyncedScrollOffset* GetOrCreateSyncedScrollOffset(int layer_id);
421 gfx::ScrollOffset PullDeltaForMainThread(SyncedScrollOffset* scroll_offset); 452 gfx::ScrollOffset PullDeltaForMainThread(SyncedScrollOffset* scroll_offset);
422 void UpdateScrollOffsetMapEntry(int key,
423 ScrollOffsetMap* new_scroll_offset_map,
424 LayerTreeImpl* layer_tree_impl);
425 }; 453 };
426 454
427 struct AnimationScaleData { 455 struct AnimationScaleData {
428 // Variable used to invalidate cached animation scale data when transform tree 456 // Variable used to invalidate cached animation scale data when transform tree
429 // updates. 457 // updates.
430 int update_number; 458 int update_number;
431 459
432 // Current animations, considering only scales at keyframes not including the 460 // Current animations, considering only scales at keyframes not including the
433 // starting keyframe of each animation. 461 // starting keyframe of each animation.
434 float local_maximum_animation_target_scale; 462 float local_maximum_animation_target_scale;
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 DrawTransforms& GetDrawTransforms(int transform_id, int effect_id) const; 641 DrawTransforms& GetDrawTransforms(int transform_id, int effect_id) const;
614 DrawTransformData& FetchDrawTransformsDataFromCache(int transform_id, 642 DrawTransformData& FetchDrawTransformsDataFromCache(int transform_id,
615 int effect_id) const; 643 int effect_id) const;
616 644
617 PropertyTreesCachedData cached_data_; 645 PropertyTreesCachedData cached_data_;
618 }; 646 };
619 647
620 } // namespace cc 648 } // namespace cc
621 649
622 #endif // CC_TREES_PROPERTY_TREE_H_ 650 #endif // CC_TREES_PROPERTY_TREE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698