blob: 54e916b73b3ec94ce4b33e293883229ec762504a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
require 'objspace'
#
# purpose:
# Profile memory usage of each tests.
#
# usage:
# RUBY_TEST_ALL_PROFILE=true make test-all
#
# output:
# ./test_all_profile
#
# collected information:
# - ObjectSpace.memsize_of_all
# - GC.stat
# - /proc/self/statm (if it exists)
#
class MiniTest::Unit::TestCase
alias orig_run run
$test_all_profile_out = open('test_all_profile', 'w')
$test_all_profile_gc_stat_hash = {}
if FileTest.exist?('/proc/self/statm')
# for Linux (only?)
$test_all_profile_out.puts "name\tmemsize_of_all\t" +
(GC.stat.keys +
%w(size resident share text lib data dt)).join("\t")
def memprofile_test_all_result_result
"#{self.class}\##{self.__name__}\t" \
"#{ObjectSpace.memsize_of_all}\t" \
"#{GC.stat($test_all_profile_gc_stat_hash).values.join("\t")}\t" \
"#{File.read('/proc/self/statm').split(/\s+/).join("\t")}"
end
else
$test_all_profile_out.puts "name\tmemsize_of_alls\t" + GC.stat.keys.join("\t")
def memprofile_test_all_result_result
"#{self.class}\##{self.__name__}\t" \
"#{ObjectSpace.memsize_of_all}\t" \
"#{GC.stat($test_all_profile_gc_stat_hash).values.join("\t")}"
end
end
def run runner
result = orig_run(runner)
$test_all_profile_out.puts memprofile_test_all_result_result
$test_all_profile_out.flush
result
end
end
|