diff --git a/packages/trace-viewer/src/ui/callTab.tsx b/packages/trace-viewer/src/ui/callTab.tsx
index fcbf9b6307..137c4d22d9 100644
--- a/packages/trace-viewer/src/ui/callTab.tsx
+++ b/packages/trace-viewer/src/ui/callTab.tsx
@@ -37,11 +37,12 @@ export const CallTab: React.FunctionComponent<{
if (!action)
return ;
+ // Calculate execution time relative to the test runner's start time
const startTimeMillis = action.startTime - executionStartTime;
const startTime = msToString(startTimeMillis);
const wallTimeMillis = startTimeMillis + executionStartWallTime;
- const wallTime = new Date(wallTimeMillis).toLocaleString();
+ const wallTime = new Date(wallTimeMillis).toLocaleString(undefined, { timeZoneName: 'short' });
const duration = action.endTime ? msToString(action.endTime - action.startTime) : 'Timed Out';
diff --git a/packages/trace-viewer/src/ui/metadataView.tsx b/packages/trace-viewer/src/ui/metadataView.tsx
index c1802a4b4d..88c2e2bf93 100644
--- a/packages/trace-viewer/src/ui/metadataView.tsx
+++ b/packages/trace-viewer/src/ui/metadataView.tsx
@@ -25,9 +25,11 @@ export const MetadataView: React.FunctionComponent<{
if (!model)
return <>>;
+ const wallTime = model.wallTime !== undefined ? new Date(model.wallTime).toLocaleString(undefined, { timeZoneName: 'short' }) : undefined;
+
return
Time
- {!!model.wallTime &&
start time:{new Date(model.wallTime).toLocaleString()}
}
+ {!!wallTime &&
start time:{wallTime}
}
duration:{msToString(model.endTime - model.startTime)}
Browser
engine:{model.browserName}
diff --git a/packages/trace-viewer/src/ui/networkResourceDetails.tsx b/packages/trace-viewer/src/ui/networkResourceDetails.tsx
index 9805d42c6f..e3e3a80538 100644
--- a/packages/trace-viewer/src/ui/networkResourceDetails.tsx
+++ b/packages/trace-viewer/src/ui/networkResourceDetails.tsx
@@ -24,12 +24,14 @@ import { generateCurlCommand, generateFetchCall } from '../third_party/devtools'
import { CopyToClipboardTextButton } from './copyToClipboard';
import { getAPIRequestCodeGen } from './codegen';
import type { Language } from '@isomorphic/locatorGenerators';
+import { msToString } from '@web/uiUtils';
export const NetworkResourceDetails: React.FunctionComponent<{
resource: ResourceSnapshot;
- onClose: () => void;
sdkLanguage: Language;
-}> = ({ resource, onClose, sdkLanguage }) => {
+ startTimeOffset: number;
+ onClose: () => void;
+}> = ({ resource, sdkLanguage, startTimeOffset, onClose }) => {
const [selectedTab, setSelectedTab] = React.useState('request');
return
,
+ render: () => ,
},
{
id: 'response',
@@ -59,9 +61,12 @@ export const NetworkResourceDetails: React.FunctionComponent<{
const RequestTab: React.FunctionComponent<{
resource: ResourceSnapshot;
sdkLanguage: Language;
-}> = ({ resource, sdkLanguage }) => {
+ startTimeOffset: number;
+}> = ({ resource, sdkLanguage, startTimeOffset }) => {
const [requestBody, setRequestBody] = React.useState<{ text: string, mimeType?: string } | null>(null);
+ const wallTimeString = React.useMemo(() => resource.startedDateTime.length > 0 ? new Date(resource.startedDateTime).toLocaleString(undefined, { timeZoneName: 'short' }) : '-', [resource.startedDateTime]);
+
React.useEffect(() => {
const readResources = async () => {
if (resource.request.postData) {
@@ -94,6 +99,10 @@ const RequestTab: React.FunctionComponent<{
{resource.request.queryString.map(param => `${param.name}: ${param.value}`).join('\n')}
> : null}
+ Time
+ {`Wall Time: ${wallTimeString}`}
+ {`Start: ${msToString(startTimeOffset)}`}
+ {`Duration: ${msToString(resource.time)}`}
Request Headers
{resource.request.headers.map(pair => `${pair.name}: ${pair.value}`).join('\n')}
diff --git a/packages/trace-viewer/src/ui/networkTab.tsx b/packages/trace-viewer/src/ui/networkTab.tsx
index 56cf9325b4..ceaafdcec5 100644
--- a/packages/trace-viewer/src/ui/networkTab.tsx
+++ b/packages/trace-viewer/src/ui/networkTab.tsx
@@ -117,7 +117,7 @@ export const NetworkTab: React.FunctionComponent<{
sidebarIsFirst={true}
orientation='horizontal'
settingName='networkResourceDetails'
- main={ setSelectedEntry(undefined)} sdkLanguage={sdkLanguage} />}
+ main={ setSelectedEntry(undefined)} />}
sidebar={grid}
/>}
>;