diff options
author | Bartosz Taudul <wolf.pld@gmail.com> | 2017-10-01 02:59:07 +0300 |
---|---|---|
committer | Bartosz Taudul <wolf.pld@gmail.com> | 2017-10-01 02:59:07 +0300 |
commit | 7e0eac78e16b0a32f4f7a692a870633135bb9c44 (patch) | |
tree | 6dda5149a6efa99a603e8261ab2ea3e9adcd207e /server/TracyFileRead.hpp | |
parent | 8f862b3271638780fdf3159798a3e4901beb0b37 (diff) |
Fast read path.
Diffstat (limited to 'server/TracyFileRead.hpp')
-rwxr-xr-x | server/TracyFileRead.hpp | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/server/TracyFileRead.hpp b/server/TracyFileRead.hpp index 234b07a6..5db96e81 100755 --- a/server/TracyFileRead.hpp +++ b/server/TracyFileRead.hpp @@ -26,25 +26,33 @@ public: void Read( void* ptr, size_t size ) { - auto dst = (char*)ptr; - while( size > 0 ) + if( size <= BufSize - m_offset ) { - if( m_offset == BufSize ) + memcpy( ptr, m_buf[m_active] + m_offset, size ); + m_offset += size; + } + else + { + auto dst = (char*)ptr; + while( size > 0 ) { - 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 ); - } + if( m_offset == BufSize ) + { + 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_active] + m_offset, sz ); - m_offset += sz; - dst += sz; - size -= sz; + const auto sz = std::min( size, BufSize - m_offset ); + memcpy( dst, m_buf[m_active] + m_offset, sz ); + m_offset += sz; + dst += sz; + size -= sz; + } } } |