|
|
|
|
@ -365,6 +365,12 @@ static void CreateControls(struct etcpmon_app* app) {
|
|
|
|
|
WS_CHILD | WS_VISIBLE | ES_READONLY, |
|
|
|
|
mx + 85, my, 100, 20, hWnd, (HMENU)IDC_EDIT_ETCP_LINKS, hInst, NULL); |
|
|
|
|
|
|
|
|
|
CreateWindowExA(0, "STATIC", "MaxInfl:", |
|
|
|
|
WS_CHILD | WS_VISIBLE, mx + 200, my, 80, 20, hWnd, (HMENU)IDC_STATIC, hInst, NULL); |
|
|
|
|
app->hEditEtcpMaxInflight = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", |
|
|
|
|
WS_CHILD | WS_VISIBLE | ES_READONLY, |
|
|
|
|
mx + 285, my, 100, 20, hWnd, (HMENU)IDC_EDIT_ETCP_MAX_INFLIGHT, hInst, NULL); |
|
|
|
|
|
|
|
|
|
/* TUN/Routing Metrics group - right of ETCP Metrics */ |
|
|
|
|
int group_w = (WINDOW_WIDTH - 40) / 2; |
|
|
|
|
x = 10 + group_w + 20; y = 485; |
|
|
|
|
@ -834,6 +840,8 @@ static void CreateTooltips(struct etcpmon_app* app)
|
|
|
|
|
"etcp.unacked_bytes / ETCP Connection\r\nBytes in flight: sent but not yet acknowledged"); |
|
|
|
|
AddTooltip(app->hToolTip, app->hEditEtcpLinks, |
|
|
|
|
"etcp.links_count / ETCP Connection\r\nNumber of active links (physical connections)"); |
|
|
|
|
AddTooltip(app->hToolTip, app->hEditEtcpMaxInflight, |
|
|
|
|
"etcp.optimal_inflight / ETCP Max Inflight\r\nSum of all link inflight_lim_bytes (congestion window cap)"); |
|
|
|
|
|
|
|
|
|
/* TUN Metrics */ |
|
|
|
|
AddTooltip(app->hToolTip, app->hEditTunReadBytes, |
|
|
|
|
@ -1435,6 +1443,7 @@ void etcpmon_gui_update_metrics(struct etcpmon_app* app,
|
|
|
|
|
UpdateEditIfChanged(hMain, IDC_EDIT_ETCP_TX_DUP, "%u", metrics->etcp.tx_dup_count); |
|
|
|
|
UpdateEditIfChanged(hMain, IDC_EDIT_ETCP_ACKS, "%u", metrics->etcp.ack_count); |
|
|
|
|
UpdateEditIfChanged(hMain, IDC_EDIT_ETCP_INFLIGHT, "%u bytes", metrics->etcp.unacked_bytes); |
|
|
|
|
UpdateEditIfChanged(hMain, IDC_EDIT_ETCP_MAX_INFLIGHT, "%u bytes", metrics->etcp.optimal_inflight); |
|
|
|
|
UpdateEditIfChanged(hMain, IDC_EDIT_ETCP_LINKS, "%u", metrics->etcp.links_count); |
|
|
|
|
/* TUN Metrics */ |
|
|
|
|
UpdateEditIfChanged(hMain, IDC_EDIT_TUN_READ_BYTES, "%llu", (unsigned long long)metrics->tun.bytes_read); |
|
|
|
|
@ -1559,26 +1568,29 @@ void etcpmon_gui_update_metrics(struct etcpmon_app* app,
|
|
|
|
|
links[i].inflight_packets); |
|
|
|
|
|
|
|
|
|
char line3[320]; |
|
|
|
|
char line4[256]; |
|
|
|
|
const char* mode_names[] = {"STARTUP","DRAIN","PROBE_BW","PROBE_RTT"}; |
|
|
|
|
const char* cycle_names[] = {"UP","DOWN","CRUISE","REFILL"}; |
|
|
|
|
snprintf(line3, sizeof(line3), |
|
|
|
|
" BBR: mode=%s cycle=%s full_bw=%s loss=%s pace=%.1f KB/s rtt=%u us " |
|
|
|
|
"bwHi=%.1f KB/s bwLo=%.1f KB/s infHi=%u lo=%u gain=%.2f", |
|
|
|
|
" BBR: mode=%s cycle=%s full_bw=%s loss=%s pace=%.1f KB/s rtt=%u us gain=%.2f", |
|
|
|
|
mode_names[links[i].bbr_mode > 3 ? 0 : links[i].bbr_mode], |
|
|
|
|
cycle_names[links[i].bbr_cycle_idx > 3 ? 0 : links[i].bbr_cycle_idx], |
|
|
|
|
links[i].bbr_full_bw_reached ? "yes" : "no", |
|
|
|
|
links[i].bbr_loss_in_round ? "yes" : "no", |
|
|
|
|
(float)links[i].bbr_pacing_rate / 125.0f, |
|
|
|
|
links[i].bbr_min_rtt_us, |
|
|
|
|
(float)links[i].bbr_pacing_gain / 256.0f); |
|
|
|
|
snprintf(line4, sizeof(line4), |
|
|
|
|
" bwHi=%.1f KB/s bwLo=%.1f KB/s infHi=%u infLo=%u", |
|
|
|
|
(float)links[i].bbr_bw_hi / 125.0f, |
|
|
|
|
(float)links[i].bbr_bw_lo / 125.0f, |
|
|
|
|
links[i].bbr_inflight_hi, |
|
|
|
|
links[i].bbr_inflight_lo, |
|
|
|
|
(float)links[i].bbr_pacing_gain / 256.0f); |
|
|
|
|
links[i].bbr_inflight_lo); |
|
|
|
|
|
|
|
|
|
SendMessageA(app->hListLinks, LB_ADDSTRING, 0, (LPARAM)line1); |
|
|
|
|
SendMessageA(app->hListLinks, LB_ADDSTRING, 0, (LPARAM)line2); |
|
|
|
|
SendMessageA(app->hListLinks, LB_ADDSTRING, 0, (LPARAM)line3); |
|
|
|
|
SendMessageA(app->hListLinks, LB_ADDSTRING, 0, (LPARAM)line4); |
|
|
|
|
} |
|
|
|
|
InvalidateRect(app->hListLinks, NULL, FALSE); |
|
|
|
|
} |
|
|
|
|
@ -1604,6 +1616,7 @@ void etcpmon_gui_clear_metrics(struct etcpmon_app* app) {
|
|
|
|
|
SetDlgItemTextA(app->hWndMain, IDC_EDIT_ETCP_ACKS, ""); |
|
|
|
|
SetDlgItemTextA(app->hWndMain, IDC_EDIT_ETCP_INFLIGHT, ""); |
|
|
|
|
SetDlgItemTextA(app->hWndMain, IDC_EDIT_ETCP_LINKS, ""); |
|
|
|
|
SetDlgItemTextA(app->hWndMain, IDC_EDIT_ETCP_MAX_INFLIGHT, ""); |
|
|
|
|
|
|
|
|
|
SetDlgItemTextA(app->hWndMain, IDC_EDIT_TUN_READ_BYTES, ""); |
|
|
|
|
SetDlgItemTextA(app->hWndMain, IDC_EDIT_TUN_WRITE_BYTES, ""); |
|
|
|
|
|