[PROTO] implement pack array types for probe arguments 26/17926/4
authorVitaliy Cherepanov <v.cherepanov@samsung.com>
Wed, 12 Mar 2014 13:03:43 +0000 (17:03 +0400)
committerDmitry Kovalenko <d.kovalenko@samsung.com>
Sat, 29 Mar 2014 05:46:36 +0000 (22:46 -0700)
implemented 'F'(float array) 'D'(uint32_t array) 'W'(double array) types
   array format. example for float array:
        type     info/sample            size
        ---------------------------------------------------
        char     'F'                    (1byte),
        uint64_t original array pointer (8bytes),
        uint32_t elements count         (4 bytes),
        float    el #1                  (sizeof(float) bytes)
        ...
        float    el #n                  (sizeof(float) bytes)

Change-Id: I33f0bd6026b56d57e1554686ea38317cc705253f
Signed-off-by: Vitaliy Cherepanov <v.cherepanov@samsung.com>
include/binproto.h
probe_graphics/da_gles20_tizen.cpp

index ca9cb44..6e0a46d 100644 (file)
@@ -126,6 +126,42 @@ static inline char *pack_timestamp(char *to)
        return to;
 }
 
        return to;
 }
 
+///////////////////////////////////////////////////////////////////
+// function: pack_array
+///////////////////////////////////////////////////////////////////
+// info:
+//  Pack array param to buffer
+// params:
+//  char *to              - destination buffer
+//  va_list *args         - array size and array (pointer)
+//  uint32_t element_size - size of array element
+// return:
+//  char *                - destination pointer end after pack
+static char *pack_array(char *to, va_list *args, uint32_t element_size)
+{
+       uint32_t d;
+       uint64_t p;
+
+       // get array elements count
+       d = va_arg(*args, uint32_t);
+       // get array pointer
+       p = (unsigned long)(uintptr_t)va_arg(*args, uint64_t);
+
+       // pack original pointer
+       memcpy(to, &p, sizeof(p));
+       to += sizeof(p);
+       // pack array elements count
+       memcpy(to, &d, sizeof(d));
+       to += sizeof(d);
+
+       // pack array elements
+       element_size *= d;
+       memcpy(to, (void *)(long)p, element_size);
+       to += element_size;
+
+       return to;
+}
+
 static char __attribute__((used)) *pack_value_by_type(char *to, const char t, va_list *args)
 {
        uint8_t c;
 static char __attribute__((used)) *pack_value_by_type(char *to, const char t, va_list *args)
 {
        uint8_t c;
@@ -181,6 +217,19 @@ static char __attribute__((used)) *pack_value_by_type(char *to, const char t, va
        case 'v':
        case 'n':
                break;
        case 'v':
        case 'n':
                break;
+       /* pack arrays params */
+       case 'D':
+               /* array of 'd' uint32_t */
+               to = pack_array(to, args, sizeof(d));
+               break;
+       case 'F':
+               /* array of 'f' float */
+               to = pack_array(to, args, sizeof(f));
+               break;
+       case 'W':
+               /* array of 'w' double */
+               to = pack_array(to, args, sizeof(w));
+               break;
        default:
                to--;
                break;
        default:
                to--;
                break;
@@ -378,6 +427,7 @@ static char __attribute__((used)) *pack_ret(char *to, char ret_type, ...)
 
 #define MAX_SHADER_LEN (4 * 1024)
 #define ADD_LOCAL_BUF_SIZE (1024)
 
 #define MAX_SHADER_LEN (4 * 1024)
 #define ADD_LOCAL_BUF_SIZE (1024)
+#define MAX_GL_CONTEXT_VALUE_SIZE (1024)
 #define MAX_LOCAL_BUF_SIZE (MAX_SHADER_LEN + ADD_LOCAL_BUF_SIZE)
 #define LOCAL_BUF msg_buf
 
 #define MAX_LOCAL_BUF_SIZE (MAX_SHADER_LEN + ADD_LOCAL_BUF_SIZE)
 #define LOCAL_BUF msg_buf
 
index 201e26b..9c701d5 100644 (file)
@@ -34,7 +34,7 @@
 #include "binproto.h"
 #include "common_probe_init.h"
 
 #include "binproto.h"
 #include "common_probe_init.h"
 
-static char contextValue[256];
+static char contextValue[MAX_GL_CONTEXT_VALUE_SIZE];
 static enum DaOptions _sopt = OPT_GLES;
 static __thread GLenum gl_error_external = GL_NO_ERROR;
 
 static enum DaOptions _sopt = OPT_GLES;
 static __thread GLenum gl_error_external = GL_NO_ERROR;
 
@@ -1376,8 +1376,8 @@ void glUniform1fv(GLint location, GLsizei count, const GLfloat *value) {
        BEFORE(glUniform1fv);
        glUniform1fvp(location, count, value);
        GL_GET_ERROR();
        BEFORE(glUniform1fv);
        glUniform1fvp(location, count, value);
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
-             location, count, voidp_to_uint64(value));
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddF",
+             location, count, count * 1, voidp_to_uint64(value));
 }
 
 void glUniform2fv(GLint location, GLsizei count, const GLfloat *value) {
 }
 
 void glUniform2fv(GLint location, GLsizei count, const GLfloat *value) {
@@ -1385,8 +1385,8 @@ void glUniform2fv(GLint location, GLsizei count, const GLfloat *value) {
        BEFORE(glUniform2fv);
        glUniform2fvp(location, count, value);
        GL_GET_ERROR();
        BEFORE(glUniform2fv);
        glUniform2fvp(location, count, value);
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
-             location, count, voidp_to_uint64(value));
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddF",
+             location, count, count * 2, voidp_to_uint64(value));
 }
 
 void glUniform3fv(GLint location, GLsizei count, const GLfloat *value) {
 }
 
 void glUniform3fv(GLint location, GLsizei count, const GLfloat *value) {
@@ -1394,8 +1394,8 @@ void glUniform3fv(GLint location, GLsizei count, const GLfloat *value) {
        BEFORE(glUniform3fv);
        glUniform3fvp(location, count, value);
        GL_GET_ERROR();
        BEFORE(glUniform3fv);
        glUniform3fvp(location, count, value);
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
-             location, count, voidp_to_uint64(value));
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddF",
+             location, count, count * 3, voidp_to_uint64(value));
 }
 
 void glUniform4fv(GLint location, GLsizei count, const GLfloat *value) {
 }
 
 void glUniform4fv(GLint location, GLsizei count, const GLfloat *value) {
@@ -1403,8 +1403,8 @@ void glUniform4fv(GLint location, GLsizei count, const GLfloat *value) {
        BEFORE(glUniform4fv);
        glUniform4fvp(location, count, value);
        GL_GET_ERROR();
        BEFORE(glUniform4fv);
        glUniform4fvp(location, count, value);
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
-             location, count, voidp_to_uint64(value));
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddF",
+             location, count, count * 4, voidp_to_uint64(value));
 }
 
 void glUniform1i(GLint location, GLint v0) {
 }
 
 void glUniform1i(GLint location, GLint v0) {
@@ -1448,8 +1448,8 @@ void glUniform1iv(GLint location, GLsizei count, const GLint *value) {
        BEFORE(glUniform1iv);
        glUniform1ivp(location, count, value);
        GL_GET_ERROR();
        BEFORE(glUniform1iv);
        glUniform1ivp(location, count, value);
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
-             location, count, voidp_to_uint64(value));
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddD",
+             location, count, count * 1, voidp_to_uint64(value));
 }
 
 void glUniform2iv(GLint location, GLsizei count, const GLint *value) {
 }
 
 void glUniform2iv(GLint location, GLsizei count, const GLint *value) {
@@ -1457,8 +1457,8 @@ void glUniform2iv(GLint location, GLsizei count, const GLint *value) {
        BEFORE(glUniform2iv);
        glUniform2ivp(location, count, value);
        GL_GET_ERROR();
        BEFORE(glUniform2iv);
        glUniform2ivp(location, count, value);
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
-             location, count, voidp_to_uint64(value));
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddD",
+             location, count, count * 2, voidp_to_uint64(value));
 }
 
 void glUniform3iv(GLint location, GLsizei count, const GLint *value) {
 }
 
 void glUniform3iv(GLint location, GLsizei count, const GLint *value) {
@@ -1466,8 +1466,17 @@ void glUniform3iv(GLint location, GLsizei count, const GLint *value) {
        BEFORE(glUniform3iv);
        glUniform3ivp(location, count, value);
        GL_GET_ERROR();
        BEFORE(glUniform3iv);
        glUniform3ivp(location, count, value);
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
-             location, count, voidp_to_uint64(value));
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddD",
+             location, count, count * 3, voidp_to_uint64(value));
+}
+
+void glUniform4iv(GLint location, GLsizei count, const GLint *value) {
+       typedef void (*methodType)(GLint, GLsizei, const GLint *);
+       BEFORE(glUniform4iv);
+       glUniform4ivp(location, count, value);
+       GL_GET_ERROR();
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddD",
+             location, count, count * 4, voidp_to_uint64(value));
 }
 
 void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose,
 }
 
 void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose,
