* Call self._schedule() from inside Scheduler._poll(). This ensures that
authorZac Medico <zmedico@gentoo.org>
Sat, 19 Jul 2008 10:07:13 +0000 (10:07 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 19 Jul 2008 10:07:13 +0000 (10:07 -0000)
  new jobs can scheduled as soon a the load average is low enough, and
  one of the running jobs doesn't have to complete for _schedule() to
  get called.

* Cache the result of _background_mode() so it doesn't have to be called
  inside _schedule(), since this method is called a lot more often now.

* Move background related state adjustments into _background_mode().

* Call _status_display.display() unconditionally inside _schedule_tasks(),
  since we want to update the display to show current load average even
  if no new jobs are added.

svn path=/main/trunk/; revision=11135

pym/_emerge/__init__.py

index 7e11ab8ab9d2a8836c82ad5ea7e6ca8dd9b29db0..76a279711139642e331d9233ba48d8eb7ccdc7ac 100644 (file)
@@ -8719,6 +8719,7 @@ class Scheduler(PollScheduler):
                        max_jobs = 1
                self._set_max_jobs(max_jobs)
                background = self._background_mode()
+               self._background = background
 
                self._max_load = myopts.get("--load-average")
 
@@ -8757,7 +8758,7 @@ class Scheduler(PollScheduler):
                                self._running_root, installed=True)
 
        def _poll(self, timeout=None):
-               self._status_display.display()
+               self._schedule()
                return PollScheduler._poll(self, timeout=timeout)
 
        def _set_max_jobs(self, max_jobs):
@@ -8765,7 +8766,22 @@ class Scheduler(PollScheduler):
                self._task_queues.jobs.max_jobs = max_jobs
 
        def _background_mode(self):
-               return self._max_jobs > 1 or "--quiet" in self.myopts
+               """
+               Check if background mode is enabled and adjust states as necessary.
+
+               @rtype: bool
+               @returns: True if background mode is enabled, False otherwise.
+               """
+               background = self._max_jobs > 1 or "--quiet" in self.myopts
+
+               self._logger.parallel = background
+
+               self._status_display.quiet = \
+                       not background or \
+                       ("--quiet" in self.myopts and \
+                       "--verbose" not in self.myopts)
+
+               return background
 
        def _set_digraph(self, digraph):
                if self._max_jobs < 2:
@@ -9405,8 +9421,7 @@ class Scheduler(PollScheduler):
 
        def _schedule_tasks(self):
                remaining, state_change = self._schedule_tasks_imp()
-               if state_change:
-                       self._status_display.display()
+               self._status_display.display()
                return remaining
 
        def _schedule_tasks_imp(self):
@@ -9416,12 +9431,7 @@ class Scheduler(PollScheduler):
                """
 
                task_queues = self._task_queues
-               background = self._background_mode()
-               self._logger.parallel = background
-               self._status_display.quiet = \
-                       not background or \
-                       ("--quiet" in self.myopts and \
-                       "--verbose" not in self.myopts)
+               background = self._background
 
                state_change = 0