X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=trace_writer.cpp;h=a615960474d48b522d8d5606c1290451bd7868d5;hb=5ce45e7f614c7540f4d3d4f86db7a499f138d01e;hp=700f51188eb13a9e4f0af905ca8cf22b6801cb9c;hpb=466753b9c94f4ea5c771c791e64c575da4b01701;p=apitrace diff --git a/trace_writer.cpp b/trace_writer.cpp index 700f511..a615960 100644 --- a/trace_writer.cpp +++ b/trace_writer.cpp @@ -30,10 +30,9 @@ #include #include -#include - #include "os.hpp" #include "trace_writer.hpp" +#include "trace_file.hpp" #include "trace_format.hpp" @@ -41,30 +40,29 @@ namespace Trace { Writer::Writer() : - g_gzFile(NULL), call_no(0) { + m_file = new Trace::ZLibFile; close(); -}; +} -Writer::~Writer() { +Writer::~Writer() +{ close(); -}; + delete m_file; + m_file = NULL; +} void Writer::close(void) { - if (g_gzFile != NULL) { - gzclose(g_gzFile); - g_gzFile = NULL; - } + m_file->close(); } bool Writer::open(const char *filename) { close(); - g_gzFile = gzopen(filename, "wb"); - if (!g_gzFile) { + if (!m_file->open(filename, File::Write)) { return false; } @@ -123,10 +121,7 @@ Writer::open(void) { void inline Writer::_write(const void *sBuffer, size_t dwBytesToWrite) { - if (g_gzFile == NULL) - return; - - gzwrite(g_gzFile, sBuffer, dwBytesToWrite); + m_file->write(sBuffer, dwBytesToWrite); } void inline @@ -184,7 +179,7 @@ inline bool lookup(std::vector &map, size_t index) { unsigned Writer::beginEnter(const FunctionSig *sig) { OS::AcquireMutex(); - if (!g_gzFile) { + if (!m_file->isOpened()) { open(); } @@ -204,7 +199,7 @@ unsigned Writer::beginEnter(const FunctionSig *sig) { void Writer::endEnter(void) { _writeByte(Trace::CALL_END); - gzflush(g_gzFile, Z_SYNC_FLUSH); + m_file->flush(); OS::ReleaseMutex(); } @@ -216,7 +211,7 @@ void Writer::beginLeave(unsigned call) { void Writer::endLeave(void) { _writeByte(Trace::CALL_END); - gzflush(g_gzFile, Z_SYNC_FLUSH); + m_file->flush(); OS::ReleaseMutex(); } @@ -333,7 +328,7 @@ void Writer::writeBitmask(const BitmaskSig *sig, unsigned long long value) { _writeUInt(sig->num_flags); for (unsigned i = 0; i < sig->num_flags; ++i) { if (i != 0 && sig->flags[i].value == 0) { - OS::DebugMessage("apitrace: sig %s is zero but is not first flag\n", sig->flags[i].name); + OS::DebugMessage("apitrace: warning: sig %s is zero but is not first flag\n", sig->flags[i].name); } _writeString(sig->flags[i].name); _writeUInt(sig->flags[i].value);