)
+ const up = `${dialer} → ${listener}`
+ const down = `${listener} → ${dialer}`
return (
setHover(null)}>
@@ -123,13 +130,13 @@ export function LineStrips({ lineId, dialer, listener, range, m }: Props) {
悬停看 p95 / p99
{series.error ? 数据未更新 : null}
- {direction('up', `${dialer} → ${listener}`, `去程:${dialer} → ${listener}`, [
- row('up-quic', 2, 'QUIC', '去程丢包', m['loss.up'], lossText(m['loss.up']), lossUp),
- row('up-tcp', 3, 'TCP', '去程重传', m['tcp.retrans.up'], retransText(m['tcp.retrans.up']), retransUp),
+ {group('quic', 'QUIC', (d) => `${d}丢包`, [
+ { route: up, dir: 'up', value: m['loss.up'], text: lossText(m['loss.up']), values: lossUp },
+ { route: down, dir: 'down', value: m['loss.down'], text: lossText(m['loss.down']), values: lossDown },
])}
- {direction('down', `${listener} → ${dialer}`, `回程:${listener} → ${dialer}`, [
- row('down-quic', 2, 'QUIC', '回程丢包', m['loss.down'], lossText(m['loss.down']), lossDown),
- row('down-tcp', 3, 'TCP', '回程重传', m['tcp.retrans.down'], retransText(m['tcp.retrans.down']), retransDown),
+ {group('tcp', 'TCP', (d) => `${d}重传`, [
+ { route: up, dir: 'up', value: m['tcp.retrans.up'], text: retransText(m['tcp.retrans.up']), values: retransUp },
+ { route: down, dir: 'down', value: m['tcp.retrans.down'], text: retransText(m['tcp.retrans.down']), values: retransDown },
])}