Reduce interface stutters when the nearest placeholder is far away.

- Achieved by making the placeholder generator asynchronous.
This commit is contained in:
Andrew Hamilton 2018-08-16 22:18:21 +10:00
parent 48fc34c632
commit 2c402a683a
2 changed files with 7 additions and 6 deletions

View file

@ -319,7 +319,7 @@ class Summary:
os.remove(result.pickle_path)
self.sort_entries()
def _placeholder_spiral(self):
async def _placeholder_spiral(self):
x, y = self.cursor_position()
result = self._column[y][x]
if result.is_placeholder:
@ -334,15 +334,16 @@ class Summary:
result = self._column[y][x]
except IndexError:
continue
await asyncio.sleep(0)
if result.is_placeholder:
yield result
def get_closest_placeholder(self):
async def get_closest_placeholder(self):
try:
return self.closest_placeholder_generator.send(None)
return await self.closest_placeholder_generator.asend(None)
except AttributeError:
self.closest_placeholder_generator = self._placeholder_spiral()
return self.closest_placeholder_generator.send(None)
return await self.closest_placeholder_generator.asend(None)
def appearance_dimensions(self):
return self._max_path_length + 1 + self._max_width, len(self._column)

View file

@ -44,8 +44,8 @@ class Worker:
await jobs_added_event.wait()
while True:
try:
self.result = summary.get_closest_placeholder()
except StopIteration:
self.result = await summary.get_closest_placeholder()
except StopAsyncIteration:
self.result = None
if summary.result_total == summary.completed_total:
log.log_message("All results are up to date.")