From: woojin Date: Fri, 27 Jun 2014 09:01:49 +0000 (+0900) Subject: Range Analysis : apply new DB schema X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F40%2F23540%2F1;p=sdk%2Ftools%2Fdynamic-analyzer.git Range Analysis : apply new DB schema 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 --- diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/logparser/LogInserter.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/logparser/LogInserter.java index 0e03c1b..d92b282 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/logparser/LogInserter.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/logparser/LogInserter.java @@ -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 newLogs = new ArrayList(); - newLogs.addAll(logs.getRawLogs()); - SqlManager.getInstance().updateProfileTable(newLogs); - } - } // for logPackage.clear(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/sql/SqlManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/sql/SqlManager.java index 011b939..b040e04 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/sql/SqlManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/sql/SqlManager.java @@ -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 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( diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogDataFactory.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogDataFactory.java index 28f1b19..1e56e62 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogDataFactory.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogDataFactory.java @@ -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: diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java index 22c632b..51074ae 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProfileData.java @@ -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(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/format/LogFormat.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/format/LogFormat.java index d4d04e9..acf6793 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/format/LogFormat.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/format/LogFormat.java @@ -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()); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeDataManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeDataManager.java index 63fb719..6edc5c7 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeDataManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/range/RangeDataManager.java @@ -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 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(); // 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> 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> 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 logList = new ArrayList(); + String query = String.format(FunctionSampleDBTable.SELECT_QUERY, + from, to, markerStartTime, markerEndTime); + List> 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 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> result) { + int resultSize = result.size(); + for (int j = 0; j < resultSize; j++) { + List 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() { + 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 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 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 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 resourceInputs = logs.getRawLogs(); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionSampleDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionSampleDBTable.java index 9a5b645..91408fd 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionSampleDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/summary/profiling/FunctionSampleDBTable.java @@ -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"), diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryDBTable.java index 455c1e1..3364989 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionEntryDBTable.java @@ -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"), diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java index 386fe62..2f9bb42 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/timeline/calltrace/FunctionExitDBTable.java @@ -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"), diff --git a/package/changelog b/package/changelog index 658b928..d98ca3f 100644 --- a/package/changelog +++ b/package/changelog @@ -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 2014-06-27 * 2.1.36 - bug fix for trace on real device -== Jungwook Ryu 2013-06-27 +== Jungwook Ryu 2014-06-27 * 2.1.35 - launch bug fix for mac -== Jaewon Lim 2013-06-27 +== Jaewon Lim 2014-06-27 * 2.1.34 - fix for release -== j0kim 2013-06-27 +== j0kim 2014-06-27 * 2.1.33 - new UX Design -== j0kim 2013-06-17 +== j0kim 2014-06-17 * 2.1.32 - enable source view for EFL application == woojin jung 2014-05-17 diff --git a/package/pkginfo.manifest b/package/pkginfo.manifest index 28a4067..917c4b5 100644 --- a/package/pkginfo.manifest +++ b/package/pkginfo.manifest @@ -1,5 +1,5 @@ Source:dynamic-analyzer -Version:2.1.36 +Version:2.1.37 Maintainer:Jaewon Lim , Juyoung Kim Package:dynamic-analyzer-product