Skip to content

Commit

Permalink
Fix synchronous state of node if +viewClass or +layerClass is overwri…
Browse files Browse the repository at this point in the history
…tten #trivial (TextureGroup#776)

* Fix synchronous state of node if +viewClass is overwritten

* Also check for _layerClass overwrite for synchronous flag

* Update some code style
  • Loading branch information
maicki authored Jan 31, 2018
1 parent fef965f commit 20e31f7
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Source/ASDisplayNode.mm
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,11 @@ - (void)_initializeInstance

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


_contentsScaleForDisplay = ASScreenScale();
_drawingPriority = ASDefaultDrawingPriority;

Expand Down
34 changes: 34 additions & 0 deletions Tests/ASDisplayNodeTests.mm
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,28 @@ - (void)displayWillStartAsynchronously:(BOOL)asynchronously

@end

@interface ASSynchronousTestDisplayNodeViaViewClass : ASDisplayNode
@end

@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 @@ -2354,4 +2376,16 @@ - (void)testScreenScale
XCTAssertEqual(ASScreenScale(), UIScreen.mainScreen.scale);
}

- (void)testThatIfViewClassIsOverwrittenItsSynchronous
{
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");
}

@end

0 comments on commit 20e31f7

Please sign in to comment.