Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Taudul <wolf.pld@gmail.com>2017-09-30 20:25:24 +0300
committerBartosz Taudul <wolf.pld@gmail.com>2017-09-30 20:25:24 +0300
commita8b41faaf40df036e25b16d0a5edde0c2ea97a4e (patch)
tree10fc0e92f69e61f1c15b87e835a0d8dd76e93d83 /server/TracyFileRead.hpp
parent616f501a972ffacf787a5ebbc95bfee474ef3ff6 (diff)
Compress saved traces using LZ4.
Diffstat (limited to 'server/TracyFileRead.hpp')
-rwxr-xr-xserver/TracyFileRead.hpp21
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;
};
}