| // SPDX-License-Identifier: GPL-2.0 |
| |
| /* |
| * Copyright (C) 2018 VMware Inc, Yordan Karadzhov <y.karadz@gmail.com> |
| */ |
| |
| // C |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| // KernelShark |
| #include "libkshark.h" |
| |
| const char *default_file = "trace.dat"; |
| |
| int main(int argc, char **argv) |
| { |
| struct kshark_context *kshark_ctx; |
| struct kshark_entry **data = NULL; |
| ssize_t r, n_rows, n_tasks; |
| char *entry_str; |
| int sd, *pids; |
| |
| /* Create a new kshark session. */ |
| kshark_ctx = NULL; |
| if (!kshark_instance(&kshark_ctx)) |
| return 1; |
| |
| /* Open a trace data file produced by trace-cmd. */ |
| if (argc > 1) |
| sd = kshark_open(kshark_ctx, argv[1]); |
| else |
| sd = kshark_open(kshark_ctx, default_file); |
| |
| if (sd < 0) { |
| kshark_free(kshark_ctx); |
| return 1; |
| } |
| |
| /* Load the content of the file into an array of entries. */ |
| n_rows = kshark_load_entries(kshark_ctx, sd, &data); |
| if (n_rows < 1) { |
| kshark_free(kshark_ctx); |
| return 1; |
| } |
| |
| /* Print to the screen the list of all tasks. */ |
| n_tasks = kshark_get_task_pids(kshark_ctx, sd, &pids); |
| for (r = 0; r < n_tasks; ++r) { |
| char *task_str = kshark_comm_from_pid(sd, pids[r]); |
| printf("task: %s-%i\n", task_str, pids[r]); |
| free(task_str); |
| } |
| |
| free(pids); |
| |
| puts("\n\n"); |
| |
| /* Print to the screen the first 10 entries. */ |
| for (r = 0; r < 10; ++r) { |
| entry_str = kshark_dump_entry(data[r]); |
| puts(entry_str); |
| free(entry_str); |
| } |
| |
| puts("\n...\n"); |
| |
| /* Print the last 10 entries. */ |
| for (r = n_rows - 10; r < n_rows; ++r) |
| kshark_print_entry(data[r]); |
| |
| /* Free the memory. */ |
| for (r = 0; r < n_rows; ++r) |
| free(data[r]); |
| |
| free(data); |
| |
| /* Close the file. */ |
| kshark_close(kshark_ctx, sd); |
| |
| /* Close the session. */ |
| kshark_free(kshark_ctx); |
| |
| return 0; |
| } |