From 059fb8b957b96f4867a40d746c958f1f113e8049 Mon Sep 17 00:00:00 2001 From: Ferran Sole Date: Fri, 25 Sep 2015 12:28:09 +0100 Subject: [PATCH] Added buffer, texture and program count Collect data about how many gl buffers, textures and programs are currently in use and how many have been created so far. Change-Id: I3729081c4e3c879836834a5050f63e33b7464543 --- adaptors/common/gl/gl-proxy-implementation.cpp | 99 +++++++++++++++++++++++--- adaptors/common/gl/gl-proxy-implementation.h | 56 +++++++++++++-- 2 files changed, 143 insertions(+), 12 deletions(-) diff --git a/adaptors/common/gl/gl-proxy-implementation.cpp b/adaptors/common/gl/gl-proxy-implementation.cpp index dd3b744..58714d0 100644 --- a/adaptors/common/gl/gl-proxy-implementation.cpp +++ b/adaptors/common/gl/gl-proxy-implementation.cpp @@ -125,6 +125,40 @@ float Sampler::GetMax() const return mMax; } +ObjectCounter::ObjectCounter( const char* description ) +:mDescription(description), + mCount(0), + mPeak(0) +{} + +void ObjectCounter::Increment() +{ + ++mCount; + if( mCount > mPeak ) + { + mPeak = mCount; + } +} + +void ObjectCounter::Decrement() +{ + --mCount; +} + +unsigned int ObjectCounter::GetCount() const +{ + return mCount; +} +unsigned int ObjectCounter::GetPeak() const +{ + return mPeak; +} + +const char* ObjectCounter::GetDescription() const +{ + return mDescription; +} + GlProxyImplementation::GlProxyImplementation(EnvironmentOptions& environmentOptions) : mEnvironmentOptions(environmentOptions), mActiveTextureSampler( "ActiveTexture calls"), @@ -134,8 +168,9 @@ GlProxyImplementation::GlProxyImplementation(EnvironmentOptions& environmentOpti mDrawSampler("Draw calls"), mUniformSampler("Uniform sets"), mUseProgramSampler("Used programs"), - mDrawCount(0), - mUniformCount(0), + mBufferCount( "Buffer Count"), + mTextureCount("Texture Count"), + mProgramCount("Program Count"), mFrameCount(0) { } @@ -162,24 +197,48 @@ void GlProxyImplementation::PostRender() } } -void GlProxyImplementation::ActiveTexture( GLenum texture ) -{ - mActiveTextureSampler.Increment(); - GlImplementation::ActiveTexture(texture); -} - void GlProxyImplementation::Clear( GLbitfield mask ) { mClearSampler.Increment(); GlImplementation::Clear(mask); } +void GlProxyImplementation::GenBuffers (GLsizei n, GLuint* buffers) +{ + mBufferCount.Increment(); + GlImplementation::GenBuffers( n, buffers ); +} + +void GlProxyImplementation::DeleteBuffers (GLsizei n, const GLuint* buffers) +{ + mBufferCount.Decrement(); + GlImplementation::DeleteBuffers( n, buffers ); +} + void GlProxyImplementation::BindBuffer( GLenum target, GLuint buffer ) { mBindBufferSampler.Increment(); GlImplementation::BindBuffer(target,buffer); } +void GlProxyImplementation::GenTextures (GLsizei n, GLuint* textures) +{ + mTextureCount.Increment(); + GlImplementation::GenTextures( n, textures ); +} + +void GlProxyImplementation::DeleteTextures (GLsizei n, const GLuint* textures) +{ + mTextureCount.Decrement(); + GlImplementation::DeleteTextures( n, textures ); +} + +void GlProxyImplementation::ActiveTexture( GLenum texture ) +{ + mActiveTextureSampler.Increment(); + GlImplementation::ActiveTexture(texture); +} + void GlProxyImplementation::BindTexture( GLenum target, GLuint texture ) { mBindTextureSampler.Increment(); @@ -312,6 +371,18 @@ void GlProxyImplementation::UniformMatrix4fv( GLint location, GLsizei count, GLb GlImplementation::UniformMatrix4fv(location,count,transpose,value); } +GLuint GlProxyImplementation::CreateProgram (void) +{ + mProgramCount.Increment(); + return GlImplementation::CreateProgram(); +} + +void GlProxyImplementation::DeleteProgram (GLuint program) +{ + mProgramCount.Decrement(); + GlImplementation::DeleteProgram(program); +} + void GlProxyImplementation::UseProgram( GLuint program ) { mUseProgramSampler.Increment(); @@ -340,6 +411,10 @@ void GlProxyImplementation::LogResults() LogCalls( mDrawSampler ); LogCalls( mUniformSampler ); LogCalls( mUseProgramSampler ); + Debug::LogMessage( Debug::DebugInfo, "OpenGL ES Object Count:\n", mFrameCount ); + LogObjectCounter( mBufferCount ); + LogObjectCounter( mTextureCount ); + LogObjectCounter( mProgramCount ); } void GlProxyImplementation::LogCalls( const Sampler& sampler ) @@ -350,6 +425,14 @@ void GlProxyImplementation::LogCalls( const Sampler& sampler ) sampler.GetStandardDeviation() ); } +void GlProxyImplementation::LogObjectCounter( const ObjectCounter& sampler ) +{ + Debug::LogMessage( Debug::DebugInfo, " %s : %u (Peak:%u)\n", + sampler.GetDescription(), + sampler.GetCount(), + sampler.GetPeak() ); +} + void GlProxyImplementation::ResetSamplers() { mActiveTextureSampler.Reset(); diff --git a/adaptors/common/gl/gl-proxy-implementation.h b/adaptors/common/gl/gl-proxy-implementation.h index 1384960..7c2a6eb 100644 --- a/adaptors/common/gl/gl-proxy-implementation.h +++ b/adaptors/common/gl/gl-proxy-implementation.h @@ -94,6 +94,45 @@ private: // Data }; /** + * Helper class to calculate number of OpenGL objects + */ +class ObjectCounter +{ +public: + ObjectCounter( const char* description ); + + /** + * Increment the counter + */ + void Increment(); + + /** + * Decrement the counter + */ + void Decrement(); + + /** + * @return The current number of objects + */ + unsigned int GetCount() const; + + /** + * @return The maximum number of objects created + */ + unsigned int GetPeak() const; + + /** + * @return the description of the sampler + */ + const char* GetDescription() const; + +private: + const char* mDescription; + unsigned int mCount; + unsigned int mPeak; +}; + +/** * GlProxyImplementation is a wrapper for the concrete implementation * of GlAbstraction that also gathers statistical information. */ @@ -123,11 +162,15 @@ public: virtual void PostRender(); /* OpenGL ES 2.0 API */ - virtual void ActiveTexture(GLenum texture); - virtual void Clear( GLbitfield mask ); + virtual void GenBuffers (GLsizei n, GLuint* buffers); + virtual void DeleteBuffers (GLsizei n, const GLuint* buffers); virtual void BindBuffer( GLenum target, GLuint buffer ); + + virtual void GenTextures (GLsizei n, GLuint* textures); + virtual void DeleteTextures (GLsizei n, const GLuint* textures); + virtual void ActiveTexture(GLenum texture); virtual void BindTexture( GLenum target, GLuint texture ); virtual void DrawArrays( GLenum mode, GLint first, GLsizei count ); @@ -153,6 +196,8 @@ public: virtual void UniformMatrix3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value ); virtual void UniformMatrix4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat* value ); + virtual GLuint CreateProgram (void); + virtual void DeleteProgram (GLuint program); virtual void UseProgram( GLuint program ); private: // Helpers @@ -160,6 +205,7 @@ private: // Helpers void AccumulateSamples(); void LogResults(); void LogCalls( const Sampler& sampler ); + void LogObjectCounter( const ObjectCounter& sampler ); void ResetSamplers(); private: // Data @@ -172,8 +218,10 @@ private: // Data Sampler mDrawSampler; Sampler mUniformSampler; Sampler mUseProgramSampler; - int mDrawCount; - int mUniformCount; + ObjectCounter mBufferCount; + ObjectCounter mTextureCount; + ObjectCounter mProgramCount; + int mFrameCount; }; -- 2.7.4