Skip to content

Commit

Permalink
Track batch updates in object and explicit state
Browse files Browse the repository at this point in the history
Summary:
Batch updates are complicated b/c its unknown when the update block will actually execute. When executing the block, we want to collect inserts/deletes/reloads/moves (item and section). Allow mutations to happen synchronously outside of the update block.

Tracking state will also help with the auto-diff where we need to allow re-entrant updates.

Peeling off a chunk from #494

Issue fixed: #288

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
Closes #525

Reviewed By: jessesquires

Differential Revision: D4656463

Pulled By: rnystrom

fbshipit-source-id: 8f4d3dc21b03d595e02ee9ee9664277e8ead0531
  • Loading branch information
Ryan Nystrom authored and facebook-github-bot committed Mar 7, 2017
1 parent 03c316a commit 3f9dea2
Show file tree
Hide file tree
Showing 9 changed files with 170 additions and 59 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ This release closes the [3.0.0 milestone](https://github.com/Instagram/IGListKit

- Fix a crash when reusing collection views between embedded `IGListAdapter`s. [Ryan Nystrom](https://github.com/rnystrom) [(#517)](https://github.com/Instagram/IGListKit/pull/517)

- Only collect batch updates when explicitly inside the batch update block, execute them otherwise. Fixes dropped updates. Ryan Nystrom](https://github.com/rnystrom) [(#494)](https://github.com/Instagram/IGListKit/pull/494)

2.1.0
-----

Expand Down
22 changes: 22 additions & 0 deletions IGListKit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,14 @@
2914BEE91DCD15F400C96401 /* IGTestNibSupplementaryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2904861C1DCD02140007F41D /* IGTestNibSupplementaryView.xib */; };
2914BEEA1DCD15F400C96401 /* IGTestNibSupplementaryView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2904861C1DCD02140007F41D /* IGTestNibSupplementaryView.xib */; };
294AC6321DDE4C19002FCE5D /* IGListDiffResultTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 294AC6311DDE4C19002FCE5D /* IGListDiffResultTests.m */; };
297278BD1E6B58560099D8EA /* IGListBatchUpdates.h in Headers */ = {isa = PBXBuildFile; fileRef = 297278BB1E6B58560099D8EA /* IGListBatchUpdates.h */; };
297278BE1E6B58560099D8EA /* IGListBatchUpdates.h in Headers */ = {isa = PBXBuildFile; fileRef = 297278BB1E6B58560099D8EA /* IGListBatchUpdates.h */; };
297278BF1E6B58560099D8EA /* IGListBatchUpdates.m in Sources */ = {isa = PBXBuildFile; fileRef = 297278BC1E6B58560099D8EA /* IGListBatchUpdates.m */; };
297278C01E6B58560099D8EA /* IGListBatchUpdates.m in Sources */ = {isa = PBXBuildFile; fileRef = 297278BC1E6B58560099D8EA /* IGListBatchUpdates.m */; };
297278C11E6B58560099D8EA /* IGListBatchUpdates.m in Sources */ = {isa = PBXBuildFile; fileRef = 297278BC1E6B58560099D8EA /* IGListBatchUpdates.m */; };
297278C21E6B58560099D8EA /* IGListBatchUpdates.m in Sources */ = {isa = PBXBuildFile; fileRef = 297278BC1E6B58560099D8EA /* IGListBatchUpdates.m */; };
297278C41E6B59D50099D8EA /* IGListBatchUpdateState.h in Headers */ = {isa = PBXBuildFile; fileRef = 297278C31E6B59D50099D8EA /* IGListBatchUpdateState.h */; };
297278C51E6B59D50099D8EA /* IGListBatchUpdateState.h in Headers */ = {isa = PBXBuildFile; fileRef = 297278C31E6B59D50099D8EA /* IGListBatchUpdateState.h */; };
298DDA1F1E3B0DC800F76F50 /* IGListCollectionViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 298DDA1D1E3B0DC800F76F50 /* IGListCollectionViewLayout.h */; settings = {ATTRIBUTES = (Public, ); }; };
298DDA201E3B0DC800F76F50 /* IGListCollectionViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 298DDA1D1E3B0DC800F76F50 /* IGListCollectionViewLayout.h */; settings = {ATTRIBUTES = (Public, ); }; };
298DDA211E3B0DC800F76F50 /* IGListCollectionViewLayout.mm in Sources */ = {isa = PBXBuildFile; fileRef = 298DDA1E1E3B0DC800F76F50 /* IGListCollectionViewLayout.mm */; };
Expand Down Expand Up @@ -373,6 +381,9 @@
2904861F1DCD02750007F41D /* IGTestNibSupplementaryView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGTestNibSupplementaryView.m; sourceTree = "<group>"; };
294369B01DB1B7AE0025F6E7 /* IGTestNibCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IGTestNibCell.xib; sourceTree = "<group>"; };
294AC6311DDE4C19002FCE5D /* IGListDiffResultTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListDiffResultTests.m; sourceTree = "<group>"; };
297278BB1E6B58560099D8EA /* IGListBatchUpdates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGListBatchUpdates.h; sourceTree = "<group>"; };
297278BC1E6B58560099D8EA /* IGListBatchUpdates.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListBatchUpdates.m; sourceTree = "<group>"; };
297278C31E6B59D50099D8EA /* IGListBatchUpdateState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGListBatchUpdateState.h; sourceTree = "<group>"; };
298DDA1D1E3B0DC800F76F50 /* IGListCollectionViewLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGListCollectionViewLayout.h; sourceTree = "<group>"; };
298DDA1E1E3B0DC800F76F50 /* IGListCollectionViewLayout.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = IGListCollectionViewLayout.mm; sourceTree = "<group>"; };
298DDA231E3B15EE00F76F50 /* IGListCollectionViewLayoutTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListCollectionViewLayoutTests.m; sourceTree = "<group>"; };
Expand Down Expand Up @@ -591,6 +602,8 @@
0B3B92B71E08D7F5008390ED /* IGListAdapterProxy.h */,
0B3B92B81E08D7F5008390ED /* IGListAdapterProxy.m */,
0B3B92B91E08D7F5008390ED /* IGListAdapterUpdaterInternal.h */,
297278BB1E6B58560099D8EA /* IGListBatchUpdates.h */,
297278BC1E6B58560099D8EA /* IGListBatchUpdates.m */,
0B3B92BA1E08D7F5008390ED /* IGListDisplayHandler.h */,
0B3B92BB1E08D7F5008390ED /* IGListDisplayHandler.m */,
0B3B92BC1E08D7F5008390ED /* IGListSectionControllerInternal.h */,
Expand All @@ -601,6 +614,7 @@
0B3B92C11E08D7F5008390ED /* IGListWorkingRangeHandler.mm */,
0B3B92C21E08D7F5008390ED /* UICollectionView+IGListBatchUpdateData.h */,
0B3B92C31E08D7F5008390ED /* UICollectionView+IGListBatchUpdateData.m */,
297278C31E6B59D50099D8EA /* IGListBatchUpdateState.h */,
);
path = Internal;
sourceTree = "<group>";
Expand Down Expand Up @@ -754,6 +768,7 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
297278C51E6B59D50099D8EA /* IGListBatchUpdateState.h in Headers */,
989317641E0ED45900DB93B3 /* IGListCompatibility.h in Headers */,
0B3B92FB1E08D7F5008390ED /* IGListAdapterDataSource.h in Headers */,
0B3B92E91E08D7F5008390ED /* IGListIndexSetResultInternal.h in Headers */,
Expand Down Expand Up @@ -794,6 +809,7 @@
0B3B92F71E08D7F5008390ED /* IGListAdapter.h in Headers */,
0B3B931B1E08D7F5008390ED /* IGListSectionType.h in Headers */,
0B3B92E31E08D7F5008390ED /* IGListMoveIndexPath.h in Headers */,
297278BE1E6B58560099D8EA /* IGListBatchUpdates.h in Headers */,
0B3B93111E08D7F5008390ED /* IGListReloadDataUpdater.h in Headers */,
298DDA201E3B0DC800F76F50 /* IGListCollectionViewLayout.h in Headers */,
0B3B92FF1E08D7F5008390ED /* IGListAdapterUpdater.h in Headers */,
Expand All @@ -807,6 +823,7 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
297278C41E6B59D50099D8EA /* IGListBatchUpdateState.h in Headers */,
989317631E0ED45900DB93B3 /* IGListCompatibility.h in Headers */,
0B3B92FA1E08D7F5008390ED /* IGListAdapterDataSource.h in Headers */,
0B3B92E81E08D7F5008390ED /* IGListIndexSetResultInternal.h in Headers */,
Expand Down Expand Up @@ -847,6 +864,7 @@
0B3B92F61E08D7F5008390ED /* IGListAdapter.h in Headers */,
0B3B931A1E08D7F5008390ED /* IGListSectionType.h in Headers */,
0B3B92E21E08D7F5008390ED /* IGListMoveIndexPath.h in Headers */,
297278BD1E6B58560099D8EA /* IGListBatchUpdates.h in Headers */,
0B3B93101E08D7F5008390ED /* IGListReloadDataUpdater.h in Headers */,
298DDA1F1E3B0DC800F76F50 /* IGListCollectionViewLayout.h in Headers */,
0B3B92FE1E08D7F5008390ED /* IGListAdapterUpdater.h in Headers */,
Expand Down Expand Up @@ -1215,6 +1233,7 @@
298DDA221E3B0DC800F76F50 /* IGListCollectionViewLayout.mm in Sources */,
0B3B93311E08D7F5008390ED /* IGListAdapterProxy.m in Sources */,
0B3B92CD1E08D7F5008390ED /* IGListDiff.mm in Sources */,
297278C11E6B58560099D8EA /* IGListBatchUpdates.m in Sources */,
0B3B931F1E08D7F5008390ED /* IGListSingleSectionController.m in Sources */,
0B3B92D51E08D7F5008390ED /* IGListIndexPathResult.m in Sources */,
0B3B93371E08D7F5008390ED /* IGListDisplayHandler.m in Sources */,
Expand All @@ -1237,6 +1256,7 @@
298DDA381E3B168E00F76F50 /* IGLayoutTestItem.m in Sources */,
885FE2361DC51B76009CE2B4 /* IGListStackSectionControllerTests.m in Sources */,
885FE2311DC51B76009CE2B4 /* IGListDisplayHandlerTests.m in Sources */,
297278C21E6B58560099D8EA /* IGListBatchUpdates.m in Sources */,
0B40C5F41E01CBCB00378109 /* IGListCollectionViewTests.m in Sources */,
298DDA3B1E3B16F800F76F50 /* IGLayoutTestDataSource.m in Sources */,
29C474901DDF460500AE68CE /* IGListSectionMapTests.m in Sources */,
Expand Down Expand Up @@ -1294,6 +1314,7 @@
298DDA211E3B0DC800F76F50 /* IGListCollectionViewLayout.mm in Sources */,
0B3B93301E08D7F5008390ED /* IGListAdapterProxy.m in Sources */,
0B3B92CC1E08D7F5008390ED /* IGListDiff.mm in Sources */,
297278BF1E6B58560099D8EA /* IGListBatchUpdates.m in Sources */,
0B3B931E1E08D7F5008390ED /* IGListSingleSectionController.m in Sources */,
0B3B92D41E08D7F5008390ED /* IGListIndexPathResult.m in Sources */,
0B3B93361E08D7F5008390ED /* IGListDisplayHandler.m in Sources */,
Expand All @@ -1316,6 +1337,7 @@
298DDA391E3B168F00F76F50 /* IGLayoutTestItem.m in Sources */,
88144F1C1D870EDC007C7F66 /* IGTestStackedDataSource.m in Sources */,
88144F181D870EDC007C7F66 /* IGTestDelegateController.m in Sources */,
297278C01E6B58560099D8EA /* IGListBatchUpdates.m in Sources */,
1F0A68C51DF8D5B9009E8ADE /* IGListCollectionViewTests.m in Sources */,
298DDA3A1E3B16F600F76F50 /* IGLayoutTestDataSource.m in Sources */,
88144F0D1D870EDC007C7F66 /* IGListDisplayHandlerTests.m in Sources */,
Expand Down
Loading

0 comments on commit 3f9dea2

Please sign in to comment.