mirror of
https://github.com/Instagram/IGListKit
synced 2026-05-23 09:18:29 +00:00
Add experimental update coalescance feature and test
Summary: Testing out new coalescence ideas after talking with @[100001606943892:tweilu]. Theory is that we can reduce stalls and improve scroll performance by batching more updates into one. Need to test this out first. Differential Revision: D7565003 fbshipit-source-id: b2e9fa39d52cc0b7aa59c2bfad709804ba0a0b63
This commit is contained in:
parent
e49c94b25d
commit
784f1beb9f
2 changed files with 7 additions and 5 deletions
|
|
@ -49,6 +49,11 @@ NS_SWIFT_NAME(ListAdapterUpdater)
|
|||
*/
|
||||
@property (nonatomic, assign) BOOL allowsBackgroundReloading;
|
||||
|
||||
/**
|
||||
Time, in seconds, to wait and coalesce batch updates. Default is 0.
|
||||
*/
|
||||
@property (nonatomic, assign) NSTimeInterval coalescanceTime;
|
||||
|
||||
/**
|
||||
A bitmask of experiments to conduct on the updater.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -369,11 +369,8 @@ void convertReloadToDeleteInsert(NSMutableIndexSet *reloads,
|
|||
__weak __typeof__(self) weakSelf = self;
|
||||
__weak __typeof__(collectionView) weakCollectionView = collectionView;
|
||||
|
||||
// dispatch_async to give the main queue time to collect more batch updates so that a minimum amount of work
|
||||
// (diffing, etc) is done on main. dispatch_async does not garauntee a full runloop turn will pass though.
|
||||
// see -performUpdateWithCollectionView:fromObjects:toObjects:animated:]objectTransitionBlock:completion: for more
|
||||
// details on how coalescence is done.
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
// dispatch after a given amount of time to coalesce other updates and execute as one
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, self.coalescanceTime * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
|
||||
if (weakSelf.state != IGListBatchUpdateStateIdle
|
||||
|| ![weakSelf hasChanges]) {
|
||||
return;
|
||||
|
|
|
|||
Loading…
Reference in a new issue