[tor-commits] [arm/master] Delaying connection resolution until after init
atagar at torproject.org
atagar at torproject.org
Wed Apr 27 17:01:54 UTC 2011
commit f75b0c9f47ea4932cbdfea888cab55af7397c5a6
Author: Damian Johnson <atagar at torproject.org>
Date: Wed Apr 27 09:41:40 2011 -0700
Delaying connection resolution until after init
This is a huge performance fix, dropping the startup time from 0.84 seconds to
0.14 (83% improvement). Arm had been fetching connection contents on init,
blocking the first redraw. The fix is to both move connection init into its
runtime thread *and* delay its execution until after the initial redraw. This
hides the call latency in the period that we're usually waiting for user input
anyway.
There's still perceived latency if the user immediately switches to the
connections page, but this is both unavoidable and unusual.
---
src/cli/connections/connPanel.py | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/cli/connections/connPanel.py b/src/cli/connections/connPanel.py
index 8339f88..7e12232 100644
--- a/src/cli/connections/connPanel.py
+++ b/src/cli/connections/connPanel.py
@@ -71,9 +71,6 @@ class ConnectionPanel(panel.Panel, threading.Thread):
# rate limits appResolver queries to once per update
self.appResolveSinceUpdate = False
- self._update() # populates initial entries
- self._resolveApps(False) # resolves initial applications
-
# mark the initially exitsing connection uptimes as being estimates
for entry in self._entries:
if isinstance(entry, connEntry.ConnectionEntry):
@@ -170,6 +167,16 @@ class ConnectionPanel(panel.Panel, threading.Thread):
"""
lastDraw = time.time() - 1
+
+ # Fetches out initial connection results. The wait is so this doesn't
+ # run during arm's interface initialization (otherwise there's a
+ # noticeable pause before the first redraw).
+ self._cond.acquire()
+ self._cond.wait(0.2)
+ self._cond.release()
+ self._update() # populates initial entries
+ self._resolveApps(False) # resolves initial applications
+
while not self._halt:
currentTime = time.time()
More information about the tor-commits
mailing list