Improve POLL delay

This commit is contained in:
Andrew Kay
2019-06-27 21:44:45 -05:00
parent 49071f4742
commit 9a7e26ea68

View File

@@ -25,8 +25,14 @@ class Controller:
self.terminal = None
self.session = None
self.connected_poll_period = 1 / 10
self.disconnected_poll_period = 5
def run(self):
"""Run the controller."""
last_poll_time = None
last_poll_response = None
while self.running:
if self.session:
try:
@@ -34,6 +40,8 @@ class Controller:
except SessionDisconnectedError:
self._handle_session_disconnected()
last_poll_time = self._poll_delay(last_poll_time, last_poll_response)
try:
poll_response = poll(self.interface, timeout=1)
except ReceiveTimeout:
@@ -61,8 +69,8 @@ class Controller:
if poll_response:
self._handle_poll_response(poll_response)
else:
time.sleep(0.1)
last_poll_response = poll_response
def _handle_terminal_attached(self, poll_response):
self.logger.info('Terminal attached')
@@ -133,3 +141,17 @@ class Controller:
if self.session:
self.session.handle_key(key, modifiers, scan_code)
def _poll_delay(self, last_poll_time, last_poll_response):
if last_poll_response is None and last_poll_time is not None:
if self.terminal:
period = self.connected_poll_period
else:
period = self.disconnected_poll_period
delay = (last_poll_time + period) - time.perf_counter()
if delay > 0:
time.sleep(delay)
return time.perf_counter()