Add experiment flag to skip layoutIfNeeded in enterPreloadState for ASM nodes (#1201)

This commit is contained in:
Michael Schneider 2018-11-03 09:44:42 -07:00 committed by GitHub
parent 706396f7d1
commit ecfc7835da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 21 deletions

View File

@ -3377,7 +3377,8 @@ ASDISPLAYNODE_INLINE BOOL subtreeIsRasterized(ASDisplayNode *node) {
// - If it doesn't have a calculated or pending layout that fits its current bounds, a measurement pass will occur // - If it doesn't have a calculated or pending layout that fits its current bounds, a measurement pass will occur
// (see -__layout and -_u_measureNodeWithBoundsIfNecessary:). This scenario is uncommon, // (see -__layout and -_u_measureNodeWithBoundsIfNecessary:). This scenario is uncommon,
// and running a measurement pass here is a fine trade-off because preloading any time after this point would be late. // and running a measurement pass here is a fine trade-off because preloading any time after this point would be late.
if (self.automaticallyManagesSubnodes) {
if (self.automaticallyManagesSubnodes && !ASActivateExperimentalFeature(ASExperimentalDidEnterPreloadSkipASMLayout)) {
[self layoutIfNeeded]; [self layoutIfNeeded];
} }
[self enumerateInterfaceStateDelegates:^(id<ASInterfaceStateDelegate> del) { [self enumerateInterfaceStateDelegates:^(id<ASInterfaceStateDelegate> del) {

View File

@ -24,6 +24,7 @@ typedef NS_OPTIONS(NSUInteger, ASExperimentalFeatures) {
ASExperimentalCollectionTeardown = 1 << 6, // exp_collection_teardown ASExperimentalCollectionTeardown = 1 << 6, // exp_collection_teardown
ASExperimentalFramesetterCache = 1 << 7, // exp_framesetter_cache ASExperimentalFramesetterCache = 1 << 7, // exp_framesetter_cache
ASExperimentalClearDataDuringDeallocation = 1 << 8, // exp_clear_data_during_deallocation ASExperimentalClearDataDuringDeallocation = 1 << 8, // exp_clear_data_during_deallocation
ASExperimentalDidEnterPreloadSkipASMLayout = 1 << 9, // exp_did_enter_preload_skip_asm_layout
ASExperimentalFeatureAll = 0xFFFFFFFF ASExperimentalFeatureAll = 0xFFFFFFFF
}; };

View File

@ -20,7 +20,8 @@ NSArray<NSString *> *ASExperimentalFeaturesGetNames(ASExperimentalFeatures flags
@"exp_network_image_queue", @"exp_network_image_queue",
@"exp_collection_teardown", @"exp_collection_teardown",
@"exp_framesetter_cache", @"exp_framesetter_cache",
@"exp_clear_data_during_deallocation"])); @"exp_clear_data_during_deallocation",
@"exp_did_enter_preload_skip_asm_layout"]));
if (flags == ASExperimentalFeatureAll) { if (flags == ASExperimentalFeatureAll) {
return allNames; return allNames;

View File

@ -13,15 +13,16 @@
#import "ASConfigurationInternal.h" #import "ASConfigurationInternal.h"
static ASExperimentalFeatures features[] = { static ASExperimentalFeatures features[] = {
ASExperimentalGraphicsContexts, ASExperimentalGraphicsContexts,
ASExperimentalTextNode, ASExperimentalTextNode,
ASExperimentalInterfaceStateCoalescing, ASExperimentalInterfaceStateCoalescing,
ASExperimentalUnfairLock, ASExperimentalUnfairLock,
ASExperimentalLayerDefaults, ASExperimentalLayerDefaults,
ASExperimentalNetworkImageQueue, ASExperimentalNetworkImageQueue,
ASExperimentalCollectionTeardown, ASExperimentalCollectionTeardown,
ASExperimentalFramesetterCache, ASExperimentalFramesetterCache,
ASExperimentalClearDataDuringDeallocation ASExperimentalClearDataDuringDeallocation,
ASExperimentalDidEnterPreloadSkipASMLayout
}; };
@interface ASConfigurationTests : ASTestCase <ASConfigurationDelegate> @interface ASConfigurationTests : ASTestCase <ASConfigurationDelegate>
@ -34,16 +35,17 @@ static ASExperimentalFeatures features[] = {
+ (NSArray *)names { + (NSArray *)names {
return @[ return @[
@"exp_graphics_contexts", @"exp_graphics_contexts",
@"exp_text_node", @"exp_text_node",
@"exp_interface_state_coalesce", @"exp_interface_state_coalesce",
@"exp_unfair_lock", @"exp_unfair_lock",
@"exp_infer_layer_defaults", @"exp_infer_layer_defaults",
@"exp_network_image_queue", @"exp_network_image_queue",
@"exp_collection_teardown", @"exp_collection_teardown",
@"exp_framesetter_cache", @"exp_framesetter_cache",
@"exp_clear_data_during_deallocation" @"exp_clear_data_during_deallocation",
]; @"exp_did_enter_preload_skip_asm_layout",
];
} }
- (ASExperimentalFeatures)allFeatures { - (ASExperimentalFeatures)allFeatures {