blob: 0bc9afbaa0bb287b78fafc64d78b9ca081ee5e0a [file] [log] [blame]
/*
* Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
* Distributed under the terms of the GNU General Public License v2
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "eprintf.h"
#include "ktop.h"
#include "reduce.h"
#include "util.h"
static FILE *Fp;
static char *File;
void log_open (const char *file)
{
if (Fp) {
warn("Log file already in use %s", file);
} else {
Fp = fopen(file, "w");
if (!Fp) fatal("Couldn't open log file %s:", file);
File = strdup(file);
}
}
void log_close (void)
{
if (Fp) {
fclose(Fp);
free(File);
Fp = NULL;
File = NULL;
}
}
void log_pidcalls (void)
{
static unint interval = 0;
Pidcall_s *pc;
int pid;
int i;
int rc;
if (!Fp) return;
++interval;
for (i = 0; i < Num_rank; i++) {
pc = Rank_pidcall[i];
pid = get_pid(pc->pidcall);
if (!pc->name) {
pc->name = get_exe_path(pid);
}
rc = fprintf(Fp, "%ld,%d,%d,%lld,%s,%s\n",
interval, pid, pc->snap.count,
pc->snap.total_time,
Syscall[get_call(pc->pidcall)],
pc->name);
if (rc < 0) {
warn("Log failed %s:", File);
log_close();
}
}
}