1- <script setup lang="ts ">
2- import {ref , onMounted , Ref , computed } from " vue" ;
1+ <script setup lang="tsx ">
2+ import {h , ref , Ref , computed } from " vue" ;
33import {getUrlParams , changeUrl } from " ../../utils/navigation" ;
44import {postMsgpack } from " ../../utils/requests" ;
55import {SELF_PROFILE_DATA_URL } from " ../../urls" ;
@@ -11,6 +11,7 @@ import {
1111 createDownloadLinksData ,
1212 createTableData ,
1313 createArtifactData ,
14+ DeltaData ,
1415} from " ./utils" ;
1516
1617const loading = ref (true );
@@ -54,71 +55,83 @@ const tableData = computed(() => {
5455 aValue = a .timeSeconds ;
5556 bValue = b .timeSeconds ;
5657 // Use percentage change as secondary sort for equal absolute values
57- aSecondary = a .timeDelta .hasData ? Math .abs (a .timeDelta .percentage ) : 0 ;
58- bSecondary = b .timeDelta .hasData ? Math .abs (b .timeDelta .percentage ) : 0 ;
58+ aSecondary =
59+ a .timeDelta !== null ? Math .abs (a .timeDelta .percentage ) : 0 ;
60+ bSecondary =
61+ b .timeDelta !== null ? Math .abs (b .timeDelta .percentage ) : 0 ;
5962 break ;
6063 case " executions" : // Executions
6164 aValue = a .executions ;
6265 bValue = b .executions ;
6366 // Use percentage change as secondary sort for equal absolute values
64- aSecondary = a .executionsDelta .hasData
65- ? Math .abs (a .executionsDelta .percentage )
66- : 0 ;
67- bSecondary = b .executionsDelta .hasData
68- ? Math .abs (b .executionsDelta .percentage )
69- : 0 ;
67+ aSecondary =
68+ a .executionsDelta !== null
69+ ? Math .abs (a .executionsDelta .percentage )
70+ : 0 ;
71+ bSecondary =
72+ b .executionsDelta !== null
73+ ? Math .abs (b .executionsDelta .percentage )
74+ : 0 ;
7075 break ;
7176 case " incrementalLoading" : // Incremental loading (s)
7277 aValue = a .incrementalLoading ;
7378 bValue = b .incrementalLoading ;
7479 // Use percentage change as secondary sort for equal absolute values
75- aSecondary = a .incrementalLoadingDelta .hasData
76- ? Math .abs (a .incrementalLoadingDelta .percentage )
77- : 0 ;
78- bSecondary = b .incrementalLoadingDelta .hasData
79- ? Math .abs (b .incrementalLoadingDelta .percentage )
80- : 0 ;
80+ aSecondary =
81+ a .incrementalLoadingDelta !== null
82+ ? Math .abs (a .incrementalLoadingDelta .percentage )
83+ : 0 ;
84+ bSecondary =
85+ b .incrementalLoadingDelta !== null
86+ ? Math .abs (b .incrementalLoadingDelta .percentage )
87+ : 0 ;
8188 break ;
8289 case " timePercent" : // Time (%)
8390 aValue = a .timePercent .value ;
8491 bValue = b .timePercent .value ;
8592 break ;
8693 case " timeDelta" : // Time delta
87- aValue = a .timeDelta . hasData ? a .timeDelta .value : - Infinity ;
88- bValue = b .timeDelta . hasData ? b .timeDelta .value : - Infinity ;
94+ aValue = a .timeDelta !== null ? a .timeDelta .delta : - Infinity ;
95+ bValue = b .timeDelta !== null ? b .timeDelta .delta : - Infinity ;
8996 // Use percentage as secondary sort for equal delta values
90- aSecondary = a .timeDelta .hasData ? Math .abs (a .timeDelta .percentage ) : 0 ;
91- bSecondary = b .timeDelta .hasData ? Math .abs (b .timeDelta .percentage ) : 0 ;
97+ aSecondary =
98+ a .timeDelta !== null ? Math .abs (a .timeDelta .percentage ) : 0 ;
99+ bSecondary =
100+ b .timeDelta !== null ? Math .abs (b .timeDelta .percentage ) : 0 ;
92101 break ;
93102 case " executionsDelta" : // Executions delta
94- aValue = a .executionsDelta .hasData
95- ? a .executionsDelta .value
96- : - Infinity ;
97- bValue = b .executionsDelta .hasData
98- ? b .executionsDelta .value
99- : - Infinity ;
103+ aValue =
104+ a .executionsDelta !== null ? a .executionsDelta .delta : - Infinity ;
105+ bValue =
106+ b .executionsDelta !== null ? b .executionsDelta .delta : - Infinity ;
100107 // Use percentage as secondary sort for equal delta values
101- aSecondary = a .executionsDelta .hasData
102- ? Math .abs (a .executionsDelta .percentage )
103- : 0 ;
104- bSecondary = b .executionsDelta .hasData
105- ? Math .abs (b .executionsDelta .percentage )
106- : 0 ;
108+ aSecondary =
109+ a .executionsDelta !== null
110+ ? Math .abs (a .executionsDelta .percentage )
111+ : 0 ;
112+ bSecondary =
113+ b .executionsDelta !== null
114+ ? Math .abs (b .executionsDelta .percentage )
115+ : 0 ;
107116 break ;
108117 case " incrementalLoadingDelta" : // Incremental loading delta
109- aValue = a .incrementalLoadingDelta .hasData
110- ? a .incrementalLoadingDelta .value
111- : - Infinity ;
112- bValue = b .incrementalLoadingDelta .hasData
113- ? b .incrementalLoadingDelta .value
114- : - Infinity ;
118+ aValue =
119+ a .incrementalLoadingDelta !== null
120+ ? a .incrementalLoadingDelta .delta
121+ : - Infinity ;
122+ bValue =
123+ b .incrementalLoadingDelta !== null
124+ ? b .incrementalLoadingDelta .delta
125+ : - Infinity ;
115126 // Use percentage as secondary sort for equal delta values
116- aSecondary = a .incrementalLoadingDelta .hasData
117- ? Math .abs (a .incrementalLoadingDelta .percentage )
118- : 0 ;
119- bSecondary = b .incrementalLoadingDelta .hasData
120- ? Math .abs (b .incrementalLoadingDelta .percentage )
121- : 0 ;
127+ aSecondary =
128+ a .incrementalLoadingDelta !== null
129+ ? Math .abs (a .incrementalLoadingDelta .percentage )
130+ : 0 ;
131+ bSecondary =
132+ b .incrementalLoadingDelta !== null
133+ ? Math .abs (b .incrementalLoadingDelta .percentage )
134+ : 0 ;
122135 break ;
123136 default :
124137 aValue = a .label ;
@@ -237,6 +250,46 @@ function getSortAttributes(columnName: string) {
237250onMounted (async () => {
238251 await loadData ();
239252});
253+ function DeltaComponent({delta }: {delta: DeltaData | null }) {
254+ if (delta === null ) {
255+ return <span >-</span >;
256+ }
257+
258+ let {from, percentage, isIntegral} = delta ;
259+ const to = from + delta .delta ;
260+
261+ let classes: string ;
262+ if (percentage > 1 ) {
263+ classes = " positive" ;
264+ } else if (percentage < - 1 ) {
265+ classes = " negative" ;
266+ } else {
267+ classes = " neutral" ;
268+ }
269+ if (Math .abs (delta .delta ) <= 0.05 ) {
270+ classes = " neutral" ;
271+ }
272+ let text: string ;
273+ if (isIntegral ) {
274+ text = delta .delta .toString ();
275+ } else {
276+ text = delta .delta .toFixed (3 );
277+ }
278+ if (percentage != Infinity && percentage != - Infinity ) {
279+ text += ` (${percentage .toFixed (1 )}%) ` .padStart (10 , " " );
280+ } else {
281+ text += ` - ` .padStart (10 , " " );
282+ }
283+
284+ const title = ` ${from .toFixed (3 )} to ${to .toFixed (3 )} ≈ ${delta .delta .toFixed (
285+ 3
286+ )} ` ;
287+ return (
288+ <span class = { classes } title = { title } >
289+ { text }
290+ </span >
291+ );
292+ }
240293 </script >
241294
242295<template >
@@ -438,14 +491,17 @@ onMounted(async () => {
438491 {{ row.timePercent.formatted }}
439492 </td >
440493 <td >{{ row.timeSeconds.toFixed(3) }}</td >
441- <td class =" delta" v-html =" row.timeDelta.formatted" ></td >
494+ <td class =" delta" >
495+ <DeltaComponent :delta =" row.timeDelta" />
496+ </td >
442497 <td >{{ row.executions }}</td >
443- <td class =" delta" v-html =" row.executionsDelta.formatted" ></td >
498+ <td class =" delta" >
499+ <DeltaComponent :delta =" row.executionsDelta" />
500+ </td >
444501 <td class =" incr" >{{ row.incrementalLoading.toFixed(3) }}</td >
445- <td
446- class =" incr delta"
447- v-html =" row.incrementalLoadingDelta.formatted"
448- ></td >
502+ <td class =" incr delta" >
503+ <DeltaComponent :delta =" row.incrementalLoadingDelta" />
504+ </td >
449505 </tr >
450506 </tbody >
451507 </table >
0 commit comments