summaryrefslogtreecommitdiff
path: root/test/-ext-/thread/test_instrumentation_api.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/-ext-/thread/test_instrumentation_api.rb')
-rw-r--r--test/-ext-/thread/test_instrumentation_api.rb34
1 files changed, 24 insertions, 10 deletions
diff --git a/test/-ext-/thread/test_instrumentation_api.rb b/test/-ext-/thread/test_instrumentation_api.rb
index 08bcda7ed9..d110348d73 100644
--- a/test/-ext-/thread/test_instrumentation_api.rb
+++ b/test/-ext-/thread/test_instrumentation_api.rb
@@ -10,10 +10,10 @@ class TestThreadInstrumentation < Test::Unit::TestCase
Bug::ThreadInstrumentation::register_callback
begin
- threads = 5.times.map { Thread.new { sleep 0.5; 1 + 1; sleep 0.2 } }
- threads.each(&:join)
- Bug::ThreadInstrumentation.counters.each do |c|
- assert_predicate c,:nonzero?
+ threaded_cpu_work
+ counters = Bug::ThreadInstrumentation.counters
+ counters.each do |c|
+ assert_predicate c,:nonzero?, "Call counters: #{counters.inspect}"
end
ensure
Bug::ThreadInstrumentation::unregister_callback
@@ -26,17 +26,26 @@ class TestThreadInstrumentation < Test::Unit::TestCase
require '-test-/thread/instrumentation'
Bug::ThreadInstrumentation::register_callback
+ read_pipe, write_pipe = IO.pipe
+
begin
pid = fork do
Bug::ThreadInstrumentation.reset_counters
- threads = 5.times.map { Thread.new { sleep 0.5; 1 + 1; sleep 0.2 } }
- threads.each(&:join)
- Bug::ThreadInstrumentation.counters.each do |c|
- assert_predicate c,:nonzero?
- end
+ threaded_cpu_work
+
+ write_pipe.write(Marshal.dump(Bug::ThreadInstrumentation.counters))
+ write_pipe.close
+ exit!(0)
end
+ write_pipe.close
_, status = Process.wait2(pid)
assert_predicate status, :success?
+
+ counters = Marshal.load(read_pipe)
+ read_pipe.close
+ counters.each do |c|
+ assert_predicate c,:nonzero?, "Call counters: #{counters.inspect}"
+ end
ensure
Bug::ThreadInstrumentation::unregister_callback
end
@@ -46,5 +55,10 @@ class TestThreadInstrumentation < Test::Unit::TestCase
require '-test-/thread/instrumentation'
assert Bug::ThreadInstrumentation::register_and_unregister_callbacks
end
-end
+ private
+
+ def threaded_cpu_work
+ 5.times.map { Thread.new { 100.times { |i| i + i } } }.each(&:join)
+ end
+end