From 4447ae4bd46959511ab742162838b9bc5c15c366 Mon Sep 17 00:00:00 2001 From: Michael Schneider Date: Fri, 15 Jul 2016 11:23:40 -0700 Subject: [PATCH 1/4] Move ASPerformBlockOnBackgroundThread as it already calls the method inline if it's on the main thread --- AsyncDisplayKit/ASDisplayNode.mm | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index 7b1a3a5bfd..299acd1d9b 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -793,12 +793,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) }); }; - // TODO ihm: Can we always push the measure to the background thread and remove the parameter from the API? - if (ASDisplayNodeThreadIsMain()) { - ASPerformBlockOnBackgroundThread(transitionBlock); - } else { - transitionBlock(); - } + ASPerformBlockOnBackgroundThread(transitionBlock); } - (void)_completeLayoutCalculation From 20a49f037b25449056c1c52472a68707d592aaa5 Mon Sep 17 00:00:00 2001 From: Michael Schneider Date: Fri, 15 Jul 2016 11:28:34 -0700 Subject: [PATCH 2/4] Comment adjustment for laying out nodes --- AsyncDisplayKit/Details/ASDataController.mm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/AsyncDisplayKit/Details/ASDataController.mm b/AsyncDisplayKit/Details/ASDataController.mm index c1fb563e08..f98c71f66d 100644 --- a/AsyncDisplayKit/Details/ASDataController.mm +++ b/AsyncDisplayKit/Details/ASDataController.mm @@ -165,8 +165,7 @@ NSString * const ASDataControllerRowNodeKind = @"_ASDataControllerRowNodeKind"; return; } - // Layout node on whatever thread we are on. We handle the trampoline to the main thread in case the node is - // already loaded + // Layout nodes based on the given context constrained size for (NSUInteger k = range.location; k < NSMaxRange(range); k++) { ASCellNode *node = nodes[k]; ASIndexedNodeContext *context = contexts[k]; From fcfce5128d3456bd16d3378ae33a048abffb1ca0 Mon Sep 17 00:00:00 2001 From: Michael Schneider Date: Fri, 15 Jul 2016 11:55:43 -0700 Subject: [PATCH 3/4] Grab propertyLock to get supportsRangeManagedInterfaceState and for asking dirty layout status --- AsyncDisplayKit/ASDisplayNode.mm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index 299acd1d9b..300c9fec1f 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -1135,9 +1135,19 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) - (void)measureNodeWithBoundsIfNecessary:(CGRect)bounds { + BOOL supportsRangedManagedInterfaceState = NO; + BOOL hasDirtyLayout = NO; + BOOL hasSupernode = NO; + { + ASDN::MutexLocker l(_propertyLock); + supportsRangedManagedInterfaceState = [self supportsRangeManagedInterfaceState]; + hasDirtyLayout = [self _hasDirtyLayout]; + hasSupernode = (self.supernode != nil); + } + // Normally measure will be called before layout occurs. If this doesn't happen, nothing is going to call it at all. // We simply call measureWithSizeRange: using a size range equal to whatever bounds were provided to that element - if (self.supernode == nil && !self.supportsRangeManagedInterfaceState && [self _hasDirtyLayout]) { + if (!hasSupernode && !supportsRangedManagedInterfaceState && hasDirtyLayout) { if (CGRectEqualToRect(bounds, CGRectZero)) { LOG(@"Warning: No size given for node before node was trying to layout itself: %@. Please provide a frame for the node.", self); } else { From 9729b61dde53b5fd4c64e51e25956016e6c7dffd Mon Sep 17 00:00:00 2001 From: Michael Schneider Date: Fri, 15 Jul 2016 11:57:59 -0700 Subject: [PATCH 4/4] Add whitespace --- AsyncDisplayKit/ASDisplayNode.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index 300c9fec1f..a29775555d 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -2749,7 +2749,7 @@ static void _recursivelySetDisplaySuspended(ASDisplayNode *node, CALayer *layer, return _flags.shouldAnimateSizeChanges; } --(void)setShouldAnimateSizeChanges:(BOOL)shouldAnimateSizeChanges +- (void)setShouldAnimateSizeChanges:(BOOL)shouldAnimateSizeChanges { ASDisplayNodeAssertThreadAffinity(self); ASDN::MutexLocker l(_propertyLock); @@ -2771,7 +2771,7 @@ static const char *ASDisplayNodeDrawingPriorityKey = "ASDrawingPriority"; } } --(NSInteger)drawingPriority +- (NSInteger)drawingPriority { ASDisplayNodeAssertThreadAffinity(self); ASDN::MutexLocker l(_propertyLock);