From 455a78bee53746cbc0fc5fea4c00662605ae3fd7 Mon Sep 17 00:00:00 2001 From: Vitaliy Cherepanov Date: Wed, 22 Jan 2014 18:43:31 +0400 Subject: [PATCH] [PROTO] pack long shaders to file Change-Id: Ia0528a5ab58a53f2cab02d50249da0d1170c8cee Signed-off-by: Vitaliy Cherepanov --- helper/dacapture.c | 2 -- include/binproto.h | 12 +++++++++--- probe_graphics/da_gles20.h | 33 +++++++++++++++++++++++++++++++++ probe_graphics/da_gles20_tizen.cpp | 6 +++--- 4 files changed, 45 insertions(+), 8 deletions(-) diff --git a/helper/dacapture.c b/helper/dacapture.c index 491b91f..e0cfa9c 100755 --- a/helper/dacapture.c +++ b/helper/dacapture.c @@ -55,8 +55,6 @@ #include "binproto.h" -#define SCREENSHOT_DIRECTORY "/tmp/da" - #define MAX_HEIGHT 720 #define CAPTURE_TIMEOUT 2.0 diff --git a/include/binproto.h b/include/binproto.h index 067c90a..db5601c 100644 --- a/include/binproto.h +++ b/include/binproto.h @@ -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 diff --git a/probe_graphics/da_gles20.h b/probe_graphics/da_gles20.h index 774deab..60a3c12 100644 --- a/probe_graphics/da_gles20.h +++ b/probe_graphics/da_gles20.h @@ -52,6 +52,30 @@ 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; \ @@ -177,5 +201,14 @@ 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_ */ diff --git a/probe_graphics/da_gles20_tizen.cpp b/probe_graphics/da_gles20_tizen.cpp index 9a4a8ec..2d3519c 100644 --- a/probe_graphics/da_gles20_tizen.cpp +++ b/probe_graphics/da_gles20_tizen.cpp @@ -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, -- 2.7.4