summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-11-02 06:46:34 +0000
committerZac Medico <zmedico@gentoo.org>2007-11-02 06:46:34 +0000
commit8d3e5e4c32f04d6e9cb8a5e1c36684426062e9d4 (patch)
treef2aa395ec9496e8f9eb345ef7d0c2bd020a68570 /bin
parent7fd7a79f076e621c3d4c7e3342df5338c2c04ae5 (diff)
downloadportage-8d3e5e4c32f04d6e9cb8a5e1c36684426062e9d4.tar.gz
portage-8d3e5e4c32f04d6e9cb8a5e1c36684426062e9d4.tar.bz2
portage-8d3e5e4c32f04d6e9cb8a5e1c36684426062e9d4.zip
Optimize stdout_spinner.update() methods so that they don't
waste cpu time by flushing output to the tty too frequently. (trunk r8332) svn path=/main/branches/2.1.2/; revision=8371
Diffstat (limited to 'bin')
-rwxr-xr-xbin/emerge25
1 files changed, 22 insertions, 3 deletions
diff --git a/bin/emerge b/bin/emerge
index 1d0788f75..c75e3ef54 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -91,9 +91,25 @@ class stdout_spinner(object):
self.update = self.update_twirl
self.scroll_sequence = self.scroll_msgs[
int(time.time() * 100) % len(self.scroll_msgs)]
+ self.last_update = 0
+ self.min_display_latency = 0.05
+
+ def _return_early(self):
+ """
+ Flushing ouput to the tty too frequently wastes cpu time. Therefore,
+ each update* method should return without doing any output when this
+ method returns True.
+ """
+ cur_time = time.time()
+ if cur_time - self.last_update < self.min_display_latency:
+ return True
+ self.last_update = cur_time
+ return False
def update_basic(self):
self.spinpos = (self.spinpos + 1) % 500
+ if self._return_early():
+ return
if (self.spinpos % 100) == 0:
if self.spinpos == 0:
sys.stdout.write(". ")
@@ -102,6 +118,8 @@ class stdout_spinner(object):
sys.stdout.flush()
def update_scroll(self):
+ if self._return_early():
+ return
if(self.spinpos >= len(self.scroll_sequence)):
sys.stdout.write(darkgreen(" \b\b\b" + self.scroll_sequence[
len(self.scroll_sequence) - 1 - (self.spinpos % len(self.scroll_sequence))]))
@@ -112,6 +130,8 @@ class stdout_spinner(object):
def update_twirl(self):
self.spinpos = (self.spinpos + 1) % len(self.twirl_sequence)
+ if self._return_early():
+ return
sys.stdout.write("\b\b " + self.twirl_sequence[self.spinpos])
sys.stdout.flush()
@@ -1280,9 +1300,6 @@ class depgraph:
return 0
del e
- if "--nodeps" not in self.myopts:
- self.spinner.update()
-
reinstall_for_flags = None
merging=1
if mytype == "installed":
@@ -1439,6 +1456,8 @@ class depgraph:
elif "recurse" not in self.myparams:
return 1
+ self.spinner.update()
+
""" Check DEPEND/RDEPEND/PDEPEND/SLOT
Pull from bintree if it's binary package, porttree if it's ebuild.
Binpkg's can be either remote or local. """