Skip to content

Commit

Permalink
Also check for _layerClass overwrite for synchronous flag
Browse files Browse the repository at this point in the history
  • Loading branch information
maicki committed Jan 30, 2018
1 parent 9dc7a4b commit 7339fbf
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 5 deletions.
6 changes: 4 additions & 2 deletions Source/ASDisplayNode.mm
Original file line number Diff line number Diff line change
Expand Up @@ -252,9 +252,11 @@ - (void)_initializeInstance
#endif

_viewClass = [self.class viewClass];
setFlag(Synchronous, ![_viewClass isSubclassOfClass:[_ASDisplayView class]]);

_layerClass = [self.class layerClass];
BOOL isSynchronous = ![_viewClass isSubclassOfClass:[_ASDisplayView class]]
|| ![_layerClass isSubclassOfClass:[_ASDisplayLayer class]];
setFlag(Synchronous, isSynchronous);


_contentsScaleForDisplay = ASScreenScale();
_drawingPriority = ASDefaultDrawingPriority;
Expand Down
19 changes: 16 additions & 3 deletions Tests/ASDisplayNodeTests.mm
Original file line number Diff line number Diff line change
Expand Up @@ -173,13 +173,20 @@ - (void)displayWillStartAsynchronously:(BOOL)asynchronously

@end

@interface ASSynchronousTestDisplayNode : ASDisplayNode
@interface ASSynchronousTestDisplayNodeViaViewClass : ASDisplayNode
@end

@implementation ASSynchronousTestDisplayNode
@implementation ASSynchronousTestDisplayNodeViaViewClass
+ (Class)viewClass { return [UIView class]; }
@end

@interface ASSynchronousTestDisplayNodeViaLayerClass : ASDisplayNode
@end

@implementation ASSynchronousTestDisplayNodeViaLayerClass
+ (Class)layerClass { return [CALayer class]; }
@end

@interface UIDisplayNodeTestView : UIView
@end

Expand Down Expand Up @@ -2363,7 +2370,13 @@ - (void)testScreenScale

- (void)testThatIfViewClassIsOverwrittenItsSynchronous
{
ASSynchronousTestDisplayNode *node = [[ASSynchronousTestDisplayNode alloc] init];
ASSynchronousTestDisplayNodeViaViewClass *node = [[ASSynchronousTestDisplayNodeViaViewClass alloc] init];
XCTAssertTrue([node isSynchronous], @"Node should be synchronous if viewClass is ovewritten and not a subclass of _ASDisplayView");
}

- (void)testThatIfLayerClassIsOverwrittenItsSynchronous
{
ASSynchronousTestDisplayNodeViaLayerClass *node = [[ASSynchronousTestDisplayNodeViaLayerClass alloc] init];
XCTAssertTrue([node isSynchronous], @"Node should be synchronous if viewClass is ovewritten and not a subclass of _ASDisplayView");
}

Expand Down

0 comments on commit 7339fbf

Please sign in to comment.