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-10-01 02:59:07 +0300
committerBartosz Taudul <wolf.pld@gmail.com>2017-10-01 02:59:07 +0300
commit7e0eac78e16b0a32f4f7a692a870633135bb9c44 (patch)
tree6dda5149a6efa99a603e8261ab2ea3e9adcd207e /server/TracyFileRead.hpp
parent8f862b3271638780fdf3159798a3e4901beb0b37 (diff)
Fast read path.
Diffstat (limited to 'server/TracyFileRead.hpp')
-rwxr-xr-xserver/TracyFileRead.hpp40
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;
+ }
}
}