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" ;
3
3
import {getUrlParams , changeUrl } from " ../../utils/navigation" ;
4
4
import {postMsgpack } from " ../../utils/requests" ;
5
5
import {SELF_PROFILE_DATA_URL } from " ../../urls" ;
@@ -11,6 +11,7 @@ import {
11
11
createDownloadLinksData ,
12
12
createTableData ,
13
13
createArtifactData ,
14
+ DeltaData ,
14
15
} from " ./utils" ;
15
16
16
17
const loading = ref (true );
@@ -54,71 +55,83 @@ const tableData = computed(() => {
54
55
aValue = a .timeSeconds ;
55
56
bValue = b .timeSeconds ;
56
57
// 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 ;
59
62
break ;
60
63
case " executions" : // Executions
61
64
aValue = a .executions ;
62
65
bValue = b .executions ;
63
66
// 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 ;
70
75
break ;
71
76
case " incrementalLoading" : // Incremental loading (s)
72
77
aValue = a .incrementalLoading ;
73
78
bValue = b .incrementalLoading ;
74
79
// 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 ;
81
88
break ;
82
89
case " timePercent" : // Time (%)
83
90
aValue = a .timePercent .value ;
84
91
bValue = b .timePercent .value ;
85
92
break ;
86
93
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 ;
89
96
// 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 ;
92
101
break ;
93
102
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 ;
100
107
// 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 ;
107
116
break ;
108
117
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 ;
115
126
// 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 ;
122
135
break ;
123
136
default :
124
137
aValue = a .label ;
@@ -237,6 +250,46 @@ function getSortAttributes(columnName: string) {
237
250
onMounted (async () => {
238
251
await loadData ();
239
252
});
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
+ }
240
293
</script >
241
294
242
295
<template >
@@ -438,14 +491,17 @@ onMounted(async () => {
438
491
{{ row.timePercent.formatted }}
439
492
</td >
440
493
<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 >
442
497
<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 >
444
501
<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 >
449
505
</tr >
450
506
</tbody >
451
507
</table >
0 commit comments