blob: 743ee6a5f367990d160a57c76d98a88eb7a5ddfa [file] [log] [blame]
/**************************************************************************
*
* Copyright 2015-2016 Valve Corporation
* Copyright (C) 2015-2016 LunarG, Inc.
* All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Author: Jon Ashburn <jon@lunarg.com>
**************************************************************************/
#pragma once
extern "C" {
#include "vktrace_filelike.h"
#include "vktrace_trace_packet_identifiers.h"
}
/* Class to handle fetching and sequencing packets from a tracefile.
* Contains no knowledge of type of tracer needed to process packet.
* Requires low level file/stream reading/seeking support. */
namespace vktrace_replay {
struct seqBookmark
{
unsigned int file_offset;
};
// replay Sequencer interface
class AbstractSequencer
{
public:
virtual ~AbstractSequencer() {}
virtual vktrace_trace_packet_header *get_next_packet() = 0;
virtual void get_bookmark(seqBookmark &bookmark) = 0;
virtual void set_bookmark(const seqBookmark &bookmark) = 0;
};
class Sequencer: public AbstractSequencer
{
public:
Sequencer(FileLike* pFile) : m_lastPacket(NULL), m_pFile(pFile) {}
~Sequencer() {
this->clean_up();
}
void clean_up() {
if (m_lastPacket){
free(m_lastPacket);
m_lastPacket = NULL;
}
}
vktrace_trace_packet_header *get_next_packet();
void get_bookmark(seqBookmark &bookmark);
void set_bookmark(const seqBookmark &bookmark);
void record_bookmark();
private:
vktrace_trace_packet_header *m_lastPacket;
seqBookmark m_bookmark;
FileLike *m_pFile;
};
} /* namespace vktrace_replay */