summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorYonit Halperin <yhalperi@redhat.com>2013-02-19 08:34:18 -0500
committerYonit Halperin <yhalperi@redhat.com>2013-04-22 16:30:55 -0400
commit167f999992da730f90079238447deae11629c250 (patch)
treeab7ea5609efc31497e3e68fbfaf6d8d5c8326e5c /server
parent4c79f325e2b2f1355850a70cee68d613346a2cbf (diff)
downloadspice-167f999992da730f90079238447deae11629c250.tar.gz
spice-167f999992da730f90079238447deae11629c250.tar.xz
spice-167f999992da730f90079238447deae11629c250.zip
server/red_worker: add an option to supply the bandwidth via env var
SPICE_BIT_RATE can be set for supplying red_worker the available bandwidth (in Mbps).
Diffstat (limited to 'server')
-rw-r--r--server/red_worker.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/server/red_worker.c b/server/red_worker.c
index 8e30ef38..21b55c99 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -2879,19 +2879,38 @@ static inline Stream *red_alloc_stream(RedWorker *worker)
static uint64_t red_stream_get_initial_bit_rate(DisplayChannelClient *dcc,
Stream *stream)
{
- uint64_t max_bit_rate;
MainChannelClient *mcc;
+ char *env_bit_rate_str;
+ uint64_t bit_rate = 0;
mcc = red_client_get_main(dcc->common.base.client);
- max_bit_rate = main_channel_client_get_bitrate_per_sec(mcc);
+ env_bit_rate_str = getenv("SPICE_BIT_RATE");
+ if (env_bit_rate_str != NULL) {
+ double env_bit_rate;
+
+ errno = 0;
+ env_bit_rate = strtod(env_bit_rate_str, NULL);
+ if (errno == 0) {
+ bit_rate = env_bit_rate * 1024 * 1024;
+ } else {
+ spice_warning("error parsing SPICE_BIT_RATE: %s", strerror(errno));
+ }
+ }
- if (max_bit_rate > dcc->streams_max_bit_rate) {
- dcc->streams_max_bit_rate = max_bit_rate;
+ 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);
/* 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 * dcc->streams_max_bit_rate *
+ return (RED_STREAM_CHANNEL_CAPACITY * bit_rate *
stream->width * stream->height) / dcc->common.worker->streams_size_total;
}