[PROTO] pack long shaders to file 48/14248/4
authorVitaliy Cherepanov <v.cherepanov@samsung.com>
Wed, 22 Jan 2014 14:43:31 +0000 (18:43 +0400)
committerVitaliy Cherepanov <v.cherepanov@samsung.com>
Wed, 22 Jan 2014 15:01:19 +0000 (19:01 +0400)
Change-Id: Ia0528a5ab58a53f2cab02d50249da0d1170c8cee
Signed-off-by: Vitaliy Cherepanov <v.cherepanov@samsung.com>
helper/dacapture.c
include/binproto.h
probe_graphics/da_gles20.h
probe_graphics/da_gles20_tizen.cpp

index 491b91f..e0cfa9c 100755 (executable)
@@ -55,8 +55,6 @@
 
 #include "binproto.h"
 
-#define SCREENSHOT_DIRECTORY   "/tmp/da"
-
 #define MAX_HEIGHT     720
 #define CAPTURE_TIMEOUT                2.0
 
index 067c90a..db5601c 100644 (file)
@@ -66,6 +66,8 @@
 #define MSG_PROBE_NETWORK 0x0111
 #define MSG_PROBE_GL 0x0112
 
+#define SCREENSHOT_DIRECTORY   "/tmp/da"
+
 // TODO: remove this copy-paste
 #define CALLER_ADDRESS                                                 \
        ((void*) __builtin_extract_return_addr(__builtin_return_address(0)))
@@ -373,11 +375,15 @@ static char __attribute__((used)) *pack_ret(char *to, char ret_type, ...)
                BUF_PTR = pack_int32(BUF_PTR, api_type);             \
        } while (0)
 
-#define LOCAL_BUF_SIZE 2048
+
+#define MAX_SHADER_LEN (4 * 1024)
+#define ADD_LOCAL_BUF_SIZE (1024)
+#define MAX_LOCAL_BUF_SIZE (MAX_SHADER_LEN + ADD_LOCAL_BUF_SIZE)
+#define LOCAL_BUF msg_buf
 
 #define PREPARE_LOCAL_BUF()                    \
-               char msg_buf[LOCAL_BUF_SIZE];\
-               char *BUF_PTR = msg_buf;                        \
+               char LOCAL_BUF[MAX_LOCAL_BUF_SIZE];             \
+               char *BUF_PTR = LOCAL_BUF;                      \
                char *RET_PTR = NULL
 
 #define MSG_LEN_OFFSET 16
index 774deab..60a3c12 100644 (file)
                BUF_PTR = pack_string(BUF_PTR, GL_context_value);       \
        } while (0)
 
+#define PACK_GL_SHADER(GL_api_type, GL_elapsed_time, GL_shader, GL_shader_size)        \
+       do {    /* PACK_GL_SHADER */                                            \
+               BUF_PTR = pack_int32(BUF_PTR, (uint32_t)GL_api_type);           \
+               BUF_PTR = pack_int64(BUF_PTR, (uint64_t)GL_elapsed_time);       \
+               if ( (GL_shader_size <= MAX_SHADER_LEN) &&                      \
+                    (GL_shader_size <= (sizeof(LOCAL_BUF) - (BUF_PTR - LOCAL_BUF)))) {\
+                       /* pack shaders to buffer */                            \
+                       BUF_PTR = pack_string(BUF_PTR, GL_shader);              \
+               } else {                                                        \
+                       /* pack shaders to file */                              \
+                       char dst_path[MAX_PATH_LENGTH];                         \
+                       char dst_path_pack[MAX_PATH_LENGTH];                    \
+                       FILE *file;                                             \
+                       sprintf(dst_path, SCREENSHOT_DIRECTORY "/%d_%d.shd",    \
+                               getpid(), probeInfo.eventIndex);                \
+                       file = fopen(dst_path, "w");                            \
+                       if (file != NULL) {                                     \
+                               fwrite(GL_shader, GL_shader_size, 1, file);     \
+                               fclose(file);                                   \
+                       }                                                       \
+                       sprintf(dst_path_pack, "FILE:%s", dst_path);            \
+                       BUF_PTR = pack_string(BUF_PTR, dst_path_pack);          \
+               }                                                               \
+       } while (0)
 
 #define BEFORE(FUNCNAME)                                               \
        DECLARE_VARIABLE_STANDARD_NORET;                                \
                error = glGetError();                                   \
        }
 
+#define AFTER_SHADER(RET_TYPE, RET_VAL, APITYPE, CONTEXT_VAL, CONTEXT_SIZE, INPUTFORMAT, ...)  \
+       POST_PACK_PROBEBLOCK_BEGIN();                                           \
+       PREPARE_LOCAL_BUF();                                                    \
+       PACK_COMMON_BEGIN(MSG_PROBE_GL, vAPI_ID, INPUTFORMAT, __VA_ARGS__);     \
+       PACK_COMMON_END(RET_TYPE, RET_VAL, error, blockresult);                 \
+       PACK_GL_SHADER(APITYPE, get_current_nsec() - start_nsec, CONTEXT_VAL, CONTEXT_SIZE);    \
+       FLUSH_LOCAL_BUF();                                                      \
+       POST_PACK_PROBEBLOCK_END()
+
 #endif /* DA_GLES20_H_ */
 
index 9a4a8ec..2d3519c 100644 (file)
@@ -1137,9 +1137,9 @@ void glShaderSource(GLuint shader, GLsizei count, const char** string,
                glGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, length);
                char buf[length[0]];
                glGetShaderSource(shader, length[0], NULL, buf);
-               AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, buf,
-                     "ddpp", shader, count,
-                     voidp_to_uint64(string), voidp_to_uint64(length));
+               AFTER_SHADER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, buf,
+                            length[0], "ddpp", shader, count,
+                            voidp_to_uint64(string), voidp_to_uint64(length));
        } else {
                AFTER('v', NO_RETURN_VALUE, APITYPE_CONTEXT, "",
                      "ddpp", shader, count,