diff options
author | Bartosz Taudul <wolf.pld@gmail.com> | 2017-09-30 20:25:24 +0300 |
---|---|---|
committer | Bartosz Taudul <wolf.pld@gmail.com> | 2017-09-30 20:25:24 +0300 |
commit | a8b41faaf40df036e25b16d0a5edde0c2ea97a4e (patch) | |
tree | 10fc0e92f69e61f1c15b87e835a0d8dd76e93d83 /server/TracyFileRead.hpp | |
parent | 616f501a972ffacf787a5ebbc95bfee474ef3ff6 (diff) |
Compress saved traces using LZ4.
Diffstat (limited to 'server/TracyFileRead.hpp')
-rwxr-xr-x | server/TracyFileRead.hpp | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/server/TracyFileRead.hpp b/server/TracyFileRead.hpp index b7758a27..234b07a6 100755 --- a/server/TracyFileRead.hpp +++ b/server/TracyFileRead.hpp @@ -4,6 +4,8 @@ #include <algorithm> #include <stdio.h> +#include "../common/tracy_lz4.hpp" + namespace tracy { @@ -19,6 +21,7 @@ public: ~FileRead() { fclose( m_file ); + LZ4_freeStreamDecode( m_stream ); } void Read( void* ptr, size_t size ) @@ -28,12 +31,17 @@ public: { if( m_offset == BufSize ) { - fread( m_buf, 1, BufSize, m_file ); + m_active = 1 - m_active; m_offset = 0; + uint32_t sz; + fread( &sz, 1, sizeof( sz ), m_file ); + char lz4[LZ4Size]; + fread( lz4, 1, sz, m_file ); + LZ4_decompress_safe_continue( m_stream, lz4, m_buf[m_active], sz, BufSize ); } const auto sz = std::min( size, BufSize - m_offset ); - memcpy( dst, m_buf + m_offset, sz ); + memcpy( dst, m_buf[m_active] + m_offset, sz ); m_offset += sz; dst += sz; size -= sz; @@ -42,15 +50,20 @@ public: private: FileRead( FILE* f ) - : m_file( f ) + : m_stream( LZ4_createStreamDecode() ) + , m_file( f ) , m_offset( BufSize ) + , m_active( 1 ) {} enum { BufSize = 64 * 1024 }; + enum { LZ4Size = LZ4_COMPRESSBOUND( BufSize ) }; + LZ4_streamDecode_t* m_stream; FILE* m_file; - char m_buf[BufSize]; + char m_buf[2][BufSize]; size_t m_offset; + uint8_t m_active; }; } |