summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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. """