blob: e259b3adc02b3a6258e44da602beb125f204abd9 [file] [log] [blame]
// 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;
}