From ae44478b30d890fe0fb04022f44d474dcdcc3f9d Mon Sep 17 00:00:00 2001 From: Lassi Pulkkinen Date: Thu, 31 Oct 2024 03:11:21 +0200 Subject: Initial commit (import old repo) --- tracer+android.ha | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 tracer+android.ha (limited to 'tracer+android.ha') diff --git a/tracer+android.ha b/tracer+android.ha new file mode 100644 index 0000000..2e69527 --- /dev/null +++ b/tracer+android.ha @@ -0,0 +1,43 @@ +use fmt; +use io; +use memio; +use strings; +use trace; + +type Tracer = struct { + trace::tracer, +}; + +fn newtracer() Tracer = + Tracer { + log = &tracer_log, + }; + +fn tracer_log( + tr: *trace::tracer, + ctx: nullable *trace::context, + lvl: trace::level, + fmt: str, + fields: fmt::field... +) void = { + // XXX: ideally there would be a statically allocated buffer for + // reasonably short messages and allocation would only happen for + // messages longer than that. ideally ideally there would be locking so + // we wouldn't need to allocate at all. + const buf = memio::dynamic_from(alloc([], 256)); + defer io::close(&buf)!; + + let ctx_ = ctx; + for (true) match (ctx_) { + case let ctx__: *trace::context => + fmt::fprintf(&buf, ctx__.fmt, ctx__.fields...)!; + io::write(&buf, [0x3a, 0x20])!; // ": " + ctx_ = ctx__.next; + case null => break; + }; + + fmt::fprintfln(&buf, fmt, fields...)!; + + const prio = 6 - lvl: int; + androlog(prio, memio::string(&buf)!); +}; -- cgit v1.2.3