Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,8 @@ jest.mock('../../../../../store/controller-actions/bridge-controller', () => ({

const mockUseDappSwapComparisonLatencyMetricsResponse = {
requestDetectionLatency: '1200',
swapComparisonLatency: '1500',
updateRequestDetectionLatency: jest.fn(),
updateSwapComparisonLatency: jest.fn(),
updateSwapComparisonLatency: jest.fn().mockReturnValue('1500'),
};

jest.mock('./useDappSwapComparisonLatencyMetrics', () => ({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ export function useDappSwapComparisonInfo() {
const { data, gas } = txParams ?? {};
const {
requestDetectionLatency,
swapComparisonLatency,
updateRequestDetectionLatency,
updateSwapComparisonLatency,
} = useDappSwapComparisonLatencyMetrics();
Expand All @@ -75,7 +74,9 @@ export function useDappSwapComparisonInfo() {
transactionData,
txParams?.from as string,
);
updateRequestDetectionLatency();
if (result.quotesInput) {
updateRequestDetectionLatency();
}
return result;
} catch (error) {
captureException(error);
Expand Down Expand Up @@ -162,7 +163,7 @@ export function useDappSwapComparisonInfo() {
return;
}

updateSwapComparisonLatency();
const swapComparisonLatency = updateSwapComparisonLatency();

const { destTokenAddress, srcTokenAmount, srcTokenAddress } = quotesInput;
const {
Expand Down Expand Up @@ -262,7 +263,6 @@ export function useDappSwapComparisonInfo() {
requestDetectionLatency,
updateSwapComparisonLatency,
simulationData,
swapComparisonLatency,
tokenDetails,
tokenInfoPending,
]);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,37 +1,39 @@
import { TransactionMeta } from '@metamask/transaction-controller';
import { useCallback, useState } from 'react';

import { useConfirmContext } from '../../../context/confirm';
import { useCallback, useMemo, useRef } from 'react';

const N_A = 'N/A';

export function useDappSwapComparisonLatencyMetrics() {
const { currentConfirmation } = useConfirmContext<TransactionMeta>();
const [requestDetectionLatency, setRequestDetectionLatency] = useState(N_A);
const [swapComparisonLatency, setSwapComparisonLatency] = useState(N_A);
const uiInitializedTime = useRef<number>();
const requestDetectionLatency = useRef<number>();
const swapComparisonLatency = useRef<number>();

// using useMemo here as it is the first hook to be executed
useMemo(() => {
uiInitializedTime.current = new Date().getTime();
}, []);

const updateRequestDetectionLatency = useCallback(() => {
setRequestDetectionLatency(
(new Date().getTime() - currentConfirmation?.time).toString(),
);
}, [currentConfirmation?.time, setRequestDetectionLatency]);
if (requestDetectionLatency.current !== undefined) {
return;
}
requestDetectionLatency.current =
new Date().getTime() - (uiInitializedTime.current ?? 0);
}, []);

const updateSwapComparisonLatency = useCallback(() => {
if (swapComparisonLatency !== N_A) {
return;
if (swapComparisonLatency.current !== undefined) {
return swapComparisonLatency.current.toString();
}
setSwapComparisonLatency(
(new Date().getTime() - currentConfirmation?.time).toString(),
);
}, [
currentConfirmation?.time,
swapComparisonLatency,
setSwapComparisonLatency,
]);
swapComparisonLatency.current =
new Date().getTime() - (uiInitializedTime.current ?? 0);
return swapComparisonLatency.current.toString();
}, []);

return {
requestDetectionLatency,
swapComparisonLatency,
requestDetectionLatency: (
requestDetectionLatency.current ?? N_A
).toString(),
swapComparisonLatency: (swapComparisonLatency.current ?? N_A).toString(),
updateRequestDetectionLatency,
updateSwapComparisonLatency,
};
Expand Down
Loading