Skip to content

Commit 01c65fa

Browse files
committed
Generate text file only table
I'm using Stackprof for a performance check of CRuby documents generation. Before this commit, RDoc::TopLevel#text? uses processing time about 6.8%. ~/rdoc$ stackprof stackprof.dump --text --limit 5 ================================== Mode: cpu(1000) Samples: 42712 (0.47% miss rate) GC: 6066 (14.20%) ================================== TOTAL (pct) SAMPLES (pct) FRAME 6066 (14.2%) 6066 (14.2%) (garbage collection) 2892 (6.8%) 2892 (6.8%) RDoc::TopLevel#text? 14059 (32.9%) 2379 (5.6%) RDoc::Generator::Darkfish#generate_class 3015 (7.1%) 1389 (3.3%) Ripper::Lexer#lex 1265 (3.0%) 1265 (3.0%) Ripper::Lexer::State#initialize After this commit, processing time of RDoc::TopLevel#text? is reduced to 0.1%. ~/rdoc$ stackprof stackprof.dump --method 'RDoc::TopLevel#text?' RDoc::TopLevel#text? (/home/aycabta/rdoc/lib/rdoc/top_level.rb:274) samples: 20 self (0.1%) / 20 total (0.1%) callers: 17 ( 85.0%) RDoc::Generator::Darkfish#generate_page 2 ( 10.0%) RDoc::Store#add_file 1 ( 5.0%) RDoc::Store#complete
1 parent 60dd714 commit 01c65fa

File tree

5 files changed

+16
-17
lines changed

5 files changed

+16
-17
lines changed

lib/rdoc/rdoc.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ def parse_file filename
355355
relative_path.relative_path_from @options.page_dir
356356
end
357357

358-
top_level = @store.add_file filename, relative_path.to_s
358+
top_level = @store.add_file filename, relative_name: relative_path.to_s
359359

360360
parser = RDoc::Parser.for top_level, filename, content, @options, @stats
361361

lib/rdoc/store.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ def initialize path = nil, type = nil
148148
@classes_hash = {}
149149
@modules_hash = {}
150150
@files_hash = {}
151+
@text_files_hash = {}
151152

152153
@c_enclosure_classes = {}
153154
@c_enclosure_names = {}
@@ -184,11 +185,13 @@ def add_c_variables c_parser
184185
# Adds the file with +name+ as an RDoc::TopLevel to the store. Returns the
185186
# created RDoc::TopLevel.
186187

187-
def add_file absolute_name, relative_name = absolute_name
188+
def add_file absolute_name, relative_name: absolute_name, parser: nil
188189
unless top_level = @files_hash[relative_name] then
189190
top_level = RDoc::TopLevel.new absolute_name, relative_name
191+
top_level.parser = parser if parser
190192
top_level.store = self
191193
@files_hash[relative_name] = top_level
194+
@text_files_hash[relative_name] = top_level if top_level.text?
192195
end
193196

194197
top_level
@@ -428,8 +431,8 @@ def find_module_named name
428431
# +file_name+
429432

430433
def find_text_page file_name
431-
@files_hash.each_value.find do |file|
432-
file.text? and file.full_name == file_name
434+
@text_files_hash.each_value.find do |file|
435+
file.full_name == file_name
433436
end
434437
end
435438

@@ -537,6 +540,7 @@ def load_all
537540
@cache[:pages].each do |page_name|
538541
page = load_page page_name
539542
@files_hash[page_name] = page
543+
@text_files_hash[page_name] = page if page.text?
540544
end
541545
end
542546

@@ -712,8 +716,8 @@ def modules_hash
712716
# Returns the RDoc::TopLevel that is a text file and has the given +name+
713717

714718
def page name
715-
@files_hash.each_value.find do |file|
716-
file.text? and file.page_name == name
719+
@text_files_hash.each_value.find do |file|
720+
file.page_name == name
717721
end
718722
end
719723

test/test_rdoc_cross_reference.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,7 @@ def test_resolve_method_equals3
162162
end
163163

164164
def test_resolve_page
165-
page = @store.add_file 'README.txt'
166-
page.parser = RDoc::Parser::Simple
165+
page = @store.add_file 'README.txt', parser: RDoc::Parser::Simple
167166

168167
assert_ref page, 'README'
169168
end

test/test_rdoc_servlet.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,7 @@ def test_documentation_page_page
224224

225225
generator = @s.generator_for store
226226

227-
readme = store.add_file 'README.rdoc'
228-
readme.parser = RDoc::Parser::Simple
227+
readme = store.add_file 'README.rdoc', parser: RDoc::Parser::Simple
229228

230229
@s.documentation_page store, generator, 'README_rdoc.html', @req, @res
231230

test/test_rdoc_store.rb

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ def setup
1414

1515
@top_level = @s.add_file 'file.rb'
1616

17-
@page = @s.add_file 'README.txt'
18-
@page.parser = RDoc::Parser::Simple
17+
@page = @s.add_file 'README.txt', parser: RDoc::Parser::Simple
1918
@page.comment = RDoc::Comment.new 'This is a page', @page
2019

2120
@klass = @top_level.add_class RDoc::NormalClass, 'Object'
@@ -146,7 +145,7 @@ def test_add_file
146145
end
147146

148147
def test_add_file_relative
149-
top_level = @store.add_file 'path/file.rb', 'file.rb'
148+
top_level = @store.add_file 'path/file.rb', relative_name: 'file.rb'
150149

151150
assert_kind_of RDoc::TopLevel, top_level
152151
assert_equal @store, top_level.store
@@ -310,8 +309,7 @@ def test_find_module_named
310309
end
311310

312311
def test_find_text_page
313-
page = @store.add_file 'PAGE.txt'
314-
page.parser = RDoc::Parser::Simple
312+
page = @store.add_file 'PAGE.txt', parser: RDoc::Parser::Simple
315313

316314
assert_nil @store.find_text_page 'no such page'
317315

@@ -601,8 +599,7 @@ def test_module_names
601599
end
602600

603601
def test_page
604-
page = @store.add_file 'PAGE.txt'
605-
page.parser = RDoc::Parser::Simple
602+
page = @store.add_file 'PAGE.txt', parser: RDoc::Parser::Simple
606603

607604
assert_nil @store.page 'no such page'
608605

0 commit comments

Comments
 (0)