Count number of input and compressed frame image bytes.

This commit is contained in:
Bartosz Taudul 2020-03-14 14:35:57 +01:00
parent 0776dddc35
commit b8cc3f59d6
4 changed files with 30 additions and 3 deletions

View File

@ -21,7 +21,7 @@ TextureCompression::~TextureCompression()
ZSTD_freeDCtx( m_dctx ); ZSTD_freeDCtx( m_dctx );
} }
uint32_t TextureCompression::Pack( struct ZSTD_CCtx_s* ctx, char*& buf, size_t& bufsz, const char* image, uint32_t inBytes ) const uint32_t TextureCompression::Pack( struct ZSTD_CCtx_s* ctx, char*& buf, size_t& bufsz, const char* image, uint32_t inBytes )
{ {
const auto maxout = ZSTD_COMPRESSBOUND( inBytes ); const auto maxout = ZSTD_COMPRESSBOUND( inBytes );
if( bufsz < maxout ) if( bufsz < maxout )
@ -31,7 +31,12 @@ uint32_t TextureCompression::Pack( struct ZSTD_CCtx_s* ctx, char*& buf, size_t&
buf = new char[maxout]; buf = new char[maxout];
} }
assert( ctx ); assert( ctx );
return (uint32_t)ZSTD_compressCCtx( ctx, buf, maxout, image, inBytes, 3 ); auto ret = (uint32_t)ZSTD_compressCCtx( ctx, buf, maxout, image, inBytes, 3 );
#ifndef TRACY_NO_STATISTICS
m_inputBytes.fetch_add( inBytes, std::memory_order_relaxed );
m_outputBytes.fetch_add( ret, std::memory_order_relaxed );
#endif
return ret;
} }
const char* TextureCompression::Unpack( const FrameImage& image ) const char* TextureCompression::Unpack( const FrameImage& image )

View File

@ -1,6 +1,8 @@
#ifndef __TRACY__TEXTURECOMPRESSION_HPP__ #ifndef __TRACY__TEXTURECOMPRESSION_HPP__
#define __TRACY__TEXTURECOMPRESSION_HPP__ #define __TRACY__TEXTURECOMPRESSION_HPP__
#include <atomic>
#include <stdint.h> #include <stdint.h>
#include <stdlib.h> #include <stdlib.h>
@ -20,7 +22,7 @@ public:
TextureCompression(); TextureCompression();
~TextureCompression(); ~TextureCompression();
uint32_t Pack( struct ZSTD_CCtx_s* ctx, char*& buf, size_t& bufsz, const char* image, uint32_t inBytes ) const; uint32_t Pack( struct ZSTD_CCtx_s* ctx, char*& buf, size_t& bufsz, const char* image, uint32_t inBytes );
template<size_t Size> template<size_t Size>
const char* Pack( const char* image, uint32_t inBytes, uint32_t& csz, Slab<Size>& slab ) const char* Pack( const char* image, uint32_t inBytes, uint32_t& csz, Slab<Size>& slab )
@ -34,11 +36,17 @@ public:
const char* Unpack( const FrameImage& image ); const char* Unpack( const FrameImage& image );
uint64_t GetInputBytesCount() const { return m_inputBytes.load( std::memory_order_relaxed ); }
uint64_t GetOutputBytesCount() const { return m_outputBytes.load( std::memory_order_relaxed ); }
private: private:
char* m_buf; char* m_buf;
size_t m_bufSize; size_t m_bufSize;
struct ZSTD_CCtx_s* m_cctx; struct ZSTD_CCtx_s* m_cctx;
struct ZSTD_DCtx_s* m_dctx; struct ZSTD_DCtx_s* m_dctx;
std::atomic<uint64_t> m_inputBytes { 0 };
std::atomic<uint64_t> m_outputBytes { 0 };
}; };
} }

View File

@ -11999,6 +11999,18 @@ void View::DrawInfo()
} }
TextFocused( "Call stack samples:", RealToString( m_worker.GetCallstackSampleCount() ) ); TextFocused( "Call stack samples:", RealToString( m_worker.GetCallstackSampleCount() ) );
TextFocused( "Frame images:", RealToString( ficnt ) ); TextFocused( "Frame images:", RealToString( ficnt ) );
if( ficnt != 0 && ImGui::IsItemHovered() )
{
const auto bytes = m_worker.GetTextureCompressionBytes();
ImGui::BeginTooltip();
TextFocused( "Input data:", MemSizeToString( bytes.first ) );
TextFocused( "Compressed:", MemSizeToString( bytes.second ) );
char buf[64];
auto ptr = PrintFloat( buf, buf+62, 100. * bytes.second / bytes.first, 2 );
memcpy( ptr, "%", 2 );
TextFocused( "Ratio:", buf );
ImGui::EndTooltip();
}
TextFocused( "Context switch regions:", RealToString( m_worker.GetContextSwitchCount() ) ); TextFocused( "Context switch regions:", RealToString( m_worker.GetContextSwitchCount() ) );
if( ImGui::IsItemHovered() ) if( ImGui::IsItemHovered() )
{ {

View File

@ -493,6 +493,8 @@ public:
const decltype(DataBlock::cpuTopology)& GetCpuTopology() const { return m_data.cpuTopology; } const decltype(DataBlock::cpuTopology)& GetCpuTopology() const { return m_data.cpuTopology; }
const CpuThreadTopology* GetThreadTopology( uint32_t cpuThread ) const; const CpuThreadTopology* GetThreadTopology( uint32_t cpuThread ) const;
std::pair<uint64_t, uint64_t> GetTextureCompressionBytes() const { return std::make_pair( m_texcomp.GetInputBytesCount(), m_texcomp.GetOutputBytesCount() ); }
private: private:
void Network(); void Network();
void Exec(); void Exec();