diff options
| -rw-r--r-- | bitbake/lib/bb/runqueue.py | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 2830bc4ad9..f8440dbccc 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
| @@ -70,10 +70,12 @@ runQueueCleanUp = 7 | |||
| 70 | runQueueComplete = 8 | 70 | runQueueComplete = 8 |
| 71 | runQueueChildProcess = 9 | 71 | runQueueChildProcess = 9 |
| 72 | 72 | ||
| 73 | class RunQueueScheduler: | 73 | class RunQueueScheduler(object): |
| 74 | """ | 74 | """ |
| 75 | Control the order tasks are scheduled in. | 75 | Control the order tasks are scheduled in. |
| 76 | """ | 76 | """ |
| 77 | name = "basic" | ||
| 78 | |||
| 77 | def __init__(self, runqueue): | 79 | def __init__(self, runqueue): |
| 78 | """ | 80 | """ |
| 79 | The default scheduler just returns the first buildable task (the | 81 | The default scheduler just returns the first buildable task (the |
| @@ -101,6 +103,8 @@ class RunQueueSchedulerSpeed(RunQueueScheduler): | |||
| 101 | A scheduler optimised for speed. The priority map is sorted by task weight, | 103 | A scheduler optimised for speed. The priority map is sorted by task weight, |
| 102 | heavier weighted tasks (tasks needed by the most other tasks) are run first. | 104 | heavier weighted tasks (tasks needed by the most other tasks) are run first. |
| 103 | """ | 105 | """ |
| 106 | name = "speed" | ||
| 107 | |||
| 104 | def __init__(self, runqueue): | 108 | def __init__(self, runqueue): |
| 105 | """ | 109 | """ |
| 106 | The priority map is sorted by task weight. | 110 | The priority map is sorted by task weight. |
| @@ -128,6 +132,8 @@ class RunQueueSchedulerCompletion(RunQueueSchedulerSpeed): | |||
| 128 | well where disk space is at a premium and classes like OE's rm_work are in | 132 | well where disk space is at a premium and classes like OE's rm_work are in |
| 129 | force. | 133 | force. |
| 130 | """ | 134 | """ |
| 135 | name = "completion" | ||
| 136 | |||
| 131 | def __init__(self, runqueue): | 137 | def __init__(self, runqueue): |
| 132 | RunQueueSchedulerSpeed.__init__(self, runqueue) | 138 | RunQueueSchedulerSpeed.__init__(self, runqueue) |
| 133 | from copy import deepcopy | 139 | from copy import deepcopy |
| @@ -638,11 +644,15 @@ class RunQueue: | |||
| 638 | # Check of higher length circular dependencies | 644 | # Check of higher length circular dependencies |
| 639 | self.runq_weight = self.calculate_task_weights(endpoints) | 645 | self.runq_weight = self.calculate_task_weights(endpoints) |
| 640 | 646 | ||
| 641 | # Decide what order to execute the tasks in, pick a scheduler | 647 | schedulers = [obj for obj in globals().itervalues() |
| 642 | #self.sched = RunQueueScheduler(self) | 648 | if type(obj) is type and issubclass(obj, RunQueueScheduler)] |
| 643 | if self.scheduler == "completion": | 649 | for scheduler in schedulers: |
| 644 | self.sched = RunQueueSchedulerCompletion(self) | 650 | if self.scheduler == scheduler.name: |
| 651 | self.sched = scheduler(self) | ||
| 652 | break | ||
| 645 | else: | 653 | else: |
| 654 | bb.error("Invalid scheduler '%s', using default 'speed' scheduler" % self.scheduler) | ||
| 655 | bb.error("Available schedulers: %s" % ", ".join(obj.name for obj in schedulers)) | ||
| 646 | self.sched = RunQueueSchedulerSpeed(self) | 656 | self.sched = RunQueueSchedulerSpeed(self) |
| 647 | 657 | ||
| 648 | # Sanity Check - Check for multiple tasks building the same provider | 658 | # Sanity Check - Check for multiple tasks building the same provider |
