A prompt that comes and goes as a player walks (co-op's netleak: in_get, cmp_*_new, bd_class, value_slot/put) made a new record, props and model on every mount, and an action's call answered into a new Val (ev_call_with). examples/library/ui_remount: two thousand comings and goings hold the heap at 0, and the counter starts at 0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
30 lines
1.1 KiB
Text
30 lines
1.1 KiB
Text
# ui_remount.ludic - a component that comes and goes: mounted again, it starts as new (its state back
|
|
# to its defaults), and a thousand comings and goings hold the heap flat, because an unmounted
|
|
# instance is put back and mounted again rather than a record, props and model made each time
|
|
import "ludic.ui"
|
|
import "ui_remount_parts/Counter.ludic"
|
|
import "ui_remount_parts/Shown.ludic"
|
|
program UiRemount {
|
|
numbers float
|
|
function frame(ui_st: mut UiState) -> UiNode {
|
|
let root: UiNode = ui_nodes(ui_st, "Shown", null)
|
|
ui_place(ui_st, root, 0.0, 0.0, 300.0, 200.0)
|
|
return root
|
|
}
|
|
entry (ui_st: mut UiState) {
|
|
var root = frame(ui_st)
|
|
let c = root.children[0].children[1]
|
|
ui_press(ui_st, c.children[1])
|
|
ui_press(ui_st, c.children[1])
|
|
root = frame(ui_st)
|
|
let before = root.children[0].children[1].children[0].text
|
|
var at = 0
|
|
for i in 0 .. 2000 {
|
|
ui_press(ui_st, root.children[0].children[0])
|
|
root = frame(ui_st)
|
|
if i == 99 { at = Os.heap_bytes() }
|
|
}
|
|
let grew = Os.heap_bytes() - at
|
|
print(`{before} | {root.children[0].children[1].children[0].text} | heap {grew}`)
|
|
}
|
|
}
|