Skip to content

Commit ccb9f44

Browse files
committed
chore: improve duration display
1 parent 7a0d3c8 commit ccb9f44

6 files changed

Lines changed: 39 additions & 54 deletions

File tree

packages/devtools-vite/src/app/components/data/PluginDetailsLoader.vue

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useRpc } from '#imports'
55
import { useAsyncState } from '@vueuse/core'
66
import { computed } from 'vue'
77
import { settings } from '~~/app/state/settings'
8+
import { formatDuration } from '~/utils/format'
89
910
const props = defineProps<{
1011
session: SessionContext
@@ -37,37 +38,13 @@ const processedModules = computed(() => {
3738
}) ?? []
3839
})
3940
40-
const hookLoadDuration = computed(() => {
41-
const loadMetrics = state.value?.loadMetrics
42-
if (!loadMetrics?.length) {
43-
return
44-
}
45-
return loadMetrics.reduce((arc, item) => arc + item.duration, 0)
46-
})
41+
const hookLoadDuration = computed(() => state.value?.loadMetrics.reduce((arc, item) => arc + item.duration, 0))
4742
48-
const hookTransformDuration = computed(() => {
49-
const transformMetrics = state.value?.transformMetrics
50-
if (!transformMetrics?.length) {
51-
return
52-
}
53-
return transformMetrics.reduce((arc, item) => arc + item.duration, 0)
54-
})
43+
const hookTransformDuration = computed(() => state.value?.transformMetrics.reduce((arc, item) => arc + item.duration, 0))
5544
56-
const hookResolveIdDuration = computed(() => {
57-
const resolveIdMetrics = state.value?.resolveIdMetrics
58-
if (!resolveIdMetrics?.length) {
59-
return
60-
}
61-
return resolveIdMetrics.reduce((arc, item) => arc + item.duration, 0)
62-
})
45+
const hookResolveIdDuration = computed(() => state.value?.resolveIdMetrics.reduce((arc, item) => arc + item.duration, 0))
6346
64-
const totalDuration = computed(() => {
65-
const calls = state.value?.calls
66-
if (!calls?.length) {
67-
return
68-
}
69-
return calls.reduce((arc, item) => arc + item.duration, 0)
70-
})
47+
const totalDuration = computed(() => state.value?.calls?.reduce((arc, item) => arc + item.duration, 0))
7148
</script>
7249

