Improved GuiState to fully recalculate before returning from draw

This commit is contained in:
2026-01-09 09:29:41 -06:00
parent 97055885a6
commit 0519253e03
3 changed files with 18 additions and 14 deletions

View File

@@ -69,6 +69,8 @@ require_relative "cyberarm_engine/ui/gui_state"
require_relative "cyberarm_engine/builtin/intro_state"
at_exit do
StackProf.results("./_prof.txt") if RUBY_ENGINE != "mruby" && defined?(StackProf)
if RUBY_ENGINE != "mruby" && defined?(StackProf)
at_exit do
StackProf.results("./_stackprof.dmp")
end
end

View File

@@ -210,7 +210,7 @@ module CyberarmEngine
end
end
t = Gosu.milliseconds
# t = Gosu.milliseconds
# Move children to parent after positioning
@children.each do |child|
child.x += (@x + @style.border_thickness_left) - style.margin_left
@@ -224,7 +224,7 @@ module CyberarmEngine
update_child_element_visibity(child)
end
puts "TOOK: #{Gosu.milliseconds - t}ms to recalculate #{self.class}:0x#{object_id.to_s(16)}'s #{@children.count} children" if is_root?
# puts "TOOK: #{Gosu.milliseconds - t}ms to recalculate #{self.class}:0x#{object_id.to_s(16)}'s #{@children.count} children" if is_root?
update_background

View File

@@ -54,27 +54,29 @@ module CyberarmEngine
end
def draw
# t = Gosu.milliseconds
# report_recalculate_time = @pending_recalculate_request || @pending_element_recalculate_requests.size.positive?
StackProf.start(mode: :wall) if RUBY_ENGINE != "mruby" && defined?(StackProf)
Stats.frame.start_timing(:gui_element_recalculate_requests)
# puts "PENDING REQUESTS: #{@pending_element_recalculate_requests.size}" if @pending_element_recalculate_requests.size.positive?
@pending_recalculate_request = true if @pending_element_recalculate_requests.size.positive?
# @pending_element_recalculate_requests.each(&:recalculate)
@pending_element_recalculate_requests.clear
@pending_element_recalculate_requests.shift(&:recalculate)
Stats.frame.end_timing(:gui_element_recalculate_requests)
if @pending_recalculate_request
Stats.frame.start_timing(:gui_recalculate)
StackProf.start(mode: :wall) if RUBY_ENGINE != "mruby" && defined?(StackProf)
@root_container.recalculate
StackProf.stop if RUBY_ENGINE != "mruby" && defined?(StackProf)
Stats.frame.start_timing(:gui_recalculate)
while(@pending_recalculate_request)
@pending_recalculate_request = false
Stats.frame.end_timing(:gui_recalculate)
@root_container.recalculate
end
StackProf.stop if RUBY_ENGINE != "mruby" && defined?(StackProf)
Stats.frame.end_timing(:gui_recalculate)
# puts "TOOK: #{Gosu.milliseconds - t}ms to recalculate #{self.class}:0x#{object_id.to_s(16)}" if report_recalculate_time && Gosu.milliseconds - t > 0
super
if @menu