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 19:37:32 +0300
committerBartosz Taudul <wolf.pld@gmail.com>2017-09-30 19:43:56 +0300
commit1c29367a5464e17d7ddc5f360fb3bf3c3e75df25 (patch)
tree66e5cfd125a4883f1d4b2d210acf4679ab4bcf26 /server/TracyFileWrite.hpp
parentfc8cd12088d875f1639ea8f6cfd6f50d134fd378 (diff)
Buffer writes.
Diffstat (limited to 'server/TracyFileWrite.hpp')
-rwxr-xr-xserver/TracyFileWrite.hpp38
1 files changed, 36 insertions, 2 deletions
diff --git a/server/TracyFileWrite.hpp b/server/TracyFileWrite.hpp
index d45f3e75..42ae1cf6 100755
--- a/server/TracyFileWrite.hpp
+++ b/server/TracyFileWrite.hpp
@@ -1,6 +1,7 @@
#ifndef __TRACYFILEWRITE_HPP__
#define __TRACYFILEWRITE_HPP__
+#include <algorithm>
#include <stdio.h>
namespace tracy
@@ -17,18 +18,51 @@ public:
~FileWrite()
{
+ if( m_offset > 0 )
+ {
+ fwrite( m_buf, 1, m_offset, m_file );
+ }
fclose( m_file );
}
void Write( const void* ptr, size_t size )
{
- fwrite( ptr, 1, size, m_file );
+ if( m_offset + size <= BufSize )
+ {
+ memcpy( m_buf + m_offset, ptr, size );
+ m_offset += size;
+ }
+ else
+ {
+ auto src = (const char*)ptr;
+ while( size > 0 )
+ {
+ const auto sz = std::min( size, BufSize - m_offset );
+ memcpy( m_buf + m_offset, src, sz );
+ m_offset += sz;
+ src += sz;
+ size -= sz;
+
+ if( m_offset == BufSize )
+ {
+ fwrite( m_buf, 1, BufSize, m_file );
+ m_offset = 0;
+ }
+ }
+ }
}
private:
- FileWrite( FILE* f ) : m_file( f ) {}
+ FileWrite( FILE* f )
+ : m_file( f )
+ , m_offset( 0 )
+ {}
+
+ enum { BufSize = 64 * 1024 };
FILE* m_file;
+ char m_buf[BufSize];
+ size_t m_offset;
};
}