From 24aec1f10b923e9c0916988d37f14ed68e080188 Mon Sep 17 00:00:00 2001 From: greatim Date: Tue, 26 May 2015 19:58:25 +0900 Subject: [PATCH] PROTOCOL: Implement control channel communicator for protocol 4.0 Implement control channel communicator for protocol 4.0 Implement to get version by message in BaseCommunicator Change the type of apis collection to map from list in DeviceStatusInfo Move DATime class to model package Change-Id: I9958046d33c45a0f4dd6d14f7ec0a3f1bace2d20 Signed-off-by: greatim --- .../dynamicanalyzer/collection/IndexedHashMap.java | 20 +- .../communicator/BaseCommunicator.java | 33 +- .../communicator/ProtocolSerializer.java | 5 + .../communicator/SubCommunicator.java | 3 - .../dynamicanalyzer/handlers/ReplayManager.java | 2 +- .../dynamicanalyzer/{swap => }/model/DATime.java | 2 +- .../dynamicanalyzer/project/DeviceStatusInfo.java | 21 +- .../org/tizen/dynamicanalyzer/project/Project.java | 39 +- .../protocol/ProtocolConstants.java | 10 +- .../protocol/p30/ApplicationInst30.java | 4 + .../protocol/p30/Communicator30.java | 141 ++++---- .../protocol/p30/ProtocolConfig30.java | 4 +- .../protocol/p40/ApplicationInst40.java | 46 +++ .../protocol/p40/Communicator40.java | 395 +++++++++++++++++++++ .../protocol/p40/FunctionInst40.java | 51 +++ .../protocol/p40/ProtocolConfig40.java | 4 +- .../protocol/p40/ProtocolConstant40.java | 51 +++ .../swap/model/data/ContextSwitchData.java | 2 +- .../swap/model/data/ControlData.java | 2 +- .../swap/model/data/CustomData.java | 2 +- .../dynamicanalyzer/swap/model/data/ErrorData.java | 2 +- .../dynamicanalyzer/swap/model/data/FileData.java | 2 +- .../swap/model/data/GLES20LogData.java | 2 +- .../dynamicanalyzer/swap/model/data/LogData.java | 2 +- .../swap/model/data/MemoryData.java | 2 +- .../swap/model/data/MemoryMapData.java | 2 +- .../swap/model/data/NetworkData.java | 2 +- .../swap/model/data/ProbeCommonData.java | 2 +- .../swap/model/data/ProcessAddInfoData.java | 2 +- .../swap/model/data/ProcessInfoData.java | 2 +- .../swap/model/data/ProfileData.java | 2 +- .../swap/model/data/RecordEventObject.java | 2 +- .../swap/model/data/ReplayData.java | 2 +- .../dynamicanalyzer/swap/model/data/SceneData.java | 2 +- .../swap/model/data/ScreenShotData.java | 2 +- .../dynamicanalyzer/swap/model/data/SyncData.java | 2 +- .../swap/model/data/SystemData.java | 2 +- .../swap/model/data/ThreadData.java | 2 +- .../swap/model/data/UIEventData.java | 2 +- .../ui/toolbar/replay/data/ReplayDBManager.java | 2 +- .../replayEditor/data/ReplayEditSaveDataMaker.java | 2 +- 41 files changed, 743 insertions(+), 136 deletions(-) rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{swap => }/model/DATime.java (98%) create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ApplicationInst40.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/FunctionInst40.java create mode 100644 org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ProtocolConstant40.java diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/collection/IndexedHashMap.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/collection/IndexedHashMap.java index 2ad90b5..f1ab104 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/collection/IndexedHashMap.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/collection/IndexedHashMap.java @@ -87,25 +87,27 @@ public class IndexedHashMap { return Collections.unmodifiableList(dataList); } - public boolean buildFrom(List keylist, List valuelist) { - if(keylist == null || valuelist == null || keylist.size() != valuelist.size()) { + public boolean buildFrom(List keylist, List valuelist, int maxindex) { + if (keylist == null || valuelist == null || keylist.size() != valuelist.size() + || maxindex < 0) { return false; } - + clear(); - - int size = keylist.size(); - for(int i = 0; i < size; i++) { + + // retain list space + for (int i = 0; i < maxindex + 1; i++) { dataList.add(null); } - - for(int i = 0; i < size; i++) { + + int size = keylist.size(); + for (int i = 0; i < size; i++) { V val = valuelist.get(i); int index = val.getIndex(); dataMap.put(keylist.get(i), val); dataList.set(index, val); } - + return true; } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/BaseCommunicator.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/BaseCommunicator.java index e749c80..45c2545 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/BaseCommunicator.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/BaseCommunicator.java @@ -42,7 +42,9 @@ import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.AnalyzerShellCommands; import org.tizen.dynamicanalyzer.common.DAResult; import org.tizen.dynamicanalyzer.constant.CommonConstants; +import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; import org.tizen.dynamicanalyzer.protocol.p30.Communicator30; +import org.tizen.dynamicanalyzer.protocol.p40.Communicator40; import org.tizen.dynamicanalyzer.ui.info.screenshot.EmulatorScreenshot; import org.tizen.dynamicanalyzer.ui.info.screenshot.SocketClient; import org.tizen.dynamicanalyzer.util.ByteUtil; @@ -287,9 +289,33 @@ public class BaseCommunicator { } private String checkVersionByMessage() { - // TODO : implement for protocol 4.0 or later // if the target is legacy(3.0), the target send the ACK message without version string - return null; + String version = null; + + ProtocolSerializer ps = new ProtocolSerializer(); + ps.setMessageID(ProtocolConstants.MSG_VERSION); + byte[] msg = ps.toByteArray(); + + AckMessage result = handleControlMessage(msg); + if (result != null && result.isSuccess() + && result.isCorrectID(ProtocolConstants.MSG_VERSION_ACK)) { + if (result.getPayloadLength() > INT_SIZE) { + // protocol 4.0 or later + // parse for version string + byte[] pbyte = result.getPayload(); + if (pbyte != null) { + ProtocolParser parser = new ProtocolParser(pbyte); + parser.getInt(); // for return code + + version = parser.getString(); + } + } else { + // legacy(3.0), version message treated as keep alive message + // do nothing + } + } + + return version; } private String checkVersionByCommand() { @@ -317,8 +343,7 @@ public class BaseCommunicator { DAResult result = DAResult.SUCCESS; if (VERSION40.equals(protocolVersion)) { - // TODO : make sub communicator for protocol 4.0 - subCommunicator = null; + subCommunicator = new Communicator40(this); } else if (VERSION30.equals(protocolVersion)) { subCommunicator = new Communicator30(this); } else { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/ProtocolSerializer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/ProtocolSerializer.java index b6bf80e..cc38b38 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/ProtocolSerializer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/ProtocolSerializer.java @@ -41,6 +41,11 @@ public class ProtocolSerializer { this.msgID = msgID; } + public void putByte(byte val) { + byte[] buf = new byte[] { val }; + payload.write(buf, 0, buf.length); + } + public void putShort(short val) { byte[] buf = ByteUtil.toBytes(val); payload.write(buf, 0, buf.length); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/SubCommunicator.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/SubCommunicator.java index 33a3ad0..f50c55b 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/SubCommunicator.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/SubCommunicator.java @@ -49,9 +49,6 @@ public abstract class SubCommunicator { * send messages *******************************************************/ - public abstract DAResult sendVersionMessage(IProgress progress) throws InterruptedException, - ProtocolNotSupportedException; - public abstract DAResult sendTraceStartMessage(IProgress progress) throws InterruptedException, ProtocolNotSupportedException; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ReplayManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ReplayManager.java index 8d32a84..bb8ddd6 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ReplayManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ReplayManager.java @@ -29,9 +29,9 @@ package org.tizen.dynamicanalyzer.handlers; import org.tizen.dynamicanalyzer.common.DAResult; import org.tizen.dynamicanalyzer.common.Global; +import org.tizen.dynamicanalyzer.model.DATime; import org.tizen.dynamicanalyzer.setting.Feature; import org.tizen.dynamicanalyzer.setting.SettingDataManager; -import org.tizen.dynamicanalyzer.swap.model.DATime; import org.tizen.dynamicanalyzer.ui.toolbar.Toolbar; import org.tizen.dynamicanalyzer.widgets.timer.IAlarm; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/DATime.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/DATime.java similarity index 98% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/DATime.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/DATime.java index 40d7146..023afe7 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/DATime.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/DATime.java @@ -24,7 +24,7 @@ * - S-Core Co., Ltd * */ -package org.tizen.dynamicanalyzer.swap.model; +package org.tizen.dynamicanalyzer.model; import org.tizen.dynamicanalyzer.constant.CommonConstants; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/DeviceStatusInfo.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/DeviceStatusInfo.java index 1b96296..7e1e825 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/DeviceStatusInfo.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/DeviceStatusInfo.java @@ -32,7 +32,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; - +import java.util.Map; import org.tizen.dynamicanalyzer.collection.IndexedHashMap; import org.tizen.dynamicanalyzer.constant.CommonConstants; import org.tizen.dynamicanalyzer.database.DBTable; @@ -61,7 +61,7 @@ public class DeviceStatusInfo { private int cpuCount = 0; private int deviceCount = 0; private String devices = null; - private List apiNameList = null; + private Map apiNameMap = null; private IndexedHashMap binaryInfos = new IndexedHashMap(); public DeviceStatusInfo() { @@ -230,16 +230,16 @@ public class DeviceStatusInfo { } // method for api names - public List getApiNameList() { - if (apiNameList != null) { - return Collections.unmodifiableList(apiNameList); + public Map getApiNameMap() { + if (apiNameMap != null) { + return Collections.unmodifiableMap(apiNameMap); } else { return null; } } - public void setApiNameList(List functionList) { - apiNameList = functionList; + public void setApiNameMap(Map functionMap) { + apiNameMap = functionMap; } // get binary info if it exist in map @@ -288,6 +288,7 @@ public class DeviceStatusInfo { List keylist = new ArrayList(); List valuelist = new ArrayList(); + int maxindex = -1; int rowsize = datas.size(); for (int i = 0; i < rowsize; i++) { List data = datas.get(i); @@ -305,8 +306,12 @@ public class DeviceStatusInfo { keylist.add(targetpath); valuelist.add(binfo); + + if (maxindex < id) { + maxindex = id; + } } - binaryInfos.buildFrom(keylist, valuelist); + binaryInfos.buildFrom(keylist, valuelist, maxindex); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java index 4c15be6..bf8be60 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/Project.java @@ -56,12 +56,12 @@ import org.tizen.dynamicanalyzer.control.ProgressTable.STAGE; import org.tizen.dynamicanalyzer.database.DBTableRegistry; import org.tizen.dynamicanalyzer.database.SqlConnectionManager; import org.tizen.dynamicanalyzer.handlers.UIAction; +import org.tizen.dynamicanalyzer.model.DATime; import org.tizen.dynamicanalyzer.project.callstack.RuntimeCallstackManager; import org.tizen.dynamicanalyzer.project.data.BinaryInfoDBTable; import org.tizen.dynamicanalyzer.project.data.FunctionNameDBTable; import org.tizen.dynamicanalyzer.project.data.MemoryMapDBTable; import org.tizen.dynamicanalyzer.project.data.ProcessInfoDBTable; -import org.tizen.dynamicanalyzer.swap.model.DATime; import org.tizen.dynamicanalyzer.util.CommonUtil; import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; @@ -297,16 +297,30 @@ public class Project { public void setDeviceStatusInfo(DeviceStatusInfo statusInfo) { targetDeviceStatusInfo = statusInfo; if (targetDeviceStatusInfo != null) { - List apiNameList = targetDeviceStatusInfo.getApiNameList(); - if (apiNameList != null) { - synchronized (functionInfos) { - int apisize = apiNameList.size(); - for (int i = 0; i < apisize; i++) { - String functionName = apiNameList.get(i); - FunctionInfo fninfo = new FunctionInfo(functionName); - functionInfos.put(functionName, fninfo); + Map apiNameMap = targetDeviceStatusInfo.getApiNameMap(); + if (apiNameMap != null) { + List keylist = new ArrayList(); + List valuelist = new ArrayList(); + + int maxindex = -1; + for (Map.Entry entry : apiNameMap.entrySet()) { + int index = entry.getKey().intValue(); + String apiName = entry.getValue(); + + FunctionInfo fninfo = new FunctionInfo(apiName); + fninfo.setID(index); + + keylist.add(apiName); + valuelist.add(fninfo); + + if (maxindex < index) { + maxindex = index; } } + + synchronized (functionInfos) { + functionInfos.buildFrom(keylist, valuelist, maxindex); + } } } } @@ -797,6 +811,7 @@ public class Project { List namelist = new ArrayList(); List finfolist = new ArrayList(); + int maxindex = -1; int size = datas.size(); for (int i = 0; i < size; i++) { List functionInfo = datas.get(i); @@ -809,9 +824,13 @@ public class Project { namelist.add(name); finfolist.add(finfo); + + if (maxindex < id) { + maxindex = id; + } } - functionInfos.buildFrom(namelist, finfolist); + functionInfos.buildFrom(namelist, finfolist, maxindex); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/ProtocolConstants.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/ProtocolConstants.java index 5184cdb..af3ff5f 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/ProtocolConstants.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/ProtocolConstants.java @@ -27,6 +27,10 @@ package org.tizen.dynamicanalyzer.protocol; // immutable constant value by protocol version public class ProtocolConstants { + // to get protocol version + public static final int MSG_VERSION = 0x0001; + public static final int MSG_VERSION_ACK = 0x1001; + // sequence number public static final long MAX_SEQ_NUMBER = 0xFFFFFFFFL; @@ -103,7 +107,7 @@ public class ProtocolConstants { public final static long FEATURE_INTERNAL_OSPUI_API = 0x1L << 31; public final static long FEATURE_INTERNAL_NETWORK_API = 0x1L << 32; public final static long FEATURE_INTERNAL_OPENGL_API = 0x1L << 33; - + public final static long FEATURE_SYSTEM_CPU = 0x1L << 36; public final static long FEATURE_SYSTEM_MEMORY = 0x1L << 37; public final static long FEATURE_SYSTEM_PROCESS = 0x1L << 38; @@ -113,7 +117,9 @@ public class ProtocolConstants { public final static long FEATURE_SYSTEM_NETWORK = 0x1L << 42; public final static long FEATURE_SYSTEM_DEVICE = 0x1L << 43; public final static long FEATURE_SYSTEM_ENERGY = 0x1L << 44; - + public final static long FEATURE_SYSTEM_FILE_ACTIVITY = 0x1L << 48; + // miscellaneous + public final static String MAIN_FUNCTION_SYMBOL = "main"; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/ApplicationInst30.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/ApplicationInst30.java index 889943d..3894d6b 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/ApplicationInst30.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/ApplicationInst30.java @@ -54,6 +54,10 @@ public class ApplicationInst30 implements ISerializable { protected String executablePath = null; protected List functionInstList = null; + public int getApplicationType() { + return applicationType; + } + public void setApplicationType(int applicationType) { this.applicationType = applicationType; } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/Communicator30.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/Communicator30.java index 89a43d0..6b29240 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/Communicator30.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/Communicator30.java @@ -5,7 +5,6 @@ * * Contact: * Jaewon Lim - * Jooyoul Lee * Juyoung Kim * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -40,6 +39,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeMap; import java.util.regex.Pattern; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; @@ -65,6 +65,7 @@ import org.tizen.dynamicanalyzer.control.IProgress; import org.tizen.dynamicanalyzer.handlers.ReplayManager; import org.tizen.dynamicanalyzer.handlers.UIAction; import org.tizen.dynamicanalyzer.model.AddrSymbolPair; +import org.tizen.dynamicanalyzer.model.DATime; import org.tizen.dynamicanalyzer.project.AppInfo; import org.tizen.dynamicanalyzer.project.BinaryInfo; import org.tizen.dynamicanalyzer.project.DeviceStatusInfo; @@ -73,7 +74,6 @@ import org.tizen.dynamicanalyzer.setting.Feature; import org.tizen.dynamicanalyzer.setting.SettingDataManager; import org.tizen.dynamicanalyzer.setting.TargetData; import org.tizen.dynamicanalyzer.swap.communicator.SwapErrorCode; -import org.tizen.dynamicanalyzer.swap.model.DATime; import org.tizen.dynamicanalyzer.swap.model.data.RecordEventObject; import org.tizen.dynamicanalyzer.swap.model.data.ReplayData; import org.tizen.dynamicanalyzer.ui.toolbar.replay.data.ReplayDataManager; @@ -117,7 +117,7 @@ public class Communicator30 extends SubCommunicator { } // get api map information - parent.getDevice().getDeviceStatusInfo().setApiNameList(getApiList()); + parent.getDevice().getDeviceStatusInfo().setApiNameMap(getApiMap()); // send configuration message result = sendConfigurationMessage(null); @@ -220,7 +220,7 @@ public class Communicator30 extends SubCommunicator { return DAResult.ERR_TARGET_INFO_GET_FAIL; } - protected List getApiList() { + protected Map getApiMap() { DeviceInfo device = parent.getDevice(); final List lines = new ArrayList(); @@ -234,8 +234,8 @@ public class Communicator30 extends SubCommunicator { } }); - List apiMap = new ArrayList(); - apiMap.add(AnalyzerConstants.UNKNOWN_API); + Map apiMap = new TreeMap(); + apiMap.put(Integer.valueOf(0), AnalyzerConstants.UNKNOWN_API); if (lines.size() > 0) { if (!lines.get(0).contains(AnalyzerConstants.CMDSCRIPT_UNKNOWN) @@ -244,7 +244,8 @@ public class Communicator30 extends SubCommunicator { String input = lines.get(i); String[] splitLine = input.trim().split(CommonConstants.SPACE, 2); if (splitLine.length > 1) { - apiMap.add(new String(splitLine[1])); + int index = Integer.parseInt(splitLine[0]); + apiMap.put(Integer.valueOf(index), splitLine[1]); } else { Logger.debug("api map parsing is wrong"); } @@ -452,7 +453,7 @@ public class Communicator30 extends SubCommunicator { FunctionInst30 functionInst = new FunctionInst30(); functionInst.setAddr(addrSymbol.getAddr()); - functionInst.setArgs(getFunctionArgs(addrSymbol.getSymbol())); + functionInst.setArgs(getFunctionArgs(symbol)); functionInstList.add(functionInst); } @@ -645,75 +646,80 @@ public class Communicator30 extends SubCommunicator { continue; } - DAResult result; - String[] splitLocalBinaryPath = localBinaryPath.split(Pattern.quote(File.separator)); + DAResult result = checkDirtyOfBinary(binInfo, localBinaryPath); + if (!result.isSuccess()) { + // popup warning dialog with result + UIAction.showWarning(result, 480, 153); + } else { + ret = DAResult.SUCCESS; + } + } - // check local binary path validation - // host has no binary file - pull binary file from target - if (splitLocalBinaryPath.length < 3 || !(new File(localBinaryPath)).exists()) { + return ret; + } + + protected DAResult checkDirtyOfBinary(BinaryInfo binInfo, String localBinaryPath) { + DAResult result = DAResult.SUCCESS; + String targetPath = binInfo.getTargetBinaryPath(); + + String[] splitLocalBinaryPath = localBinaryPath.split(Pattern.quote(File.separator)); + + // check local binary path validation + // host has no binary file - pull binary file from target + if (splitLocalBinaryPath.length < 3 || !(new File(localBinaryPath)).exists()) { + localBinaryPath = PathManager.DA_TEMP_FOLDER_PATH + File.separator + + getFileName(targetPath); + result = pullTheFile(targetPath, localBinaryPath); + if (result.isSuccess()) { + binInfo.setTempBinaryPath(localBinaryPath); + } else if (result.equals(DAResult.ERR_BY_SECURITY)) { + // continue : do nothing + } + } else { + // if local binary exist already, then check for md5sum + String localHashCode = null; + try { + Runtime rt = Runtime.getRuntime(); + Process process = rt.exec(new String[] { getMd5Command(), localBinaryPath }); + process.waitFor(); + BufferedReader reader = new BufferedReader(new InputStreamReader( + process.getInputStream())); + BufferedReader error = new BufferedReader(new InputStreamReader( + process.getErrorStream())); + String line = reader.readLine(); + String errorStr = error.readLine(); + if (null == line) { + Logger.warning("host md5sum get failed : " + errorStr); + } else { + // md5sum.exe prepend "\" when target binary is not in + // current directory + if (CommonUtil.isWin()) { + line = line.replace("\\", ""); + } + localHashCode = parseMd5Result(line); + } + } catch (IOException e) { + Logger.exception(e); + } catch (InterruptedException e) { + Logger.exception(e); + } + + if (localHashCode == null || 0 != localHashCode.compareTo(binInfo.getMd5sumValue())) { localBinaryPath = PathManager.DA_TEMP_FOLDER_PATH + File.separator + getFileName(targetPath); result = pullTheFile(targetPath, localBinaryPath); if (result.isSuccess()) { binInfo.setTempBinaryPath(localBinaryPath); } else if (result.equals(DAResult.ERR_BY_SECURITY)) { - // popup by security reason - UIAction.showWarning(result, 480, 153); - continue; + // continue : do nothing } } else { - // if local binary exist already, then check for md5sum - String localHashCode = null; - try { - Runtime rt = Runtime.getRuntime(); - Process process = rt.exec(new String[] { getMd5Command(), localBinaryPath }); - process.waitFor(); - BufferedReader reader = new BufferedReader(new InputStreamReader( - process.getInputStream())); - BufferedReader error = new BufferedReader(new InputStreamReader( - process.getErrorStream())); - String line = reader.readLine(); - String errorStr = error.readLine(); - if (null == line) { - Logger.debug("host md5sum get failed : " + errorStr); - result = DAResult.ERR_BIN_INFO_GET_FAIL; - } else { - // md5sum.exe prepend "\" when target binary is not in - // current directory - if (CommonUtil.isWin()) { - line = line.replace("\\", ""); - } - localHashCode = parseMd5Result(line); - } - } catch (IOException e) { - Logger.exception(e); - result = DAResult.ERR_BIN_INFO_GET_FAIL; - } catch (InterruptedException e) { - Logger.exception(e); - result = DAResult.ERR_BIN_INFO_GET_FAIL; - } - - if (localHashCode == null || 0 != localHashCode.compareTo(binInfo.getMd5sumValue())) { - localBinaryPath = PathManager.DA_TEMP_FOLDER_PATH + File.separator - + getFileName(targetPath); - result = pullTheFile(targetPath, localBinaryPath); - if (result.isSuccess()) { - binInfo.setTempBinaryPath(localBinaryPath); - } else if (result.equals(DAResult.ERR_BY_SECURITY)) { - // popup by security reason - UIAction.showWarning(result, 480, 153); - continue; - } - } else { - binInfo.setTempBinaryPath(localBinaryPath); - } + binInfo.setTempBinaryPath(localBinaryPath); } - - // result succeed if getting for any binary info succeed - ret = DAResult.SUCCESS; } - return ret; + // result succeed if getting for any binary info succeed + return result; } protected DAResult pullTheFile(String from, String to) { @@ -910,11 +916,6 @@ public class Communicator30 extends SubCommunicator { } @Override - public DAResult sendVersionMessage(IProgress progress) throws ProtocolNotSupportedException { - throw new ProtocolNotSupportedException(); - } - - @Override public DAResult sendProbeMapMessage(IProgress progress) throws ProtocolNotSupportedException { throw new ProtocolNotSupportedException(); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/ProtocolConfig30.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/ProtocolConfig30.java index 1d174a3..2ff64de 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/ProtocolConfig30.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p30/ProtocolConfig30.java @@ -1,10 +1,10 @@ /* * Dynamic Analyzer * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * Heeyoung Hwang + * Jaewon Lim * Juyoung Kim * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ApplicationInst40.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ApplicationInst40.java new file mode 100644 index 0000000..e5601ce --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ApplicationInst40.java @@ -0,0 +1,46 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Jaewon Lim + * Juyoung Kim + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.dynamicanalyzer.protocol.p40; + +import org.tizen.dynamicanalyzer.communicator.ProtocolSerializer; +import org.tizen.dynamicanalyzer.protocol.p30.ApplicationInst30; + +public class ApplicationInst40 extends ApplicationInst30 { + protected long mainAddress = 0; + + public void setMainAddress(long addr) { + this.mainAddress = addr; + } + + @Override + public void serialize(ProtocolSerializer ps) { + super.serialize(ps); + + if (applicationType == ProtocolConstant40.APPTYPE_TIZEN) { + ps.putLong(mainAddress); + } + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/Communicator40.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/Communicator40.java index 066abb2..c835bb1 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/Communicator40.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/Communicator40.java @@ -26,12 +26,407 @@ package org.tizen.dynamicanalyzer.protocol.p40; +import static org.tizen.dynamicanalyzer.constant.CommonConstants.INT_SIZE; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import org.tizen.dynamicanalyzer.common.AnalyzerConstants; +import org.tizen.dynamicanalyzer.common.DAResult; +import org.tizen.dynamicanalyzer.common.Global; +import org.tizen.dynamicanalyzer.communicator.AckMessage; import org.tizen.dynamicanalyzer.communicator.BaseCommunicator; +import org.tizen.dynamicanalyzer.communicator.DeviceInfo; +import org.tizen.dynamicanalyzer.communicator.ISerializable; +import org.tizen.dynamicanalyzer.communicator.ProtocolNotSupportedException; +import org.tizen.dynamicanalyzer.communicator.ProtocolParser; +import org.tizen.dynamicanalyzer.communicator.ProtocolSerializer; +import org.tizen.dynamicanalyzer.constant.CommonConstants; +import org.tizen.dynamicanalyzer.control.ApplistManager; +import org.tizen.dynamicanalyzer.control.IProgress; +import org.tizen.dynamicanalyzer.handlers.UIAction; +import org.tizen.dynamicanalyzer.model.AddrSymbolPair; +import org.tizen.dynamicanalyzer.project.AppInfo; +import org.tizen.dynamicanalyzer.project.BinaryInfo; +import org.tizen.dynamicanalyzer.project.PackageInfo; +import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; import org.tizen.dynamicanalyzer.protocol.p30.Communicator30; +import org.tizen.dynamicanalyzer.protocol.p30.ProtocolFilter30; +import org.tizen.dynamicanalyzer.setting.Feature; +import org.tizen.dynamicanalyzer.setting.SettingDataManager; +import org.tizen.dynamicanalyzer.setting.TargetData; +import org.tizen.dynamicanalyzer.swap.communicator.SwapErrorCode; +import org.tizen.dynamicanalyzer.util.Logger; public class Communicator40 extends Communicator30 { public Communicator40(BaseCommunicator parent) { super(parent); } + + @Override + public DAResult connect() { + DAResult result; + + int localPort = parent.getLocalPort(); + + result = createDataSocket(localPort); + if (!result.isSuccess()) { + Logger.warning(result.toString()); + return DAResult.ERR_DATA_SOCKET_CREATION_FAIL; + } + + // get target information + result = sendTargetInfoMessage(null); + if (!result.isSuccess()) { + Logger.warning(result.toString()); + return result; + } + + // get api map information + try { + result = sendProbeMapMessage(null); + if (!result.isSuccess()) { + Logger.warning(result.toString()); + return result; + } + } catch (ProtocolNotSupportedException e) { + parent.getDevice().getDeviceStatusInfo().setApiNameMap(getApiMap()); + } + + // send configuration message + result = sendConfigurationMessage(null); + if (result.isSuccess()) { + parent.getDevice().setConfigSuccess(true); + } else { + Logger.warning(result.toString()); + } + + return result; + } + + @Override + public DAResult sendConfigurationMessage(IProgress progress) { + // send config message + ProtocolSerializer ps = new ProtocolSerializer(); + ps.setMessageID(ProtocolConstant40.MSG_CONFIG); + + // set feature flag value + Set selectedFeatures = SettingDataManager.INSTANCE.getSelectedFeatureSet(); + byte[] featureFlag = ProtocolConfig40.getFeatureFlagValue(selectedFeatures); + ps.putByteArray(featureFlag); + + // set sampling period value + TargetData target = SettingDataManager.INSTANCE.getConnectedTarget(); + int systemPeriod = target.getSelectedFeatureValue(Feature.SYSTEM_SAMPLING_RATE); + if (systemPeriod < 0) { + systemPeriod = Feature.SYSTEM_SAMPLING_RATE.getData().getDefaultValue(); + } + int samplingPeriod = target.getSelectedFeatureValue(Feature.FUNCTION_SAMPLING_RATE); + if (samplingPeriod < 0) { + samplingPeriod = Feature.FUNCTION_SAMPLING_RATE.getData().getDefaultValue(); + } + ps.putInt(systemPeriod); + ps.putInt(samplingPeriod); + + byte[] msg = ps.toByteArray(); + + AckMessage result = parent.handleControlMessage(msg); + + if (result != null && result.isSuccess() + && result.isCorrectID(ProtocolConstant40.MSG_CONFIG_ACK)) { + return DAResult.SUCCESS; + } else { + return DAResult.ERR_CONFIG_FAILED; + } + } + + @Override + public DAResult sendKeepAliveMessage(IProgress progress) { + ProtocolSerializer ps = new ProtocolSerializer(); + ps.setMessageID(ProtocolConstant40.MSG_KEEP_ALIVE); + byte[] msg = ps.toByteArray(); + + AckMessage result = parent.handleControlMessage(msg); + if (result != null && result.isCorrectID(ProtocolConstant40.MSG_KEEP_ALIVE_ACK) + && result.isSuccess()) { + return DAResult.SUCCESS; + } else { + return DAResult.ERR_KEEP_ALIVE; + } + } + + @Override + public DAResult sendScreenshotMessage(IProgress progress) { + ProtocolSerializer ps = new ProtocolSerializer(); + ps.setMessageID(ProtocolConstant40.MSG_GET_SCREENSHOT); + byte[] msg = ps.toByteArray(); + + // wait ack in protocol 4.0 + AckMessage result = parent.handleControlMessage(msg, 0); + if (result != null && result.isSuccess() + && result.isCorrectID(ProtocolConstant40.MSG_GET_SCREENSHOT_ACK)) { + return DAResult.SUCCESS; + } else { + return DAResult.ERR_MSG_SEND_FAIL; + } + } + + @Override + public DAResult sendProbeMapMessage(IProgress progress) throws ProtocolNotSupportedException { + ProtocolSerializer ps = new ProtocolSerializer(); + ps.setMessageID(ProtocolConstant40.MSG_GET_PROBEMAP); + byte[] msg = ps.toByteArray(); + + // wait ack in protocol 4.0 + AckMessage result = parent.handleControlMessage(msg, 0); + if (result != null && result.isSuccess() + && result.isCorrectID(ProtocolConstant40.MSG_GET_PROBEMAP_ACK)) { + byte[] payload = result.getPayload(); + if (payload != null) { + ProtocolParser parser = new ProtocolParser(payload); + parser.getInt(); // for return code + + int countOfApi = parser.getInt(); + if (countOfApi > 0) { + Map apiNameMap = new TreeMap(); + apiNameMap.put(Integer.valueOf(0), AnalyzerConstants.UNKNOWN_API); + + for (int i = 0; i < countOfApi; i++) { + int index = parser.getInt(); + String apiName = parser.getString(); + apiNameMap.put(Integer.valueOf(index), apiName); + } + + parent.getDevice().getDeviceStatusInfo() + .setApiNameMap(Collections.unmodifiableMap(apiNameMap)); + } + } + + return DAResult.SUCCESS; + } else { + return DAResult.ERR_MSG_SEND_FAIL; + } + } + + // return false if there is no application inst. + // return true, otherwise + @Override + protected boolean serializeApplicationInst(ProtocolSerializer ps) { + super.serializeApplicationInst(ps); + + DeviceInfo dev = parent.getDevice(); + String pkgID = Global.getCurrentApplication().getPackageId(); + PackageInfo pkgInfo = dev.getPkgInfoByPkgID(pkgID); + List apps = pkgInfo.getAppInfos(); + + List appInstList = new ArrayList(); + + if (pkgInfo.getPackageId().equals(AnalyzerConstants.RUNNING_PROCESS)) { + // if running process is selected for tracing + Map selectedProcess = apps.get(0).getRunningProcesses(); + if (selectedProcess != null && selectedProcess.size() > 0) { + for (Map.Entry entry : selectedProcess.entrySet()) { + BinaryInfo binInfo = Global.getProject().getDeviceStatusInfo() + .getBinaryInfo(entry.getValue()); + String temppath = binInfo.getTempBinaryPath(); + if (temppath == null) { + // this means the app binary does not exist in device + continue; + } + + ApplicationInst40 appInst = new ApplicationInst40(); + appInst.setApplicationType(ProtocolConstant40.APPTYPE_PROCESS); + appInst.setApplicationID(entry.getKey().toString()); + appInst.setExecutablePath(entry.getValue()); + + List symbols = apps.get(0).getSymbols(temppath); + appInst.setFunctionInstList(getFunctionInstList(symbols)); + + appInstList.add(appInst); + } + } + } else if (pkgInfo.getPackageId().equals(AnalyzerConstants.WITHOUT_EXECUTABLE)) { + // if no executable is selected for tracing (system wide tracing) + ApplicationInst40 appInst = new ApplicationInst40(); + appInst.setApplicationType(ProtocolConstant40.APPTYPE_PROCESS); + appInst.setApplicationID(CommonConstants.EMPTY); + appInst.setExecutablePath(CommonConstants.EMPTY); + + appInstList.add(appInst); + } else { // normal application or common executable is selected + for (int k = 0; k < apps.size(); k++) { + AppInfo app = apps.get(k); + + // check if application is in black list + if (ApplistManager.isInBlackList(app)) { + continue; + } + + BinaryInfo binInfo = Global.getProject().getDeviceStatusInfo() + .getBinaryInfo(app.getExecBinaryPath()); + String temppath = binInfo.getTempBinaryPath(); + if (temppath == null) { + // this means the app binary does not exist in device + continue; + } + + List symbols = app.getSymbols(temppath); + List functionInstList = getFunctionInstList(symbols); + if (functionInstList.isEmpty()) { + // this means there is no function inst. + continue; + } + + ApplicationInst40 appInst = new ApplicationInst40(); + + // TODO : make sure that first app of package is main app + if (k == 0) { + String appType = app.getInfo(AppInfo.PROPERTY.APPTYPE.index); + if (appType.contains(AppInfo.APPTYPE_CPP)) { + appInst.setApplicationType(ProtocolConstant40.APPTYPE_TIZEN); + appInst.setApplicationID(app.getAppID()); + } else if (appType.contains(AppInfo.APPTYPE_WEB)) { + appInst.setApplicationType(ProtocolConstant40.APPTYPE_WEB); + appInst.setApplicationID(app.getAppID()); + } else if (appType.contains(AppInfo.APPTYPE_CAPP)) { + appInst.setApplicationType(ProtocolConstant40.APPTYPE_TIZEN); + appInst.setApplicationID(app.getAppID()); + } else { + appInst.setApplicationType(ProtocolConstant40.APPTYPE_COMMON_EXEC); + appInst.setApplicationID(CommonConstants.EMPTY); + } + } else { + appInst.setApplicationType(ProtocolConstant40.APPTYPE_PROCESS); + appInst.setApplicationID(CommonConstants.EMPTY); + } + + // set application start-up information (main function address) + if (appInst.getApplicationType() == ProtocolConstant40.APPTYPE_TIZEN) { + for (AddrSymbolPair entry : symbols) { + if (entry.getSymbol().equals(ProtocolConstants.MAIN_FUNCTION_SYMBOL)) { + appInst.setMainAddress(entry.getAddr()); + break; + } + } + } + + appInst.setExecutablePath(app.getExecPath()); + appInst.setFunctionInstList(functionInstList); + + appInstList.add(appInst); + } + } + + // put application inst. count + ps.putInt(appInstList.size()); + + // serialize application inst. by ProtocolSerializer + for (ISerializable appInst : appInstList) { + appInst.serialize(ps); + } + + if (appInstList.size() == 0) { + return false; + } else { + return true; + } + } + + @Override + protected List getFunctionInstList(List symbols) { + List functionInstList = new ArrayList(); + + int size = (symbols == null) ? 0 : symbols.size(); + for (int i = 0; i < size; i++) { + AddrSymbolPair addrSymbol = symbols.get(i); + String symbol = addrSymbol.getSymbol(); + + if (ProtocolFilter30.isInBlacklistFunctionInst(symbol)) { + continue; + } + + FunctionInst40 functionInst = new FunctionInst40(); + functionInst.setAddr(addrSymbol.getAddr()); + functionInst.setArgs(getFunctionArgs(symbol)); + functionInst.setType(ProtocolConstant40.PROBE_COMMON); + functionInstList.add(functionInst); + } + + return functionInstList; + } + + @Override + public DAResult sendBinaryInfoMessage(IProgress progress, List binPaths) { + ProtocolSerializer ps = new ProtocolSerializer(); + + // make message + ps.setMessageID(ProtocolConstant40.MSG_BINARY_INFO); + + int binCount = binPaths.size(); + ps.putInt(binCount); + + for (int i = 0; i < binCount; i++) { + String targetPath = binPaths.get(i); + ps.putString(targetPath); + } + + byte[] msg = ps.toByteArray(); + + AckMessage result = parent.handleControlMessage(msg); + if (result != null && result.isCorrectID(ProtocolConstant40.MSG_BINARY_INFO_ACK)) { + if (result.isSuccess() + || (result.getReturnCode() == SwapErrorCode.ERR_WRONG_MESSAGE_DATA + .getErrorNumber() && result.getPayloadLength() > INT_SIZE)) { + + // parse binary info + return parseBinaryInfo(result.getPayload()); + } + } + + return DAResult.ERR_BIN_INFO_GET_FAIL; + } + + protected DAResult parseBinaryInfo(byte[] payload) { + DAResult ret = DAResult.ERR_BIN_INFO_GET_FAIL; + + ProtocolParser parser = new ProtocolParser(payload); + parser.getInt(); // for return code + + DeviceInfo curDevice = parent.getDevice(); + + int count = parser.getInt(); + for (int i = 0; i < count; i++) { + String targetPath = parser.getString(); + BinaryInfo binInfo = curDevice.getDeviceStatusInfo().getBinaryInfo(targetPath); + + int binaryType = parser.getInt(); + String localBinaryPath = parser.getString().trim(); + String md5sum = parser.getString(); + + binInfo.setType(binaryType); + binInfo.setMd5sumValue(md5sum); + binInfo.setTempBinaryPath(null); + + if (binaryType < 0) { + // binary does not exist in target(-1) or is non-elf binary(-2) + // so do not try to download binary from target + continue; + } + + DAResult result = checkDirtyOfBinary(binInfo, localBinaryPath); + if (!result.isSuccess()) { + // popup warning dialog with result + UIAction.showWarning(result, 480, 153); + } else { + ret = DAResult.SUCCESS; + } + } + + return ret; + } + } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/FunctionInst40.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/FunctionInst40.java new file mode 100644 index 0000000..f2ee3a2 --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/FunctionInst40.java @@ -0,0 +1,51 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Jaewon Lim + * Juyoung Kim + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.dynamicanalyzer.protocol.p40; + +import org.tizen.dynamicanalyzer.communicator.ProtocolSerializer; +import org.tizen.dynamicanalyzer.protocol.p30.FunctionInst30; + +public class FunctionInst40 extends FunctionInst30 { + protected byte type = 0; + + public void setType(byte type) { + this.type = type; + } + + @Override + public void serialize(ProtocolSerializer ps) { + ps.putLong(addr); + ps.putByte(type); + + if (type == ProtocolConstant40.PROBE_COMMON) { + ps.putByteArray(args); + } else if (type == ProtocolConstant40.PROBE_FBI) { + // TODO : implementation for FBI + } else if (type == ProtocolConstant40.PROBE_WEB) { + // do nothing + } + } +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ProtocolConfig40.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ProtocolConfig40.java index 5e70616..48050ff 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ProtocolConfig40.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ProtocolConfig40.java @@ -1,10 +1,10 @@ /* * Dynamic Analyzer * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * Heeyoung Hwang + * Jaewon Lim * Juyoung Kim * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ProtocolConstant40.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ProtocolConstant40.java new file mode 100644 index 0000000..6e4bcdd --- /dev/null +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/protocol/p40/ProtocolConstant40.java @@ -0,0 +1,51 @@ +/* + * Dynamic Analyzer + * + * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved. + * + * Contact: + * Jaewon Lim + * Juyoung Kim + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Contributors: + * - S-Core Co., Ltd + * + */ +package org.tizen.dynamicanalyzer.protocol.p40; + +import org.tizen.dynamicanalyzer.protocol.p30.ProtocolConstant30; + +public class ProtocolConstant40 extends ProtocolConstant30 { + // changed from protocol 3.0 + public final static int MSG_KEEP_ALIVE = 0x000F; + + // added in protocol 4.0 + public final static int MSG_VERSION = 0x0001; + public final static int MSG_GET_PROBEMAP = 0x000A; + + // changed from protocol 3.0 + public final static int MSG_KEEP_ALIVE_ACK = 0x100F; + + // added in protocol 4.0 + public final static int MSG_UNKNOWN_ACK = 0x1000; + public final static int MSG_VERSION_ACK = 0x1001; + public final static int MSG_GET_PROBEMAP_ACK = 0x100A; + public final static int MSG_GET_SCREENSHOT_ACK = 0x1010; + + // function instrument type + public final static byte PROBE_COMMON = 0; + public final static byte PROBE_FBI = 1; + public final static byte PROBE_WEB = 3; +} diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ContextSwitchData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ContextSwitchData.java index ac5c9aa..782e617 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ContextSwitchData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ContextSwitchData.java @@ -26,7 +26,7 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class ContextSwitchData extends LogData { protected long pcAddr = 0; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ControlData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ControlData.java index ebd1b2c..7d8171a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ControlData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ControlData.java @@ -26,7 +26,7 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class ControlData extends ProbeCommonData { private String parentName = null; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/CustomData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/CustomData.java index 699a674..3076206 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/CustomData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/CustomData.java @@ -26,7 +26,7 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class CustomData extends ProbeCommonData { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ErrorData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ErrorData.java index 379da34..c31a886 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ErrorData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ErrorData.java @@ -25,7 +25,7 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class ErrorData extends LogData { private String errorMessage = null; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/FileData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/FileData.java index 2f40bfb..b4a209d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/FileData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/FileData.java @@ -26,7 +26,7 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class FileData extends ProbeCommonData { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/GLES20LogData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/GLES20LogData.java index 5160693..7f3434e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/GLES20LogData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/GLES20LogData.java @@ -28,7 +28,7 @@ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class GLES20LogData extends ProbeCommonData { protected long glCurrentContextName = 0; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogData.java index 483233b..0591816 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/LogData.java @@ -27,10 +27,10 @@ package org.tizen.dynamicanalyzer.swap.model.data; import org.tizen.dynamicanalyzer.communicator.ProtocolParser; +import org.tizen.dynamicanalyzer.model.DATime; import org.tizen.dynamicanalyzer.protocol.DebugLog; import org.tizen.dynamicanalyzer.protocol.Protocol; import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -import org.tizen.dynamicanalyzer.swap.model.DATime; import org.tizen.dynamicanalyzer.util.ByteUtil; import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/MemoryData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/MemoryData.java index 9d033bf..b9b40ae 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/MemoryData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/MemoryData.java @@ -26,7 +26,7 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class MemoryData extends ProbeCommonData { protected long size = 0; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/MemoryMapData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/MemoryMapData.java index 8c98b01..389531e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/MemoryMapData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/MemoryMapData.java @@ -25,9 +25,9 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; +import org.tizen.dynamicanalyzer.model.DATime; import org.tizen.dynamicanalyzer.protocol.DebugLog; import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -import org.tizen.dynamicanalyzer.swap.model.DATime; public class MemoryMapData extends LogData { protected int pid = 0; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/NetworkData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/NetworkData.java index 1518d7b..bf9cc11 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/NetworkData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/NetworkData.java @@ -28,7 +28,7 @@ package org.tizen.dynamicanalyzer.swap.model.data; import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class NetworkData extends ProbeCommonData { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProbeCommonData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProbeCommonData.java index be78d24..fd9103c 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProbeCommonData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProbeCommonData.java @@ -29,7 +29,7 @@ package org.tizen.dynamicanalyzer.swap.model.data; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.DALimit; import org.tizen.dynamicanalyzer.common.Global; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class ProbeCommonData extends LogData { protected int apiID = 0; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProcessAddInfoData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProcessAddInfoData.java index dbb3a3f..1c78d30 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProcessAddInfoData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProcessAddInfoData.java @@ -25,8 +25,8 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; +import org.tizen.dynamicanalyzer.model.DATime; import org.tizen.dynamicanalyzer.protocol.DebugLog; -import org.tizen.dynamicanalyzer.swap.model.DATime; public class ProcessAddInfoData extends LogData { protected int pid = 0; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProcessInfoData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProcessInfoData.java index b5e3e00..d4b3f5e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProcessInfoData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ProcessInfoData.java @@ -31,9 +31,9 @@ import java.util.List; import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.constant.CommonConstants; +import org.tizen.dynamicanalyzer.model.DATime; import org.tizen.dynamicanalyzer.project.LibraryObject; import org.tizen.dynamicanalyzer.protocol.DebugLog; -import org.tizen.dynamicanalyzer.swap.model.DATime; public class ProcessInfoData extends LogData { protected int pid = 0; // protocol 3.0 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 1475976..0885cdf 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 @@ -28,8 +28,8 @@ package org.tizen.dynamicanalyzer.swap.model.data; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.Global; +import org.tizen.dynamicanalyzer.model.DATime; import org.tizen.dynamicanalyzer.protocol.ProtocolConstants; -import org.tizen.dynamicanalyzer.swap.model.DATime; import org.tizen.dynamicanalyzer.util.Logger; public class ProfileData extends LogData { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/RecordEventObject.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/RecordEventObject.java index f05d8e2..b000bfd 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/RecordEventObject.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/RecordEventObject.java @@ -26,7 +26,7 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class RecordEventObject { private int msgID = 0; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ReplayData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ReplayData.java index a2fa7f2..bf95fd9 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ReplayData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ReplayData.java @@ -29,7 +29,7 @@ package org.tizen.dynamicanalyzer.swap.model.data; import java.util.ArrayList; import java.util.List; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class ReplayData extends LogData { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SceneData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SceneData.java index c5ba234..892841a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SceneData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SceneData.java @@ -26,7 +26,7 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class SceneData extends ProbeCommonData { protected String sceneName = null; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ScreenShotData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ScreenShotData.java index d4a7d22..beacab3 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ScreenShotData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ScreenShotData.java @@ -26,7 +26,7 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class ScreenShotData extends ProbeCommonData { protected String imageFilePath = null; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SyncData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SyncData.java index c13c823..d208f61 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SyncData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SyncData.java @@ -26,7 +26,7 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class SyncData extends ProbeCommonData { protected long syncValue = 0; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SystemData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SystemData.java index 64103cf..110d71a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SystemData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/SystemData.java @@ -28,7 +28,7 @@ package org.tizen.dynamicanalyzer.swap.model.data; import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.constant.CommonConstants; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; import org.tizen.dynamicanalyzer.util.Logger; import org.tizen.dynamicanalyzer.util.UnsignedInt; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ThreadData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ThreadData.java index 0360df2..92fe233 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ThreadData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/ThreadData.java @@ -26,7 +26,7 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class ThreadData extends ProbeCommonData { protected long pThreadId = 0; // protocol 3.0 diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/UIEventData.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/UIEventData.java index dc87a9c..91d38cc 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/UIEventData.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/data/UIEventData.java @@ -26,7 +26,7 @@ */ package org.tizen.dynamicanalyzer.swap.model.data; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; public class UIEventData extends ProbeCommonData { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/replay/data/ReplayDBManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/replay/data/ReplayDBManager.java index d867fc5..792998d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/replay/data/ReplayDBManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/replay/data/ReplayDBManager.java @@ -34,7 +34,7 @@ import org.tizen.dynamicanalyzer.database.DBColumn; import org.tizen.dynamicanalyzer.database.DBConstants; import org.tizen.dynamicanalyzer.database.DBTable; import org.tizen.dynamicanalyzer.database.SqlConnectionManager; -import org.tizen.dynamicanalyzer.swap.model.DATime; +import org.tizen.dynamicanalyzer.model.DATime; import org.tizen.dynamicanalyzer.swap.model.data.RecordEventObject; import org.tizen.dynamicanalyzer.swap.model.data.ReplayData; import org.tizen.dynamicanalyzer.util.Logger; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/replayEditor/data/ReplayEditSaveDataMaker.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/replayEditor/data/ReplayEditSaveDataMaker.java index 9da8fea..a174c33 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/replayEditor/data/ReplayEditSaveDataMaker.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/replayEditor/data/ReplayEditSaveDataMaker.java @@ -31,8 +31,8 @@ import java.util.List; import org.eclipse.swt.widgets.Shell; import org.tizen.dynamicanalyzer.common.Global; import org.tizen.dynamicanalyzer.constant.CommonConstants; +import org.tizen.dynamicanalyzer.model.DATime; import org.tizen.dynamicanalyzer.nl.ReplayEditLabels; -import org.tizen.dynamicanalyzer.swap.model.DATime; import org.tizen.dynamicanalyzer.ui.toolbar.replay.data.ReplayDataManager; import org.tizen.dynamicanalyzer.ui.toolbar.replayEditor.RepalyEditSaveDialog; import org.tizen.dynamicanalyzer.ui.widgets.table.DATableComposite; -- 2.7.4