private boolean dropLog = false;
private NavigableMap<Long, ProcessMemoryMap> processMemSnapshots = new TreeMap<Long, ProcessMemoryMap>();
+ private boolean isMapping = true;
public int getPid() {
return pid;
public void addProcessMemoryMap(ProcessMemoryMap pmap) {
long captime = pmap.getCapturedTime();
- processMemSnapshots.put(Long.valueOf(captime), pmap);
+ synchronized (processMemSnapshots) {
+ processMemSnapshots.put(Long.valueOf(captime), pmap);
+ }
}
public ProcessMemoryMap getLastProcessMemoryMap() {
- return processMemSnapshots.lastEntry().getValue();
+ if (processMemSnapshots.isEmpty()) {
+ return null;
+ } else {
+ return processMemSnapshots.lastEntry().getValue();
+ }
}
public ProcessMemoryMap getProcessMemoryMap(long time) {
}
}
+ public void updateProcessMemoryMap(ProcessMemoryMap pmap, long newtime) {
+ long prevtime = pmap.getCapturedTime();
+ synchronized (processMemSnapshots) {
+ processMemSnapshots.remove(Long.valueOf(prevtime));
+ pmap.setCapturedTime(newtime);
+ processMemSnapshots.put(Long.valueOf(newtime), pmap);
+ }
+ }
+
public void setDropLog(boolean droplog) {
this.dropLog = droplog;
}
return dropLog;
}
+ public void setMappingState(boolean mapping) {
+ isMapping = mapping;
+ }
+
+ public boolean isMapping() {
+ return isMapping;
+ }
+
public void saveMemoryMap(DBTable table) {
for (Map.Entry<Long, ProcessMemoryMap> entry : processMemSnapshots.entrySet()) {
entry.getValue().saveMemoryMap(table);
public long getCapturedTime() {
return capturedTime;
}
+
+ public void setCapturedTime(long time) {
+ capturedTime = time;
+ }
public void setMainBinary(LibraryObject libobj) {
this.mainBinary = libobj;
return mainBinary;
}
- public void addLibraryMap(LibraryObject libobj) {
+ public boolean addLibraryMap(LibraryObject libobj) {
long lowaddr = libobj.getLowestAddress();
int binid = libobj.getBinaryID();
binaryByAddress.put(Long.valueOf(lowaddr), libobj);
}
synchronized (binaryByBinaryID) {
- binaryByBinaryID.put(Integer.valueOf(binid), libobj);
+ LibraryObject o = binaryByBinaryID.put(Integer.valueOf(binid), libobj);
+ if(o == null)
+ return true;
+ else
+ return false;
}
}
import org.tizen.dynamicanalyzer.database.DBTable;
public class FunctionNameDBTable extends DBTable {
- private static final String TABLENAME = "FUNCTION_NAME";
+ private static final String TABLENAME = "FUNCTION_INFO";
public enum COLUMN {
FUNCTIONID(0, "FUNCTION_ID"),
pinfo.setDropLog(true);
}
-
+ pinfo.setMappingState(true);
+
ProcessMemoryMap pMap = new ProcessMemoryMap(pinfo.getPid(), subTime.getLongTime());
pinfo.addProcessMemoryMap(pMap);
ProcessInformation pinfo = project.getProcessInformation(pid);
if (null == pinfo) {
// bug!!!
- Logger.debug("bug occurred!!");
+ Logger.error("bug occurred!!");
return;
}
- DATime changeTime = new DATime(sec, nano);
- DATime profileStartTime = project.getProfilingStartTime();
- DATime subTime = changeTime.subtract(profileStartTime);
-
ProcessMemoryMap lastMap = pinfo.getLastProcessMemoryMap();
- ProcessMemoryMap newMap = new ProcessMemoryMap(pinfo.getPid(), subTime.getLongTime());
- pinfo.addProcessMemoryMap(newMap);
- newMap.copy(lastMap);
if (id == DataChannelConstants.MSG_PROCESS_MAP) {
+ // update to last memory map
String libPath = LogDataUtils.getString(index, data);
index += LogDataUtils.getStringLength(index, data);
BinaryInfo bininfo = project.getDeviceStatusInfo().getBinaryInfo(libPath);
LibraryObject libObj = new LibraryObject(bininfo.getID(), lowAddr, highAddr);
- newMap.addLibraryMap(libObj);
+ if(!lastMap.addLibraryMap(libObj)) {
+ Logger.error("exist library");
+ }
+
+ pinfo.setMappingState(true);
} else {
- newMap.removeLibrary(lowAddr, highAddr);
+ DATime changeTime = new DATime(sec, nano);
+ DATime profileStartTime = project.getProfilingStartTime();
+ DATime subTime = changeTime.subtract(profileStartTime);
+
+ if(pinfo.isMapping()) {
+ // make new memory map
+ ProcessMemoryMap newMap = new ProcessMemoryMap(pinfo.getPid(), subTime.getLongTime());
+ pinfo.addProcessMemoryMap(newMap);
+ newMap.copy(lastMap);
+
+ // remove from new map
+ newMap.removeLibrary(lowAddr, highAddr);
+ } else {
+ // update captured time of last memory map
+ pinfo.updateProcessMemoryMap(lastMap, subTime.getLongTime());
+
+ // remove from map
+ lastMap.removeLibrary(lowAddr, highAddr);
+ }
+
+ pinfo.setMappingState(false);
}
}
appCombo.setEnabled(true);
appCombo.initCombo();
- addToAppComboFromTarget();
+ boolean existDevice = addToAppComboFromTarget();
- List<String> pkgs = appCombo.getItems();
- if (pkgs != null && pkgs.size() > 0) {
+ if (existDevice) {
+ List<String> pkgs = appCombo.getItems();
PackageInfo pkgInfo = null;
String packageID = Global.getCurrentDeviceInfo().getSelectedPackageID();
}
}
- private void addToAppComboFromTarget() {
+ // return false if target is not connected
+ private boolean addToAppComboFromTarget() {
Map<String, PackageInfo> pkgInfos = DACommunicator.updateAppListFromTarget();
+ if (pkgInfos == null) {
+ addToAppCombo(null);
+ return false;
+ }
List<PackageInfo> pkgList = new ArrayList<PackageInfo>();
- if (pkgInfos != null) {
- // TODO : reconstruct real app list for app combo
- // relation between package and app?
- for (Map.Entry<String, PackageInfo> entry : pkgInfos.entrySet()) {
- PackageInfo pkg = entry.getValue();
- AppInfo mainapp = pkg.getMainApp();
- if (!mainapp.getAppId().contains(AnalyzerConstants.APPCONTROL)) {
- String label = mainapp.getLabel();
- if (label.isEmpty()) {
- label = mainapp.getExecFileName();
- mainapp.setInfo(AppInfo.PROPERTY.LABEL.index, label);
- }
- pkgList.add(pkg);
+
+ // TODO : reconstruct real app list for app combo
+ // relation between package and app?
+ for (Map.Entry<String, PackageInfo> entry : pkgInfos.entrySet()) {
+ PackageInfo pkg = entry.getValue();
+ AppInfo mainapp = pkg.getMainApp();
+ if (!mainapp.getAppId().contains(AnalyzerConstants.APPCONTROL)) {
+ String label = mainapp.getLabel();
+ if (label.isEmpty()) {
+ label = mainapp.getExecFileName();
+ mainapp.setInfo(AppInfo.PROPERTY.LABEL.index, label);
}
+ pkgList.add(pkg);
}
}
});
addToAppCombo(pkgList);
+
+ return true;
}
public void setAppComboText(final String text) {