Use instance lock for ASPrimitiveTraitCollection (#1442)

* Use instance lock for ASPrimitiveTraitCollection

* Remove the atomic
This commit is contained in:
Michael Schneider
2019-04-04 07:32:29 -07:00
committed by GitHub
parent a4957bbbf2
commit 838ab85a99
5 changed files with 23 additions and 18 deletions
+5 -2
View File
@@ -128,15 +128,18 @@ ASLayoutElementStyleExtensibilityForwarding
- (ASPrimitiveTraitCollection)primitiveTraitCollection
{
return _primitiveTraitCollection.load();
AS::MutexLocker l(__instanceLock__);
return _primitiveTraitCollection;
}
- (void)setPrimitiveTraitCollection:(ASPrimitiveTraitCollection)traitCollection
{
if (ASPrimitiveTraitCollectionIsEqualToASPrimitiveTraitCollection(traitCollection, _primitiveTraitCollection.load()) == NO) {
AS::UniqueLock l(__instanceLock__);
if (ASPrimitiveTraitCollectionIsEqualToASPrimitiveTraitCollection(traitCollection, _primitiveTraitCollection) == NO) {
_primitiveTraitCollection = traitCollection;
ASDisplayNodeLogEvent(self, @"asyncTraitCollectionDidChange: %@", NSStringFromASPrimitiveTraitCollection(traitCollection));
l.unlock();
[self asyncTraitCollectionDidChange];
}
}
-10
View File
@@ -106,16 +106,6 @@ AS_EXTERN void ASTraitCollectionPropagateDown(id<ASLayoutElement> element, ASPri
@end
#define ASPrimitiveTraitCollectionDefaults \
- (ASPrimitiveTraitCollection)primitiveTraitCollection\
{\
return _primitiveTraitCollection.load();\
}\
- (void)setPrimitiveTraitCollection:(ASPrimitiveTraitCollection)traitCollection\
{\
_primitiveTraitCollection = traitCollection;\
}\
#define ASLayoutElementCollectionTableSetTraitCollection(lock) \
- (void)setPrimitiveTraitCollection:(ASPrimitiveTraitCollection)traitCollection\
{\
+11 -1
View File
@@ -146,7 +146,17 @@ ASLayoutElementLayoutCalculationDefaults
return [ASTraitCollection traitCollectionWithASPrimitiveTraitCollection:self.primitiveTraitCollection];
}
ASPrimitiveTraitCollectionDefaults
- (ASPrimitiveTraitCollection)primitiveTraitCollection
{
AS::MutexLocker l(__instanceLock__);
return _primitiveTraitCollection;
}
- (void)setPrimitiveTraitCollection:(ASPrimitiveTraitCollection)traitCollection
{
AS::MutexLocker l(__instanceLock__);
_primitiveTraitCollection = traitCollection;
}
#pragma mark - ASLayoutElementStyleExtensibility
+1 -1
View File
@@ -153,7 +153,7 @@ static constexpr CACornerMask kASCACornerAllCorners =
// Layout support
ASLayoutElementStyle *_style;
std::atomic<ASPrimitiveTraitCollection> _primitiveTraitCollection;
ASPrimitiveTraitCollection _primitiveTraitCollection;
// Layout Spec
ASLayoutSpecBlock _layoutSpecBlock;
@@ -14,9 +14,12 @@
#import <AsyncDisplayKit/ASLayoutElementStylePrivate.h>
#import <AsyncDisplayKit/ASLayoutSpec.h>
@implementation _ASGalleryLayoutItem {
std::atomic<ASPrimitiveTraitCollection> _primitiveTraitCollection;
}
@interface _ASGalleryLayoutItem ()
@property ASPrimitiveTraitCollection primitiveTraitCollection;
@end
@implementation _ASGalleryLayoutItem
@synthesize style;
@@ -33,7 +36,6 @@
}
ASLayoutElementStyleExtensibilityForwarding
ASPrimitiveTraitCollectionDefaults
- (ASTraitCollection *)asyncTraitCollection
{