#include <stdio.h>
#include <string.h>
#include <time.h>
-#include <sys/time.h>
#include <X11/Xlib.h>
#include <rfb/VNCServer.h>
#include <rfb/Configuration.h>
memset(m_rateMatrix, 0, numTiles);
memset(m_videoFlags, 0, numTiles);
memset(m_changedFlags, 0, numTiles);
+
+#ifdef DEBUG
+ memset(&m_timeSaved, 0, sizeof(m_timeSaved));
+#endif
}
PollingManager::~PollingManager()
}
//
-// DEBUG: a version of poll() measuring time spent in the function.
+// DEBUG: Measuring time spent in the poll() function,
+// as well as time intervals between poll() calls.
//
-void PollingManager::pollDebug()
+#ifdef DEBUG
+void PollingManager::debugBeforePoll()
{
- struct timeval timeSaved, timeNow;
+ struct timeval timeNow;
struct timezone tz;
- timeSaved.tv_sec = 0;
- timeSaved.tv_usec = 0;
- gettimeofday(&timeSaved, &tz);
- int step = m_pollingStep;
-
- poll();
+ gettimeofday(&timeNow, &tz);
+ int diff = (int)((timeNow.tv_usec - m_timeSaved.tv_usec + 500) / 1000 +
+ (timeNow.tv_sec - m_timeSaved.tv_sec) * 1000);
+ fprintf(stderr, "[wait%4dms]\t[step %2d]\t", diff, m_pollingStep % 32);
+ m_timeSaved = timeNow;
+}
+void PollingManager::debugAfterPoll()
+{
+ struct timeval timeNow;
+ struct timezone tz;
gettimeofday(&timeNow, &tz);
- int diff = (int)((timeNow.tv_usec - timeSaved.tv_usec + 500) / 1000 +
- (timeNow.tv_sec - timeSaved.tv_sec) * 1000);
- if (diff != 0)
- fprintf(stderr, "DEBUG: poll(): %4d ms [step %2d]\n", diff, step % 32);
+ int diff = (int)((timeNow.tv_usec - m_timeSaved.tv_usec + 500) / 1000 +
+ (timeNow.tv_sec - m_timeSaved.tv_sec) * 1000);
+ fprintf(stderr, "[poll%4dms]\n", diff);
+ m_timeSaved = timeNow;
}
+#endif
+
//
// Search for changed rectangles on the screen.
//
void PollingManager::poll()
{
+#ifdef DEBUG
+ debugBeforePoll();
+#endif
+
// First step: full-screen polling.
bool changes1 = false;
if (changes1 || changes2)
m_server->tryUpdate();
+
+#ifdef DEBUG
+ debugAfterPoll();
+#endif
}
bool PollingManager::poll_DetectVideo()
#ifndef __POLLINGMANAGER_H__
#define __POLLINGMANAGER_H__
+#include <sys/time.h>
+
#include <X11/Xlib.h>
#include <rfb/VNCServer.h>
void setPointerPos(const Point &pos);
void unsetPointerPos();
- void pollDebug();
void poll();
// Configurable parameters.
unsigned int m_pollingStep;
static const int m_pollingOrder[];
+#ifdef DEBUG
+private:
+
+ void debugBeforePoll();
+ void debugAfterPoll();
+
+ struct timeval m_timeSaved;
+#endif
+
};
#endif // __POLLINGMANAGER_H__
int coeff = cpumon.check();
if (coeff < 90 || coeff > 110) {
// Adjust polling cycle to satisfy MaxProcessorUsage setting
+#ifdef DEBUG
+ int oldPollingCycle = dynPollingCycle;
+#endif
dynPollingCycle = (dynPollingCycle * 100 + coeff/2) / coeff;
if (dynPollingCycle < (int)pollingCycle) {
dynPollingCycle = (int)pollingCycle;
} else if (dynPollingCycle > (int)pollingCycle * 32) {
dynPollingCycle = (int)pollingCycle * 32;
}
- // DEBUG:
- // if (dynPollingCycle != old) {
- // fprintf(stderr, "[%dms]\t", dynPollingCycle);
- // }
+#ifdef DEBUG
+ if (dynPollingCycle != oldPollingCycle)
+ fprintf(stderr, "\t[new cycle %dms]\n", dynPollingCycle);
+#endif
}
desktop.poll();
}