commit 235498fa2b01e5c317157eabaf1e22124ad0bacb
parent 7f602bdb234e18645eea7f9a62f77d8ebcb068a0
Author: William Morgan <wmorgan-sup@masanjin.net>
Date: Sat, 26 Sep 2009 11:18:59 -0700
Merge commit 'origin/preemptive-loading'
Diffstat:
3 files changed, 19 insertions(+), 20 deletions(-)
diff --git a/bin/sup b/bin/sup
@@ -58,6 +58,7 @@ if $opts[:list_hooks]
end
Thread.abort_on_exception = true # make debugging possible
+Thread.current.priority = 1 # keep ui responsive
module Redwood
diff --git a/lib/sup/modes/line-cursor-mode.rb b/lib/sup/modes/line-cursor-mode.rb
@@ -15,11 +15,22 @@ class LineCursorMode < ScrollMode
def initialize opts={}
@cursor_top = @curpos = opts.delete(:skip_top_rows) || 0
@load_more_callbacks = []
- @load_more_callbacks_m = Mutex.new
- @load_more_callbacks_active = false
+ @load_more_q = Queue.new
+ @load_more_thread = ::Thread.new do
+ while true
+ e = @load_more_q.pop
+ @load_more_callbacks.each { |c| c.call e }
+ end
+ end
+
super opts
end
+ def cleanup
+ @load_more_thread.kill
+ super
+ end
+
def draw
super
set_status
@@ -77,7 +88,7 @@ protected
end
def cursor_down
- call_load_more_callbacks buffer.content_height if @curpos == lines - 1
+ call_load_more_callbacks buffer.content_height if @curpos >= lines - [buffer.content_height/2,1].max
return false unless @curpos < lines - 1
if @curpos >= botline - 1
@@ -163,21 +174,8 @@ private
end
def call_load_more_callbacks size
- go =
- @load_more_callbacks_m.synchronize do
- if @load_more_callbacks_active
- false
- else
- @load_more_callbacks_active = true
- end
- end
-
- return unless go
-
- @load_more_callbacks.each { |c| c.call size }
- @load_more_callbacks_active = false
- end
-
+ @load_more_q.push size
+ end
end
end
diff --git a/lib/sup/modes/thread-index-mode.rb b/lib/sup/modes/thread-index-mode.rb
@@ -77,8 +77,7 @@ EOS
@last_load_more_size = nil
to_load_more do |size|
next if @last_load_more_size == 0
- load_threads :num => 1, :background => false
- load_threads :num => (size - 1),
+ load_threads :num => size,
:when_done => lambda { |num| @last_load_more_size = num }
end
end
@@ -630,6 +629,7 @@ EOS
BufferManager.draw_screen
last_update = Time.now
end
+ ::Thread.pass
break if @interrupt_search
end
@ts.threads.each { |th| th.labels.each { |l| LabelManager << l } }