summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/mkxl/node-snp.lmt
blob: 8c0237a5c7df648a89ed48df878772ac015375e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
if not modules then modules = { } end modules ['node-snp'] = {
    version   = 1.001,
    comment   = "companion to node-ini.mkiv",
    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
    copyright = "PRAGMA ADE / ConTeXt Development Team",
    license   = "see context related readme files"
}

if not nodes then
    nodes = { } -- also loaded in mtx-timing
end

local snapshots = { }
nodes.snapshots = snapshots

local status    = status

local nodeusage = nodes.pool and nodes.pool.usage
local nodestock = nodes.pool and nodes.pool.stock
local clock     = os.gettimeofday or os.clock -- should go in environment
local lasttime  = clock()
local samples   = { }

function snapshots.takesample(comment)
    if nodeusage then
        local c = clock()
        samples[#samples+1] = {
            nodes            = nodeusage(),
            stock            = nodestock(),
            texcallbacks     = status.getcallbackstate(),
            mpcallbacks      = mplib.getcallbackstate(),
            backendcallbacks = backends.getcallbackstate(),
            luavariables     = status.getluastate(),
            texvariables     = status.gettexstate(),
            comment          = comment,
            variables        = {
                lasttime = c,
                elapsed  = c - lasttime,
            },
            memories         = {
                pool      = status.getpoolstate(),
                hash      = status.gethashstate(),
                lookup    = status.getlookupstate(),
                node      = status.getnodestate(),
                token     = status.gettokenstate(),
                buffer    = status.getbufferstate(),
                input     = status.getinputstate(),
                file      = status.getfilestate(),
                nest      = status.getneststate(),
                parameter = status.getparameterstate(),
                save      = status.getsavestate(),
                expand    = status.getexpandstate(),
                read      = status.getreadstate(),
                font      = status.getfontstate(),
                language  = status.getlanguagestate(),
                mark      = status.getmarkstate(),
                sparse    = status.getsparsestate(),
            },
        }
    end
end

function snapshots.getsamples()
    return samples -- one return value !
end

function snapshots.resetsamples()
    samples = { }
end