Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions performance/benchmark.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,9 @@
x.report("parse:") { profiler.compile }
x.report("render:") { profiler.render }
x.report("parse & render:") { profiler.run }

if profiler.serialization_enabled?
x.report("deserialize:") { profiler.deserialize }
x.report("deserialize & render:") { profiler.deserialize_and_render }
end
end
45 changes: 42 additions & 3 deletions performance/theme_runner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ def initialize
end.compact

compile_all_tests
serialize_all_tests if serialization_enabled?
end

# `compile` will test just the compilation portion of liquid without any templates
Expand Down Expand Up @@ -71,12 +72,37 @@ def render
end
end

def serialization_enabled?
defined?(Liquid::C) && Liquid::C.enabled
end

def deserialize
@serialized_tests.each do |test|
Liquid::Template.load(test[:tmpl])
Liquid::Template.load(test[:layout])
end
end

def deserialize_and_render
@serialized_tests.each do |test|
tmpl = test[:tmpl]
assigns = test[:assigns]
layout = test[:layout]

render_layout(Liquid::Template.load(tmpl), Liquid::Template.load(layout), assigns)
end
end

private

def render_layout(template, layout, assigns)
assigns['content_for_layout'] = template.render!(assigns)
layout&.render!(assigns)
end

def compile_and_render(template, layout, assigns, page_template, template_file)
compiled_test = compile_test(template, layout, assigns, page_template, template_file)
assigns['content_for_layout'] = compiled_test[:tmpl].render!(assigns)
compiled_test[:layout].render!(assigns) if layout
compiled_test = compile_test(template, layout, assigns, page_template, template_file)
render_layout(compiled_test[:layout], compiled_test[:tmpl], compiled_test[:assigns])
end

def compile_all_tests
Expand All @@ -99,6 +125,19 @@ def compile_test(template, layout, assigns, page_template, template_file)
end
end

def serialize_all_tests
@serialized_tests = []
@compiled_tests.each do |test_hash|
@serialized_tests <<
if test_hash[:layout]
{ tmpl: test_hash[:tmpl].dump, assigns: test_hash[:assigns], layout: test_hash[:layout].dump }
else
{ tmpl: test_hash[:tmpl].dump, assigns: test_hash[:assigns] }
end
end
@serialized_tests
end

# utility method with similar functionality needed in `compile_all_tests` and `run`
def each_test
# Dup assigns because will make some changes to them
Expand Down