Range Analysis : apply new DB schema 40/23540/1
authorwoojin <woojin2.jung@samsung.com>
Fri, 27 Jun 2014 09:01:49 +0000 (18:01 +0900)
committerwoojin <woojin2.jung@samsung.com>
Fri, 27 Jun 2014 09:01:49 +0000 (18:01 +0900)
range analysis use new DB schema of function entry, function exit, function sample
remove previous log saving tables
update changelog

Change-Id: Icefa958fba2c8e21c4ec19d2e1edbe00ceb4c8bc
Signed-off-by: woojin <woojin2.jung@samsung.com>
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/logparser/LogInserter.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/sql/SqlManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogDataFactory.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/format/LogFormat.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeDataManager.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionSampleDBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryDBTable.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java
package/changelog
package/pkginfo.manifest

index 0e03c1b..d92b282 100644 (file)
@@ -102,7 +102,8 @@ public class LogInserter implements Runnable {
                                        int logId = logIds.get(i);
                                        Logs logs = logPack.getLogs(logId);
                                        if (null != logs
-                                                       && (logId == DataChannelConstants.MSG_DATA_RECORD
+                                                       && (logId == DataChannelConstants.MSG_DATA_RECORD || logId == DataChannelConstants.MSG_DATA_SAMPLE 
+                                                                       || logId == DataChannelConstants.MSG_FUNCTION_ENTRY || logId == DataChannelConstants.MSG_FUNCTION_EXIT  
                                                                        || logId == DataChannelConstants.MSG_PROBE_GLES20 || logId == DataChannelConstants.MSG_PROBE_NETWORK)) {
                                                continue;
                                        }
@@ -111,13 +112,6 @@ public class LogInserter implements Runnable {
                                                newLogs.addAll(logs.getRawLogs());
                                                SqlManager.getInstance().insert(logId, newLogs);
                                        }
-                                       if (null != logs
-                                                       && logId == DataChannelConstants.MSG_FUNCTION_EXIT) {
-                                               List<LogData> newLogs = new ArrayList<LogData>();
-                                               newLogs.addAll(logs.getRawLogs());
-                                               SqlManager.getInstance().updateProfileTable(newLogs);
-                                       }
-
                                } // for
 
                                logPackage.clear();
index 011b939..b040e04 100755 (executable)
@@ -313,12 +313,6 @@ public class SqlManager {
                        for (int i = 0; i < dataRowSize; i++) {
                                logData = input.get(i);
                                logData.makePreparedStatement(prep);
-                               if (logData.getId() == DataChannelConstants.MSG_FUNCTION_ENTRY) {
-                                       ProcessInfoPackage processInfoPkg = AnalyzerManager
-                                                       .getProject().getProcessInfoPackage(
-                                                                       logData.getPid());
-                                       processInfoPkg.addFunctionEntryInsertLogCount();
-                               }
                                prep.addBatch();
 
                        }
@@ -512,47 +506,6 @@ public class SqlManager {
 
        }
 
-       public void updateProfileTable(List<LogData> input)
-                       throws InterruptedException {
-               // String query =
-               // "update profiling set ret = ? where pcaddr = ? and messageid = ?";
-               // PreparedStatement prep = null;
-               // try {
-               // Connection conn = getConnection();
-               // if (null == conn || null == query || null == input) {
-               // System.out.println("failed sql inset : " + input);
-               // return;
-               // }
-               // semaphoreAcquire();
-               // prep = conn.prepareStatement(query);
-               //
-               // ProfileData logData = null;
-               // int dataRowSize = input.size();
-               // for (int i = 0; i < dataRowSize; i++) {
-               // logData = (ProfileData) input.get(i);
-               // prep.setString(1, logData.getReturn());
-               // prep.setLong(2, logData.getPcAddr());
-               // prep.setInt(3, DataChannelConstants.MSG_FUNCTION_ENTRY);
-               // prep.addBatch();
-               // }
-               // conn.setAutoCommit(false);
-               // prep.executeBatch();
-               // conn.setAutoCommit(true);
-               // } catch (SQLException e) {
-               // System.out.println("[Error Update ProfileTable] query = " + query);
-               // e.printStackTrace();
-               // } finally {
-               // if (null != prep) {
-               // try {
-               // prep.close();
-               // } catch (SQLException e) {
-               // e.printStackTrace();
-               // }
-               // }
-               // semaphoreRelease();
-               // }
-       }
-
        public void saveLeakData() {
                LeakDetector leakDectector = AnalyzerManager.getLeakDetector();
                DBTableInfo leakTableInfo = DBTableManager.getInstance().getTableInfo(
index 28f1b19..1e56e62 100644 (file)
@@ -116,12 +116,12 @@ public class LogDataFactory {
                logList.add(MSG_PROBE_THREAD);
                logList.add(MSG_PROBE_CUSTOM);
                logList.add(MSG_PROBE_SYNC);
-               logList.add(MSG_DATA_SAMPLE);
                logList.add(MSG_DATA_SYSTEM);
                logList.add(LogCenterConstants.LOG_USER_FUNCTION);
 //             logList.add(MSG_DATA_RECORD);
                logList.add(MSG_FUNCTION_ENTRY);
                logList.add(MSG_FUNCTION_EXIT);
+               logList.add(MSG_DATA_SAMPLE);           
                logList.add(MSG_CONTEXT_SWITCH_ENTRY);
                logList.add(MSG_CONTEXT_SWITCH_EXIT);
        }
@@ -177,7 +177,7 @@ public class LogDataFactory {
                        output = new SyncData();
                        break;
                case LogCenterConstants.LOG_USER_FUNCTION:
-                       // user fucntion entry/exit
+                       // user function entry/exit
                        output = new UserFunctionData();
                        break;
                case MSG_DATA_SAMPLE:
@@ -185,7 +185,6 @@ public class LogDataFactory {
                case MSG_FUNCTION_EXIT:
                        // profiling sample log
                        output = new ProfileData();
-                       // ((ProfileData) output).setCallstack(data.getCallstack());
                        break;
                case MSG_DATA_SYSTEM:
                        // system log
@@ -258,7 +257,7 @@ public class LogDataFactory {
                        output = new SyncData();
                        break;
                case LogCenterConstants.LOG_USER_FUNCTION:
-                       // user fucntion entry/exit
+                       // user function entry/exit
                        output = new UserFunctionData();
                        break;
                case MSG_DATA_SAMPLE:
@@ -266,7 +265,6 @@ public class LogDataFactory {
                case MSG_FUNCTION_EXIT:
                        // profiling sample log
                        output = new ProfileData();
-                       // ((ProfileData) output).setCallstack(data.getCallstack());
                        break;
                case MSG_DATA_SYSTEM:
                        // system log
@@ -323,7 +321,7 @@ public class LogDataFactory {
                        format = SyncLogFormat.getInstance();
                        break;
                case LogCenterConstants.LOG_USER_FUNCTION:
-                       // user fucntion entry/exit
+                       // user function entry/exit
                        format = UserFunctionLogFormat.getInstance();
                        break;
                case MSG_DATA_SAMPLE:
index 22c632b..51074ae 100644 (file)
@@ -66,6 +66,28 @@ public class ProfileData extends LogData {
 
        public ProfileData() {
        }
+       
+       /** make function entry/exit from Database **/
+       public ProfileData(int id, int seq, int pid, int tid, String apiName, String binaryPath,
+                       long time, long callerPcAddr, long pcAddr) {
+               this.id = id;
+               this.seq = seq;
+               this.pid = pid;
+               this.tid = tid;
+               this.apiName = apiName;
+               this.binaryPath = binaryPath;
+               this.time = time;
+               this.callerPcAddr = callerPcAddr;
+               this.pcAddr = pcAddr;
+       }
+       
+       /** make function sample from Database **/
+       public ProfileData(long time, int pid, int tid, long pcAddr) {
+               this.time = time;
+               this.pid = pid;
+               this.tid = tid;
+               this.pcAddr = pcAddr;
+       }       
 
        public ProfileData clone() throws CloneNotSupportedException {
                ProfileData log = (ProfileData) super.clone();
index d4d04e9..acf6793 100755 (executable)
@@ -110,7 +110,6 @@ public class LogFormat {
        //              logFormats.add(NetworkLogFormat.getInstance());
                        logFormats.add(LifeCycleLogFormat.getInstance());
                        logFormats.add(MemoryLogFormat.getInstance());
-                       logFormats.add(ProfilingLogFormat.getInstance());
        //              logFormats.add(ReplayLogFormat.getInstance());
                        logFormats.add(SceneLogFormat.getInstance());
                        logFormats.add(ScreenShotLogFormat.getInstance());
@@ -118,7 +117,6 @@ public class LogFormat {
                        logFormats.add(SystemLogFormat.getInstance());
                        logFormats.add(ThreadLogFormat.getInstance());
                        logFormats.add(UIEventLogFormat.getInstance());
-                       logFormats.add(UserFunctionLogFormat.getInstance());
        //              logFormats.add(GLES20LogFormat.getInstance());
 
                }
index 63fb719..6edc5c7 100644 (file)
@@ -28,6 +28,8 @@
 package org.tizen.dynamicanalyzer.ui.range;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 
@@ -36,6 +38,7 @@ import org.eclipse.swt.widgets.Display;
 import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
 import org.tizen.dynamicanalyzer.common.AnalyzerManager;
 import org.tizen.dynamicanalyzer.communicator.DACommunicator;
+import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
 import org.tizen.dynamicanalyzer.sql.SqlManager;
 import org.tizen.dynamicanalyzer.swap.callstack.BaseCallstackManager;
 import org.tizen.dynamicanalyzer.swap.callstack.SWAPCallStackManager;
@@ -49,10 +52,13 @@ import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackManager;
 import org.tizen.dynamicanalyzer.ui.summary.failed.FailedChecker;
 import org.tizen.dynamicanalyzer.ui.summary.failed.FailedData;
 import org.tizen.dynamicanalyzer.ui.summary.leaks.LeakDetector;
+import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionSampleDBTable;
 import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfileDataMaker;
 import org.tizen.dynamicanalyzer.ui.summary.warning.WarningChecker;
 import org.tizen.dynamicanalyzer.ui.summary.warning.WarningData;
 import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage;
+import org.tizen.dynamicanalyzer.ui.timeline.calltrace.FunctionEntryDBTable;
+import org.tizen.dynamicanalyzer.ui.timeline.calltrace.FunctionExitDBTable;
 import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
 import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
 import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener;
@@ -73,12 +79,45 @@ public class RangeDataManager implements Runnable {
        private BaseCallstackManager callstackManager = null;
        private BaseCallstackManager swapCallstackManager = null;
 
+       // function entry/exit queue
+       private List<ProfileData> profileDataList = null;
+       
        private long markerStartTime = 0;
        private long markerEndTime = 0;
        private long analysisStartTime = 0;
        private long analysisEndTime = 0;
 
        private boolean isBeingAnalyzed = false;
+       
+       private enum Function {
+               SEQ(0),
+               PID(1),
+               TID(2),
+               FUNCTIONAME(3),
+               BINARYPATH(4),
+               TIME(5),
+               CALLERPCADDR(6),
+               PCADDR(7);
+               
+               public final int index;
+               
+               Function(int index) {
+                       this.index = index;
+               }
+       }
+       
+       private enum Sample {
+               TIME(0),
+               PID(1),
+               TID(2),
+               PCADDR(3);
+               
+               public final int index;
+               
+               Sample(int index) {
+                       this.index = index;
+               }
+       }
 
        private RangeDataManager() {
                failedChecker = new FailedChecker();
@@ -86,6 +125,7 @@ public class RangeDataManager implements Runnable {
                warningChecker = new WarningChecker();
                callstackManager = new CallStackManager();
                swapCallstackManager = new SWAPCallStackManager(true);
+               profileDataList = new ArrayList<ProfileData>();
 
                // fileDataMaker = new FileDataMaker(failedChecker, leakDetector,
                // warningChecker);
@@ -101,6 +141,7 @@ public class RangeDataManager implements Runnable {
                        profileDataMakerMap.clear();
                if (swapProfileDataMakerMap != null)
                        swapProfileDataMakerMap.clear();
+               profileDataList.clear();
        }
 
        public void initRange() {
@@ -292,7 +333,6 @@ public class RangeDataManager implements Runnable {
                boolean contextSkip = false;
 
                for (int i = 0; i < size; i++) {
-                       /* !! sample db table is null.. */
                        // case 1 : profile data
                        // log id = profiling data
 
@@ -301,27 +341,78 @@ public class RangeDataManager implements Runnable {
                                if (logId == DataChannelConstants.MSG_FUNCTION_EXIT) {
                                        from = 0;
                                        int to = from + AnalyzerConstants.DATABASE_READ_SIZE;
-                                       while (true) {
-                                               LogPackage logPackage = new LogPackage();
-                                               Logs logs = new Logs(
-                                                               DataChannelConstants.LOG_USER_FUNCTION);
-                                               input = SqlManager.getInstance().selectArea2(logId,
-                                                               markerStartTime, markerEndTime, from, to);
-                                               if (input.isEmpty()) {
+                                       while (true) { // load function entry data
+                                               String query = String.format(FunctionEntryDBTable.SELECT_QUERY,
+                                                               from, to, markerStartTime, markerEndTime);
+                                               
+                                               List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+                                               if (null == result || result.size() == 0 || result.get(0).size() == 0) {
                                                        break;
                                                }
-                                               logs.setLogs(input);
-                                               logPackage.setLogs(
-                                                               DataChannelConstants.LOG_USER_FUNCTION, logs);
-                                               makeRangeData(logPackage);
+                                               makeProfileData(DataChannelConstants.MSG_FUNCTION_ENTRY, result);
                                                from += AnalyzerConstants.DATABASE_READ_SIZE;
                                                to = from + AnalyzerConstants.DATABASE_READ_SIZE;
                                        }
+                                       
+                                       from = 0;
+                                       to = from + AnalyzerConstants.DATABASE_READ_SIZE;                                       
+                                       while (true) { // load function exit data
+                                               String query = String.format(FunctionExitDBTable.SELECT_QUERY,
+                                                               from, to, markerStartTime, markerEndTime);
+                                               
+                                               List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+                                               if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+                                                       break;
+                                               }
+                                               makeProfileData(DataChannelConstants.MSG_FUNCTION_EXIT, result); 
+                                               from += AnalyzerConstants.DATABASE_READ_SIZE;
+                                               to = from + AnalyzerConstants.DATABASE_READ_SIZE;
+                                       }
+                                       
+                                       makeRangeProfileData();
                                        profileSkip = true;
                                        continue;
                                }
                        }
-                       // case 2 : context data
+                       
+                       // case 2 : function sample data                        
+                       if (logId == DataChannelConstants.MSG_DATA_SAMPLE) {
+                               from = 0;
+                               int to = from + AnalyzerConstants.DATABASE_READ_SIZE;
+                               while (true) {
+                                       LogPackage logPackage = new LogPackage();
+                                       Logs logs = new Logs(
+                                                       DataChannelConstants.LOG_USER_FUNCTION);
+                                       List<LogData> logList = new ArrayList<LogData>();
+                                       String query = String.format(FunctionSampleDBTable.SELECT_QUERY,
+                                                       from, to, markerStartTime, markerEndTime);
+                                       List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+                                       if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+                                               break;
+                                       }
+                                       
+                                       int resultSize = result.size();
+                                       for (int j = 0; j < resultSize; j++) {
+                                               List<Object> resultData = result.get(j);
+                                               long time = (Long) resultData.get(Sample.TIME.index);
+                                               int pid = (Integer) resultData.get(Sample.PID.index);
+                                               int tid = (Integer) resultData.get(Sample.TID.index);
+                                               long pcAddr = (Long) resultData.get(Sample.PCADDR.index);
+                                               
+                                               ProfileData profileData = new ProfileData(time, pid, tid, pcAddr);
+                                               logList.add(profileData);
+                                       }
+                                       logs.setLogs(logList);
+                                       logPackage.setLogs(
+                                                       DataChannelConstants.LOG_USER_FUNCTION, logs);
+                                       makeRangeData(logPackage);
+                                       from += AnalyzerConstants.DATABASE_READ_SIZE;
+                                       to = from + AnalyzerConstants.DATABASE_READ_SIZE;                                       
+                               }
+                               continue;
+                       }
+                       
+                       // case 3 : context data
                        if (!contextSkip) {
                                if (logId == DataChannelConstants.MSG_CONTEXT_SWITCH_ENTRY) {
                                        from = 0;
@@ -346,7 +437,7 @@ public class RangeDataManager implements Runnable {
                                        continue;
                                }
                        }
-                       // case 3 : system data
+                       // case 4 : system data
 
                        if (logId == DataChannelConstants.MSG_DATA_SYSTEM) {
                                from = 0;
@@ -367,9 +458,8 @@ public class RangeDataManager implements Runnable {
                                }
                                continue;
                        }
-                       // case 4 : probe data
+                       // case 5 : probe data
                        if (logId != DataChannelConstants.MSG_DATA_SYSTEM
-                                       && logId != DataChannelConstants.MSG_DATA_SAMPLE
                                        && logId != DataChannelConstants.MSG_FUNCTION_ENTRY
                                        && logId != DataChannelConstants.MSG_FUNCTION_EXIT
                                        && logId != DataChannelConstants.MSG_CONTEXT_SWITCH_ENTRY
@@ -425,44 +515,64 @@ public class RangeDataManager implements Runnable {
                        }
                });
        }
-
+       // make ProfileData from database result set and push it to function entry/exit queue
+       private void makeProfileData(int id, List<List<Object>> result) {
+               int resultSize = result.size();
+               for (int j = 0; j < resultSize; j++) {
+                       List<Object> resultData = result.get(j);
+                       int seq = ((Long) resultData.get(Function.SEQ.index)).intValue();
+                       int pid = (Integer) resultData.get(Function.PID.index);
+                       int tid = (Integer) resultData.get(Function.TID.index);
+                       String functionName = (String) resultData.get(Function.FUNCTIONAME.index);
+                       String binaryPath = (String) resultData.get(Function.BINARYPATH.index);
+                       long time = (Long) resultData.get(Function.TIME.index);
+                       long callerPcAddr = (Long) resultData.get(Function.CALLERPCADDR.index);
+                       long pcAddr = (Long) resultData.get(Function.PCADDR.index);
+                       
+                       ProfileData profileData = new ProfileData(id, seq, pid, tid, functionName,
+                                       binaryPath, time, callerPcAddr, pcAddr);
+                       profileDataList.add(profileData);
+               }       
+       }
+       
+       private void makeRangeProfileData() {
+               if (profileDataList.isEmpty()) {
+                       return;
+               }
+               // sort by sequence number
+               // function entry/exit log must be handled by exact order
+               Collections.sort(profileDataList, new Comparator<ProfileData>() {
+                       public int compare(ProfileData pData1, ProfileData pData2) {
+                               return pData1.getSeq() - pData2.getSeq();
+                       }
+               });
+               
+               int size = profileDataList.size();
+               for (int i = 0; i < size; i++) {
+                       ProfileData input = profileDataList.get(i);
+                       ProfileDataMaker profileDataMaker = getProfileDataMakerByPid(input
+                                       .getPid());
+                       // function_exit log doesn't have probe type yet                                                                                        
+//                     if (input.getProbeType() 
+//                                     == AnalyzerConstants.FUNCTION_TYPE_APPINST) {
+                       swapCallstackManager.makeUserCallstack(input, profileDataMaker);
+//                     }
+               }               
+       }
+       
        private void makeRangeData(LogPackage logPack) {
                Logs logs = logPack.getLogs(DataChannelConstants.LOG_USER_FUNCTION);
                if (null != logs) {
-                       if (DACommunicator.isSWAPVersion()) {
-                               List<LogData> profileData = logs.getRawLogs();
-                               int size = profileData.size();
-                               for (int i = 0; i < size; i++) {
-                                       ProfileData input = (ProfileData) profileData.get(i);
-                                       ProfileDataMaker profileDataMaker = getProfileDataMakerByPid(input
-                                                       .getPid());
-                                       if (input.getId() != DataChannelConstants.MSG_DATA_SAMPLE) {
-                                               // function_exit log doesn't have probe type yet                                                                                        
-//                                             if (input.getProbeType() 
-//                                                             == AnalyzerConstants.FUNCTION_TYPE_APPINST) {
-                                                       swapCallstackManager.makeUserCallstack(input,
-                                                                       profileDataMaker);
-//                                             }
-                                       } else {
-                                               profileDataMaker.makeFunctionUsageProfileData(input);
-                                       }
-                               }
+                       List<LogData> profileData = logs.getRawLogs();
+                       int size = profileData.size();
+                       for (int i = 0; i < size; i++) {
+                               ProfileData input = (ProfileData) profileData.get(i);
+                               ProfileDataMaker profileDataMaker = getProfileDataMakerByPid(input
+                                               .getPid());
+                               profileDataMaker.makeFunctionUsageProfileData(input);
                        }
                }
 
-               // logs = logPack.getLogs(DataChannelConstants.LOG_USER_FUNCTION);
-               // if (null != logs) {
-               // List<LogData> profilingInputs = logs.getLogs();
-               // /* profiling data make */
-               // int size = profilingInputs.size();
-               // for (int i = 0; i < size; i++) {
-               // ProfileData input = (ProfileData) profilingInputs.get(i);
-               // if (input.getId() == DataChannelConstants.MSG_DATA_SAMPLE) {
-               // profileDataMaker.makeFunctionUsageProfileData(input);
-               // }
-               // }
-               // }
-
                logs = logPack.getLogs(DataChannelConstants.MSG_PROBE_FILE);
                if (null != logs) {
                        List<LogData> resourceInputs = logs.getRawLogs();
index 9a5b645..91408fd 100644 (file)
@@ -37,6 +37,17 @@ import org.tizen.dynamicanalyzer.database.DBTable;
 
 public class FunctionSampleDBTable extends DBTable {
        private static final String TABLENAME="FunctionSample";
+       // for range analysis
+       private static final String SELECT_COLUMN = 
+                       COLUMN.SAMPLETIME.name + CommonConstants.COMMA +
+                       COLUMN.PID.name + CommonConstants.COMMA +
+                       COLUMN.TID.name + CommonConstants.COMMA +
+                       COLUMN.PCADDR.name;
+       
+       public static final String SELECT_QUERY = 
+                       "select limit %s %s " + SELECT_COLUMN + " from " + TABLENAME +
+                       " where " + COLUMN.SAMPLETIME.name + " >= %s and " + COLUMN.SAMPLETIME.name + " <= %s";
+                       
        
        public enum COLUMN {
                SEQ(0, "SEQNUMBER"),
index 455c1e1..3364989 100644 (file)
@@ -37,7 +37,20 @@ import org.tizen.dynamicanalyzer.database.DBConstants;
 import org.tizen.dynamicanalyzer.database.DBTable;
 
 public class FunctionEntryDBTable extends DBTable {
-       private static final String TABLENAME="FunctionEntry";
+       public static final String TABLENAME="FunctionEntry";
+       // for range analysis   
+       private static final String SELECT_COLUMN = 
+                       COLUMN.SEQ.name + CommonConstants.COMMA +
+                       COLUMN.PID.name + CommonConstants.COMMA +
+                       COLUMN.TID.name + CommonConstants.COMMA +
+                       COLUMN.FUNCTIONNAME.name + CommonConstants.COMMA +
+                       COLUMN.BINARYPATH.name + CommonConstants.COMMA +
+                       COLUMN.STARTTIME.name + CommonConstants.COMMA +
+                       COLUMN.CALLERPCADDR.name + CommonConstants.COMMA +
+                       COLUMN.PCADDR.name;
+       public static final String SELECT_QUERY = 
+                       "select limit %s %s " + SELECT_COLUMN + " from " + TABLENAME + 
+                       "  where " + COLUMN.STARTTIME.name + " >= %s and " + COLUMN.STARTTIME.name + " <= %s";
        
        public enum COLUMN {
                SEQ(0, "SEQNUMBER"),
index 386fe62..2f9bb42 100644 (file)
@@ -38,6 +38,22 @@ import org.tizen.dynamicanalyzer.database.DBTable;
 public class FunctionExitDBTable extends DBTable {
        private static final String TABLENAME="FunctionExit";
        public static final int FUNCTION_RETURN_VALUE_LENGTH = 1024;
+       // for range analysis   
+       private static final String SELECT_COLUMN = 
+                       COLUMN.EXITSEQ.name + CommonConstants.COMMA +
+                       FunctionEntryDBTable.COLUMN.PID.name + CommonConstants.COMMA +
+                       FunctionEntryDBTable.COLUMN.TID.name + CommonConstants.COMMA +
+                       FunctionEntryDBTable.COLUMN.FUNCTIONNAME.name + CommonConstants.COMMA +
+                       FunctionEntryDBTable.COLUMN.BINARYPATH.name + CommonConstants.COMMA +
+                       COLUMN.ENDTIME.name + CommonConstants.COMMA +
+                       FunctionEntryDBTable.COLUMN.CALLERPCADDR.name + CommonConstants.COMMA +
+                       FunctionEntryDBTable.COLUMN.PCADDR.name;
+       
+       public static final String SELECT_QUERY = 
+                       "select limit %s %s " + SELECT_COLUMN + " from " + FunctionEntryDBTable.TABLENAME + 
+                       CommonConstants.COMMA + TABLENAME + " where " + 
+                       COLUMN.ENTRYSEQ.name + CommonConstants.EQUAL + FunctionEntryDBTable.COLUMN.SEQ.name +
+                       " and " + COLUMN.ENDTIME.name + " >= %s and " + COLUMN.ENDTIME.name + " <= %s";
        
        public enum COLUMN {
                ENTRYSEQ(0, "EntrySEQNUMBER"),
index 658b928..d98ca3f 100644 (file)
@@ -1,15 +1,20 @@
+* 2.1.37
+- apply new DB schema to Range Analysis
+- screenshot bug fix for not getting screenshot file from target
+- revision configuration default value, disable timelinechart (UI event, Device)
+== woojin jung <woojin2.jung@samsung.com> 2014-06-27
 * 2.1.36
 - bug fix for trace on real device
-== Jungwook Ryu <jungwook.ryu@samsung.com> 2013-06-27
+== Jungwook Ryu <jungwook.ryu@samsung.com> 2014-06-27
 * 2.1.35
 - launch bug fix for mac
-== Jaewon Lim <jaewon81.lim@samsung.com> 2013-06-27
+== Jaewon Lim <jaewon81.lim@samsung.com> 2014-06-27
 * 2.1.34
 - fix for release
-== j0kim <j0.kim@samsung.com> 2013-06-27
+== j0kim <j0.kim@samsung.com> 2014-06-27
 * 2.1.33
 - new UX Design
-== j0kim <j0.kim@samsung.com> 2013-06-17
+== j0kim <j0.kim@samsung.com> 2014-06-17
 * 2.1.32
 - enable source view for EFL application
 == woojin jung <woojin2.jung@samsung.com> 2014-05-17
index 28a4067..917c4b5 100644 (file)
@@ -1,5 +1,5 @@
 Source:dynamic-analyzer
-Version:2.1.36
+Version:2.1.37
 Maintainer:Jaewon Lim <jaewon81.lim@samsung.com>, Juyoung Kim
 
 Package:dynamic-analyzer-product