blob: 2e6fa672c4090f0ff0daf1e2a7a098333230cd12 [file] [log] [blame]
/* -*- Mode: C++; tab-width: 8; c-basic-offset: 2; indent-tabs-mode: nil; -*- */
#include "TraceFrame.h"
#include <inttypes.h>
#include "core.h"
#include "util.h"
namespace rr {
TraceFrame::TraceFrame(FrameTime global_time, pid_t tid, const Event& event,
Ticks tick_count, double monotonic_time)
: global_time(global_time),
tid_(tid),
ev(event),
ticks_(tick_count),
monotonic_time_(monotonic_time ? monotonic_time : monotonic_now_sec()) {}
void TraceFrame::dump(FILE* out) const {
out = out ? out : stdout;
fprintf(out, "{\n real_time:%f global_time:%llu, event:`%s' ",
monotonic_time(), (long long)time(), event().str().c_str());
if (event().is_syscall_event()) {
fprintf(out, "(state:%s) ", state_name(event().Syscall().state));
}
fprintf(out, "tid:%d, ticks:%" PRId64 "\n", tid(), ticks());
if (!event().record_regs()) {
return;
}
regs().print_register_file_compact(out);
if (recorded_extra_regs.format() != ExtraRegisters::NONE) {
fputc(' ', out);
recorded_extra_regs.print_register_file_compact(out);
}
fprintf(out, "\n");
}
void TraceFrame::dump_raw(FILE* out) const {
out = out ? out : stdout;
fprintf(out, " %lld %d %d %" PRId64, (long long)time(), tid(), event().type(),
ticks());
if (!event().record_regs()) {
fprintf(out, "\n");
return;
}
regs().print_register_file_for_trace_raw(out);
fprintf(out, "\n");
}
} // namespace rr