mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-09-07 13:09:49 +00:00
* [ASRunLoopQueue - Performance] Add ASDeallocQueue for efficient object teardown. This measurably reduces block overhead and context switching. In the layout benchmark, it increases ops/s while actually reducing CPU utilization. This suggests that we are now at a lock-bounded local maximum, at least for tri-core devices. * [ASDeallocQueue] Update convenience helper method and adopt in ASImageNode etc. * [ASDeallocQueue] Reimplement the queue using a timer-based runloop. * [Debugging] Re-enable ASDisplayNode Event Log. * [ASDeallocQueue] Final refinements, comments, code minimization. * [ASDeallocQueue] Fix for lock release needed in early return (refactoring typo from last commit)
38 lines
1.0 KiB
Objective-C
38 lines
1.0 KiB
Objective-C
//
|
|
// ASRunLoopQueue.h
|
|
// AsyncDisplayKit
|
|
//
|
|
// Created by Rahul Malik on 3/7/16.
|
|
//
|
|
// Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
|
// This source code is licensed under the BSD-style license found in the
|
|
// LICENSE file in the root directory of this source tree. An additional grant
|
|
// of patent rights can be found in the PATENTS file in the same directory.
|
|
//
|
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
@interface ASRunLoopQueue<ObjectType> : NSObject
|
|
|
|
- (instancetype)initWithRunLoop:(CFRunLoopRef)runloop
|
|
andHandler:(void(^)(ObjectType dequeuedItem, BOOL isQueueDrained))handlerBlock;
|
|
|
|
- (void)enqueue:(ObjectType)object;
|
|
|
|
@property (nonatomic, assign) NSUInteger batchSize; // Default == 1.
|
|
@property (nonatomic, assign) BOOL ensureExclusiveMembership; // Default == YES. Set-like behavior.
|
|
|
|
@end
|
|
|
|
@interface ASDeallocQueue : NSObject
|
|
|
|
+ (instancetype)sharedDeallocationQueue;
|
|
|
|
- (void)releaseObjectInBackground:(id)object;
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|