Allow ovnidump to load unsorted traces
This commit is contained in:
parent
2fbf022823
commit
c6860854b4
@ -3,7 +3,7 @@
|
||||
|
||||
#define _POSIX_C_SOURCE 2
|
||||
|
||||
#define ENABLE_DEBUG
|
||||
//#define ENABLE_DEBUG
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
@ -45,7 +45,7 @@ emu_init(struct emu *emu, int argc, char *argv[])
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (player_init(&emu->player, &emu->trace) != 0) {
|
||||
if (player_init(&emu->player, &emu->trace, 0) != 0) {
|
||||
err("cannot init player for trace '%s'\n",
|
||||
emu->args.tracedir);
|
||||
return -1;
|
||||
|
@ -99,7 +99,7 @@ main(int argc, char *argv[])
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (player_init(player, trace) != 0) {
|
||||
if (player_init(player, trace, 1) != 0) {
|
||||
err("player_init failed");
|
||||
return 1;
|
||||
}
|
||||
|
@ -89,7 +89,7 @@ check_clock_gate(struct trace *trace)
|
||||
}
|
||||
|
||||
int
|
||||
player_init(struct player *player, struct trace *trace)
|
||||
player_init(struct player *player, struct trace *trace, int unsorted)
|
||||
{
|
||||
memset(player, 0, sizeof(struct player));
|
||||
|
||||
@ -98,10 +98,14 @@ player_init(struct player *player, struct trace *trace)
|
||||
player->first_event = 1;
|
||||
player->stream = NULL;
|
||||
player->trace = trace;
|
||||
player->unsorted = unsorted;
|
||||
|
||||
/* Load initial streams and events */
|
||||
struct stream *stream;
|
||||
DL_FOREACH(trace->streams, stream) {
|
||||
if (unsorted)
|
||||
stream_allow_unsorted(stream);
|
||||
|
||||
int ret = step_stream(player, stream);
|
||||
if (ret > 0) {
|
||||
/* No more events */
|
||||
@ -114,8 +118,8 @@ player_init(struct player *player, struct trace *trace)
|
||||
|
||||
/* Ensure the first event sclocks are not too far apart. Otherwise an
|
||||
* offset table is mandatory. */
|
||||
if (check_clock_gate(trace) != 0) {
|
||||
err("check_clock_gate failed\n");
|
||||
if (unsorted == 0 && check_clock_gate(trace) != 0) {
|
||||
err("check_clock_gate failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -147,8 +151,9 @@ update_clocks(struct player *player, struct stream *stream)
|
||||
}
|
||||
|
||||
if (sclock < player->lastclock) {
|
||||
err("backwards jump in time %ld -> %ld in stream '%s'\n",
|
||||
err("backwards jump in time %ld -> %ld in stream '%s'",
|
||||
player->lastclock, sclock, stream->relpath);
|
||||
if (player->unsorted == 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -16,11 +16,12 @@ struct player {
|
||||
int64_t lastclock;
|
||||
int64_t deltaclock;
|
||||
int first_event;
|
||||
int unsorted;
|
||||
struct stream *stream;
|
||||
struct emu_ev ev;
|
||||
};
|
||||
|
||||
int player_init(struct player *player, struct trace *trace);
|
||||
int player_init(struct player *player, struct trace *trace, int unsorted);
|
||||
int player_step(struct player *player);
|
||||
struct emu_ev *player_ev(struct player *player);
|
||||
struct stream *player_stream(struct player *player);
|
||||
|
Loading…
Reference in New Issue
Block a user