diff options
author | Bartosz Taudul <wolf.pld@gmail.com> | 2018-08-26 17:25:43 +0300 |
---|---|---|
committer | Bartosz Taudul <wolf.pld@gmail.com> | 2018-08-26 17:25:43 +0300 |
commit | b3b12f76f3e20f7f42f8086bb4cc01c110d3af5e (patch) | |
tree | 002edccc301458c2730795c56a0bfb71b5807ca2 /server/TracyFileWrite.hpp | |
parent | 0f0528ca3ddc717bf7de20c3aeb26cd3c16497c4 (diff) |
Add LZ4HC support to FileWrite.
Diffstat (limited to 'server/TracyFileWrite.hpp')
-rw-r--r-- | server/TracyFileWrite.hpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/server/TracyFileWrite.hpp b/server/TracyFileWrite.hpp index ef924fce..4b22ba05 100644 --- a/server/TracyFileWrite.hpp +++ b/server/TracyFileWrite.hpp @@ -7,6 +7,7 @@ #include "TracyFileHeader.hpp" #include "../common/tracy_lz4.hpp" +#include "../common/tracy_lz4hc.hpp" #include "../common/TracyForceInline.hpp" namespace tracy @@ -15,10 +16,10 @@ namespace tracy class FileWrite { public: - static FileWrite* Open( const char* fn ) + static FileWrite* Open( const char* fn, bool hc = false ) { auto f = fopen( fn, "wb" ); - return f ? new FileWrite( f ) : nullptr; + return f ? new FileWrite( f, hc ) : nullptr; } ~FileWrite() @@ -28,7 +29,9 @@ public: WriteLz4Block(); } fclose( m_file ); - LZ4_freeStream( m_stream ); + + if( m_stream ) LZ4_freeStream( m_stream ); + if( m_streamHC ) LZ4_freeStreamHC( m_streamHC ); } tracy_force_inline void Write( const void* ptr, size_t size ) @@ -44,13 +47,23 @@ public: } private: - FileWrite( FILE* f ) - : m_stream( LZ4_createStream() ) + FileWrite( FILE* f, bool hc ) + : m_stream( nullptr ) + , m_streamHC( nullptr ) , m_file( f ) , m_buf( m_bufData[0] ) , m_second( m_bufData[1] ) , m_offset( 0 ) { + if( hc ) + { + m_streamHC = LZ4_createStreamHC(); + } + else + { + m_stream = LZ4_createStream(); + } + fwrite( Lz4Header, 1, sizeof( Lz4Header ), m_file ); } @@ -81,7 +94,15 @@ private: void WriteLz4Block() { char lz4[LZ4Size]; - const uint32_t sz = LZ4_compress_fast_continue( m_stream, m_buf, lz4, m_offset, LZ4Size, 1 ); + uint32_t sz; + if( m_stream ) + { + sz = LZ4_compress_fast_continue( m_stream, m_buf, lz4, m_offset, LZ4Size, 1 ); + } + else + { + sz = LZ4_compress_HC_continue( m_streamHC, m_buf, lz4, m_offset, LZ4Size ); + } fwrite( &sz, 1, sizeof( sz ), m_file ); fwrite( lz4, 1, sz, m_file ); m_offset = 0; @@ -92,6 +113,7 @@ private: enum { LZ4Size = LZ4_COMPRESSBOUND( BufSize ) }; LZ4_stream_t* m_stream; + LZ4_streamHC_t* m_streamHC; FILE* m_file; char m_bufData[2][BufSize]; char* m_buf; |