mirror of
https://github.com/TextureGroup/Texture.git
synced 2026-04-07 19:17:39 +00:00
Remove ASExperimentalTransactionOperationRetainCycle (#1547)
* Remove ASExperimentalTransactionOperationRetainCycle
This commit is contained in:
@@ -24,7 +24,6 @@
|
||||
"exp_did_enter_preload_skip_asm_layout",
|
||||
"exp_dispatch_apply",
|
||||
"exp_oom_bg_dealloc_disable",
|
||||
"exp_transaction_operation_retain_cycle",
|
||||
"exp_remove_textkit_initialising_lock"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -28,9 +28,8 @@ typedef NS_OPTIONS(NSUInteger, ASExperimentalFeatures) {
|
||||
ASExperimentalDidEnterPreloadSkipASMLayout = 1 << 7, // exp_did_enter_preload_skip_asm_layout
|
||||
ASExperimentalDispatchApply = 1 << 8, // exp_dispatch_apply
|
||||
ASExperimentalOOMBackgroundDeallocDisable = 1 << 9, // exp_oom_bg_dealloc_disable
|
||||
ASExperimentalTransactionOperationRetainCycle = 1 << 10, // exp_transaction_operation_retain_cycle
|
||||
ASExperimentalRemoveTextKitInitialisingLock = 1 << 11, // exp_remove_textkit_initialising_lock
|
||||
ASExperimentalDrawingGlobal = 1 << 12, // exp_drawing_global
|
||||
ASExperimentalRemoveTextKitInitialisingLock = 1 << 10, // exp_remove_textkit_initialising_lock
|
||||
ASExperimentalDrawingGlobal = 1 << 11, // exp_drawing_global
|
||||
ASExperimentalFeatureAll = 0xFFFFFFFF
|
||||
};
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@ NSArray<NSString *> *ASExperimentalFeaturesGetNames(ASExperimentalFeatures flags
|
||||
@"exp_did_enter_preload_skip_asm_layout",
|
||||
@"exp_dispatch_apply",
|
||||
@"exp_oom_bg_dealloc_disable",
|
||||
@"exp_transaction_operation_retain_cycle",
|
||||
@"exp_remove_textkit_initialising_lock",
|
||||
@"exp_drawing_global"]));
|
||||
if (flags == ASExperimentalFeatureAll) {
|
||||
|
||||
@@ -56,33 +56,18 @@
|
||||
self.asyncdisplaykit_asyncLayerTransactions = transactions;
|
||||
}
|
||||
__weak CALayer *weakSelf = self;
|
||||
if (ASActivateExperimentalFeature(ASExperimentalTransactionOperationRetainCycle)) {
|
||||
transaction = [[_ASAsyncTransaction alloc] initWithCompletionBlock:^(_ASAsyncTransaction *completedTransaction, BOOL cancelled) {
|
||||
__strong CALayer *self = weakSelf;
|
||||
if (self == nil) {
|
||||
return;
|
||||
}
|
||||
[self.asyncdisplaykit_asyncLayerTransactions removeObject:completedTransaction];
|
||||
if (self.asyncdisplaykit_asyncLayerTransactions.count == 0) {
|
||||
// Reclaim object memory.
|
||||
self.asyncdisplaykit_asyncLayerTransactions = nil;
|
||||
}
|
||||
[self asyncdisplaykit_asyncTransactionContainerDidCompleteTransaction:completedTransaction];
|
||||
}];
|
||||
} else {
|
||||
transaction = [[_ASAsyncTransaction alloc] initWithCompletionBlock:^(_ASAsyncTransaction *completedTransaction, BOOL cancelled) {
|
||||
__strong CALayer *self = weakSelf;
|
||||
if (self == nil) {
|
||||
return;
|
||||
}
|
||||
[transactions removeObject:completedTransaction];
|
||||
if (transactions.count == 0) {
|
||||
// Reclaim object memory.
|
||||
self.asyncdisplaykit_asyncLayerTransactions = nil;
|
||||
}
|
||||
[self asyncdisplaykit_asyncTransactionContainerDidCompleteTransaction:completedTransaction];
|
||||
}];
|
||||
}
|
||||
transaction = [[_ASAsyncTransaction alloc] initWithCompletionBlock:^(_ASAsyncTransaction *completedTransaction, BOOL cancelled) {
|
||||
__strong CALayer *self = weakSelf;
|
||||
if (self == nil) {
|
||||
return;
|
||||
}
|
||||
[self.asyncdisplaykit_asyncLayerTransactions removeObject:completedTransaction];
|
||||
if (self.asyncdisplaykit_asyncLayerTransactions.count == 0) {
|
||||
// Reclaim object memory.
|
||||
self.asyncdisplaykit_asyncLayerTransactions = nil;
|
||||
}
|
||||
[self asyncdisplaykit_asyncTransactionContainerDidCompleteTransaction:completedTransaction];
|
||||
}];
|
||||
[transactions addObject:transaction];
|
||||
self.asyncdisplaykit_currentAsyncTransaction = transaction;
|
||||
[self asyncdisplaykit_asyncTransactionContainerWillBeginTransaction:transaction];
|
||||
|
||||
@@ -28,7 +28,6 @@ static ASExperimentalFeatures features[] = {
|
||||
ASExperimentalDidEnterPreloadSkipASMLayout,
|
||||
ASExperimentalDispatchApply,
|
||||
ASExperimentalOOMBackgroundDeallocDisable,
|
||||
ASExperimentalTransactionOperationRetainCycle,
|
||||
ASExperimentalRemoveTextKitInitialisingLock,
|
||||
ASExperimentalDrawingGlobal
|
||||
};
|
||||
@@ -53,7 +52,6 @@ static ASExperimentalFeatures features[] = {
|
||||
@"exp_did_enter_preload_skip_asm_layout",
|
||||
@"exp_dispatch_apply",
|
||||
@"exp_oom_bg_dealloc_disable",
|
||||
@"exp_transaction_operation_retain_cycle",
|
||||
@"exp_remove_textkit_initialising_lock",
|
||||
@"exp_drawing_global"
|
||||
];
|
||||
|
||||
@@ -52,41 +52,8 @@
|
||||
XCTAssertNil(weakTransaction);
|
||||
}
|
||||
|
||||
- (void)testWeakWithSingleOperation_noExperiment
|
||||
{
|
||||
__weak _ASAsyncTransaction* weakTransaction = nil;
|
||||
@autoreleasepool {
|
||||
CALayer *layer = [[CALayer alloc] init];
|
||||
_ASAsyncTransaction *transaction = layer.asyncdisplaykit_asyncTransaction;
|
||||
|
||||
[transaction addOperationWithBlock:^id<NSObject> _Nullable{
|
||||
return nil;
|
||||
} priority:1
|
||||
queue:dispatch_get_main_queue()
|
||||
completion:^(id _Nullable value, BOOL canceled) {
|
||||
;
|
||||
}];
|
||||
|
||||
weakTransaction = transaction;
|
||||
layer = nil;
|
||||
}
|
||||
|
||||
// held by main transaction group
|
||||
XCTAssertNotNil(weakTransaction);
|
||||
|
||||
// run so that transaction group drains.
|
||||
static NSTimeInterval delay = 0.1;
|
||||
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:delay]];
|
||||
|
||||
XCTAssertNotNil(weakTransaction); // Oops! Experiment will fix this.
|
||||
}
|
||||
|
||||
- (void)testWeakWithSingleOperation
|
||||
{
|
||||
ASConfiguration *config = [[ASConfiguration alloc] initWithDictionary:nil];
|
||||
config.experimentalFeatures = ASExperimentalTransactionOperationRetainCycle;
|
||||
[ASConfigurationManager test_resetWithConfiguration:config];
|
||||
|
||||
__weak _ASAsyncTransaction* weakTransaction = nil;
|
||||
@autoreleasepool {
|
||||
CALayer *layer = [[CALayer alloc] init];
|
||||
|
||||
Reference in New Issue
Block a user