7350
<template>
@@ -86,26 +63,26 @@ const totalDuration = computed(() => {
8663
<div text-xs font-mono flex="~ items-center gap-3" ml2>
8764
<DisplayDuration
8865
:duration="hookResolveIdDuration" flex="~ gap-1 items-center"
89-
:title="`Resolve Id hooks cost: ${hookResolveIdDuration ?? 0}ms`"
66+
:title="`Resolve Id hooks cost: ${formatDuration(hookResolveIdDuration, true)}`"
9067
>
9168
<span i-ph-magnifying-glass-duotone inline-block />
9269
</DisplayDuration>
9370
<DisplayDuration
9471
:duration="hookLoadDuration" flex="~ gap-1 items-center"
95-
:title="`Load hooks cost: ${hookLoadDuration ?? 0}ms`"
72+
:title="`Load hooks cost: ${formatDuration(hookLoadDuration, true)}`"
9673
>
9774
<span i-ph-upload-simple-duotone inline-block />
9875
</DisplayDuration>
9976
<DisplayDuration
10077
:duration="hookTransformDuration" flex="~ gap-1 items-center"
101-
:title="`Transform hooks cost: ${hookTransformDuration ?? 0}ms`"
78+
:title="`Transform hooks cost: ${formatDuration(hookTransformDuration, true)}`"
10279
>
10380
<span i-ph-magic-wand-duotone inline-block />
10481
</DisplayDuration>
10582
<span op40>|</span>
10683
<DisplayDuration
10784
:duration="totalDuration" flex="~ gap-1 items-center"
108-
:title="`Total build cost: ${totalDuration ?? 0}ms`"
85+
:title="`Total build cost: ${formatDuration(totalDuration, true)}`"
10986
>
11087
<span i-ph-clock-duotone inline-block />
11188
</DisplayDuration>

packages/devtools-vite/src/app/components/display/Duration.vue

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script setup lang="ts">
22
import { computed } from 'vue'
3+
import { formatDuration } from '~/utils/format'
34
45
const props = withDefaults(
56
defineProps<{
@@ -42,17 +43,7 @@ function getDurationColor(ms: number | undefined) {
4243
return 'color-scale-neutral'
4344
}
4445
45-
const units = computed(() => {
46-
if (ms.value == null)
47-
return ['', '-']
48-
if (ms.value < 1)
49-
return ['<1', 'ms']
50-
if (ms.value < 1000)
51-
return [ms.value.toFixed(0), 'ms']
52-
if (ms.value < 1000 * 60)
53-
return [(ms.value / 1000).toFixed(1), 's']
54-
return [(ms.value / 1000 / 60).toFixed(1), 'min']
55-
})
46+
const units = computed(() => formatDuration(ms.value))
5647
</script>
5748

5849
<template>

packages/devtools-vite/src/app/components/flowmap/NodePluginInfo.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
<script setup lang="ts">
2+
import { formatDuration } from '~/utils/format'
3+
24
defineProps<{
35
modules: number
46
calls: number
@@ -22,7 +24,7 @@ defineProps<{
2224
<span op40>|</span>
2325
<DisplayDuration
2426
:duration="duration" flex="~ gap-1 items-center" px1
25-
:title="`Total build cost: ${duration}ms`"
27+
:title="`Total build cost: ${formatDuration(duration, true)}`"
2628
>
2729
<span i-ph-clock-duotone inline-block />
2830
</DisplayDuration>

packages/devtools-vite/src/app/components/flowmap/PluginFlowTimeline.vue

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@ function normalizeMetrics(metrics: PluginBuildInfo[]) {
2323
}
2424
info.duration += metric.duration
2525
})
26-
if (info.duration === 0) {
27-
info.duration = null!
28-
}
2926
return info
3027
}
3128

packages/devtools-vite/src/app/components/modules/BuildMetrics.vue

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script setup lang="ts">
22
import type { ModuleBuildMetrics } from '~~/shared/types'
33
import { computed } from 'vue'
4+
import { formatDuration } from '~/utils/format'
45
56
const props = defineProps<{
67
metrics: ModuleBuildMetrics
@@ -11,15 +12,15 @@ const durations = computed(() => {
1112
const _resolveIds = data?.resolve_ids.reduce((t, node) => {
1213
t += node.duration
1314
return t
14-
}, 0) ?? 0
15+
}, 0)
1516
const _loads = data?.loads?.reduce((t, node) => {
1617
t += node.duration
1718
return t
18-
}, 0) ?? 0
19+
}, 0)
1920
const _transforms = data?.transforms.reduce((t, node) => {
2021
t += node.duration
2122
return t
22-
}, 0) ?? 0
23+
}, 0)
2324
const total = _resolveIds + _loads + _transforms
2425
return {
2526
resolveIds: _resolveIds,
@@ -44,26 +45,26 @@ const transformedCodeSize = computed(() => {
4445
<div text-xs font-mono flex="~ items-center gap-3" ml2>
4546
<DisplayDuration
4647
:duration="durations.resolveIds" flex="~ gap-1 items-center"
47-
:title="`Resolve Id hooks cost: ${durations.resolveIds}ms`"
48+
:title="`Resolve Id hooks cost: ${formatDuration(durations.resolveIds, true)}`"
4849
>
4950
<span i-ph-magnifying-glass-duotone inline-block />
5051
</DisplayDuration>
5152
<DisplayDuration
5253
:duration="durations.loads" flex="~ gap-1 items-center"
53-
:title="`Load hooks cost: ${durations.loads}ms`"
54+
:title="`Load hooks cost: ${formatDuration(durations.loads, true)}`"
5455
>
5556
<span i-ph-upload-simple-duotone inline-block />
5657
</DisplayDuration>
5758
<DisplayDuration
5859
:duration="durations.transforms" flex="~ gap-1 items-center"
59-
:title="`Transform hooks cost: ${durations.transforms}ms`"
60+
:title="`Transform hooks cost: ${formatDuration(durations.transforms, true)}`"
6061
>
6162
<span i-ph-magic-wand-duotone inline-block />
6263
</DisplayDuration>
6364
<span op40>|</span>
6465
<DisplayDuration
6566
:duration="durations.total" flex="~ gap-1 items-center"
66-
:title="`Total build cost: ${durations.total}ms`"
67+
:title="`Total build cost: ${formatDuration(durations.total, true)}`"
6768
>
6869
<span i-ph-clock-duotone inline-block />
6970
</DisplayDuration>

packages/devtools-vite/src/app/utils/format.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,20 @@ export function normalizeTimestamp(timestamp: number) {
7070
fractionalSecondDigits: 3,
7171
})
7272
}
73+
74+
export function formatDuration(ms: number | null | undefined, stringify?: boolean) {
75+
let duration = []
76+
77+
if (ms == null)
78+
duration = ['', '-']
79+
else if (ms < 1)
80+
duration = ['<1', 'ms']
81+
else if (ms < 1000)
82+
duration = [ms.toFixed(0), 'ms']
83+
else if (ms < 1000 * 60)
84+
duration = [(ms / 1000).toFixed(1), 's']
85+
else
86+
duration = [(ms / 1000 / 60).toFixed(1), 'min']
87+
88+
return stringify ? duration.join(' ') : duration
89+
}

0 commit comments

Comments
 (0)