From aecdee0ab0c855f7cd8ef2eed312e217c1696d65 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Thu, 8 Aug 2019 15:59:53 -0700 Subject: [PATCH] Introduce NativeFrameRateLogger Summary: This diff introduces `NativeFrameRateLogger` and eliminates all usages of `NativeModules.FrameRateLogger` from our codebase. Reviewed By: ejanzer Differential Revision: D16718105 fbshipit-source-id: caf903162bab978ee1b3faef56aedef6ada75b89 --- .../FBReactNativeSpec-generated.mm | 48 +++++++++++++++++++ .../FBReactNativeSpec/FBReactNativeSpec.h | 48 +++++++++++++++++++ Libraries/Interaction/FrameRateLogger.js | 16 +++---- .../Interaction/NativeFrameRateLogger.js | 24 ++++++++++ 4 files changed, 127 insertions(+), 9 deletions(-) create mode 100644 Libraries/Interaction/NativeFrameRateLogger.js diff --git a/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm b/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm index 182009b0150..48b9c6c8456 100644 --- a/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm +++ b/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm @@ -925,6 +925,54 @@ namespace facebook { + } + + } // namespace react +} // namespace facebook +@implementation RCTCxxConvert (NativeFrameRateLogger_SpecSetGlobalOptionsOptions) ++ (RCTManagedPointer *)JS_NativeFrameRateLogger_SpecSetGlobalOptionsOptions:(id)json +{ + return facebook::react::managedPointer(json); +} +@end +namespace facebook { + namespace react { + + + static facebook::jsi::Value __hostFunction_NativeFrameRateLoggerSpecJSI_setGlobalOptions(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, VoidKind, "setGlobalOptions", @selector(setGlobalOptions:), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeFrameRateLoggerSpecJSI_setContext(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, VoidKind, "setContext", @selector(setContext:), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeFrameRateLoggerSpecJSI_beginScroll(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, VoidKind, "beginScroll", @selector(beginScroll), args, count); + } + + static facebook::jsi::Value __hostFunction_NativeFrameRateLoggerSpecJSI_endScroll(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) { + return static_cast(turboModule).invokeObjCMethod(rt, VoidKind, "endScroll", @selector(endScroll), args, count); + } + + + NativeFrameRateLoggerSpecJSI::NativeFrameRateLoggerSpecJSI(id instance, std::shared_ptr jsInvoker) + : ObjCTurboModule("FrameRateLogger", instance, jsInvoker) { + + methodMap_["setGlobalOptions"] = MethodMetadata {1, __hostFunction_NativeFrameRateLoggerSpecJSI_setGlobalOptions}; + + setMethodArgConversionSelector(@"setGlobalOptions", 0, @"JS_NativeFrameRateLogger_SpecSetGlobalOptionsOptions:"); + + methodMap_["setContext"] = MethodMetadata {1, __hostFunction_NativeFrameRateLoggerSpecJSI_setContext}; + + + methodMap_["beginScroll"] = MethodMetadata {0, __hostFunction_NativeFrameRateLoggerSpecJSI_beginScroll}; + + + methodMap_["endScroll"] = MethodMetadata {0, __hostFunction_NativeFrameRateLoggerSpecJSI_endScroll}; + + + } } // namespace react diff --git a/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h b/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h index ad2c46df3db..b46f8fd440e 100644 --- a/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h +++ b/Libraries/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h @@ -941,6 +941,44 @@ namespace facebook { }; } // namespace react } // namespace facebook + +namespace JS { + namespace NativeFrameRateLogger { + struct SpecSetGlobalOptionsOptions { + folly::Optional debug() const; + folly::Optional reportStackTraces() const; + + SpecSetGlobalOptionsOptions(NSDictionary *const v) : _v(v) {} + private: + NSDictionary *_v; + }; + } +} + +@interface RCTCxxConvert (NativeFrameRateLogger_SpecSetGlobalOptionsOptions) ++ (RCTManagedPointer *)JS_NativeFrameRateLogger_SpecSetGlobalOptionsOptions:(id)json; +@end +@protocol NativeFrameRateLoggerSpec + +- (void)setGlobalOptions:(JS::NativeFrameRateLogger::SpecSetGlobalOptionsOptions &)options; +- (void)setContext:(NSString *)context; +- (void)beginScroll; +- (void)endScroll; + +@end +namespace facebook { + namespace react { + /** + * ObjC++ class for module 'FrameRateLogger' + */ + + class JSI_EXPORT NativeFrameRateLoggerSpecJSI : public ObjCTurboModule { + public: + NativeFrameRateLoggerSpecJSI(id instance, std::shared_ptr jsInvoker); + + }; + } // namespace react +} // namespace facebook @protocol NativeHeadlessJsTaskSupportSpec - (void)notifyTaskFinished:(double)taskId; @@ -2597,6 +2635,16 @@ inline folly::Optional JS:: id const p = _v[@"extraData"]; return (p == nil ? folly::none : folly::make_optional(JS::NativeExceptionsManager::ExceptionDataExtraData(p))); } +inline folly::Optional JS::NativeFrameRateLogger::SpecSetGlobalOptionsOptions::debug() const +{ + id const p = _v[@"debug"]; + return RCTBridgingToOptionalBool(p); +} +inline folly::Optional JS::NativeFrameRateLogger::SpecSetGlobalOptionsOptions::reportStackTraces() const +{ + id const p = _v[@"reportStackTraces"]; + return RCTBridgingToOptionalBool(p); +} inline JS::NativeI18nManager::Constants::Builder::Builder(const Input i) : _factory(^{ NSMutableDictionary *d = [NSMutableDictionary new]; auto isRTL = i.isRTL.get(); diff --git a/Libraries/Interaction/FrameRateLogger.js b/Libraries/Interaction/FrameRateLogger.js index 7c1e83c3ccf..73a59454346 100644 --- a/Libraries/Interaction/FrameRateLogger.js +++ b/Libraries/Interaction/FrameRateLogger.js @@ -10,7 +10,7 @@ 'use strict'; -const NativeModules = require('../BatchedBridge/NativeModules'); +import NativeFrameRateLogger from './NativeFrameRateLogger'; const invariant = require('invariant'); @@ -41,17 +41,17 @@ const FrameRateLogger = { }) { if (options.debug !== undefined) { invariant( - NativeModules.FrameRateLogger, + NativeFrameRateLogger, 'Trying to debug FrameRateLogger without the native module!', ); } - if (NativeModules.FrameRateLogger) { + if (NativeFrameRateLogger) { // Needs to clone the object first to avoid modifying the argument. const optionsClone = { debug: !!options.debug, reportStackTraces: !!options.reportStackTraces, }; - NativeModules.FrameRateLogger.setGlobalOptions(optionsClone); + NativeFrameRateLogger.setGlobalOptions(optionsClone); } }, @@ -60,8 +60,7 @@ const FrameRateLogger = { * in `AppRegistry`, but navigation is also a common place to hook in. */ setContext: function(context: string) { - NativeModules.FrameRateLogger && - NativeModules.FrameRateLogger.setContext(context); + NativeFrameRateLogger && NativeFrameRateLogger.setContext(context); }, /** @@ -69,8 +68,7 @@ const FrameRateLogger = { * automatically. */ beginScroll() { - NativeModules.FrameRateLogger && - NativeModules.FrameRateLogger.beginScroll(); + NativeFrameRateLogger && NativeFrameRateLogger.beginScroll(); }, /** @@ -78,7 +76,7 @@ const FrameRateLogger = { * automatically. */ endScroll() { - NativeModules.FrameRateLogger && NativeModules.FrameRateLogger.endScroll(); + NativeFrameRateLogger && NativeFrameRateLogger.endScroll(); }, }; diff --git a/Libraries/Interaction/NativeFrameRateLogger.js b/Libraries/Interaction/NativeFrameRateLogger.js new file mode 100644 index 00000000000..9780519c171 --- /dev/null +++ b/Libraries/Interaction/NativeFrameRateLogger.js @@ -0,0 +1,24 @@ +/** + * 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. + * + * @format + * @flow + */ + +import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry'; +import type {TurboModule} from '../TurboModule/RCTExport'; + +export interface Spec extends TurboModule { + +setGlobalOptions: (options: {| + +debug?: ?boolean, + +reportStackTraces?: ?boolean, + |}) => void; + +setContext: (context: string) => void; + +beginScroll: () => void; + +endScroll: () => void; +} + +export default TurboModuleRegistry.get('FrameRateLogger');