summaryrefslogtreecommitdiff
path: root/tex/context/base/m-timing.tex
blob: 55185b0b2128302dfebcaced66314f2b63d76c5c (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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
%D \module
%D   [       file=m-timing,
%D        version=2007.12.23,
%D          title=\CONTEXT\ Modules,
%D       subtitle=Timing,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright=Hans Hagen]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

\doifnotmode{mkiv}{\endinput}

\ifx\ShowNamedUsage\undefined \else \endinput \fi

%D Written at the end of 2007, this module is dedicated to Taco. Reaching this
%D point in \LUATEX\ was a non trivial effort. By visualizing a bit what happens
%D when pages come out of \LUATEX, you may get an idea what is involved. It took
%D much time an dedication to reach this point in the development. Add to that
%D those daily Skype intense discussion, testing and debugging moments. Time flies
%D but progress is impressive. The motto of this module could be: what you see
%D is what you get. An there is much more to come \unknown.

% \usemodule[timing]
% \setupcolors[state=start]
% \starttext
%     \dorecurse{200}{\input tufte \par} \ShowUsage{}
% \stoptext

\definecolor[usage:line] [darkred]
\definecolor[usage:time] [darkblue]
\definecolor[usage:frame][darkgray]

\ctxloadluafile{trac-tim}{}

\startluacode
local progress = moduledata.progress

function progress.show(filename,parameters,nodes,other)
    for n, name in pairs(parameters or progress.parameters(filename)) do
        tex.sprint(tex.ctxcatcodes,string.format("\\ShowNamedUsage{%s}{%s}{%s}",filename or progress.defaultfilename,name,other or ""))
    end
    for n, name in pairs(nodes or progress.nodes(filename)) do
        tex.sprint(tex.ctxcatcodes,string.format("\\ShowNamedUsage{%s}{%s}{%s}",filename or progress.defaultfilename,name,other or ""))
    end
end
\stopluacode

% \everyfirstshipout

\startnotmode[no-timing]
    \appendtoks\ctxlua{moduledata.progress.store()}\to\everystarttext
    \appendtoks\ctxlua{moduledata.progress.store()}\to\everyshipout
    \ctxlua{luatex.register_stop_actions(function() moduledata.progress.save() end)}
\stopnotmode

\def\ShowNamedUsage#1#2#3%
  {\setbox\scratchbox\vbox\bgroup\startMPcode
      begingroup ; save p, q, b, h, w ;
      path p, q, b ; numeric h, w ;
      p := \ctxlua{tex.sprint(moduledata.progress.path("#1","#2"))} ;
% p := p shifted -llcorner p ;
      if bbwidth(p) > 1 :
        h := 100 ; w := 2 * h ;
        w := \the\textwidth-3pt ; % correct for pen
        p := p xstretched w ;
        b := boundingbox (llcorner p -- llcorner p shifted (w,h)) ;
        pickup pencircle scaled 3pt ; linecap := butt ;
        draw b withcolor \MPcolor{usage:frame} ;
        draw p withcolor \MPcolor{usage:line} ;
        if ("#3" <> "") and ("#3" <> "#2") :
          q := \ctxlua{tex.sprint(moduledata.progress.path("#1","#3"))} ;
% q := q shifted -llcorner q ;
          if bbwidth(q) > 1 :
            q := q xstretched w ;
            pickup pencircle scaled 1.5pt ; linecap := butt ;
            draw q withcolor \MPcolor{usage:time} ;
          fi ;
        fi ;
      fi ;
      endgroup ;
   \stopMPcode\egroup
   \scratchdimen\wd\scratchbox
   \ifdim\scratchdimen>\zeropoint
     \startlinecorrection
         \box\scratchbox \endgraf
         \hbox to \scratchdimen{\tttf\strut\detokenize{#2}\hss
          min:\ctxlua{tex.sprint(moduledata.progress.bot("#1","\detokenize{#2}"))}, %
          max:\ctxlua{tex.sprint(moduledata.progress.top("#1","\detokenize{#2}"))}, %
          pages:\ctxlua{tex.sprint(moduledata.progress.pages("#1"))}%
         }%
     \stoplinecorrection
   \fi}

\def\LoadUsage      #1{\ctxlua{moduledata.progress.convert("#1")}}
\def\ShowUsage      #1{\ctxlua{moduledata.progress.show("#1",nil,nil,"elapsed_time")}}
\def\ShowMemoryUsage#1{\ctxlua{moduledata.progress.show("#1",nil,{}, "elapsed_time")}}
\def\ShowNodeUsage  #1{\ctxlua{moduledata.progress.show("#1",{},nil, "elapsed_time")}}

\endinput