opengl : add context sharing logic for evas_gl 48/25448/2
authorHyunjong.park <phjwithyou.park@samsung.com>
Tue, 5 Aug 2014 07:13:54 +0000 (16:13 +0900)
committerHyunjong.park <phjwithyou.park@samsung.com>
Tue, 5 Aug 2014 07:16:25 +0000 (16:16 +0900)
Signed-off-by: Hyunjong.park <phjwithyou.park@samsung.com>
Change-Id: I9ae6d610f539d0c33edb2c76337de158e002b4c0

org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/GLContextDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/GLContextSharingDataMaker.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/opengl/data/GLStateDataManager.java

index f02360f..a43ea60 100644 (file)
@@ -173,6 +173,7 @@ public class GLContextDataManager {
                        int frameRateIndex, int frameTimeIndex) {
                if (!isInitState) {
                        init();
+                       initInsertForCompareValue(seq, featureIndex, frameRateIndex, frameTimeIndex);
                }
                if (isChangeStateValue(featureIndex, value)) {
                        // System.out.println("this : " + contextID + " contextID : " +
@@ -184,6 +185,13 @@ public class GLContextDataManager {
                }
        }
 
+       private void initInsertForCompareValue(int seq, int featureIndex, int frameRateIndex,
+                       int frameTimeIndex) {
+               updateContextHistoryValue(seq, featureIndex, frameRateIndex, frameTimeIndex);
+               GLDataManager.getInstance().getContextDBTableManage()
+                               .insertContextData(getCurrentValueList());
+       }
+
        private boolean isChangeStateValue(int featureIndex, Object newValue) {
                Object preValue = getPreValueList().get(featureIndex);
                boolean isChange = false;
@@ -249,7 +257,9 @@ public class GLContextDataManager {
                if (!GLDataManager.getInstance().getContextDBTableManage().isIntegerType(featureIndex)) {
                        return false;
                }
-               if ((Integer) preValue != (Integer) newValue) {
+               int preInt = (Integer) preValue;
+               int newInt = (Integer) newValue;
+               if (preInt != newInt) {
                        return true;
                } else {
                        return false;
@@ -260,7 +270,9 @@ public class GLContextDataManager {
                if (!GLDataManager.getInstance().getContextDBTableManage().isLongType(featureIndex)) {
                        return false;
                }
-               if ((Long) preValue != (Long) newValue) {
+               long preLong = (Long) preValue;
+               long newLong = (Long) newValue;
+               if (preLong != newLong) {
                        return true;
                } else {
                        return false;
@@ -271,7 +283,9 @@ public class GLContextDataManager {
                if (!GLDataManager.getInstance().getContextDBTableManage().isBooleans(featureIndex)) {
                        return false;
                }
-               if ((Boolean) preValue != (Boolean) newValue) {
+               boolean preBoolean = (Boolean) preValue;
+               boolean newBoolean = (Boolean) newValue;
+               if (preBoolean != newBoolean) {
                        return true;
                } else {
                        return false;
@@ -386,6 +400,9 @@ public class GLContextDataManager {
                        LinkedHashMap<Long, GLContextDataManager> contextMap, long sharingContextId) {
                sharingContextIdList.add(sharingContextId);
                GLContextDataManager sharingContextValueType = contextMap.get(sharingContextId);
+               if (null == sharingContextValueType) {
+                       return;
+               }
                for (int i = 0; i < sharingContextValueType.sharingContextIdList.size(); i++) {
                        long savedSharingContextId = sharingContextValueType.sharingContextIdList.get(i);
                        if (isFinishUpdateCurrentContextDataManger(savedSharingContextId, sharingContextId)
@@ -401,6 +418,9 @@ public class GLContextDataManager {
        private void updateSharingListOfSharingContext(
                        LinkedHashMap<Long, GLContextDataManager> contextMap, long sharingContextId) {
                GLContextDataManager sharingContextValueType = contextMap.get(sharingContextId);
+               if (null == sharingContextValueType) {
+                       return;
+               }
                for (int i = 0; i < sharingContextValueType.sharingContextIdList.size(); i++) {
                        long savedSharingContextId = sharingContextValueType.sharingContextIdList.get(i);
                        if (isFinishUpdateCurrentContextDataManger(savedSharingContextId, sharingContextId)) {
index d957c1e..15b3e73 100644 (file)
@@ -53,7 +53,12 @@ public class GLContextSharingDataMaker {
                return this.glStateDataManager;
        }
 
-       public void extractEGLAPIParameter(GLES20LogData logData) {
+       public void extractSharingContextAPIParameter(GLES20LogData logData) {
+               String apiName = logData.getApiName();
+               if (!apiName.equals(GLAPINameDefine.API_EGL_CREATE_CONTEXT)
+                               && !apiName.equals(GLAPINameDefine.API_EVAS_GL_CREATE_CONTEXT)) {
+                       return;
+               }
                if (glStateDataManager.isNormalAPIStatusForExtractParameter(logData)) {
                        eglAPILogManager(logData);
                }
@@ -61,12 +66,20 @@ public class GLContextSharingDataMaker {
 
        private void eglAPILogManager(GLES20LogData logData) {
                String apiName = logData.getApiName();
+               if (apiName.equals(GLAPINameDefine.API_EGL_CREATE_CONTEXT)) {
+                       insertContextOfEGL(logData);
+               } else if (apiName.equals(GLAPINameDefine.API_EVAS_GL_CREATE_CONTEXT)) {
+                       insertContextOfEvasGL(logData);
+               } else {
+                       DA_LOG.error("GL extract sharing context API parameter  : " + apiName);
+               }
+       }
+
+       private void insertContextOfEGL(GLES20LogData logData) {
+               String apiName = logData.getApiName();
                String parameter = logData.getArgs();
                String parameters[] = parameter.split(CommonConstants.COMMA + CommonConstants.SPACE);
                String returnValue = logData.getReturn();
-               if (!apiName.equals(GLAPINameDefine.API_EGL_CREATE_CONTEXT)) {
-                       return;
-               }
                if (parameters.length != 4) {
                        DA_LOG.error("GL extract API parameter  : " + apiName);
                        return;
@@ -80,6 +93,24 @@ public class GLContextSharingDataMaker {
                insertSharingData();
        }
 
+       private void insertContextOfEvasGL(GLES20LogData logData) {
+               String apiName = logData.getApiName();
+               String parameter = logData.getArgs();
+               String parameters[] = parameter.split(CommonConstants.COMMA + CommonConstants.SPACE);
+               String returnValue = logData.getReturn();
+               if (parameters.length != 2) {
+                       DA_LOG.error("GL extract API parameter  : " + apiName);
+                       return;
+               }
+               long currentContextId = AnalyzerUtil.addrToLong(returnValue);
+               long sharingContextId = AnalyzerUtil.addrToLong(parameters[1]);
+               if (!isExistSharingContextID(currentContextId)) {
+                       return;
+               }
+               updateSharingDataAtCurrentContextDataManager(currentContextId, sharingContextId);
+               insertSharingData();
+       }
+
        private boolean isExistSharingContextID(long currentContextId) {
                if (currentContextId != 0) {
                        return true;
index e2dfa04..1bc5e3d 100644 (file)
@@ -83,7 +83,7 @@ public class GLStateDataManager {
                commonDataMaker.extractGLCommonAPIParameter(logData);
                programDataMaker.extractGLProgramAPIParameter(logData);
                textureDataMaker.extractGLTextureAPIParameter(logData);
-               sharingDataMaker.extractEGLAPIParameter(logData);
+               sharingDataMaker.extractSharingContextAPIParameter(logData);
        }
 
        private void setCurrentStateInfo(GLES20LogData logData, int currentFrameTimeIndex) {