From fb18c5ee8c483e0e6efff2fb6a5db814ef361ab2 Mon Sep 17 00:00:00 2001 From: greatim Date: Tue, 10 Feb 2015 20:58:07 +0900 Subject: [PATCH] INTERNAL: fix some potential bugs fix some potential bugs including double-checked locking bug Change-Id: Iead801b8d4410d5d045e7f5870df2dd267ffaec5 Signed-off-by: greatim --- .../org/tizen/dynamicanalyzer/util/FileUtil.java | 7 +-- .../dynamicanalyzer/workbench/Application.java | 2 +- .../dynamicanalyzer/common/AnalyzerManager.java | 18 +++--- .../communicator/CommunicatorUtils.java | 31 +--------- .../communicator/DACommunicator.java | 2 +- .../project/ProcessInformation.java | 28 +++++---- .../dynamicanalyzer/swap/logparser/LogQueue.java | 8 +-- .../swap/logparser/MessageParser.java | 67 +++++++++++----------- .../swap/logparser/SWAPLogParser.java | 1 + .../tizen/dynamicanalyzer/swap/model/DATime.java | 2 +- .../swap/platform/BinarySettingManager.java | 22 +++---- .../dynamicanalyzer/swap/platform/ui/InputRow.java | 23 +++++--- .../ui/kernel/ContextSwitchingChart.java | 11 ++-- .../dynamicanalyzer/ui/page/UpdateViewTimer.java | 13 ++--- .../dynamicanalyzer/ui/toolbar/ToolbarArea.java | 43 ++++++++------ .../setting/SettingDialogBinarySettingsPage.java | 35 ++++++----- .../tizen/dynamicanalyzer/utils/AnalyzerUtil.java | 37 ++++++------ 17 files changed, 169 insertions(+), 181 deletions(-) diff --git a/org.tizen.dynamicanalyzer.common/src/org/tizen/dynamicanalyzer/util/FileUtil.java b/org.tizen.dynamicanalyzer.common/src/org/tizen/dynamicanalyzer/util/FileUtil.java index ed3218a..a9f861f 100644 --- a/org.tizen.dynamicanalyzer.common/src/org/tizen/dynamicanalyzer/util/FileUtil.java +++ b/org.tizen.dynamicanalyzer.common/src/org/tizen/dynamicanalyzer/util/FileUtil.java @@ -39,10 +39,6 @@ import java.util.List; * @author greatim * */ -/** - * @author greatim - * - */ public class FileUtil { // delete file of given path @@ -118,8 +114,11 @@ public class FileUtil { case 'E': // extra escape needed sb.append('\\'); + sb.append('\\'); + break; default: sb.append('\\'); + break; } sb.append(next); } diff --git a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/Application.java b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/Application.java index ceac35c..88853da 100755 --- a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/Application.java +++ b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/Application.java @@ -140,7 +140,7 @@ public class Application implements IApplication { } else { Logger.info("Already DA Running"); SingletonFocusManager.setFocusToDA(); - System.exit(-1); + return IApplication.EXIT_OK; } int returnCode = PlatformUI.createAndRunWorkbench(display, diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerManager.java index ec4c4e0..f30ea39 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerManager.java @@ -58,7 +58,7 @@ public class AnalyzerManager { private static boolean isRunning = false; private static boolean isLogParsingComplete = false; - private static ConcurrentHashMap> funcIDMapByPid = null; + private static volatile ConcurrentHashMap> funcIDMapByPid = null; private static NewLeakDetector newLeakDetector = new NewLeakDetector(); private static WarningChecker warningChecker = new WarningChecker(); @@ -246,17 +246,20 @@ public class AnalyzerManager { } public static Map getFuncIDMapByPid(int pid) { - if (funcIDMapByPid == null) { + ConcurrentHashMap> temp = funcIDMapByPid; + if (temp == null) { synchronized (AnalyzerManager.class) { - if (funcIDMapByPid == null) { - funcIDMapByPid = new ConcurrentHashMap>(); + temp = funcIDMapByPid; + if (temp == null) { + funcIDMapByPid = temp = new ConcurrentHashMap>(); } } } - ConcurrentHashMap funcIDMap = funcIDMapByPid.get(pid); + + ConcurrentHashMap funcIDMap = temp.get(pid); if (funcIDMap == null) { funcIDMap = new ConcurrentHashMap(); - funcIDMapByPid.put(pid, funcIDMap); + temp.put(pid, funcIDMap); } return funcIDMap; } @@ -281,8 +284,7 @@ public class AnalyzerManager { int value = setting.getOptionsFeatureValue(featureIndex); if (value > 0) { screenshotTimer = new Timer(AnalyzerConstants.SCREENSHOT_TIMER); - screenshotTimer.scheduleAtFixedRate(new ScreenshotTimerTask(), 1000, - value * 1000); + screenshotTimer.scheduleAtFixedRate(new ScreenshotTimerTask(), 1000, value * 1000); } } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java index d58794e..cad7d7b 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java @@ -215,6 +215,7 @@ public class CommunicatorUtils { if (null != service) { result = service.push(new String[] { local }, currentDevice.getFileEntry(remote), monitor); + service.close(); } } catch (TimeoutException e) { Logger.exception(e); @@ -243,6 +244,7 @@ public class CommunicatorUtils { if (null != service) { result = service.doPull(currentDevice.getIDevice().getFileEntry(remote), fileOut, monitor, -1); + service.close(); } } catch (TimeoutException e) { Logger.exception(e); @@ -257,35 +259,6 @@ public class CommunicatorUtils { return result; } - public static SyncResult pull(IDevice device, String local, String remote) { - return pull(device, local, remote, NullSyncProgressMonitor.getInstance()); - } - - public static SyncResult pull(IDevice device, String remote, String local, - ISyncProgressMonitor monitor) { - SyncResult result = null; - if (null != device && isOnline(device)) { - FileOutputStream fileOut = null; - try { - fileOut = new FileOutputStream(local); - SyncService service = device.getSyncService(); - if (null != service) { - result = service.doPull(device.getFileEntry(remote), fileOut, monitor, -1); - } - } catch (TimeoutException e) { - Logger.exception(e); - } catch (SdbCommandRejectedException e) { - Logger.exception(e); - } catch (IOException e) { - Logger.exception(e); - } finally { - tryClose(fileOut); - } - } - - return result; - } - public static int getRemotePort(IDevice device) { int remotePort = -1; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java index 93d1a82..d3d09dd 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/DACommunicator.java @@ -522,7 +522,7 @@ public class DACommunicator { if (!AnalyzerManager.isRunning()) { updateToolbarDevice(); } - if (isRunning()) { + if (selectedDevice != null && isRunning()) { if (selectedDevice.getIDevice().getSerialNumber() .equals(deviceInfo.getIDevice().getSerialNumber())) { Logger.debug("Disconnected while DA is running."); //$NON-NLS-1$ diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/ProcessInformation.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/ProcessInformation.java index 1af2950..6e621c1 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/ProcessInformation.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/ProcessInformation.java @@ -86,21 +86,19 @@ public class ProcessInformation { } public String getProcessName() { - if (processNameByRequest == null) { - synchronized (processNameRequestLock) { - if (processNameByRequest == null) { - List pids = new ArrayList(); - pids.add(Integer.valueOf(pid)); - Map nameMap = DACommunicator.sendProcessAddInfoMessage(pids); - if (nameMap != null) { - String name = nameMap.get(Integer.valueOf(pid)); - if (name != null) { - int index = name.lastIndexOf("/"); - if (index > 0) { - processNameByRequest = name.substring(index + 1); - } else { - processNameByRequest = name; - } + synchronized (processNameRequestLock) { + if (processNameByRequest == null) { + List pids = new ArrayList(); + pids.add(Integer.valueOf(pid)); + Map nameMap = DACommunicator.sendProcessAddInfoMessage(pids); + if (nameMap != null) { + String name = nameMap.get(Integer.valueOf(pid)); + if (name != null) { + int index = name.lastIndexOf("/"); + if (index > 0) { + processNameByRequest = name.substring(index + 1); + } else { + processNameByRequest = name.toString(); } } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/LogQueue.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/LogQueue.java index 37a0291..ff22f73 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/LogQueue.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/LogQueue.java @@ -39,7 +39,7 @@ public class LogQueue { private static final int FULL_COUNT = 10000; private static final int HALF_COUNT = 5000; private List> data = null; - private static boolean isFull = false; + private boolean isFull = false; public LogQueue() { data = new ArrayList>(); @@ -68,7 +68,7 @@ public class LogQueue { } public synchronized void putLog(List input) { - while (isFull()) { + while (isFull) { try { wait(); } catch (InterruptedException e) { @@ -91,10 +91,6 @@ public class LogQueue { return data.isEmpty(); } - public boolean isFull() { - return isFull; - } - public synchronized int size() { return data.size(); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java index 9e6fcd5..853db0e 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/MessageParser.java @@ -144,8 +144,8 @@ public class MessageParser { } private void addBufferToList() { - lock.lock(); try { + lock.lock(); if (null != buffer && 0 != buffer.size()) { SWAPLogParser.getLogQueue().putLog(buffer); } @@ -273,42 +273,43 @@ public class MessageParser { } ProcessMemoryMap lastMap = pinfo.getLastProcessMemoryMap(); + if (lastMap != null) { + 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); + if (!lastMap.addLibraryMap(libObj)) { + Logger.error("exist library"); + } - 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); - if (!lastMap.addLibraryMap(libObj)) { - Logger.error("exist library"); - } - - pinfo.setMappingState(true); - } else { - 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); + pinfo.setMappingState(true); } else { - // update captured time of last memory map - pinfo.updateProcessMemoryMap(lastMap, subTime.getLongTime()); + 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); - } + // remove from map + lastMap.removeLibrary(lowAddr, highAddr); + } - pinfo.setMappingState(false); + pinfo.setMappingState(false); + } } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java index 66d8d32..17e4cc2 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java @@ -101,6 +101,7 @@ public class SWAPLogParser implements Runnable { if (null != logParser && logParser.isAlive()) { LogQueue logQueue = getLogQueue(); synchronized (logQueue) { + AnalyzerManager.setRunningState(false); logQueue.notifyAll(); } try { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/DATime.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/DATime.java index 42603b3..b2835ef 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/DATime.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/model/DATime.java @@ -81,7 +81,7 @@ public class DATime { // TODO : avoid precision loss public long getLongTime() { long ret = 0; - long secLong = sec * 1000000; + long secLong = sec * 1000000L; long nanoLong = nano / 1000; ret = secLong + nanoLong; return ret; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/BinarySettingManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/BinarySettingManager.java index cef344e..89625b9 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/BinarySettingManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/BinarySettingManager.java @@ -270,18 +270,20 @@ public class BinarySettingManager { for (int i = 0; i < rpmlist.size(); i++) { String rpmpath = rpmlist.get(i); List filelist = RpmUtil.getFileListInRpm(rpmpath); - int filesize = filelist.size(); - boolean bFound = false; - for (int k = 0; k < filesize; k++) { - if (filelist.get(k).contains(binName)) { - bFound = true; - break; + if (filelist != null && filelist.size() > 0) { + int filesize = filelist.size(); + boolean bFound = false; + for (int k = 0; k < filesize; k++) { + if (filelist.get(k).contains(binName)) { + bFound = true; + break; + } } - } - if (bFound) { - debugRpmPath = rpmpath; - break; + if (bFound) { + debugRpmPath = rpmpath; + break; + } } } } else { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java index 35f78c2..6507cda 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/InputRow.java @@ -61,9 +61,9 @@ public class InputRow extends Composite { private DACustomButton removeButton = null; private int index = -1; - + private String binaryName = null; - + private DACustomButtonClickEventListener findDebugButtonListener = new DACustomButtonClickEventListener() { @Override @@ -83,9 +83,11 @@ public class InputRow extends Composite { debugPathText.setText(file.getAbsolutePath()); BinarySettingData binData = BinarySettingManager.getInstance() .getBinarySetting(binaryName); - // binData.setDebugFilePath(file.getAbsolutePath()); - binData.setDebugRpmPath(file.getAbsolutePath()); - bins.add(binData); + if (binData != null) { + // binData.setDebugFilePath(file.getAbsolutePath()); + binData.setDebugRpmPath(file.getAbsolutePath()); + bins.add(binData); + } } BinarySettingManager.getInstance().checkSourcePath(bins); } @@ -110,7 +112,9 @@ public class InputRow extends Composite { sourcePathText.setText(file.getAbsolutePath()); BinarySettingData binData = BinarySettingManager.getInstance() .getBinarySetting(binaryName); - binData.setUserSourceDir(file.getAbsolutePath()); + if (binData != null) { + binData.setUserSourceDir(file.getAbsolutePath()); + } } } } @@ -244,11 +248,12 @@ public class InputRow extends Composite { public void setBinaryName(String binaryName) { this.binaryName = binaryName; - + String binaryDetailInfo = DACommunicator.getBinaryDetailInfomationCommand(binaryName); if ((null != binaryDetailInfo) && (!binaryDetailInfo.isEmpty())) { - binaryNameLabel.setText(binaryName + CommonConstants.SPACE + - CommonConstants.OPEN_BRACKET + binaryDetailInfo + CommonConstants.CLOSE_BRACKET); + binaryNameLabel.setText(binaryName + CommonConstants.SPACE + + CommonConstants.OPEN_BRACKET + binaryDetailInfo + + CommonConstants.CLOSE_BRACKET); } else { binaryNameLabel.setText(binaryName); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChart.java index cba750f..7c1d6c0 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/ContextSwitchingChart.java @@ -203,12 +203,11 @@ public class ContextSwitchingChart extends DAChartBoard { assert (coreItem != null); DAChartSeries coreSeries = coreItem.getChart().getSeries(0); - coreSeries.addSeriesItem(new ContextSwitchingChartSeriesItem( - KernelPageLabels.CONTEXT_SWITCH_SERIES_ITEM_NAME + " " - + Integer.toString(cpunum), contextStart, contextEnd)); - // Loger.debug("context(" + tid + ")(" + contextStart + - // "," - // + contextEnd + ")"); + if (coreSeries != null) { + coreSeries.addSeriesItem(new ContextSwitchingChartSeriesItem( + KernelPageLabels.CONTEXT_SWITCH_SERIES_ITEM_NAME + " " + + Integer.toString(cpunum), contextStart, contextEnd)); + } } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/UpdateViewTimer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/UpdateViewTimer.java index 0daf36d..60f9188 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/UpdateViewTimer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/UpdateViewTimer.java @@ -58,18 +58,15 @@ public class UpdateViewTimer { stop(); timer = new Timer(AnalyzerConstants.UPDATE_VIEW_TIMER); - timer.schedule(new UpdateTimerTask(), - AnalyzerConstants.TIMER_START_TIME_DEFAULT, + timer.schedule(new UpdateTimerTask(), AnalyzerConstants.TIMER_START_TIME_DEFAULT, AnalyzerConstants.TIMER_INTERVAL_DEFAULT); } - public static void stop() { + public static synchronized void stop() { if (null != timer) { - synchronized (timer) { - timer.cancel(); - timer = null; - Logger.debug("update timer stop"); //$NON-NLS-1$ - } + timer.cancel(); + timer = null; + Logger.debug("update timer stop"); //$NON-NLS-1$ } } } \ No newline at end of file diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java index 6dfa0ce..d279f52 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java @@ -59,6 +59,7 @@ import org.tizen.dynamicanalyzer.nl.ConfigureLabels; import org.tizen.dynamicanalyzer.project.AppInfo; import org.tizen.dynamicanalyzer.project.PackageInfo; import org.tizen.dynamicanalyzer.project.ProcessInformation; +import org.tizen.dynamicanalyzer.project.ProcessMemoryMap; import org.tizen.dynamicanalyzer.project.Project; import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.resources.FontResources; @@ -380,12 +381,15 @@ public class ToolbarArea { ProcessInformation process = project.getProcessInformation(pids[i]); String binName = process.getProcessName(); if (binName == null || binName.isEmpty()) { - int bid = process.getLastProcessMemoryMap().getMainbinary().getBinaryID(); - String binPath = project.getDeviceStatusInfo().getBinaryInfo(bid) - .getTargetBinaryPath(); - if (null != binPath && !binPath.isEmpty()) { - int index = binPath.lastIndexOf(CommonConstants.SLASH); - binName = binPath.substring(index + 1, binPath.length()); + ProcessMemoryMap map = process.getLastProcessMemoryMap(); + if (map != null) { + int bid = map.getMainbinary().getBinaryID(); + String binPath = project.getDeviceStatusInfo().getBinaryInfo(bid) + .getTargetBinaryPath(); + if (null != binPath && !binPath.isEmpty()) { + int index = binPath.lastIndexOf(CommonConstants.SLASH); + binName = binPath.substring(index + 1, binPath.length()); + } } } @@ -972,30 +976,33 @@ public class ToolbarArea { appCombo.add(CommonConstants.EMPTY); } - // set tooltip + // set tooltip appCombo.setTooltip(new DACustomComboTooltip() { - + @Override public boolean makeTooltipInfo() { Map> map = getTooltipTextListMap(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - + for (int i = 0; i < pkglist.size(); i++) { AppInfo app = pkglist.get(i).getMainApp(); - if (AnalyzerConstants.RUNNING_PROCESS_LABEL.equals(app.getLabel()) || - AnalyzerConstants.COMMON_EXECUTABLE_LABEL.equals(app.getLabel()) || - AnalyzerConstants.WITHOUT_EXECUTABLE_LABEL.equals(app.getLabel())) { + if (AnalyzerConstants.RUNNING_PROCESS_LABEL.equals(app.getLabel()) + || AnalyzerConstants.COMMON_EXECUTABLE_LABEL.equals(app.getLabel()) + || AnalyzerConstants.WITHOUT_EXECUTABLE_LABEL.equals(app.getLabel())) { continue; } - + // set information List info = new ArrayList(); - info.add(AnalyzerLabels.DETAIL_INFORMATION_PACKAGE_NAME + pkglist.get(i).getPackageId()); - info.add(AnalyzerLabels.DETAIL_INFORMATION_PACKAGE_VERSION + pkglist.get(i).getVersion()); - info.add(AnalyzerLabels.DETAIL_INFORMATION_PACKAGE_INSTALL_TIME + - dateFormat.format(new Date(pkglist.get(i).getInstallTime() * 1000))); + info.add(AnalyzerLabels.DETAIL_INFORMATION_PACKAGE_NAME + + pkglist.get(i).getPackageId()); + info.add(AnalyzerLabels.DETAIL_INFORMATION_PACKAGE_VERSION + + pkglist.get(i).getVersion()); + info.add(AnalyzerLabels.DETAIL_INFORMATION_PACKAGE_INSTALL_TIME + + dateFormat.format(new Date(pkglist.get(i).getInstallTime() * 1000))); info.add(AnalyzerLabels.DETAIL_INFORMATION_APPLICATION_NAME + app.getLabel()); - info.add(AnalyzerLabels.DETAIL_INFORMATION_APPLICATION_EXEC_PATH + app.getExecPath()); + info.add(AnalyzerLabels.DETAIL_INFORMATION_APPLICATION_EXEC_PATH + + app.getExecPath()); map.put(app.getLabel(), info); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialogBinarySettingsPage.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialogBinarySettingsPage.java index 93e5936..c84017f 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialogBinarySettingsPage.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/setting/SettingDialogBinarySettingsPage.java @@ -155,7 +155,7 @@ public class SettingDialogBinarySettingsPage extends DAPageComposite { } // swap remove message send and inputrow dispose - cleanButtonListener.handleClickEvent(null); + cleanRow(); String path = (String) result; File saveFile = new File(path); @@ -237,22 +237,27 @@ public class SettingDialogBinarySettingsPage extends DAPageComposite { return; } } - List binaries = BinarySettingManager.getInstance() - .getBinarySettingList(); - if (!binaries.isEmpty()) { - DACommunicator.sendSWAPMessage(AnalyzerConstants.MSG_SWAP_INST_REMOVE, binaries); - - for (int i = 0; i < inputRowList.size(); i++) { - BinarySettingManager.getInstance().removeBinarySettingData( - inputRowList.get(i).getBinaryName()); - inputRowList.get(i).dispose(); - } - inputRowList.clear(); - } - - updateLayout(); + + cleanRow(); } }; + + private void cleanRow() { + List binaries = BinarySettingManager.getInstance() + .getBinarySettingList(); + if (!binaries.isEmpty()) { + DACommunicator.sendSWAPMessage(AnalyzerConstants.MSG_SWAP_INST_REMOVE, binaries); + + for (int i = 0; i < inputRowList.size(); i++) { + BinarySettingManager.getInstance().removeBinarySettingData( + inputRowList.get(i).getBinaryName()); + inputRowList.get(i).dispose(); + } + inputRowList.clear(); + } + + updateLayout(); + } private void clearLayout() { for (int i = 0; i < inputRowList.size(); i++) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java index 02af933..251d5ba 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java @@ -121,8 +121,8 @@ public class AnalyzerUtil { } String[] children = sourceLocation.list(); for (int i = 0; i < children.length; i++) { - copyDirectory(new File(sourceLocation, children[i]), new File( - targetLocation, children[i])); + copyDirectory(new File(sourceLocation, children[i]), new File(targetLocation, + children[i])); } } else { InputStream in = null; @@ -147,8 +147,8 @@ public class AnalyzerUtil { } public static Integer executeCommand(String commandId) { - IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench() - .getService(IHandlerService.class); + IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench().getService( + IHandlerService.class); try { handlerService.executeCommand(commandId, new Event()); @@ -363,8 +363,7 @@ public class AnalyzerUtil { public static String toHexdecimal(Object value) { String retStr = null; if (value instanceof Long) { - retStr = CommonConstants.HEX_PREFIX - + Long.toHexString((Long) value).toUpperCase(); + retStr = CommonConstants.HEX_PREFIX + Long.toHexString((Long) value).toUpperCase(); } else if (value instanceof Integer) { retStr = CommonConstants.HEX_PREFIX + Integer.toHexString((Integer) value).toUpperCase(); @@ -383,8 +382,7 @@ public class AnalyzerUtil { .getProcessMemoryMap(time); if (null != pmap) { return Global.getProject().getDeviceStatusInfo() - .getBinaryInfo(pmap.getMainbinary().getBinaryID()) - .getTargetBinaryPath(); + .getBinaryInfo(pmap.getMainbinary().getBinaryID()).getTargetBinaryPath(); } else { return null; } @@ -395,8 +393,7 @@ public class AnalyzerUtil { .getProcessMemoryMap(time); if (null != pmap) { return Global.getProject().getDeviceStatusInfo() - .getBinaryInfo(pmap.getMainbinary().getBinaryID()) - .getTempBinaryPath(); + .getBinaryInfo(pmap.getMainbinary().getBinaryID()).getTempBinaryPath(); } else { return null; } @@ -445,12 +442,18 @@ public class AnalyzerUtil { if (process != null) { String binName = process.getProcessName(); if (binName == null || binName.isEmpty()) { - int bid = process.getLastProcessMemoryMap().getMainbinary().getBinaryID(); - BinaryInfo binfo = project.getDeviceStatusInfo().getBinaryInfo(bid); - String binPath = binfo.getTargetBinaryPath(); - if (null != binPath && !binPath.isEmpty()) { - int index = binPath.lastIndexOf(CommonConstants.SLASH); - binName = binPath.substring(index + 1, binPath.length()); + ProcessMemoryMap map = process.getLastProcessMemoryMap(); + if (map != null) { + int bid = map.getMainbinary().getBinaryID(); + BinaryInfo binfo = project.getDeviceStatusInfo().getBinaryInfo(bid); + String binPath = binfo.getTargetBinaryPath(); + if (null != binPath && !binPath.isEmpty()) { + int index = binPath.lastIndexOf(CommonConstants.SLASH); + binName = binPath.substring(index + 1, binPath.length()); + } + } else { + Logger.error("Process map of pid " + pid + " does not exist"); + return null; } } @@ -478,7 +481,7 @@ public class AnalyzerUtil { return false; } } - + public static String[] splitFilePath(String filePath, String separator) { if (separator.equals("\\")) { separator = "\\\\"; -- 2.7.4