blob: aea2a7056d0a261fb738691a9f29dd885034b0af (
plain) (
blame)
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
|
// Author: cirakg & claude ai
// Summary: Debug-only diagnostics (start-up time, memory) for `make perf` and `make memtest`.
//
// Debug builds print one machine-readable line per event to the simulator
// console: "DIAG", the event name, then key=value pairs, for example
// DIAG first_frame startup_ms=1 mem_used=6984 mem_total=781888
// tools/check_budgets.py reads these lines and compares them with
// tools/budgets.json. Plain key=value pairs are used instead of JSON because
// the simulator console escapes quotes. Release builds compile the empty
// (:release) versions instead, so a real watch running a release build never
// logs anything.
//
// Security rule: only timings and memory counters ever go through here, never
// secrets, codes or entry names. This is the only file allowed to call
// System.println outside tests (enforced by tools/lint_project.py).
import Toybox.Lang;
import Toybox.System;
module Diag {
// System.getTimer() value when the app object was created.
(:debug)
var startMs as Number = 0;
// Start the start-up timer. Called from OtpWalletApp.initialize().
(:debug)
function markStart() as Void {
startMs = System.getTimer();
}
(:release)
function markStart() as Void {
}
// Report start-up time and memory use after the first complete frame.
// startup_ms covers app object creation to the end of the first draw. The
// time the system needs to load the program before that is invisible to
// the app; app-diag.sh measures it from outside (README section 18).
(:debug)
function firstFrame() as Void {
var stats = System.getSystemStats();
System.println("DIAG first_frame startup_ms=" + (System.getTimer() - startMs)
+ " mem_used=" + stats.usedMemory + " mem_total=" + stats.totalMemory);
}
(:release)
function firstFrame() as Void {
}
}
|