mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
f71bd7477e
The full scan of the C source code (`@content.scan`) is very slow. The old code invokes the scan six times in `do_classes` and `do_modules`. This change integrates the six scans into one by merging the regexps. The integrated regexp is a bit hard to maintain, but the speed up is significant: approx. 30 sec -> 20 sec in Ruby's `make rdoc`. In addition, this change omits `do_boot_defclass` unless the file name is `class.c`. `boot_defclass` is too specific to Ruby's source code, so RDoc should handle it as a special case. Before this change: TOTAL (pct) SAMPLES (pct) FRAME 858 (13.6%) 858 (13.6%) (garbage collection) 292 (4.6%) 264 (4.2%) RDoc::Parser::C#do_define_class 263 (4.2%) 250 (3.9%) RDoc::Parser::C#do_define_module 275 (4.3%) 241 (3.8%) RDoc::Parser::C#do_define_class_under 248 (3.9%) 237 (3.7%) RDoc::Parser::C#do_define_module_under 234 (3.7%) 234 (3.7%) RDoc::Parser::C#gen_body_table 219 (3.5%) 219 (3.5%) Ripper::Lexer#state_obj 217 (3.4%) 216 (3.4%) RDoc::Parser::C#do_struct_define_without_accessor 205 (3.2%) 205 (3.2%) RDoc::Parser::C#do_boot_defclass 205 (3.2%) 205 (3.2%) RDoc::Parser::C#do_singleton_class The six methods take approx. 22.2%. `do_define_class` (4.2%) + `do_define_class_under` (3.8%) + `do_define_module` (3,9$) + `do_define_module_under` (3.7%) + `do_struct_define_without_accessor` (3.4%) + `do_singleton_class` (3.2%) After this change, the methods are integrated to `do_classes_and_modules` which takes only 5.8%. TOTAL (pct) SAMPLES (pct) FRAME 812 (16.7%) 812 (16.7%) (garbage collection) 355 (7.3%) 284 (5.8%) RDoc::Parser::C#do_classes_and_modules 225 (4.6%) 225 (4.6%) RDoc::Parser::C#gen_body_table 429 (8.8%) 210 (4.3%) RDoc::Parser::RubyTools#get_tk 208 (4.3%) 208 (4.3%) RDoc::TokenStream#add_tokens |
||
---|---|---|
.. | ||
-ext- | ||
base64 | ||
benchmark | ||
bigdecimal | ||
cgi | ||
coverage | ||
csv | ||
date | ||
dbm | ||
digest | ||
drb | ||
dtrace | ||
erb | ||
etc | ||
excludes | ||
fiddle | ||
fileutils | ||
gdbm | ||
io | ||
irb | ||
json | ||
lib | ||
logger | ||
matrix | ||
misc | ||
mkmf | ||
monitor | ||
net | ||
nkf | ||
objspace | ||
open-uri | ||
openssl | ||
optparse | ||
ostruct | ||
pathname | ||
psych | ||
racc | ||
rdoc | ||
readline | ||
reline | ||
resolv | ||
rexml | ||
rinda | ||
ripper | ||
rss | ||
ruby | ||
rubygems | ||
scanf | ||
sdbm | ||
shell | ||
socket | ||
stringio | ||
strscan | ||
syslog | ||
uri | ||
webrick | ||
win32ole | ||
yaml | ||
zlib | ||
runner.rb | ||
test_abbrev.rb | ||
test_cmath.rb | ||
test_delegate.rb | ||
test_extlibs.rb | ||
test_find.rb | ||
test_forwardable.rb | ||
test_ipaddr.rb | ||
test_mutex_m.rb | ||
test_observer.rb | ||
test_open3.rb | ||
test_pp.rb | ||
test_prettyprint.rb | ||
test_prime.rb | ||
test_pstore.rb | ||
test_pty.rb | ||
test_rbconfig.rb | ||
test_securerandom.rb | ||
test_set.rb | ||
test_shellwords.rb | ||
test_singleton.rb | ||
test_sync.rb | ||
test_syslog.rb | ||
test_tempfile.rb | ||
test_time.rb | ||
test_timeout.rb | ||
test_tmpdir.rb | ||
test_tracer.rb | ||
test_tsort.rb | ||
test_unicode_normalize.rb | ||
test_weakref.rb | ||
test_win32api.rb |