Performance and reporting improvements

This commit is contained in:
Michael Freno
2025-11-17 17:41:01 -05:00
parent a8be1f5342
commit 2c04f69daa
18 changed files with 1987 additions and 82 deletions

View File

@@ -0,0 +1,156 @@
local luaunit = require("testing.luaunit")
require("testing.loveStub")
local FlexLove = require("FlexLove")
local Performance = require("modules.Performance")
local Element = FlexLove.Element
TestPerformanceWarnings = {}
function TestPerformanceWarnings:setUp()
-- Enable performance warnings
Performance.setConfig("warningsEnabled", true)
Performance.resetShownWarnings()
end
function TestPerformanceWarnings:tearDown()
-- Reset warnings
Performance.resetShownWarnings()
end
-- Test hierarchy depth warning
function TestPerformanceWarnings:testHierarchyDepthWarning()
-- Create a deep hierarchy (20 levels)
local root = Element.new({
id = "root",
width = 100,
height = 100,
}, Element.defaultDependencies)
local current = root
for i = 1, 20 do
local child = Element.new({
id = "child_" .. i,
width = 50,
height = 50,
parent = current,
}, Element.defaultDependencies)
table.insert(current.children, child)
current = child
end
-- This should trigger a hierarchy depth warning
root:layoutChildren()
-- Check that element was created successfully despite warning
luaunit.assertNotNil(current)
luaunit.assertEquals(current:getHierarchyDepth(), 20)
end
-- Test element count warning
function TestPerformanceWarnings:testElementCountWarning()
-- Create a container with many children (simulating 1000+ elements)
local root = Element.new({
id = "root",
width = 1000,
height = 1000,
}, Element.defaultDependencies)
-- Add many child elements
for i = 1, 50 do -- Keep test fast, just verify the counting logic works
local child = Element.new({
id = "child_" .. i,
width = 20,
height = 20,
parent = root,
}, Element.defaultDependencies)
table.insert(root.children, child)
end
local count = root:countElements()
luaunit.assertEquals(count, 51) -- root + 50 children
end
-- Test animation count warning
function TestPerformanceWarnings:testAnimationTracking()
local root = Element.new({
id = "root",
width = 100,
height = 100,
}, Element.defaultDependencies)
-- Add some animated children
for i = 1, 3 do
local child = Element.new({
id = "animated_child_" .. i,
width = 20,
height = 20,
parent = root,
}, Element.defaultDependencies)
-- Add mock animation
child.animation = {
update = function()
return false
end,
interpolate = function()
return { width = 20, height = 20 }
end,
}
table.insert(root.children, child)
end
local animCount = root:_countActiveAnimations()
luaunit.assertEquals(animCount, 3)
end
-- Test warnings can be disabled
function TestPerformanceWarnings:testWarningsCanBeDisabled()
Performance.setConfig("warningsEnabled", false)
-- Create deep hierarchy
local root = Element.new({
id = "root",
width = 100,
height = 100,
}, Element.defaultDependencies)
local current = root
for i = 1, 20 do
local child = Element.new({
id = "child_" .. i,
width = 50,
height = 50,
parent = current,
}, Element.defaultDependencies)
table.insert(current.children, child)
current = child
end
-- Should not trigger warning (but should still create elements)
root:layoutChildren()
luaunit.assertEquals(current:getHierarchyDepth(), 20)
-- Re-enable for other tests
Performance.setConfig("warningsEnabled", true)
end
-- Test layout recalculation tracking
function TestPerformanceWarnings:testLayoutRecalculationTracking()
local root = Element.new({
id = "root",
width = 100,
height = 100,
}, Element.defaultDependencies)
-- Layout multiple times (simulating layout thrashing)
for i = 1, 5 do
root:layoutChildren()
end
-- Should complete without crashing
luaunit.assertNotNil(root)
end
return TestPerformanceWarnings