mirror of
https://github.com/TextureGroup/Texture.git
synced 2026-04-07 19:17:39 +00:00
Remove lock of ASTextNodeRendererKey (#1454)
* Remove lock of ASTextNodeRendererKey * Remove class check for isEqual * Add const specifier to function parameter * Fixes typo * Fixes typo
This commit is contained in:
@@ -118,7 +118,7 @@ id StubLayerActionImplementation(id receiver, SEL _cmd, NSString *key) { return
|
||||
* @remarks The instance value is used only if we suspect the class may be dynamic (because it overloads
|
||||
* +respondsToSelector: or -respondsToSelector.) In that case we use our "slow path", calling this
|
||||
* method on each -init and passing the instance value. While this may seem like an unlikely scenario,
|
||||
* it turns our our own internal tests use a dynamic class, so it's worth capturing this edge case.
|
||||
* it turns out our own internal tests use a dynamic class, so it's worth capturing this edge case.
|
||||
*
|
||||
* @return ASDisplayNode flags.
|
||||
*/
|
||||
|
||||
+16
-13
@@ -57,17 +57,25 @@ static NSString *ASTextNodeTruncationTokenAttributeName = @"ASTextNodeTruncation
|
||||
#pragma mark - ASTextKitRenderer
|
||||
|
||||
@interface ASTextNodeRendererKey : NSObject
|
||||
@property (nonatomic) ASTextKitAttributes attributes;
|
||||
@property (nonatomic) CGSize constrainedSize;
|
||||
- (instancetype)initWithTextKitAttributes:(const ASTextKitAttributes &)attributes constrainedSize:(const CGSize)constrainedSize;
|
||||
@end
|
||||
|
||||
@implementation ASTextNodeRendererKey {
|
||||
std::mutex _m;
|
||||
ASTextKitAttributes _attributes;
|
||||
CGSize _constrainedSize;
|
||||
}
|
||||
|
||||
- (instancetype)initWithTextKitAttributes:(const ASTextKitAttributes &)attributes constrainedSize:(const CGSize)constrainedSize
|
||||
{
|
||||
if (self = [super init]) {
|
||||
_attributes = attributes;
|
||||
_constrainedSize = constrainedSize;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (NSUInteger)hash
|
||||
{
|
||||
std::lock_guard<std::mutex> _l(_m);
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic warning "-Wpadded"
|
||||
struct {
|
||||
@@ -86,13 +94,10 @@ static NSString *ASTextNodeTruncationTokenAttributeName = @"ASTextNodeTruncation
|
||||
if (self == object) {
|
||||
return YES;
|
||||
}
|
||||
|
||||
if (!object) {
|
||||
return NO;
|
||||
}
|
||||
// NOTE: Skip the class check for this specialized, internal Key object.
|
||||
|
||||
// Lock both objects, avoiding deadlock.
|
||||
std::lock(_m, object->_m);
|
||||
std::lock_guard<std::mutex> lk1(_m, std::adopt_lock);
|
||||
std::lock_guard<std::mutex> lk2(object->_m, std::adopt_lock);
|
||||
|
||||
return _attributes == object->_attributes && CGSizeEqualToSize(_constrainedSize, object->_constrainedSize);
|
||||
}
|
||||
@@ -120,9 +125,7 @@ static ASTextKitRenderer *rendererForAttributes(ASTextKitAttributes attributes,
|
||||
{
|
||||
NSCache *cache = sharedRendererCache();
|
||||
|
||||
ASTextNodeRendererKey *key = [[ASTextNodeRendererKey alloc] init];
|
||||
key.attributes = attributes;
|
||||
key.constrainedSize = constrainedSize;
|
||||
ASTextNodeRendererKey *key = [[ASTextNodeRendererKey alloc] initWithTextKitAttributes:attributes constrainedSize:constrainedSize];
|
||||
|
||||
ASTextKitRenderer *renderer = [cache objectForKey:key];
|
||||
if (renderer == nil) {
|
||||
|
||||
@@ -38,7 +38,7 @@ AS_EXTERN ASLayoutRangeMode ASLayoutRangeModeForVisibilityDepth(NSUInteger visib
|
||||
* @discussion Represents the number of user actions necessary to reach the view controller. An increased visibility
|
||||
* depth indicates a higher number of user interactions for the view controller to be visible again. For example,
|
||||
* an onscreen navigation controller's top view controller should have a visibility depth of 0. The view controller
|
||||
* one from the top should have a visibility deptch of 1 as should the root view controller in the stack (because
|
||||
* one from the top should have a visibility depth of 1 as should the root view controller in the stack (because
|
||||
* the user can hold the back button to pop to the root view controller).
|
||||
*
|
||||
* Visibility depth is used to automatically adjust ranges on range controllers (and thus free up memory) and can
|
||||
|
||||
Reference in New Issue
Block a user