Skip to content
This repository was archived by the owner on Feb 2, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions AsyncDisplayKit/ASCollectionView.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1729,22 +1729,32 @@ - (void)rangeController:(ASRangeController *)rangeController didUpdateWithChange

__block NSUInteger numberOfUpdates = 0;
[self _superPerformBatchUpdates:^{
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeDelete]) {
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeReload]) {
[super reloadItemsAtIndexPaths:change.indexPaths];
numberOfUpdates++;
}

for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeReload]) {
[super reloadSections:change.indexSet];
numberOfUpdates++;
}

for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeOriginalDelete]) {
[super deleteItemsAtIndexPaths:change.indexPaths];
numberOfUpdates++;
}

for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeDelete]) {
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeOriginalDelete]) {
[super deleteSections:change.indexSet];
numberOfUpdates++;
}

for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeInsert]) {
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeOriginalInsert]) {
[super insertSections:change.indexSet];
numberOfUpdates++;
}

for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeInsert]) {
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeOriginalInsert]) {
[super insertItemsAtIndexPaths:change.indexPaths];
numberOfUpdates++;
}
Expand Down
40 changes: 36 additions & 4 deletions AsyncDisplayKit/ASTableView.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1442,7 +1442,39 @@ - (void)rangeController:(ASRangeController *)rangeController didUpdateWithChange
LOG(@"--- UITableView beginUpdates");
[super beginUpdates];

for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeDelete]) {
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeReload]) {
NSArray<NSIndexPath *> *indexPaths = change.indexPaths;
UITableViewRowAnimation animationOptions = (UITableViewRowAnimation)change.animationOptions;

LOG(@"UITableView reloadRows:%ld rows", indexPaths.count);
BOOL preventAnimation = animationOptions == UITableViewRowAnimationNone;
ASPerformBlockWithoutAnimation(preventAnimation, ^{
if (self.test_enableSuperUpdateCallLogging) {
NSLog(@"-[super reloadRowsAtIndexPaths]: %@", indexPaths);
}
[super reloadRowsAtIndexPaths:indexPaths withRowAnimation:animationOptions];
});

numberOfUpdates++;
}

for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeReload]) {
NSIndexSet *sectionIndexes = change.indexSet;
UITableViewRowAnimation animationOptions = (UITableViewRowAnimation)change.animationOptions;

LOG(@"UITableView reloadSections:%@", sectionIndexes);
BOOL preventAnimation = (animationOptions == UITableViewRowAnimationNone);
ASPerformBlockWithoutAnimation(preventAnimation, ^{
if (self.test_enableSuperUpdateCallLogging) {
NSLog(@"-[super reloadSections]: %@", sectionIndexes);
}
[super reloadSections:sectionIndexes withRowAnimation:animationOptions];
});

numberOfUpdates++;
}

for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeOriginalDelete]) {
NSArray<NSIndexPath *> *indexPaths = change.indexPaths;
UITableViewRowAnimation animationOptions = (UITableViewRowAnimation)change.animationOptions;

Expand All @@ -1458,7 +1490,7 @@ - (void)rangeController:(ASRangeController *)rangeController didUpdateWithChange
numberOfUpdates++;
}

for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeDelete]) {
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeOriginalDelete]) {
NSIndexSet *sectionIndexes = change.indexSet;
UITableViewRowAnimation animationOptions = (UITableViewRowAnimation)change.animationOptions;

Expand All @@ -1474,7 +1506,7 @@ - (void)rangeController:(ASRangeController *)rangeController didUpdateWithChange
numberOfUpdates++;
}

for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeInsert]) {
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeOriginalInsert]) {
NSIndexSet *sectionIndexes = change.indexSet;
UITableViewRowAnimation animationOptions = (UITableViewRowAnimation)change.animationOptions;

Expand All @@ -1490,7 +1522,7 @@ - (void)rangeController:(ASRangeController *)rangeController didUpdateWithChange
numberOfUpdates++;
}

for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeInsert]) {
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeOriginalInsert]) {
NSArray<NSIndexPath *> *indexPaths = change.indexPaths;
UITableViewRowAnimation animationOptions = (UITableViewRowAnimation)change.animationOptions;

Expand Down
6 changes: 6 additions & 0 deletions AsyncDisplayKit/Details/ASDataController.mm
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,9 @@ - (void)_updateSectionContextsWithChangeSet:(_ASHierarchyChangeSet *)changeSet
return;
}

// TODO if the change set includes solely section reloads that together are equivalent to reloadData (i.e reload the only section),
// do a reloadData here as an optimization.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since reloadData is never animated, but section reloads may be, we probably won't want to build this optimization.

if (changeSet.includesReloadData) {
[_sections removeAllObjects];

Expand Down Expand Up @@ -559,6 +562,9 @@ - (void)_updateElementsWithChangeSet:(_ASHierarchyChangeSet *)changeSet

__weak id<ASTraitEnvironment> environment = [self.environmentDelegate dataControllerEnvironment];

// TODO if the change set includes solely section reloads that together are equivalent to reloadData (i.e reload the only section),
// do a reloadData here as an optimization.

if (changeSet.includesReloadData) {
[_elements removeAllObjects];

Expand Down