mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Refactor: Assign string label to each case in RCTPLTag enum for startup performance logging
Summary: `_labelsForTags` is an array with string labels used only for local profiling, that we had to manually keep it in sync with `RCTPLTag`. Refactor so labels are assigned with switch instead. Changelog: [iOS] Refactor: Assign string label to each case in RCTPLTag enum for startup performance logging Reviewed By: fkgozali Differential Revision: D32889043 fbshipit-source-id: 81da592a160a31b91e78289be0990cc2ff960f29
This commit is contained in:
committed by
Facebook GitHub Bot
parent
d393e9490e
commit
60e60a9b3d
@@ -287,9 +287,11 @@ REACT_PUBLIC_HEADERS = {
|
||||
"React/RCTModuleMethod.h": RCTBASE_PATH + "RCTModuleMethod.h",
|
||||
"React/RCTMultipartStreamReader.h": RCTBASE_PATH + "RCTMultipartStreamReader.h",
|
||||
"React/RCTNullability.h": RCTBASE_PATH + "RCTNullability.h",
|
||||
"React/RCTPLTag.h": RCTBASE_PATH + "RCTPLTag.h",
|
||||
"React/RCTPackagerClient.h": RCTDEVSUPPORT_PATH + "RCTPackagerClient.h",
|
||||
"React/RCTPackagerConnection.h": RCTDEVSUPPORT_PATH + "RCTPackagerConnection.h",
|
||||
"React/RCTPerformanceLogger.h": RCTBASE_PATH + "RCTPerformanceLogger.h",
|
||||
"React/RCTPerformanceLoggerLabels.h": RCTBASE_PATH + "RCTPerformanceLoggerLabels.h",
|
||||
"React/RCTPointerEvents.h": RCTVIEWS_PATH + "RCTPointerEvents.h",
|
||||
"React/RCTProfile.h": "React/Profiler/RCTProfile.h",
|
||||
"React/RCTPushNotificationManager.h": RCTLIB_PATH + "PushNotificationIOS/RCTPushNotificationManager.h",
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
typedef NS_ENUM(NSInteger, RCTPLTag) {
|
||||
RCTPLScriptDownload = 0,
|
||||
RCTPLScriptExecution,
|
||||
RCTPLRAMBundleLoad,
|
||||
RCTPLRAMStartupCodeSize,
|
||||
RCTPLRAMStartupNativeRequires,
|
||||
RCTPLRAMStartupNativeRequiresCount,
|
||||
RCTPLRAMNativeRequires,
|
||||
RCTPLRAMNativeRequiresCount,
|
||||
RCTPLNativeModuleInit,
|
||||
RCTPLNativeModuleMainThread,
|
||||
RCTPLNativeModulePrepareConfig,
|
||||
RCTPLNativeModuleMainThreadUsesCount,
|
||||
RCTPLNativeModuleSetup,
|
||||
RCTPLTurboModuleSetup,
|
||||
RCTPLJSCWrapperOpenLibrary,
|
||||
RCTPLBridgeStartup,
|
||||
RCTPLTTI,
|
||||
RCTPLBundleSize,
|
||||
RCTPLReactInstanceInit,
|
||||
RCTPLSize // This is used to count the size
|
||||
};
|
||||
@@ -6,30 +6,7 @@
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
// Keep this in sync with _labelsForTags
|
||||
typedef NS_ENUM(NSInteger, RCTPLTag) {
|
||||
RCTPLScriptDownload = 0,
|
||||
RCTPLScriptExecution,
|
||||
RCTPLRAMBundleLoad,
|
||||
RCTPLRAMStartupCodeSize,
|
||||
RCTPLRAMStartupNativeRequires,
|
||||
RCTPLRAMStartupNativeRequiresCount,
|
||||
RCTPLRAMNativeRequires,
|
||||
RCTPLRAMNativeRequiresCount,
|
||||
RCTPLNativeModuleInit,
|
||||
RCTPLNativeModuleMainThread,
|
||||
RCTPLNativeModulePrepareConfig,
|
||||
RCTPLNativeModuleMainThreadUsesCount,
|
||||
RCTPLNativeModuleSetup,
|
||||
RCTPLTurboModuleSetup,
|
||||
RCTPLJSCWrapperOpenLibrary,
|
||||
RCTPLBridgeStartup,
|
||||
RCTPLTTI,
|
||||
RCTPLBundleSize,
|
||||
RCTPLReactInstanceInit,
|
||||
RCTPLSize // This is used to count the size
|
||||
};
|
||||
#import "RCTPLTag.h"
|
||||
|
||||
@interface RCTPerformanceLogger : NSObject
|
||||
|
||||
@@ -95,10 +72,4 @@ typedef NS_ENUM(NSInteger, RCTPLTag) {
|
||||
*/
|
||||
- (int64_t)valueForTag:(RCTPLTag)tag;
|
||||
|
||||
/**
|
||||
* Returns an array with values for all tags.
|
||||
* Use RCTPLTag to go over the array.
|
||||
*/
|
||||
- (NSArray<NSString *> *)labelsForTags;
|
||||
|
||||
@end
|
||||
|
||||
@@ -9,54 +9,24 @@
|
||||
|
||||
#import "RCTLog.h"
|
||||
#import "RCTPerformanceLogger.h"
|
||||
#import "RCTPerformanceLoggerLabels.h"
|
||||
#import "RCTProfile.h"
|
||||
#import "RCTRootView.h"
|
||||
|
||||
@interface RCTPerformanceLogger () {
|
||||
int64_t _data[RCTPLSize][2];
|
||||
NSUInteger _cookies[RCTPLSize];
|
||||
NSInteger _cookies[RCTPLSize];
|
||||
}
|
||||
|
||||
@property (nonatomic, copy) NSArray<NSString *> *labelsForTags;
|
||||
|
||||
@end
|
||||
|
||||
@implementation RCTPerformanceLogger
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
if (self = [super init]) {
|
||||
// Keep this in sync with RCTPLTag
|
||||
_labelsForTags = @[
|
||||
@"ScriptDownload",
|
||||
@"ScriptExecution",
|
||||
@"RAMBundleLoad",
|
||||
@"RAMStartupCodeSize",
|
||||
@"RAMStartupNativeRequires",
|
||||
@"RAMStartupNativeRequiresCount",
|
||||
@"RAMNativeRequires",
|
||||
@"RAMNativeRequiresCount",
|
||||
@"NativeModuleInit",
|
||||
@"NativeModuleMainThread",
|
||||
@"NativeModulePrepareConfig",
|
||||
@"NativeModuleMainThreadUsesCount",
|
||||
@"NativeModuleSetup",
|
||||
@"TurboModuleSetup",
|
||||
@"JSCWrapperOpenLibrary",
|
||||
@"BridgeStartup",
|
||||
@"RootViewTTI",
|
||||
@"BundleSize",
|
||||
@"ReactInstanceInit",
|
||||
];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)markStartForTag:(RCTPLTag)tag
|
||||
{
|
||||
#if RCT_PROFILE
|
||||
if (RCTProfileIsProfiling()) {
|
||||
NSString *label = _labelsForTags[tag];
|
||||
NSString *label = RCTPLLabelForTag(tag);
|
||||
_cookies[tag] = RCTProfileBeginAsyncEvent(RCTProfileTagAlways, label, nil);
|
||||
}
|
||||
#endif
|
||||
@@ -68,7 +38,7 @@
|
||||
{
|
||||
#if RCT_PROFILE
|
||||
if (RCTProfileIsProfiling()) {
|
||||
NSString *label = _labelsForTags[tag];
|
||||
NSString *label = RCTPLLabelForTag(tag);
|
||||
RCTProfileEndAsyncEvent(RCTProfileTagAlways, @"native", _cookies[tag], label, @"RCTPerformanceLogger");
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#import <React/RCTDefines.h>
|
||||
#import "RCTPLTag.h"
|
||||
|
||||
// Return the string label for the enum RCTPLTag for performance logging
|
||||
__attribute__((used)) RCT_EXTERN NSString *RCTPLLabelForTag(RCTPLTag tag);
|
||||
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#import "RCTPerformanceLoggerLabels.h"
|
||||
#import <React/RCTAssert.h>
|
||||
|
||||
NSString *RCTPLLabelForTag(RCTPLTag tag)
|
||||
{
|
||||
switch (tag) {
|
||||
case RCTPLScriptDownload:
|
||||
return @"ScriptDownload";
|
||||
case RCTPLScriptExecution:
|
||||
return @"ScriptExecution";
|
||||
case RCTPLRAMBundleLoad:
|
||||
return @"RAMBundleLoad";
|
||||
case RCTPLRAMStartupCodeSize:
|
||||
return @"RAMStartupCodeSize";
|
||||
case RCTPLRAMStartupNativeRequires:
|
||||
return @"RAMStartupNativeRequires";
|
||||
case RCTPLRAMStartupNativeRequiresCount:
|
||||
return @"RAMStartupNativeRequiresCount";
|
||||
case RCTPLRAMNativeRequires:
|
||||
return @"RAMNativeRequires";
|
||||
case RCTPLRAMNativeRequiresCount:
|
||||
return @"RAMNativeRequiresCount";
|
||||
case RCTPLNativeModuleInit:
|
||||
return @"NativeModuleInit";
|
||||
case RCTPLNativeModuleMainThread:
|
||||
return @"NativeModuleMainThread";
|
||||
case RCTPLNativeModulePrepareConfig:
|
||||
return @"NativeModulePrepareConfig";
|
||||
case RCTPLNativeModuleMainThreadUsesCount:
|
||||
return @"NativeModuleMainThreadUsesCount";
|
||||
case RCTPLNativeModuleSetup:
|
||||
return @"NativeModuleSetup";
|
||||
case RCTPLTurboModuleSetup:
|
||||
return @"TurboModuleSetup";
|
||||
case RCTPLJSCWrapperOpenLibrary:
|
||||
return @"JSCWrapperOpenLibrary";
|
||||
case RCTPLBridgeStartup:
|
||||
return @"BridgeStartup";
|
||||
case RCTPLTTI:
|
||||
return @"RootViewTTI";
|
||||
case RCTPLBundleSize:
|
||||
return @"BundleSize";
|
||||
case RCTPLReactInstanceInit:
|
||||
return @"ReactInstanceInit";
|
||||
case RCTPLSize: // Only used to count enum size
|
||||
RCTAssert(NO, @"RCTPLSize should not be used to track performance timestamps.");
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
@@ -24,6 +24,7 @@
|
||||
#import <React/RCTInvalidating.h>
|
||||
#import <React/RCTJavaScriptExecutor.h>
|
||||
#import <React/RCTPerformanceLogger.h>
|
||||
#import <React/RCTPerformanceLoggerLabels.h>
|
||||
#import <React/RCTRootView.h>
|
||||
#import <React/RCTUIManager.h>
|
||||
#import <React/RCTUtils.h>
|
||||
@@ -40,6 +41,8 @@ static CGFloat const RCTPerfMonitorExpandHeight = 250;
|
||||
|
||||
typedef BOOL (*RCTJSCSetOptionType)(const char *);
|
||||
|
||||
NSArray<NSString *> *LabelsForRCTPerformanceLoggerTags();
|
||||
|
||||
static BOOL RCTJSCSetOption(const char *option)
|
||||
{
|
||||
static RCTJSCSetOptionType setOption;
|
||||
@@ -515,7 +518,7 @@ RCT_EXPORT_MODULE()
|
||||
NSMutableArray<NSString *> *data = [NSMutableArray new];
|
||||
RCTPerformanceLogger *performanceLogger = [_bridge performanceLogger];
|
||||
NSArray<NSNumber *> *values = [performanceLogger valuesForTags];
|
||||
for (NSString *label in [performanceLogger labelsForTags]) {
|
||||
for (NSString *label in LabelsForRCTPerformanceLoggerTags()) {
|
||||
long long value = values[i + 1].longLongValue - values[i].longLongValue;
|
||||
NSString *unit = @"ms";
|
||||
if ([label hasSuffix:@"Size"]) {
|
||||
@@ -572,6 +575,15 @@ RCT_EXPORT_MODULE()
|
||||
|
||||
@end
|
||||
|
||||
NSArray<NSString *> *LabelsForRCTPerformanceLoggerTags()
|
||||
{
|
||||
NSMutableArray<NSString *> *labels = [NSMutableArray new];
|
||||
for (int i = 0; i < RCTPLSize; i++) {
|
||||
[labels addObject:RCTPLLabelForTag((RCTPLTag)i)];
|
||||
}
|
||||
return labels;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Class RCTPerfMonitorCls(void)
|
||||
|
||||
@@ -891,7 +891,7 @@ SPEC CHECKSUMS:
|
||||
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
|
||||
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
|
||||
FBLazyVector: b81a2b70c72d8b0aefb652cea22c11e9ffd02949
|
||||
FBReactNativeSpec: 755b7fee1b08aefd74fb2fa9f7312b253719d536
|
||||
FBReactNativeSpec: 5bd61f19eb8d9ab489a9f89f6e862767fbb6cced
|
||||
Flipper: 30e8eeeed6abdc98edaf32af0cda2f198be4b733
|
||||
Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c
|
||||
Flipper-DoubleConversion: 57ffbe81ef95306cc9e69c4aa3aeeeeb58a6a28c
|
||||
@@ -904,7 +904,7 @@ SPEC CHECKSUMS:
|
||||
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
||||
glog: c10b67b343303f51715e5c5eedb18a41402f350a
|
||||
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
||||
MyNativeView: 4eaeecdc16568e81e702ef0a901127823d1ddc80
|
||||
MyNativeView: 68ba0ad4bcfc2bc9b776a346c70ca9d19a2f2542
|
||||
OpenSSL-Universal: 1aa4f6a6ee7256b83db99ec1ccdaa80d10f9af9b
|
||||
RCT-Folly: 803a9cfd78114b2ec0f140cfa6fa2a6bafb2d685
|
||||
RCTRequired: af2d6080a4b9ba0885b28ca78879a92066c71cab
|
||||
@@ -934,10 +934,10 @@ SPEC CHECKSUMS:
|
||||
React-RCTTest: 12bbd7fc2e72bd9920dc7286c5b8ef96639582b6
|
||||
React-RCTText: e9146b2c0550a83d1335bfe2553760070a2d75c7
|
||||
React-RCTVibration: 50be9c390f2da76045ef0dfdefa18b9cf9f35cfa
|
||||
React-rncore: d09af3a25cbff0b484776785676c28f3729e07f5
|
||||
React-rncore: 03e9b66d28812371afe3e7f180968f8e2a4ea71e
|
||||
React-runtimeexecutor: 4b0c6eb341c7d3ceb5e2385cb0fdb9bf701024f3
|
||||
ReactCommon: 7a2714d1128f965392b6f99a8b390e3aa38c9569
|
||||
ScreenshotManager: e8a3fc9b2e24b81127b36cb4ebe0eed65090c949
|
||||
ScreenshotManager: 6923f27c7ce9505117b8c743c9f099fa3054df6a
|
||||
Yoga: c0d06f5380d34e939f55420669a60fe08b79bd75
|
||||
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
|
||||
|
||||
|
||||
@@ -15,10 +15,4 @@
|
||||
|
||||
@implementation RCTPerformanceLoggerTests
|
||||
|
||||
- (void)testLabelCountInSyncWithRCTPLTag
|
||||
{
|
||||
RCTPerformanceLogger *logger = [RCTPerformanceLogger new];
|
||||
XCTAssertEqual([logger labelsForTags].count, RCTPLSize);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user