|
10 | 10 | ESortOrder, |
11 | 11 | } from '../../api/settings.ts'; |
12 | 12 | import { compareByFieldOrder } from '../../api/comparator.ts'; |
13 | | - import { CALLED_ABORTED_TOOLTIP } from '../../api/const.ts'; |
14 | | - import { delayTitle } from '../../api/time.ts'; |
15 | 13 | import Variable from './Variable.svelte'; |
16 | | - import Trace from './Trace.svelte'; |
17 | | - import TraceDomain from './TraceDomain.svelte'; |
18 | 14 | import SortableColumn from './SortableColumn.svelte'; |
19 | | - import TimersClearHistory from './TimersClearHistory.svelte'; |
20 | | - import Dialog from './Dialog.svelte'; |
21 | | - import Alert from './Alert.svelte'; |
22 | | - import FrameSensitiveTime from './FrameSensitiveTime.svelte'; |
23 | | - import TraceBreakpoint from './TraceBreakpoint.svelte'; |
24 | | - import TraceBypass from './TraceBypass.svelte'; |
| 15 | + import TimersSetHistoryMetric from './TimersSetHistoryMetric.svelte'; |
25 | 16 |
|
26 | 17 | let { |
27 | 18 | metrics, |
|
36 | 27 | } = $props(); |
37 | 28 | let sortField = $state(DEFAULT_SORT_SET_TIMERS.field); |
38 | 29 | let sortOrder = $state(DEFAULT_SORT_SET_TIMERS.order); |
39 | | - let dialogEl: Dialog | null = null; |
40 | | - let alertEl: Alert | null = null; |
41 | 30 | let sortedMetrics = $derived.by(() => |
42 | 31 | metrics.sort(compareByFieldOrder(sortField, sortOrder)) |
43 | 32 | ); |
|
58 | 47 | }, |
59 | 48 | }); |
60 | 49 | } |
61 | | -
|
62 | | - let clearTimerHistoryMetrics: TClearTimerHistory[] = $state([]); |
63 | | -
|
64 | | - function onFindRegressors(regressors: string[] | null) { |
65 | | - if (!dialogEl || !alertEl || !regressors?.length) { |
66 | | - return; |
67 | | - } |
68 | | -
|
69 | | - for (let n = regressors.length - 1; n >= 0; n--) { |
70 | | - const traceId = regressors[n]; |
71 | | - let record = clearTimeoutHistory?.find((r) => r.traceId === traceId); |
72 | | -
|
73 | | - if (record) { |
74 | | - clearTimerHistoryMetrics.push(record); |
75 | | - } |
76 | | -
|
77 | | - record = clearIntervalHistory?.find((r) => r.traceId === traceId); |
78 | | - if (record) { |
79 | | - clearTimerHistoryMetrics.push(record); |
80 | | - } |
81 | | - } |
82 | | -
|
83 | | - if (clearTimerHistoryMetrics.length) { |
84 | | - dialogEl.show(); |
85 | | - } else { |
86 | | - alertEl.show(); |
87 | | - } |
88 | | - } |
89 | | -
|
90 | | - function onCloseDialog() { |
91 | | - clearTimerHistoryMetrics.splice(0); |
92 | | - } |
93 | 50 | </script> |
94 | 51 |
|
95 | | -<Dialog |
96 | | - bind:this={dialogEl} |
97 | | - eventClose={onCloseDialog} |
98 | | - title="Places from which timer with current callstack was prematurely canceled" |
99 | | - description="The information is actual only on time of demand. For full coverage - requires both clearTimeout and clearInterval panels enabled." |
100 | | -> |
101 | | - <TimersClearHistory |
102 | | - caption="Canceled by" |
103 | | - metrics={$state.snapshot(clearTimerHistoryMetrics)} |
104 | | - /> |
105 | | -</Dialog> |
106 | | - |
107 | | -<Alert bind:this={alertEl} title="Attention"> |
108 | | - Requires both clearTimeout and clearInterval panels enabled |
109 | | -</Alert> |
110 | | - |
111 | 52 | <table data-navigation-tag={caption}> |
112 | 53 | <caption class="bc-invert ta-l"> |
113 | 54 | {caption} |
|
161 | 102 | </tr> |
162 | 103 |
|
163 | 104 | {#each sortedMetrics as metric (metric.traceId)} |
164 | | - <tr class="t-zebra"> |
165 | | - <td class="wb-all"> |
166 | | - <TraceDomain traceDomain={metric.traceDomain} /> |
167 | | - <Trace trace={metric.trace} /> |
168 | | - </td> |
169 | | - <td class="ta-r"> |
170 | | - <FrameSensitiveTime value={metric.selfTime} /> |
171 | | - </td> |
172 | | - <td class="ta-c"> |
173 | | - <Variable value={metric.calls} />{#if metric.canceledCounter}-<a |
174 | | - role="button" |
175 | | - href="void(0)" |
176 | | - title={CALLED_ABORTED_TOOLTIP} |
177 | | - onclick={(e) => { |
178 | | - e.preventDefault(); |
179 | | - onFindRegressors(metric.canceledByTraceIds); |
180 | | - }} |
181 | | - ><Variable value={metric.canceledCounter} />/{metric |
182 | | - .canceledByTraceIds?.length} |
183 | | - </a> |
184 | | - {/if} |
185 | | - </td> |
186 | | - <td class="ta-c"><Variable value={metric.handler} /></td> |
187 | | - <td class="ta-r" title={delayTitle(metric.delay)}>{metric.delay}</td> |
188 | | - <td class="ta-r"> |
189 | | - {#if metric.online} |
190 | | - <Variable value={metric.online} /> |
191 | | - {/if} |
192 | | - </td> |
193 | | - <td><TraceBypass traceId={metric.traceId} /></td> |
194 | | - <td><TraceBreakpoint traceId={metric.traceId} /></td> |
195 | | - </tr> |
| 105 | + <TimersSetHistoryMetric |
| 106 | + {metric} |
| 107 | + {clearTimeoutHistory} |
| 108 | + {clearIntervalHistory} |
| 109 | + /> |
196 | 110 | {/each} |
197 | 111 | </tbody> |
198 | 112 | </table> |
0 commit comments