mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2025-12-26 22:48:19 +00:00
main_channel: add routine for checking if a network test had been conducted and completed
This commit is contained in:
parent
52943d65e7
commit
dd9f882aed
@ -164,6 +164,7 @@ enum NetTestStage {
|
||||
NET_TEST_STAGE_WARMUP,
|
||||
NET_TEST_STAGE_LATENCY,
|
||||
NET_TEST_STAGE_RATE,
|
||||
NET_TEST_STAGE_COMPLETE,
|
||||
};
|
||||
|
||||
static void main_channel_release_pipe_item(RedChannelClient *rcc,
|
||||
@ -962,6 +963,7 @@ static int main_channel_handle_parsed(RedChannelClient *rcc, uint32_t size, uint
|
||||
if (roundtrip <= mcc->latency) {
|
||||
// probably high load on client or server result with incorrect values
|
||||
mcc->latency = 0;
|
||||
mcc->net_test_stage = NET_TEST_STAGE_INVALID;
|
||||
spice_printerr("net test: invalid values, latency %" PRIu64
|
||||
" roundtrip %" PRIu64 ". assuming high"
|
||||
"bandwidth", mcc->latency, roundtrip);
|
||||
@ -969,18 +971,19 @@ static int main_channel_handle_parsed(RedChannelClient *rcc, uint32_t size, uint
|
||||
}
|
||||
mcc->bitrate_per_sec = (uint64_t)(NET_TEST_BYTES * 8) * 1000000
|
||||
/ (roundtrip - mcc->latency);
|
||||
mcc->net_test_stage = NET_TEST_STAGE_COMPLETE;
|
||||
spice_printerr("net test: latency %f ms, bitrate %"PRIu64" bps (%f Mbps)%s",
|
||||
(double)mcc->latency / 1000,
|
||||
mcc->bitrate_per_sec,
|
||||
(double)mcc->bitrate_per_sec / 1024 / 1024,
|
||||
main_channel_client_is_low_bandwidth(mcc) ? " LOW BANDWIDTH" : "");
|
||||
mcc->net_test_stage = NET_TEST_STAGE_INVALID;
|
||||
break;
|
||||
default:
|
||||
spice_printerr("invalid net test stage, ping id %d test id %d stage %d",
|
||||
ping->id,
|
||||
mcc->net_test_id,
|
||||
mcc->net_test_stage);
|
||||
mcc->net_test_stage = NET_TEST_STAGE_INVALID;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -1139,6 +1142,11 @@ void main_channel_close(MainChannel *main_chan)
|
||||
}
|
||||
}
|
||||
|
||||
int main_channel_client_is_network_info_initialized(MainChannelClient *mcc)
|
||||
{
|
||||
return mcc->net_test_stage == NET_TEST_STAGE_COMPLETE;
|
||||
}
|
||||
|
||||
int main_channel_client_is_low_bandwidth(MainChannelClient *mcc)
|
||||
{
|
||||
// TODO: configurable?
|
||||
|
||||
@ -67,9 +67,15 @@ int main_channel_getsockname(MainChannel *main_chan, struct sockaddr *sa, sockle
|
||||
int main_channel_getpeername(MainChannel *main_chan, struct sockaddr *sa, socklen_t *salen);
|
||||
uint32_t main_channel_client_get_link_id(MainChannelClient *mcc);
|
||||
|
||||
/*
|
||||
* return TRUE if network test had been completed successfully.
|
||||
* If FALSE, bitrate_per_sec is set to MAX_UINT64 and the roundtrip is set to 0
|
||||
*/
|
||||
int main_channel_client_is_network_info_initialized(MainChannelClient *mcc);
|
||||
int main_channel_client_is_low_bandwidth(MainChannelClient *mcc);
|
||||
uint64_t main_channel_client_get_bitrate_per_sec(MainChannelClient *mcc);
|
||||
uint64_t main_channel_client_get_roundtrip_ms(MainChannelClient *mcc);
|
||||
|
||||
int main_channel_is_connected(MainChannel *main_chan);
|
||||
RedChannelClient* main_channel_client_get_base(MainChannelClient* mcc);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user