Skip to content

Commit

Permalink
chore: Cherry pick bf5bb97 (#11878)
Browse files Browse the repository at this point in the history
## **Description**

Cherry pick bf5bb97

## **Related issues**

Fixes:

## **Manual testing steps**

1. Go to this page...
2.
3.

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I’ve followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

---------

Co-authored-by: tommasini <46944231+tommasini@users.noreply.github.com>
  • Loading branch information
sethkfman and tommasini authored Oct 18, 2024
1 parent fed44d4 commit 0fc0d42
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 166 deletions.
11 changes: 1 addition & 10 deletions app/components/Nav/App/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@ import OptionsSheet from '../../UI/SelectOptionSheet/OptionsSheet';
import FoxLoader from '../../../components/UI/FoxLoader';
import { AppStateEventProcessor } from '../../../core/AppStateEventListener';
import MultiRpcModal from '../../../components/Views/MultiRpcModal/MultiRpcModal';
import { trace, TraceName, TraceOperation } from '../../../util/trace';

const clearStackNavigatorOptions = {
headerShown: false,
Expand Down Expand Up @@ -355,15 +354,7 @@ const App = (props) => {
setOnboarded(!!existingUser);
try {
if (existingUser) {
await trace(
{
name: TraceName.BiometricAuthentication,
op: TraceOperation.BiometricAuthentication,
},
async () => {
await Authentication.appTriggeredAuth();
},
);
await Authentication.appTriggeredAuth();
// we need to reset the navigator here so that the user cannot go back to the login screen
navigator.reset({ routes: [{ name: Routes.ONBOARDING.HOME_NAV }] });
} else {
Expand Down
18 changes: 4 additions & 14 deletions app/components/Views/LockScreen/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import {
import Routes from '../../../constants/navigation/Routes';
import { CommonActions } from '@react-navigation/native';
import trackErrorAsAnalytics from '../../../util/metrics/TrackError/trackErrorAsAnalytics';
import { trace, TraceName, TraceOperation } from '../../../util/trace';

const LOGO_SIZE = 175;
const createStyles = (colors) =>
Expand Down Expand Up @@ -135,19 +134,10 @@ class LockScreen extends PureComponent {
// Retrieve the credentials
Logger.log('Lockscreen::unlockKeychain - getting credentials');

await trace(
{
name: TraceName.BiometricAuthentication,
op: TraceOperation.BiometricAuthentication,
},
async () => {
await Authentication.appTriggeredAuth({
bioStateMachineId,
disableAutoLogout: true,
});
},
);

await Authentication.appTriggeredAuth({
bioStateMachineId,
disableAutoLogout: true,
});
this.setState({ ready: true });
Logger.log('Lockscreen::unlockKeychain - state: ready');
} catch (error) {
Expand Down
36 changes: 6 additions & 30 deletions app/components/Views/Login/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,6 @@ import { LoginViewSelectors } from '../../../../e2e/selectors/LoginView.selector
import { withMetricsAwareness } from '../../../components/hooks/useMetrics';
import trackErrorAsAnalytics from '../../../util/metrics/TrackError/trackErrorAsAnalytics';
import { downloadStateLogs } from '../../../util/logs';
import {
trace,
endTrace,
TraceName,
TraceOperation,
} from '../../../util/trace';

const deviceHeight = Device.getDeviceHeight();
const breakPoint = deviceHeight < 700;
Expand Down Expand Up @@ -250,10 +244,6 @@ class Login extends PureComponent {
fieldRef = React.createRef();

async componentDidMount() {
trace({
name: TraceName.LoginToPasswordEntry,
op: TraceOperation.LoginToPasswordEntry,
});
this.props.metrics.trackEvent(MetaMetricsEvents.LOGIN_SCREEN_VIEWED);
BackHandler.addEventListener('hardwareBackPress', this.handleBackPress);

Expand Down Expand Up @@ -377,15 +367,7 @@ class Login extends PureComponent {
);

try {
await trace(
{
name: TraceName.AuthenticateUser,
op: TraceOperation.AuthenticateUser,
},
async () => {
await Authentication.userEntryAuth(password, authType);
},
);
await Authentication.userEntryAuth(password, authType);

Keyboard.dismiss();

Expand Down Expand Up @@ -453,15 +435,7 @@ class Login extends PureComponent {
const { current: field } = this.fieldRef;
field?.blur();
try {
await trace(
{
name: TraceName.BiometricAuthentication,
op: TraceOperation.BiometricAuthentication,
},
async () => {
await Authentication.appTriggeredAuth();
},
);
await Authentication.appTriggeredAuth();
const onboardingWizard = await StorageWrapper.getItem(ONBOARDING_WIZARD);
if (!onboardingWizard) this.props.setOnboardingWizardStep(1);
this.props.navigation.replace(Routes.ONBOARDING.HOME_NAV);
Expand All @@ -480,7 +454,6 @@ class Login extends PureComponent {
};

triggerLogIn = () => {
endTrace({ name: TraceName.LoginToPasswordEntry });
this.onLogin();
};

Expand Down Expand Up @@ -563,7 +536,10 @@ class Login extends PureComponent {
)}
</TouchableOpacity>

<Text style={styles.title} testID={LoginViewSelectors.TITLE_ID}>
<Text
style={styles.title}
testID={LoginViewSelectors.TITLE_ID}
>
{strings('login.title')}
</Text>
<View style={styles.field}>
Expand Down
38 changes: 14 additions & 24 deletions app/components/Views/Onboarding/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ import { OnboardingSelectorIDs } from '../../../../e2e/selectors/Onboarding/Onbo
import Routes from '../../../constants/navigation/Routes';
import { selectAccounts } from '../../../selectors/accountTrackerController';
import trackOnboarding from '../../../util/metrics/TrackOnboarding/trackOnboarding';
import { trace, TraceName, TraceOperation } from '../../../util/trace';

const createStyles = (colors) =>
StyleSheet.create({
Expand Down Expand Up @@ -276,33 +275,24 @@ class Onboarding extends PureComponent {
};

onPressCreate = () => {
const action = () => {
trace(
{
name: TraceName.CreateNewWalletToChoosePassword,
op: TraceOperation.CreateNewWalletToChoosePassword,
},
() => {
const { metrics } = this.props;
if (metrics.isEnabled()) {
this.props.navigation.navigate('ChoosePassword', {
const action = async () => {
const { metrics } = this.props;
if (metrics.isEnabled()) {
this.props.navigation.navigate('ChoosePassword', {
[PREVIOUS_SCREEN]: ONBOARDING,
});
this.track(MetaMetricsEvents.WALLET_SETUP_STARTED);
} else {
this.props.navigation.navigate('OptinMetrics', {
onContinue: () => {
this.props.navigation.replace('ChoosePassword', {
[PREVIOUS_SCREEN]: ONBOARDING,
});
this.track(MetaMetricsEvents.WALLET_SETUP_STARTED);
} else {
this.props.navigation.navigate('OptinMetrics', {
onContinue: () => {
this.props.navigation.replace('ChoosePassword', {
[PREVIOUS_SCREEN]: ONBOARDING,
});
this.track(MetaMetricsEvents.WALLET_SETUP_STARTED);
},
});
}
},
);
},
});
}
};

this.handleExistingUser(action);
};

Expand Down
1 change: 0 additions & 1 deletion app/components/Views/Wallet/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ import { ButtonVariants } from '../../../component-library/components/Buttons/Bu
import { useListNotifications } from '../../../util/notifications/hooks/useNotifications';
import { PortfolioBalance } from '../../UI/Tokens/TokenList/PortfolioBalance';
import { isObject } from 'lodash';

const createStyles = ({ colors, typography }: Theme) =>
StyleSheet.create({
base: {
Expand Down
58 changes: 4 additions & 54 deletions app/store/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ import { Authentication } from '../core';
import LockManagerService from '../core/LockManagerService';
import ReadOnlyNetworkStore from '../util/test/network-store';
import { isE2E } from '../util/test/utils';
import { trace, endTrace, TraceName, TraceOperation } from '../util/trace';
import StorageWrapper from './storage-wrapper';

import thunk from 'redux-thunk';

import persistConfig from './persistConfig';
Expand All @@ -27,7 +24,7 @@ const pReducer = persistReducer<RootState, any>(persistConfig, rootReducer);
// TODO: Replace "any" with type
// eslint-disable-next-line @typescript-eslint/no-explicit-any, import/no-mutable-exports
let store: Store<RootState, any>, persistor;
const createStoreAndPersistor = async (appStartTime: number) => {
const createStoreAndPersistor = async () => {
// Obtain the initial state from ReadOnlyNetworkStore for E2E tests.
const initialState = isE2E
? await ReadOnlyNetworkStore.getState()
Expand All @@ -49,24 +46,6 @@ const createStoreAndPersistor = async (appStartTime: number) => {
middlewares.push(createReduxFlipperDebugger());
}

const jsStartTime = performance.now();

trace({
name: TraceName.LoadScripts,
op: TraceOperation.LoadScripts,
startTime: appStartTime,
});

endTrace({
name: TraceName.LoadScripts,
timestamp: appStartTime + jsStartTime,
});

trace({
name: TraceName.CreateStore,
op: TraceOperation.CreateStore,
});

store = configureStore({
reducer: pReducer,
middleware: middlewares,
Expand All @@ -75,19 +54,10 @@ const createStoreAndPersistor = async (appStartTime: number) => {

sagaMiddleware.run(rootSaga);

endTrace({ name: TraceName.CreateStore });

trace({
name: TraceName.StorageRehydration,
op: TraceOperation.StorageRehydration,
});

/**
* Initialize services after persist is completed
*/
const onPersistComplete = async () => {
endTrace({ name: TraceName.StorageRehydration });

const onPersistComplete = () => {
/**
* EngineService.initalizeEngine(store) with SES/lockdown:
* Requires ethjs nested patches (lib->src)
Expand All @@ -103,7 +73,6 @@ const createStoreAndPersistor = async (appStartTime: number) => {
* - TypeError: undefined is not an object (evaluating 'TokenListController.tokenList')
* - V8: SES_UNHANDLED_REJECTION
*/

store.dispatch({
type: 'TOGGLE_BASIC_FUNCTIONALITY',
basicFunctionalityEnabled:
Expand All @@ -114,17 +83,7 @@ const createStoreAndPersistor = async (appStartTime: number) => {
store.dispatch({
type: 'FETCH_FEATURE_FLAGS',
});

await trace(
{
name: TraceName.EngineInitialization,
op: TraceOperation.EngineInitialization,
},
() => {
EngineService.initalizeEngine(store);
},
);

EngineService.initalizeEngine(store);
Authentication.init(store);
AppStateEventProcessor.init(store);
LockManagerService.init(store);
Expand All @@ -134,16 +93,7 @@ const createStoreAndPersistor = async (appStartTime: number) => {
};

(async () => {
const appStartTime = await StorageWrapper.getItem('appStartTime');

await trace(
{
name: TraceName.UIStartup,
op: TraceOperation.UIStartup,
startTime: appStartTime,
},
async () => await createStoreAndPersistor(appStartTime),
);
await createStoreAndPersistor();
})();

export { store, persistor };
35 changes: 2 additions & 33 deletions app/util/trace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,6 @@ export enum TraceName {
NotificationDisplay = 'Notification Display',
PPOMValidation = 'PPOM Validation',
Signature = 'Signature',
LoadScripts = 'Load Scripts',
SetupStore = 'Setup Store',
LoginToPasswordEntry = 'Login to Password Entry',
AuthenticateUser = 'Authenticate User',
BiometricAuthentication = 'Biometrics Authentication',
EngineInitialization = 'Engine Initialization',
CreateStore = 'Create Store',
CreateNewWalletToChoosePassword = 'Create New Wallet to Choose Password',
StorageRehydration = 'Storage Rehydration',
UIStartup = 'Custom UIStartup',
}

export enum TraceOperation {
LoadScripts = 'custom.load.scripts',
SetupStore = 'custom.setup.store',
LoginToPasswordEntry = 'custom.login.to.password.entry',
BiometricAuthentication = 'biometrics.authentication',
AuthenticateUser = 'custom.authenticate.user',
EngineInitialization = 'custom.engine.initialization',
CreateStore = 'custom.create.store',
CreateNewWalletToChoosePassword = 'custom.create.new.wallet',
StorageRehydration = 'custom.storage.rehydration',
UIStartup = 'custom.ui.startup',
}

const ID_DEFAULT = 'default';
Expand All @@ -68,7 +45,6 @@ export interface TraceRequest {
parentContext?: TraceContext;
startTime?: number;
tags?: Record<string, number | string | boolean>;
op?: string;
}

export interface EndTraceRequest {
Expand Down Expand Up @@ -178,20 +154,13 @@ function startSpan<T>(
request: TraceRequest,
callback: (spanOptions: StartSpanOptions) => T,
) {
const {
data: attributes,
name,
parentContext,
startTime,
tags,
op,
} = request;
const { data: attributes, name, parentContext, startTime } = request;
const parentSpan = (parentContext ?? null) as Span | null;

const spanOptions: StartSpanOptions = {
attributes,
name,
op: op || OP_DEFAULT,
op: OP_DEFAULT,
// This needs to be parentSpan once we have the withIsolatedScope implementation in place in the Sentry SDK for React Native
// Reference PR that updates @sentry/react-native: https://github.com/getsentry/sentry-react-native/pull/3895
parentSpanId: parentSpan?.spanId,
Expand Down

0 comments on commit 0fc0d42

Please sign in to comment.