[FEATURE] VBO buffer size implement 63/32063/9
authorVitaliy Cherepanov <v.cherepanov@samsung.com>
Mon, 15 Dec 2014 09:39:21 +0000 (12:39 +0300)
committerVitaliy Andreevich <v.cherepanov@samsung.com>
Tue, 23 Dec 2014 08:53:53 +0000 (00:53 -0800)
implement the probe against buffer size of the next API
glBindBuffer(),glBufferData(),glBufferSubData(),glDeleteBuffers()

glGetBufferParameteriv:
(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &nBufferSize)
(GL_ARRAY_BUFFER, GL_BUFFER_USAGE, &nBufferUsageSize)
(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE,&nElementBufferSize)
(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_USAGE,&nElementBufferUsageSize)

nBufferSize, nBufferUsageSize, nElementBufferSize, nElementBufferUsageSize
send buffer info to GLContextValue(String) in openg probe format.

Change-Id: Ib7815eae56247536dfa08749f90404eea1c093f5
Signed-off-by: Vitaliy Cherepanov <v.cherepanov@samsung.com>
helper/common_probe_init.c
include/common_probe_init.h
probe_graphics/da_gles20_native.cpp

index db1f433..8bae766 100644 (file)
@@ -45,6 +45,7 @@ void (*real_glGetActiveUniform)(GLuint program, GLuint index, GLsizei bufSize,
                                char *name);
 void (*real_glGetShaderSource)(GLuint shader, GLsizei bufSize, GLsizei *length,
                               char *source);
+void (*real_glGetBufferParameteriv)(GLenum target, GLenum value, GLint *data);
 
 void __gl_dummy_function()
 {
@@ -93,6 +94,7 @@ int __init_gl_functions__(void)
        INIT_REAL_GL(glGetActiveUniform);
        INIT_REAL_GL(glGetShaderSource);
        INIT_REAL_GL(glGetIntegerv);
+       INIT_REAL_GL(glGetBufferParameteriv);
 
        return 0;
 }
index 0e8f4f0..418e548 100644 (file)
@@ -69,6 +69,8 @@ extern void (*real_glGetActiveUniform)(GLuint program, GLuint index,
                                       GLint *size, GLenum *type, char *name);
 extern void (*real_glGetShaderSource)(GLuint shader, GLsizei bufSize,
                                      GLsizei *length, char *source);
+extern void (*real_glGetBufferParameteriv)(GLenum target, GLenum value,
+                                          GLint *data);
 
 #ifdef __cplusplus
 } /* extern "C" */
index 3fc3327..11549da 100644 (file)
@@ -122,6 +122,28 @@ void REAL_NAME(glAttachShader)(GLuint program, GLuint shader)
 // ==================================================================
 // B 12
 // ==================================================================
+void __get_context_buf_data(GLenum target, char *buf, int buf_size)
+{
+       GLint n_buffer_size, n_buffer_usage_size;
+       int print_size;
+
+       if (buf == NULL)
+               return;
+
+       real_glGetBufferParameteriv(target, GL_BUFFER_SIZE,
+                                   &n_buffer_size);
+       real_glGetBufferParameteriv(target, GL_BUFFER_USAGE,
+                                   &n_buffer_usage_size);
+
+       print_size = snprintf(buf, buf_size, "%u,%u,%u",
+                             target, n_buffer_size, n_buffer_usage_size);
+
+       if (print_size >= buf_size) {
+               /* data was truncated. so data is invalid */
+               buf[0]='\0';
+       }
+
+}
 
 void REAL_NAME(glBindAttribLocation)(GLuint program, GLuint index, const char *name)
 {
@@ -135,11 +157,18 @@ void REAL_NAME(glBindAttribLocation)(GLuint program, GLuint index, const char *n
 
 void REAL_NAME(glBindBuffer)(GLenum target, GLuint buffer)
 {
+       char context_value[MAX_GL_CONTEXT_VALUE_SIZE] = {0,};
+
        TYPEDEF(void (*methodType)(GLenum, GLuint));
        BEFORE(glBindBuffer);
        CALL_ORIG(glBindBuffer, target, buffer);
+
+       if (blockresult && buffer)
+               __get_context_buf_data(target, &context_value[0],
+                                      sizeof(context_value));
+
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xd",
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, context_value, "xd",
              (uint64_t)(target), buffer);
 }
 
@@ -231,8 +260,13 @@ void REAL_NAME(glBufferData)(GLenum target, GLsizeiptr size, const GLvoid * data
        TYPEDEF(void (*methodType)(GLenum, GLsizeiptr, const GLvoid *, GLenum));
        BEFORE(glBufferData);
        CALL_ORIG(glBufferData, target, size, data, usage);
+
+       char context_value[MAX_GL_CONTEXT_VALUE_SIZE];
+       if (blockresult)
+               __get_context_buf_data(target, &context_value[0],
+                                      sizeof(context_value));
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxpx",
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, context_value, "xxpx",
              (uint64_t)(target), (uint64_t)(size),
              voidp_to_uint64(data), (uint64_t)(usage));
 }
@@ -243,9 +277,14 @@ void REAL_NAME(glBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size,
        TYPEDEF(void (*methodType)(GLenum, GLintptr, GLsizeiptr,
                                   const GLvoid *));
        BEFORE(glBufferSubData);
+
+       char context_value[MAX_GL_CONTEXT_VALUE_SIZE];
+       if (blockresult)
+               __get_context_buf_data(target, &context_value[0],
+                                      sizeof(context_value));
        CALL_ORIG(glBufferSubData, target, offset, size, data);
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "xxxp",
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, context_value, "xxxp",
              (uint64_t)(target), (uint64_t)(offset),
              (uint64_t)(size), voidp_to_uint64(data));
 }
@@ -427,9 +466,11 @@ void REAL_NAME(glDeleteBuffers)(GLsizei n, const GLuint * buffers)
 {
        TYPEDEF(void (*methodType)(GLsizei, const GLuint *));
        BEFORE(glDeleteBuffers);
+
+       char context_value[MAX_GL_CONTEXT_VALUE_SIZE];
        CALL_ORIG(glDeleteBuffers, n, buffers);
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "dp",
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, context_value, "dp",
              n, voidp_to_uint64(buffers));
 }