class Autobuild::RakeTaskParallelism::ProcessingState

Attributes

active_tasks[R]
priorities[R]
processed[R]
queue[R]
reverse_dependencies[R]
started_packages[R]

Public Class Methods

new(reverse_dependencies, completion_callback: proc {}) click to toggle source
# File lib/autobuild/parallel.rb, line 77
def initialize(reverse_dependencies, completion_callback: proc {})
    @reverse_dependencies = reverse_dependencies
    @completion_callback = completion_callback
    @processed = Set.new
    @active_tasks = Set.new
    @priorities = Hash.new
    @started_packages = Hash.new
    @queue = Hash.new
end

Public Instance Methods

active_task?(task) click to toggle source
# File lib/autobuild/parallel.rb, line 113
def active_task?(task)
    active_tasks.include?(task)
end
already_processed?(task) click to toggle source
# File lib/autobuild/parallel.rb, line 123
def already_processed?(task)
    task.already_invoked? && !active_task?(task)
end
find_task() click to toggle source
# File lib/autobuild/parallel.rb, line 96
def find_task
    if (task = queue.min_by { |_t, p| p })
        priorities[task.first] = task.last
        task.first
    end
end
mark_as_active(pending_task) click to toggle source
# File lib/autobuild/parallel.rb, line 109
def mark_as_active(pending_task)
    active_tasks << pending_task
end
needs_processing?(task) click to toggle source
# File lib/autobuild/parallel.rb, line 127
def needs_processing?(task)
    !task.already_invoked? && !active_task?(task)
end
pop() click to toggle source
# File lib/autobuild/parallel.rb, line 103
def pop
    candidate = find_task
    queue.delete(candidate)
    candidate
end
process_finished_task(task) click to toggle source
# File lib/autobuild/parallel.rb, line 131
def process_finished_task(task)
    active_tasks.delete(task)
    processed << task
    reverse_dependencies[task].each do |candidate|
        if needs_processing?(candidate) && ready?(candidate)
            push(candidate, priorities[task])
        end
    end

    @completion_callback.call(task)
end
push(task, base_priority = 1) click to toggle source
# File lib/autobuild/parallel.rb, line 87
def push(task, base_priority = 1)
    if task.respond_to?(:package)
        started_packages[task.package] ||= -started_packages.size
        queue[task] = started_packages[task.package]
    else
        queue[task] = base_priority
    end
end
ready?(task) click to toggle source
# File lib/autobuild/parallel.rb, line 117
def ready?(task)
    task.prerequisite_tasks.all? do |t|
        already_processed?(t)
    end
end
trivial_task?(task) click to toggle source
# File lib/autobuild/parallel.rb, line 143
def trivial_task?(task)
    (task.kind_of?(Autobuild::SourceTreeTask) ||
        task.kind_of?(Rake::FileTask)) && task.actions.empty?
end