diff options
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/emerge | 25 |
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. """ |