Display performance statistics in viewer
Adds an optional graph to the viewer to display current frame rate,
pixel rate and network bandwidth. Makes it easier to debug and test
performance related issues.
diff --git a/common/rfb/util.cxx b/common/rfb/util.cxx
index aec45f6..22e00ff 100644
--- a/common/rfb/util.cxx
+++ b/common/rfb/util.cxx
@@ -139,7 +139,7 @@
static size_t doPrefix(long long value, const char *unit,
char *buffer, size_t maxlen,
unsigned divisor, const char **prefixes,
- size_t prefixCount) {
+ size_t prefixCount, int precision) {
double newValue;
size_t prefix, len;
@@ -152,7 +152,7 @@
prefix++;
}
- len = snprintf(buffer, maxlen, "%g %s%s", newValue,
+ len = snprintf(buffer, maxlen, "%.*g %s%s", precision, newValue,
(prefix == 0) ? "" : prefixes[prefix-1], unit);
buffer[maxlen-1] = '\0';
@@ -165,14 +165,16 @@
{ "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi" };
size_t siPrefix(long long value, const char *unit,
- char *buffer, size_t maxlen) {
+ char *buffer, size_t maxlen, int precision) {
return doPrefix(value, unit, buffer, maxlen, 1000, siPrefixes,
- sizeof(siPrefixes)/sizeof(*siPrefixes));
+ sizeof(siPrefixes)/sizeof(*siPrefixes),
+ precision);
}
size_t iecPrefix(long long value, const char *unit,
- char *buffer, size_t maxlen) {
+ char *buffer, size_t maxlen, int precision) {
return doPrefix(value, unit, buffer, maxlen, 1024, iecPrefixes,
- sizeof(iecPrefixes)/sizeof(*iecPrefixes));
+ sizeof(iecPrefixes)/sizeof(*iecPrefixes),
+ precision);
}
};
diff --git a/common/rfb/util.h b/common/rfb/util.h
index 9ad1772..e9114c3 100644
--- a/common/rfb/util.h
+++ b/common/rfb/util.h
@@ -99,9 +99,9 @@
unsigned msSince(const struct timeval *then);
size_t siPrefix(long long value, const char *unit,
- char *buffer, size_t maxlen);
+ char *buffer, size_t maxlen, int precision=6);
size_t iecPrefix(long long value, const char *unit,
- char *buffer, size_t maxlen);
+ char *buffer, size_t maxlen, int precision=6);
}
// Some platforms (e.g. Windows) include max() and min() macros in their