@react-native-firebase/perf 16.7.0 → 17.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/android/src/main/java/io/invertase/firebase/perf/ScreenTrace.java +69 -57
- package/android/src/main/java/io/invertase/firebase/perf/UniversalFirebasePerfModule.java +15 -12
- package/android/src/reactnative/java/io/invertase/firebase/perf/ReactNativeFirebasePerfModule.java +18 -18
- package/ios/RNFBPerf/RNFBPerfModule.m +10 -1
- package/lib/index.d.ts +21 -5
- package/lib/index.js +47 -1
- package/lib/modular/index.js +89 -0
- package/lib/version.js +1 -1
- package/package.json +3 -3
    
        package/CHANGELOG.md
    CHANGED
    
    | @@ -3,6 +3,16 @@ | |
| 3 3 | 
             
            All notable changes to this project will be documented in this file.
         | 
| 4 4 | 
             
            See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
         | 
| 5 5 |  | 
| 6 | 
            +
            ## [17.1.0](https://github.com/invertase/react-native-firebase/compare/v17.0.0...v17.1.0) (2023-02-09)
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            ### Features
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            - **perf:** Expose modular API that matches the Firebase web JS SDK v9 API ([#6771](https://github.com/invertase/react-native-firebase/issues/6771)) ([4e170ea](https://github.com/invertase/react-native-firebase/commit/4e170ead24035cd0154b153dcf1e8d69d6ab7ac9))
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            ## [17.0.0](https://github.com/invertase/react-native-firebase/compare/v16.7.0...v17.0.0) (2023-02-02)
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            **Note:** Version bump only for package @react-native-firebase/perf
         | 
| 15 | 
            +
             | 
| 6 16 | 
             
            ## [16.7.0](https://github.com/invertase/react-native-firebase/compare/v16.6.0...v16.7.0) (2023-01-28)
         | 
| 7 17 |  | 
| 8 18 | 
             
            ### Features
         | 
| @@ -3,53 +3,48 @@ package io.invertase.firebase.perf; | |
| 3 3 | 
             
            /**
         | 
| 4 4 | 
             
             * Copyright 2021 Google Inc. All Rights Reserved.
         | 
| 5 5 | 
             
             *
         | 
| 6 | 
            -
             * Licensed under the Apache License, Version 2.0 (the "License");
         | 
| 7 | 
            -
             *  | 
| 8 | 
            -
             * You may obtain a copy of the License at
         | 
| 6 | 
            +
             * <p>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
         | 
| 7 | 
            +
             * except in compliance with the License. You may obtain a copy of the License at
         | 
| 9 8 | 
             
             *
         | 
| 10 | 
            -
             * http://www.apache.org/licenses/LICENSE-2.0
         | 
| 9 | 
            +
             * <p>http://www.apache.org/licenses/LICENSE-2.0
         | 
| 11 10 | 
             
             *
         | 
| 12 | 
            -
             * Unless required by applicable law or agreed to in writing, software
         | 
| 13 | 
            -
             *  | 
| 14 | 
            -
             *  | 
| 15 | 
            -
             * See the License for the specific language governing permissions and
         | 
| 11 | 
            +
             * <p>Unless required by applicable law or agreed to in writing, software distributed under the
         | 
| 12 | 
            +
             * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
         | 
| 13 | 
            +
             * express or implied. See the License for the specific language governing permissions and
         | 
| 16 14 | 
             
             * limitations under the License.
         | 
| 17 15 | 
             
             */
         | 
| 18 | 
            -
             | 
| 19 16 | 
             
            import android.app.Activity;
         | 
| 20 17 | 
             
            import android.os.Build;
         | 
| 21 18 | 
             
            import android.util.Log;
         | 
| 22 19 | 
             
            import android.util.SparseIntArray;
         | 
| 23 20 | 
             
            import android.view.WindowManager;
         | 
| 24 | 
            -
             | 
| 25 21 | 
             
            import androidx.core.app.FrameMetricsAggregator;
         | 
| 26 | 
            -
             | 
| 27 22 | 
             
            import com.google.firebase.perf.FirebasePerformance;
         | 
| 28 23 | 
             
            import com.google.firebase.perf.metrics.Trace;
         | 
| 29 24 | 
             
            import com.google.firebase.perf.util.Constants;
         | 
| 30 25 |  | 
| 31 26 | 
             
            /**
         | 
| 32 | 
            -
             * Utility class to capture Screen rendering information (Slow/Frozen frames) for the
         | 
| 33 | 
            -
             *  | 
| 34 | 
            -
             *  | 
| 35 | 
            -
             * | 
| 36 | 
            -
             * <p>
         | 
| 37 | 
            -
             * | 
| 38 | 
            -
             *  | 
| 39 | 
            -
             * - | 
| 40 | 
            -
             *  | 
| 41 | 
            -
             * - https://youtu.be/HXQhu6qfTVU (Rendering Performance)
         | 
| 42 | 
            -
             * - https://youtu.be/1iaHxmfZGGc (Understanding VSYNC)
         | 
| 43 | 
            -
             *  | 
| 44 | 
            -
             *  | 
| 45 | 
            -
             * | 
| 46 | 
            -
             * - Fireperf Source Code
         | 
| 27 | 
            +
             * Utility class to capture Screen rendering information (Slow/Frozen frames) for the {@code
         | 
| 28 | 
            +
             * Activity} passed to the constructor {@link
         | 
| 29 | 
            +
             * io.invertase.firebase.perf.ScreenTrace#ScreenTrace(Activity, String)}.
         | 
| 30 | 
            +
             *
         | 
| 31 | 
            +
             * <p>Learn more at https://firebase.google.com/docs/perf-mon/screen-traces?platform=android.
         | 
| 32 | 
            +
             *
         | 
| 33 | 
            +
             * <p>A slow screen rendering often leads to a UI Jank which creates a bad user experience. Below
         | 
| 34 | 
            +
             * are some tips and references to understand and fix common UI Jank issues: -
         | 
| 35 | 
            +
             * https://developer.android.com/topic/performance/vitals/render.html#fixing_jank -
         | 
| 36 | 
            +
             * https://youtu.be/CaMTIgxCSqU (Why 60fps?) - https://youtu.be/HXQhu6qfTVU (Rendering Performance)
         | 
| 37 | 
            +
             * - https://youtu.be/1iaHxmfZGGc (Understanding VSYNC) -
         | 
| 38 | 
            +
             * https://www.youtube.com/playlist?list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu (Android Performance
         | 
| 39 | 
            +
             * Patterns)
         | 
| 40 | 
            +
             *
         | 
| 41 | 
            +
             * <p>References: - Fireperf Source Code
         | 
| 47 42 | 
             
             */
         | 
| 48 43 | 
             
            public class ScreenTrace {
         | 
| 49 44 |  | 
| 50 45 | 
             
              private static final String TAG = "RNFirebasePerf";
         | 
| 51 46 | 
             
              private static final String FRAME_METRICS_AGGREGATOR_CLASSNAME =
         | 
| 52 | 
            -
             | 
| 47 | 
            +
                  "androidx.core.app.FrameMetricsAggregator";
         | 
| 53 48 |  | 
| 54 49 | 
             
              private final Activity activity;
         | 
| 55 50 | 
             
              private final String traceName;
         | 
| @@ -61,8 +56,8 @@ public class ScreenTrace { | |
| 61 56 | 
             
               * Default constructor for this class.
         | 
| 62 57 | 
             
               *
         | 
| 63 58 | 
             
               * @param activity for which the screen traces should be recorded.
         | 
| 64 | 
            -
               * @param tag | 
| 65 | 
            -
               * | 
| 59 | 
            +
               * @param tag used as an identifier for the name to be used to log screen rendering information
         | 
| 60 | 
            +
               *     (like "MyFancyScreen").
         | 
| 66 61 | 
             
               * @implNote It requires hardware acceleration to be on or it throws.
         | 
| 67 62 | 
             
               */
         | 
| 68 63 | 
             
              public ScreenTrace(Activity activity, String tag) throws IllegalStateException {
         | 
| @@ -75,7 +70,9 @@ public class ScreenTrace { | |
| 75 70 | 
             
                boolean isScreenTraceSupported = checkScreenTraceSupport(activity);
         | 
| 76 71 |  | 
| 77 72 | 
             
                if (!isScreenTraceSupported) {
         | 
| 78 | 
            -
                  throw new IllegalStateException( | 
| 73 | 
            +
                  throw new IllegalStateException(
         | 
| 74 | 
            +
                      "Device does not support screen traces. Hardware acceleration must be enabled and Android"
         | 
| 75 | 
            +
                          + " must not be 8.0 or 8.1.");
         | 
| 79 76 | 
             
                }
         | 
| 80 77 |  | 
| 81 78 | 
             
                frameMetricsAggregator = new FrameMetricsAggregator();
         | 
| @@ -83,9 +80,7 @@ public class ScreenTrace { | |
| 83 80 |  | 
| 84 81 | 
             
              // region Public APIs
         | 
| 85 82 |  | 
| 86 | 
            -
              /**
         | 
| 87 | 
            -
               * Starts recording the frame metrics for the screen traces.
         | 
| 88 | 
            -
               */
         | 
| 83 | 
            +
              /** Starts recording the frame metrics for the screen traces. */
         | 
| 89 84 | 
             
              public void recordScreenTrace() {
         | 
| 90 85 | 
             
                Log.d(TAG, "Recording screen trace " + traceName);
         | 
| 91 86 |  | 
| @@ -97,7 +92,7 @@ public class ScreenTrace { | |
| 97 92 | 
             
               * Stops recording screen traces and dispatches the trace capturing information on %age of
         | 
| 98 93 | 
             
               * Slow/Frozen frames.
         | 
| 99 94 | 
             
               *
         | 
| 100 | 
            -
               * Inspired by fireperf source.
         | 
| 95 | 
            +
               * <p>Inspired by fireperf source.
         | 
| 101 96 | 
             
               */
         | 
| 102 97 | 
             
              public void sendScreenTrace() {
         | 
| 103 98 | 
             
                if (perfScreenTrace == null) return;
         | 
| @@ -143,12 +138,20 @@ public class ScreenTrace { | |
| 143 138 | 
             
                  perfScreenTrace.putMetric(Constants.CounterNames.FRAMES_FROZEN.toString(), frozenFrames);
         | 
| 144 139 | 
             
                }
         | 
| 145 140 |  | 
| 146 | 
            -
                Log.d( | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 141 | 
            +
                Log.d(
         | 
| 142 | 
            +
                    TAG,
         | 
| 143 | 
            +
                    new StringBuilder()
         | 
| 144 | 
            +
                        .append("sendScreenTrace ")
         | 
| 145 | 
            +
                        .append(traceName)
         | 
| 146 | 
            +
                        .append(", name: ")
         | 
| 147 | 
            +
                        .append(getScreenTraceName())
         | 
| 148 | 
            +
                        .append(", total_frames: ")
         | 
| 149 | 
            +
                        .append(totalFrames)
         | 
| 150 | 
            +
                        .append(", slow_frames: ")
         | 
| 151 | 
            +
                        .append(slowFrames)
         | 
| 152 | 
            +
                        .append(", frozen_frames: ")
         | 
| 153 | 
            +
                        .append(frozenFrames)
         | 
| 154 | 
            +
                        .toString());
         | 
| 152 155 |  | 
| 153 156 | 
             
                // Stop and record trace
         | 
| 154 157 | 
             
                perfScreenTrace.stop();
         | 
| @@ -161,17 +164,30 @@ public class ScreenTrace { | |
| 161 164 | 
             
              private static boolean checkScreenTraceSupport(Activity activity) {
         | 
| 162 165 | 
             
                boolean isValidSDKVersion = checkSDKVersion();
         | 
| 163 166 | 
             
                boolean hasFrameMetricsAggregatorClass = checkFrameMetricsAggregatorClass();
         | 
| 164 | 
            -
                boolean isActivityHardwareAccelerated = | 
| 165 | 
            -
             | 
| 166 | 
            -
             | 
| 167 | 
            -
             | 
| 168 | 
            -
             | 
| 169 | 
            -
             | 
| 170 | 
            -
                 | 
| 171 | 
            -
             | 
| 172 | 
            -
             | 
| 173 | 
            -
             | 
| 174 | 
            -
             | 
| 167 | 
            +
                boolean isActivityHardwareAccelerated =
         | 
| 168 | 
            +
                    activity.getWindow() != null
         | 
| 169 | 
            +
                        && ((activity.getWindow().getAttributes().flags
         | 
| 170 | 
            +
                                & WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED)
         | 
| 171 | 
            +
                            != 0);
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                boolean supported =
         | 
| 174 | 
            +
                    isValidSDKVersion && hasFrameMetricsAggregatorClass && isActivityHardwareAccelerated;
         | 
| 175 | 
            +
             | 
| 176 | 
            +
                Log.d(
         | 
| 177 | 
            +
                    TAG,
         | 
| 178 | 
            +
                    new StringBuilder()
         | 
| 179 | 
            +
                        .append("isValidSDKVersion: ")
         | 
| 180 | 
            +
                        .append(isValidSDKVersion)
         | 
| 181 | 
            +
                        .append("isScreenTraceSupported(")
         | 
| 182 | 
            +
                        .append(activity)
         | 
| 183 | 
            +
                        .append("): ")
         | 
| 184 | 
            +
                        .append(supported)
         | 
| 185 | 
            +
                        .append(" [hasFrameMetricsAggregatorClass: ")
         | 
| 186 | 
            +
                        .append(hasFrameMetricsAggregatorClass)
         | 
| 187 | 
            +
                        .append(", isActivityHardwareAccelerated: ")
         | 
| 188 | 
            +
                        .append(isActivityHardwareAccelerated)
         | 
| 189 | 
            +
                        .append("]")
         | 
| 190 | 
            +
                        .toString());
         | 
| 175 191 |  | 
| 176 192 | 
             
                return supported;
         | 
| 177 193 | 
             
              }
         | 
| @@ -184,9 +200,7 @@ public class ScreenTrace { | |
| 184 200 | 
             
                return true;
         | 
| 185 201 | 
             
              }
         | 
| 186 202 |  | 
| 187 | 
            -
              /**
         | 
| 188 | 
            -
               * Inspired by fireperf source.
         | 
| 189 | 
            -
               */
         | 
| 203 | 
            +
              /** Inspired by fireperf source. */
         | 
| 190 204 | 
             
              private static boolean checkFrameMetricsAggregatorClass() {
         | 
| 191 205 | 
             
                try {
         | 
| 192 206 | 
             
                  Class<?> initializerClass = Class.forName(FRAME_METRICS_AGGREGATOR_CLASSNAME);
         | 
| @@ -196,9 +210,7 @@ public class ScreenTrace { | |
| 196 210 | 
             
                }
         | 
| 197 211 | 
             
              }
         | 
| 198 212 |  | 
| 199 | 
            -
              /**
         | 
| 200 | 
            -
               * Inspired by fireperf source.
         | 
| 201 | 
            -
               */
         | 
| 213 | 
            +
              /** Inspired by fireperf source. */
         | 
| 202 214 | 
             
              private String getScreenTraceName() {
         | 
| 203 215 | 
             
                return Constants.SCREEN_TRACE_PREFIX + traceName;
         | 
| 204 216 | 
             
              }
         | 
| @@ -55,6 +55,9 @@ public class UniversalFirebasePerfModule extends UniversalFirebaseModule { | |
| 55 55 | 
             
                constants.put(
         | 
| 56 56 | 
             
                    "isPerformanceCollectionEnabled",
         | 
| 57 57 | 
             
                    FirebasePerformance.getInstance().isPerformanceCollectionEnabled());
         | 
| 58 | 
            +
                    constants.put(
         | 
| 59 | 
            +
                      "isInstrumentationEnabled",
         | 
| 60 | 
            +
                      true);    
         | 
| 58 61 | 
             
                return constants;
         | 
| 59 62 | 
             
              }
         | 
| 60 63 |  | 
| @@ -105,24 +108,24 @@ public class UniversalFirebasePerfModule extends UniversalFirebaseModule { | |
| 105 108 |  | 
| 106 109 | 
             
              Task<Void> startScreenTrace(Activity activity, int id, String identifier) {
         | 
| 107 110 | 
             
                return Tasks.call(
         | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 111 | 
            +
                    () -> {
         | 
| 112 | 
            +
                      ScreenTrace screenTrace = new ScreenTrace(activity, identifier);
         | 
| 113 | 
            +
                      screenTrace.recordScreenTrace();
         | 
| 114 | 
            +
                      screenTraces.put(id, screenTrace);
         | 
| 112 115 |  | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 116 | 
            +
                      return null;
         | 
| 117 | 
            +
                    });
         | 
| 115 118 | 
             
              }
         | 
| 116 119 |  | 
| 117 120 | 
             
              Task<Void> stopScreenTrace(int id) {
         | 
| 118 121 | 
             
                return Tasks.call(
         | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 122 | 
            +
                    () -> {
         | 
| 123 | 
            +
                      ScreenTrace trace = screenTraces.get(id);
         | 
| 124 | 
            +
                      trace.sendScreenTrace();
         | 
| 125 | 
            +
                      screenTraces.remove(id);
         | 
| 123 126 |  | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 127 | 
            +
                      return null;
         | 
| 128 | 
            +
                    });
         | 
| 126 129 | 
             
              }
         | 
| 127 130 |  | 
| 128 131 | 
             
              Task<Void> startHttpMetric(int id, String url, String httpMethod) {
         | 
    
        package/android/src/reactnative/java/io/invertase/firebase/perf/ReactNativeFirebasePerfModule.java
    CHANGED
    
    | @@ -97,29 +97,29 @@ public class ReactNativeFirebasePerfModule extends ReactNativeFirebaseModule { | |
| 97 97 | 
             
                }
         | 
| 98 98 |  | 
| 99 99 | 
             
                module
         | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 100 | 
            +
                    .startScreenTrace(currentActivity, id, identifier)
         | 
| 101 | 
            +
                    .addOnCompleteListener(
         | 
| 102 | 
            +
                        task -> {
         | 
| 103 | 
            +
                          if (task.isSuccessful()) {
         | 
| 104 | 
            +
                            promise.resolve(task.getResult());
         | 
| 105 | 
            +
                          } else {
         | 
| 106 | 
            +
                            rejectPromiseWithExceptionMap(promise, task.getException());
         | 
| 107 | 
            +
                          }
         | 
| 108 | 
            +
                        });
         | 
| 109 109 | 
             
              }
         | 
| 110 110 |  | 
| 111 111 | 
             
              @ReactMethod
         | 
| 112 112 | 
             
              public void stopScreenTrace(int id, Promise promise) {
         | 
| 113 113 | 
             
                module
         | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 114 | 
            +
                    .stopScreenTrace(id)
         | 
| 115 | 
            +
                    .addOnCompleteListener(
         | 
| 116 | 
            +
                        task -> {
         | 
| 117 | 
            +
                          if (task.isSuccessful()) {
         | 
| 118 | 
            +
                            promise.resolve(task.getResult());
         | 
| 119 | 
            +
                          } else {
         | 
| 120 | 
            +
                            rejectPromiseWithExceptionMap(promise, task.getException());
         | 
| 121 | 
            +
                          }
         | 
| 122 | 
            +
                        });
         | 
| 123 123 | 
             
              }
         | 
| 124 124 |  | 
| 125 125 | 
             
              @ReactMethod
         | 
| @@ -58,6 +58,8 @@ RCT_EXPORT_MODULE(); | |
| 58 58 | 
             
              NSMutableDictionary *constants = [NSMutableDictionary new];
         | 
| 59 59 | 
             
              constants[@"isPerformanceCollectionEnabled"] =
         | 
| 60 60 | 
             
                  @([RCTConvert BOOL:@([FIRPerformance sharedInstance].dataCollectionEnabled)]);
         | 
| 61 | 
            +
              constants[@"isInstrumentationEnabled"] =
         | 
| 62 | 
            +
                  @([RCTConvert BOOL:@([FIRPerformance sharedInstance].instrumentationEnabled)]);
         | 
| 61 63 | 
             
              return constants;
         | 
| 62 64 | 
             
            }
         | 
| 63 65 |  | 
| @@ -73,7 +75,6 @@ RCT_EXPORT_METHOD(setPerformanceCollectionEnabled | |
| 73 75 | 
             
                              : (RCTPromiseResolveBlock)resolve rejecter
         | 
| 74 76 | 
             
                              : (RCTPromiseRejectBlock)reject) {
         | 
| 75 77 | 
             
              [FIRPerformance sharedInstance].dataCollectionEnabled = (BOOL)enabled;
         | 
| 76 | 
            -
              [FIRPerformance sharedInstance].instrumentationEnabled = (BOOL)enabled;
         | 
| 77 78 | 
             
              resolve([NSNull null]);
         | 
| 78 79 | 
             
            }
         | 
| 79 80 |  | 
| @@ -203,4 +204,12 @@ RCT_EXPORT_METHOD(stopHttpMetric | |
| 203 204 | 
             
              resolve([NSNull null]);
         | 
| 204 205 | 
             
            }
         | 
| 205 206 |  | 
| 207 | 
            +
            RCT_EXPORT_METHOD(instrumentationEnabled
         | 
| 208 | 
            +
                              : (BOOL)enabled resolver
         | 
| 209 | 
            +
                              : (RCTPromiseResolveBlock)resolve rejecter
         | 
| 210 | 
            +
                              : (RCTPromiseRejectBlock)reject) {
         | 
| 211 | 
            +
              [FIRPerformance sharedInstance].instrumentationEnabled = (BOOL)enabled;
         | 
| 212 | 
            +
              resolve([NSNull null]);
         | 
| 213 | 
            +
            }
         | 
| 214 | 
            +
             | 
| 206 215 | 
             
            @end
         | 
    
        package/lib/index.d.ts
    CHANGED
    
    | @@ -426,7 +426,22 @@ export namespace FirebasePerformanceTypes { | |
| 426 426 | 
             
                 * ```
         | 
| 427 427 | 
             
                 */
         | 
| 428 428 | 
             
                isPerformanceCollectionEnabled: boolean;
         | 
| 429 | 
            -
             | 
| 429 | 
            +
                /**
         | 
| 430 | 
            +
                 * Determines whether to collect 'out of the box' (i.e already setup for Firebase Performance) events.
         | 
| 431 | 
            +
                 * This can be set for iOS. Android will always return "true" as it has to be set at gradle level.
         | 
| 432 | 
            +
                 */
         | 
| 433 | 
            +
                instrumentationEnabled: boolean;
         | 
| 434 | 
            +
                /**
         | 
| 435 | 
            +
                 * Determines whether performance monitoring is enabled or disabled.
         | 
| 436 | 
            +
                 *
         | 
| 437 | 
            +
                 * #### Example
         | 
| 438 | 
            +
                 *
         | 
| 439 | 
            +
                 * ```js
         | 
| 440 | 
            +
                 * const isEnabled = firebase.perf().dataCollectionEnabled;
         | 
| 441 | 
            +
                 * console.log('Performance collection enabled: ', isEnabled);
         | 
| 442 | 
            +
                 * ```
         | 
| 443 | 
            +
                 */
         | 
| 444 | 
            +
                dataCollectionEnabled: boolean;
         | 
| 430 445 | 
             
                /**
         | 
| 431 446 | 
             
                 * Enables or disables performance monitoring.
         | 
| 432 447 | 
             
                 *
         | 
| @@ -436,8 +451,9 @@ export namespace FirebasePerformanceTypes { | |
| 436 451 | 
             
                 * // Disable performance monitoring collection
         | 
| 437 452 | 
             
                 * await firebase.perf().setPerformanceCollectionEnabled(false);
         | 
| 438 453 | 
             
                 * ```
         | 
| 439 | 
            -
                 *
         | 
| 440 | 
            -
                 * @param enabled Should performance monitoring be enabled
         | 
| 454 | 
            +
                 * @deprecated prefer setting `dataCollectionEnabled = boolean`.
         | 
| 455 | 
            +
                 * @param enabled Should performance monitoring be enabled. For iOS only, this also toggles whether instrumentation
         | 
| 456 | 
            +
                 * is enabled. See: https://firebase.google.com/docs/reference/ios/firebaseperformance/api/reference/Classes/FIRPerformance#instrumentationenabled
         | 
| 441 457 | 
             
                 */
         | 
| 442 458 | 
             
                setPerformanceCollectionEnabled(enabled: boolean): Promise<null>;
         | 
| 443 459 |  | 
| @@ -470,7 +486,7 @@ export namespace FirebasePerformanceTypes { | |
| 470 486 |  | 
| 471 487 | 
             
                /**
         | 
| 472 488 | 
             
                 * Creates a ScreenTrace instance with the given identifier.
         | 
| 473 | 
            -
                 * Throws if hardware acceleration is  | 
| 489 | 
            +
                 * Throws if hardware acceleration is disabled or if Android is 9.0 or 9.1.
         | 
| 474 490 | 
             
                 *
         | 
| 475 491 | 
             
                 * #### Example
         | 
| 476 492 | 
             
                 *
         | 
| @@ -489,7 +505,7 @@ export namespace FirebasePerformanceTypes { | |
| 489 505 |  | 
| 490 506 | 
             
                /**
         | 
| 491 507 | 
             
                 * Creates a ScreenTrace instance with the given identifier and immediately starts it.
         | 
| 492 | 
            -
                 * Throws if hardware acceleration is  | 
| 508 | 
            +
                 * Throws if hardware acceleration is disabled or if Android is 9.0 or 9.1.
         | 
| 493 509 | 
             
                 *
         | 
| 494 510 | 
             
                 * #### Example
         | 
| 495 511 | 
             
                 *
         | 
    
        package/lib/index.js
    CHANGED
    
    | @@ -21,11 +21,21 @@ import { | |
| 21 21 | 
             
              FirebaseModule,
         | 
| 22 22 | 
             
              getFirebaseRoot,
         | 
| 23 23 | 
             
            } from '@react-native-firebase/app/lib/internal';
         | 
| 24 | 
            +
            import { Platform } from 'react-native';
         | 
| 24 25 | 
             
            import HttpMetric from './HttpMetric';
         | 
| 25 26 | 
             
            import Trace from './Trace';
         | 
| 26 27 | 
             
            import ScreenTrace from './ScreenTrace';
         | 
| 27 28 | 
             
            import version from './version';
         | 
| 28 29 |  | 
| 30 | 
            +
            export {
         | 
| 31 | 
            +
              getPerformance,
         | 
| 32 | 
            +
              initializePerformance,
         | 
| 33 | 
            +
              trace,
         | 
| 34 | 
            +
              httpMetric,
         | 
| 35 | 
            +
              newScreenTrace,
         | 
| 36 | 
            +
              startScreenTrace,
         | 
| 37 | 
            +
            } from './modular/index';
         | 
| 38 | 
            +
             | 
| 29 39 | 
             
            const statics = {};
         | 
| 30 40 |  | 
| 31 41 | 
             
            const namespace = 'perf';
         | 
| @@ -48,19 +58,55 @@ class FirebasePerfModule extends FirebaseModule { | |
| 48 58 | 
             
              constructor(...args) {
         | 
| 49 59 | 
             
                super(...args);
         | 
| 50 60 | 
             
                this._isPerformanceCollectionEnabled = this.native.isPerformanceCollectionEnabled;
         | 
| 61 | 
            +
                this._instrumentationEnabled = this.native.isInstrumentationEnabled;
         | 
| 51 62 | 
             
              }
         | 
| 52 63 |  | 
| 53 64 | 
             
              get isPerformanceCollectionEnabled() {
         | 
| 54 65 | 
             
                return this._isPerformanceCollectionEnabled;
         | 
| 55 66 | 
             
              }
         | 
| 56 67 |  | 
| 57 | 
            -
               | 
| 68 | 
            +
              get instrumentationEnabled() {
         | 
| 69 | 
            +
                return this._instrumentationEnabled;
         | 
| 70 | 
            +
              }
         | 
| 71 | 
            +
             | 
| 72 | 
            +
              set instrumentationEnabled(enabled) {
         | 
| 73 | 
            +
                if (!isBoolean(enabled)) {
         | 
| 74 | 
            +
                  throw new Error("firebase.perf().instrumentationEnabled = 'enabled' must be a boolean.");
         | 
| 75 | 
            +
                }
         | 
| 76 | 
            +
                if (Platform.OS == 'ios') {
         | 
| 77 | 
            +
                  // We don't change for android as it cannot be set from code, it is set at gradle build time.
         | 
| 78 | 
            +
                  this._instrumentationEnabled = enabled;
         | 
| 79 | 
            +
                  // No need to await, as it only takes effect on the next app run.
         | 
| 80 | 
            +
                  this.native.instrumentationEnabled(enabled);
         | 
| 81 | 
            +
                }
         | 
| 82 | 
            +
              }
         | 
| 83 | 
            +
             | 
| 84 | 
            +
              get dataCollectionEnabled() {
         | 
| 85 | 
            +
                return this._isPerformanceCollectionEnabled;
         | 
| 86 | 
            +
              }
         | 
| 87 | 
            +
             | 
| 88 | 
            +
              set dataCollectionEnabled(enabled) {
         | 
| 89 | 
            +
                if (!isBoolean(enabled)) {
         | 
| 90 | 
            +
                  throw new Error("firebase.perf().dataCollectionEnabled = 'enabled' must be a boolean.");
         | 
| 91 | 
            +
                }
         | 
| 92 | 
            +
                this._isPerformanceCollectionEnabled = enabled;
         | 
| 93 | 
            +
                this.native.setPerformanceCollectionEnabled(enabled);
         | 
| 94 | 
            +
              }
         | 
| 95 | 
            +
             | 
| 96 | 
            +
              async setPerformanceCollectionEnabled(enabled) {
         | 
| 58 97 | 
             
                if (!isBoolean(enabled)) {
         | 
| 59 98 | 
             
                  throw new Error(
         | 
| 60 99 | 
             
                    "firebase.perf().setPerformanceCollectionEnabled(*) 'enabled' must be a boolean.",
         | 
| 61 100 | 
             
                  );
         | 
| 62 101 | 
             
                }
         | 
| 63 102 |  | 
| 103 | 
            +
                if (Platform.OS == 'ios') {
         | 
| 104 | 
            +
                  // '_instrumentationEnabled' is updated here as well to maintain backward compatibility. See:
         | 
| 105 | 
            +
                  // https://github.com/invertase/react-native-firebase/commit/b705622e64d6ebf4ee026d50841e2404cf692f85
         | 
| 106 | 
            +
                  this._instrumentationEnabled = enabled;
         | 
| 107 | 
            +
                  await this.native.instrumentationEnabled(enabled);
         | 
| 108 | 
            +
                }
         | 
| 109 | 
            +
             | 
| 64 110 | 
             
                this._isPerformanceCollectionEnabled = enabled;
         | 
| 65 111 | 
             
                return this.native.setPerformanceCollectionEnabled(enabled);
         | 
| 66 112 | 
             
              }
         | 
| @@ -0,0 +1,89 @@ | |
| 1 | 
            +
            /*
         | 
| 2 | 
            +
             * Copyright (c) 2016-present Invertase Limited & Contributors
         | 
| 3 | 
            +
             *
         | 
| 4 | 
            +
             * Licensed under the Apache License, Version 2.0 (the "License");
         | 
| 5 | 
            +
             * you may not use this library except in compliance with the License.
         | 
| 6 | 
            +
             * You may obtain a copy of the License at
         | 
| 7 | 
            +
             *
         | 
| 8 | 
            +
             *   http://www.apache.org/licenses/LICENSE-2.0
         | 
| 9 | 
            +
             *
         | 
| 10 | 
            +
             * Unless required by applicable law or agreed to in writing, software
         | 
| 11 | 
            +
             * distributed under the License is distributed on an "AS IS" BASIS,
         | 
| 12 | 
            +
             * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
         | 
| 13 | 
            +
             * See the License for the specific language governing permissions and
         | 
| 14 | 
            +
             * limitations under the License.
         | 
| 15 | 
            +
             *
         | 
| 16 | 
            +
             */
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            import { isBoolean } from '@react-native-firebase/app/lib/common';
         | 
| 19 | 
            +
            import { firebase } from '..';
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            /**
         | 
| 22 | 
            +
             * Returns a Performance instance for the given app.
         | 
| 23 | 
            +
             * @param app - FirebaseApp. Optional.
         | 
| 24 | 
            +
             * @returns {Performance}
         | 
| 25 | 
            +
             */
         | 
| 26 | 
            +
            export function getPerformance(app) {
         | 
| 27 | 
            +
              if (app) {
         | 
| 28 | 
            +
                return firebase.app(app.name).perf();
         | 
| 29 | 
            +
              }
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              return firebase.app().perf();
         | 
| 32 | 
            +
            }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            /**
         | 
| 35 | 
            +
             * Returns a Performance instance for the given app.
         | 
| 36 | 
            +
             * @param app - FirebaseApp. Required.
         | 
| 37 | 
            +
             * @param settings - PerformanceSettings. Set "dataCollectionEnabled" which will enable/disable Performance collection.
         | 
| 38 | 
            +
             * @returns {Performance}
         | 
| 39 | 
            +
             */
         | 
| 40 | 
            +
            export async function initializePerformance(app, settings) {
         | 
| 41 | 
            +
              const perf = firebase.app(app.name).perf();
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              if (settings && isBoolean(settings.dataCollectionEnabled)) {
         | 
| 44 | 
            +
                await perf.setPerformanceCollectionEnabled(settings.dataCollectionEnabled);
         | 
| 45 | 
            +
              }
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              return perf;
         | 
| 48 | 
            +
            }
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            /**
         | 
| 51 | 
            +
             * Returns a Trace instance.
         | 
| 52 | 
            +
             * @param perf - Performance instance
         | 
| 53 | 
            +
             * @param identifier - A String to identify the Trace instance
         | 
| 54 | 
            +
             * @returns {Trace}
         | 
| 55 | 
            +
             */
         | 
| 56 | 
            +
            export function trace(perf, identifier) {
         | 
| 57 | 
            +
              return perf.newTrace(identifier);
         | 
| 58 | 
            +
            }
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            /**
         | 
| 61 | 
            +
             * Returns a HttpMetric instance.
         | 
| 62 | 
            +
             * @param perf - Performance instance
         | 
| 63 | 
            +
             * @param identifier - A String to identify the HttpMetric instance
         | 
| 64 | 
            +
             * @returns {HttpMetric}
         | 
| 65 | 
            +
             */
         | 
| 66 | 
            +
            export function httpMetric(perf, identifier, httpMethod) {
         | 
| 67 | 
            +
              return perf.newHttpMetric(identifier, httpMethod);
         | 
| 68 | 
            +
            }
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            /**
         | 
| 71 | 
            +
             * Creates a ScreenTrace instance with the given identifier.
         | 
| 72 | 
            +
             * Throws if hardware acceleration is disabled or if Android is 9.0 or 9.1.
         | 
| 73 | 
            +
             * @platform android Android !== 9.0.0 && Android !== 9.1.0
         | 
| 74 | 
            +
             * @param perf - Performance instance
         | 
| 75 | 
            +
             * @param identifier Name of the trace, no leading or trailing whitespace allowed, no leading underscore '_' character allowed, max length is 100.
         | 
| 76 | 
            +
             */
         | 
| 77 | 
            +
            export function newScreenTrace(perf, identifier) {
         | 
| 78 | 
            +
              return perf.newScreenTrace(identifier);
         | 
| 79 | 
            +
            }
         | 
| 80 | 
            +
            /**
         | 
| 81 | 
            +
             * Creates a ScreenTrace instance with the given identifier and immediately starts it.
         | 
| 82 | 
            +
             * Throws if hardware acceleration is disabled or if Android is 9.0 or 9.1.
         | 
| 83 | 
            +
             * @platform android Android !== 9.0.0 && Android !== 9.1.0
         | 
| 84 | 
            +
             * @param perf - Performance instance
         | 
| 85 | 
            +
             * @param identifier Name of the screen
         | 
| 86 | 
            +
             */
         | 
| 87 | 
            +
            export function startScreenTrace(perf, identifier) {
         | 
| 88 | 
            +
              return perf.startScreenTrace(identifier);
         | 
| 89 | 
            +
            }
         | 
    
        package/lib/version.js
    CHANGED
    
    | @@ -1,2 +1,2 @@ | |
| 1 1 | 
             
            // Generated by genversion.
         | 
| 2 | 
            -
            module.exports = ' | 
| 2 | 
            +
            module.exports = '17.1.0';
         | 
    
        package/package.json
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            {
         | 
| 2 2 | 
             
              "name": "@react-native-firebase/perf",
         | 
| 3 | 
            -
              "version": " | 
| 3 | 
            +
              "version": "17.1.0",
         | 
| 4 4 | 
             
              "author": "Invertase <oss@invertase.io> (http://invertase.io)",
         | 
| 5 5 | 
             
              "description": "React Native Firebase - React Native Firebase provides native integration with Performance Monitoring to gain insight into key performance characteristics within your React Native application.",
         | 
| 6 6 | 
             
              "main": "lib/index.js",
         | 
| @@ -29,7 +29,7 @@ | |
| 29 29 | 
             
                "performance monitoring"
         | 
| 30 30 | 
             
              ],
         | 
| 31 31 | 
             
              "peerDependencies": {
         | 
| 32 | 
            -
                "@react-native-firebase/app": " | 
| 32 | 
            +
                "@react-native-firebase/app": "17.1.0"
         | 
| 33 33 | 
             
              },
         | 
| 34 34 | 
             
              "dependencies": {
         | 
| 35 35 | 
             
                "@expo/config-plugins": "^5.0.4"
         | 
| @@ -37,5 +37,5 @@ | |
| 37 37 | 
             
              "publishConfig": {
         | 
| 38 38 | 
             
                "access": "public"
         | 
| 39 39 | 
             
              },
         | 
| 40 | 
            -
              "gitHead": " | 
| 40 | 
            +
              "gitHead": "635d595389bfb224fc530681627fb2180fea6e26"
         | 
| 41 41 | 
             
            }
         |