Added buffer, texture and program count 32/48732/2
authorFerran Sole <ferran.sole@samsung.com>
Fri, 25 Sep 2015 11:28:09 +0000 (12:28 +0100)
committerFerran Sole <ferran.sole@samsung.com>
Fri, 25 Sep 2015 11:31:51 +0000 (12:31 +0100)
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
adaptors/common/gl/gl-proxy-implementation.h

index dd3b744..58714d0 100644 (file)
@@ -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();
index 1384960..7c2a6eb 100644 (file)
@@ -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;
 
 };