[Spice-devel] [PATCH spice-server] red_worker: don't get bit_rate from main_channel_client, if it wasn't initialized
Yonit Halperin
yhalperi at redhat.com
Thu May 9 07:10:01 PDT 2013
Hi,
On 05/09/2013 07:44 AM, Hans de Goede wrote:
> Hi,
>
> This patch removes the updating of dcc->streams_max_bit_rate when
> the new bit_rate is larger then it. I believe this is unintentional,
> and thus should be fixed.
>
> If it is intentional, it should be documented in the commit msg.
It was intentional, because it doesn't really matter if we update the
streams_max_bit_rate to the bit rate the main_channel holds, since we
compare them each time we set the initial bit rate for a stream. I will
document it. Can I push it (after improving the commit msg)?
Thanks,
Yonit.
>
> Regards,
>
> Hans
>
>
> On 05/08/2013 07:27 PM, Yonit Halperin wrote:
>> When setting an initial video stream bit rate, if the bit rate
>> wasn't calculated by main_channel_client, and we don't have
>> estimation from previos streams, use some default values.
>> ---
>> server/red_worker.c | 42 ++++++++++++++++++++++++++++++------------
>> 1 file changed, 30 insertions(+), 12 deletions(-)
>>
>> diff --git a/server/red_worker.c b/server/red_worker.c
>> index f12d8f8..fb736b5 100644
>> --- a/server/red_worker.c
>> +++ b/server/red_worker.c
>> @@ -121,6 +121,8 @@
>> /* the client's stream report frequency is the minimum of the 2
>> values below */
>> #define RED_STREAM_CLIENT_REPORT_WINDOW 5 // #frames
>> #define RED_STREAM_CLIENT_REPORT_TIMEOUT 1000 // milliseconds
>> +#define RED_STREAM_DEFAULT_HIGH_START_BIT_RATE (10 * 1024 * 1024) //
>> 10Mbps
>> +#define RED_STREAM_DEFAULT_LOW_START_BIT_RATE (2.5 * 1024 * 1024) //
>> 2.5Mbps
>>
>> #define FPS_TEST_INTERVAL 1
>> #define MAX_FPS 30
>> @@ -2929,11 +2931,9 @@ static inline Stream
>> *red_alloc_stream(RedWorker *worker)
>> static uint64_t red_stream_get_initial_bit_rate(DisplayChannelClient
>> *dcc,
>> Stream *stream)
>> {
>> - MainChannelClient *mcc;
>> char *env_bit_rate_str;
>> uint64_t bit_rate = 0;
>>
>> - mcc = red_client_get_main(dcc->common.base.client);
>> env_bit_rate_str = getenv("SPICE_BIT_RATE");
>> if (env_bit_rate_str != NULL) {
>> double env_bit_rate;
>> @@ -2948,16 +2948,28 @@ static uint64_t
>> red_stream_get_initial_bit_rate(DisplayChannelClient *dcc,
>> }
>>
>> if (!bit_rate) {
>> - bit_rate = main_channel_client_get_bitrate_per_sec(mcc);
>> -
>> - if (bit_rate > dcc->streams_max_bit_rate) {
>> - dcc->streams_max_bit_rate = bit_rate;
>> - } else {
>> - bit_rate = dcc->streams_max_bit_rate;
>> - }
>> - }
>> -
>> - spice_debug("base-bit-rate %.2f (Mbps)", bit_rate / 1024.0 /1024.0);
>> + MainChannelClient *mcc;
>> + uint64_t net_test_bit_rate;
>> +
>> + mcc = red_client_get_main(dcc->common.base.client);
>> + net_test_bit_rate =
>> main_channel_client_is_network_info_initialized(mcc) ?
>> +
>> main_channel_client_get_bitrate_per_sec(mcc) :
>> + 0;
>> + bit_rate = MAX(dcc->streams_max_bit_rate, net_test_bit_rate);
>> + if (bit_rate == 0) {
>> + /*
>> + * In case we are after a spice session migration,
>> + * the low_bandwidth flag is retrieved from migration data.
>> + * If the network info is not initialized due to another
>> reason,
>> + * the low_bandwidth flag is FALSE.
>> + */
>> + bit_rate = dcc->common.is_low_bandwidth ?
>> + RED_STREAM_DEFAULT_LOW_START_BIT_RATE :
>> + RED_STREAM_DEFAULT_HIGH_START_BIT_RATE;
>> + }
>> + }
>> +
>> + spice_debug("base-bit-rate %.2f (Mbps)", bit_rate / 1024.0 /
>> 1024.0);
>> /* dividing the available bandwidth among the active streams,
>> and saving
>> * (1-RED_STREAM_CHANNEL_CAPACITY) of it for other messages */
>> return (RED_STREAM_CHANNEL_CAPACITY * bit_rate *
>> @@ -2973,6 +2985,12 @@ static uint32_t
>> red_stream_mjpeg_encoder_get_roundtrip(void *opaque)
>> roundtrip =
>> red_channel_client_get_roundtrip_ms(&agent->dcc->common.base);
>> if (roundtrip < 0) {
>> MainChannelClient *mcc =
>> red_client_get_main(agent->dcc->common.base.client);
>> +
>> + /*
>> + * the main channel client roundtrip might not have been
>> + * calculated (e.g., after migration). In such case,
>> + * main_channel_client_get_roundtrip_ms returns 0.
>> + */
>> roundtrip = main_channel_client_get_roundtrip_ms(mcc);
>> }
>>
>>
More information about the Spice-devel
mailing list