mirror of
https://github.com/Instagram/IGListKit
synced 2026-05-23 01:08:27 +00:00
Cleanup the coalescing time experiment
Summary: We have observed that keeping the coalescing time here would actually decrease the stability here, it makes the app crash more often. It's probably caused by some race condition during that time and UICV updates become out of sync. Reviewed By: rnystrom Differential Revision: D14379265 fbshipit-source-id: 502c1c14fb8bdfc35969f721687e82888b160110
This commit is contained in:
parent
9e59bdea11
commit
2f76e8ce68
3 changed files with 10 additions and 9 deletions
|
|
@ -6,6 +6,8 @@ The changelog for `IGListKit`. Also see the [releases](https://github.com/instag
|
|||
-----
|
||||
### Breaking Changes
|
||||
|
||||
- Remove `coalescanceTime` from IGListAdapterUpdate, since it increase crash rate. [Zhisheng Huang](https://github.com/lorixx) (tbd)
|
||||
|
||||
- All `IGListBindingSectionControllerSelectionDelegate` methods are now required. [Bofei Zhu] (https://github.com/zhubofei) [(#1186)](https://github.com/Instagram/IGListKit/pull/1186)
|
||||
|
||||
- Renamed `[IGListAdapterUpdatingDelegate listAdapterUpdater:willPerformBatchUpdatesWithCollectionView:]` to `[IGListAdapterUpdatingDelegate listAdapterUpdater:willPerformBatchUpdatesWithCollectionView:fromObjects:toObjects:listIndexSetResult:]` to include more supporting info on updated objects. [Jeremy Cohen] (https://github.com/jeremycohen) (tbd)
|
||||
|
|
|
|||
|
|
@ -58,11 +58,6 @@ 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.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -427,15 +427,19 @@ static NSArray<NSIndexPath *> *convertSectionReloadToItemUpdates(NSIndexSet *sec
|
|||
|
||||
- (void)_queueUpdateWithCollectionViewBlock:(IGListCollectionViewBlock)collectionViewBlock {
|
||||
IGAssertMainThread();
|
||||
|
||||
__weak __typeof__(self) weakSelf = self;
|
||||
|
||||
// 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(), ^{
|
||||
|
||||
// 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(), ^{
|
||||
if (weakSelf.state != IGListBatchUpdateStateIdle
|
||||
|| ![weakSelf hasChanges]) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (weakSelf.hasQueuedReloadData) {
|
||||
[weakSelf performReloadDataWithCollectionViewBlock:collectionViewBlock];
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in a new issue