okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

nekomimi.petextension: move a session's Composition to extension/composition and the saved selection to extension/selection; callers use them directly4d9ce5d

main
1.8 KiB49 linesraw
1//// Offline: what a worker spawn copies. gleam run -m manual/copy_probe
2////
3//// Prints the heap words a process spawned over each value carries, so a
4//// value that should be shared (installed extensions) shows as nothing and
5//// a per-session one (the composition) shows what it actually costs.
6
7import albedo/harness/extension
8import albedo/harness/extension/composition
9import albedo/harness/runtime
10import gleam/int
11import gleam/io
12import gleam/list
13import harness/session_fixture
14
15@external(erlang, "albedo_copy_test_support", "captured_words")
16fn captured_words(term: a) -> Int
17
18@external(erlang, "erlang", "element")
19fn element(index: Int, term: a) -> b
20
21fn report(name: String, term: a) -> Nil {
22  io.println(
23    name <> ": " <> int.to_string(captured_words(term) * 8 / 1024) <> " KiB",
24  )
25}
26
27pub fn main() -> Nil {
28  let workspace = "/tmp"
29  let assert Ok(host) = runtime.start(":memory:")
30  session_fixture.initialise(host)
31  session_fixture.create(host, "probe", workspace)
32  let assert Ok(session) = runtime.open_session(host, "probe", workspace)
33  report("empty closure", Nil)
34  report("Runtime", host)
35  report("installed extensions", runtime.installed(host))
36  report("Session", session)
37  // Session(id, cwd, kernel, owner, composition, ...): the composition is
38  // element 6 of the record tuple, after the constructor tag.
39  let composed = element(6, session)
40  report("  composition.extensions", composition.extensions(composed))
41  // Composition(extensions, static, managed, failures): managed is element 4.
42  let managed: List(extension.Prepared) = element(4, composed)
43  list.each(managed, fn(prepared) {
44    report("  managed " <> prepared.extension, prepared.value)
45  })
46  report("  instructions", runtime.instructions(session))
47  report("  context", runtime.context(session))
48  runtime.stop(host)
49}