aboutsummaryrefslogtreecommitdiff
path: root/lib/std/valgrind/callgrind.zig
diff options
context:
space:
mode:
Diffstat (limited to 'lib/std/valgrind/callgrind.zig')
-rw-r--r--lib/std/valgrind/callgrind.zig64
1 files changed, 64 insertions, 0 deletions
diff --git a/lib/std/valgrind/callgrind.zig b/lib/std/valgrind/callgrind.zig
new file mode 100644
index 0000000000..d008294870
--- /dev/null
+++ b/lib/std/valgrind/callgrind.zig
@@ -0,0 +1,64 @@
+const std = @import("../index.zig");
+const valgrind = std.valgrind;
+
+pub const CallgrindClientRequest = extern enum {
+ DumpStats = valgrind.ToolBase("CT"),
+ ZeroStats,
+ ToggleCollect,
+ DumpStatsAt,
+ StartInstrumentation,
+ StopInstrumentation,
+};
+
+fn doCallgrindClientRequestExpr(default: usize, request: CallgrindClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) usize {
+ return valgrind.doClientRequest(default, @intCast(usize, @enumToInt(request)), a1, a2, a3, a4, a5);
+}
+
+fn doCallgrindClientRequestStmt(request: CallgrindClientRequest, a1: usize, a2: usize, a3: usize, a4: usize, a5: usize) void {
+ _ = doCallgrindClientRequestExpr(0, request, a1, a2, a3, a4, a5);
+}
+
+/// Dump current state of cost centers, and zero them afterwards
+pub fn dumpStats() void {
+ doCallgrindClientRequestStmt(CallgrindClientRequest.DumpStats, 0, 0, 0, 0, 0);
+}
+
+/// Dump current state of cost centers, and zero them afterwards.
+/// The argument is appended to a string stating the reason which triggered
+/// the dump. This string is written as a description field into the
+/// profile data dump.
+pub fn dumpStatsAt(pos_str: [*]u8) void {
+ doCallgrindClientRequestStmt(CallgrindClientRequest.DumpStatsAt, @ptrToInt(pos_str), 0, 0, 0, 0);
+}
+
+/// Zero cost centers
+pub fn zeroStats() void {
+ doCallgrindClientRequestStmt(CallgrindClientRequest.ZeroStats, 0, 0, 0, 0, 0);
+}
+
+/// Toggles collection state.
+/// The collection state specifies whether the happening of events
+/// should be noted or if they are to be ignored. Events are noted
+/// by increment of counters in a cost center
+pub fn toggleCollect() void {
+ doCallgrindClientRequestStmt(CallgrindClientRequest.ToggleCollect, 0, 0, 0, 0, 0);
+}
+
+/// Start full callgrind instrumentation if not already switched on.
+/// When cache simulation is done, it will flush the simulated cache;
+/// this will lead to an artificial cache warmup phase afterwards with
+/// cache misses which would not have happened in reality.
+pub fn startInstrumentation() void {
+ doCallgrindClientRequestStmt(CallgrindClientRequest.StartInstrumentation, 0, 0, 0, 0, 0);
+}
+
+/// Stop full callgrind instrumentation if not already switched off.
+/// This flushes Valgrinds translation cache, and does no additional
+/// instrumentation afterwards, which effectivly will run at the same
+/// speed as the "none" tool (ie. at minimal slowdown).
+/// Use this to bypass Callgrind aggregation for uninteresting code parts.
+/// To start Callgrind in this mode to ignore the setup phase, use
+/// the option "--instr-atstart=no".
+pub fn stopInstrumentation() void {
+ doCallgrindClientRequestStmt(CallgrindClientRequest.StopInstrumentation, 0, 0, 0, 0, 0);
+}