@@ -1476,8 +1485,9 @@ void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose,
        BEFORE(glUniformMatrix2fv);
        glUniformMatrix2fvp(location, count, transpose, value);
        GL_GET_ERROR();
        BEFORE(glUniformMatrix2fv);
        glUniformMatrix2fvp(location, count, transpose, value);
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxp",
-             location, count, (uint64_t)(transpose), voidp_to_uint64(value));
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxF",
+             location, count, (uint64_t)(transpose), count * 2 * 2,
+             voidp_to_uint64(value));
 }
 
 void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose,
 }
 
 void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose,
@@ -1486,8 +1496,9 @@ void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose,
        BEFORE(glUniformMatrix3fv);
        glUniformMatrix3fvp(location, count, transpose, value);
        GL_GET_ERROR();
        BEFORE(glUniformMatrix3fv);
        glUniformMatrix3fvp(location, count, transpose, value);
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxp",
-             location, count, (uint64_t)(transpose), voidp_to_uint64(value));
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxF",
+             location, count, (uint64_t)(transpose), count * 3 * 3,
+             voidp_to_uint64(value));
 }
 
 void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose,
 }
 
 void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose,
@@ -1496,18 +1507,11 @@ void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose,
        BEFORE(glUniformMatrix4fv);
        glUniformMatrix4fvp(location, count, transpose, value);
        GL_GET_ERROR();
        BEFORE(glUniformMatrix4fv);
        glUniformMatrix4fvp(location, count, transpose, value);
        GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxp",
-             location, count, (uint64_t)(transpose), voidp_to_uint64(value));
+       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddxF",
+             location, count, (uint64_t)(transpose), count * 4 * 4,
+             voidp_to_uint64(value));
 }
 
 }
 
-void glUniform4iv(GLint location, GLsizei count, const GLint *value) {
-       typedef void (*methodType)(GLint, GLsizei, const GLint *);
-       BEFORE(glUniform4iv);
-       glUniform4ivp(location, count, value);
-       GL_GET_ERROR();
-       AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "", "ddp",
-             location, count, voidp_to_uint64(value));
-}
 
 void glUseProgram(GLuint program) {
        typedef void (*methodType)(GLuint);
 
 void glUseProgram(GLuint program) {
        typedef void (*methodType)(GLuint);