public static Color FILE_ACCESS_WRITE = getColor("file_access_write"); //$NON-NLS-1$\r
public static Color FILE_ACCESS_CONCURRENT_READ = getColor("file_access_concurrent_read"); //$NON-NLS-1$\r
public static Color FILE_ACCESS_CONCURRENT_WRITE = getColor("file_access_concurrent_write"); //$NON-NLS-1$\r
- public static Color FILE_LOCK = getColor("file_lock"); //$NON-NLS-1$\r
- public static Color FILE_UNLOCK = getColor("file_unlock"); //$NON-NLS-1$file_unlock\r
+ public static Color FILE_LOCK_ACQUIRED = getColor("file_lock_acquired"); //$NON-NLS-1$\r
public static Color FILE_LOCK_WAITING = getColor("file_lock_waiting"); //$NON-NLS-1$\r
public static Color FILE_OTHER_OPERATION = getColor("file_other_operation"); //$NON-NLS-1$\r
public static Color FILE_OPENED = getColor("file_opened"); //$NON-NLS-1$\r
setColor("file_access_write",new RGB(131, 207, 232)); //$NON-NLS-1$
setColor("file_access_concurrent_read", new RGB(40, 160, 198)); //$NON-NLS-1$
setColor("file_access_concurrent_write", new RGB(40, 160, 198)); //$NON-NLS-1$
- setColor("file_lock", new RGB(229, 123, 206)); //$NON-NLS-1$
- setColor("file_unlock", new RGB(125, 61, 204)); //$NON-NLS-1$
+ setColor("file_lock_acquired", new RGB(229, 123, 206)); //$NON-NLS-1$
setColor("file_lock_waiting", new RGB(194, 79, 167)); //$NON-NLS-1$
setColor("file_other_operation", new RGB(173, 173, 173)); //$NON-NLS-1$
setColor("file_other_operation", new RGB(173, 173, 173)); //$NON-NLS-1$
/* special character */
public static final String EMPTY = ""; //$NON-NLS-1$
public static final String SPACE = " "; //$NON-NLS-1$
- public static final String DOUBLE_SPACE = " "; //$NON-NLS-1$
public static final String TAB = " "; //$NON-NLS-1$
public static final String SLASH = "/"; //$NON-NLS-1$
public static final String BSLASH = "\\"; //$NON-NLS-1$
public static final String CMD_SPLIT_DOT = "\\."; //$NON-NLS-1$
public static final String NEW_LINE_CHAR = "\\n"; //$NON-NLS-1$
public static final String NEW_LINE = "\n"; //$NON-NLS-1$
- public static final String DOUBLE_NEW_LINE = "\n\n"; //$NON-NLS-1$
public static final String DOT = "."; //$NON-NLS-1$
public static final String COMMA = ","; //$NON-NLS-1$
public static final String COLON = ":"; //$NON-NLS-1$
}
drawAxis(gc);
-
+
/*
* draw chart information
*/
gc.setForeground(ColorResources.CHART_INFO);
gc.setFont(FontResources.CHART_INFO_FONT);
gc.drawImage(ImageResources.CHART_INFO, r.x + 5, (r.y + r.height) / 2 - 4);
- gc.drawText(chart.getInformation(), r.x + 18,
+ gc.drawText(chart.getInformation(), r.x + 18,
(r.y + r.height / 2 - gc.textExtent(chart.getInformation()).y / 2), true);
}
}
int totalHeight;
if (plot instanceof DAUIEventChartPlot) {
- if (!tooltipTexts.isEmpty()) {
- totalHeight = gc.textExtent(tooltipTexts.get(0)).y
- + DAChartPlotTooltip.TOOLTIP_MARGIN + DAChartPlotTooltip.TOOLTIP_MARGIN;
- } else {
- totalHeight = DAChartPlotTooltip.TOOLTIP_TEXT_HEIGHT
+ totalHeight = DAChartPlotTooltip.TOOLTIP_TEXT_HEIGHT
+ DAChartPlotTooltip.TOOLTIP_MARGIN + DAChartPlotTooltip.TOOLTIP_MARGIN;
- }
} else {
totalHeight = seriesCountPerColumn * DAChartPlotTooltip.TOOLTIP_TEXT_HEIGHT
+ DAChartPlotTooltip.TOOLTIP_MARGIN + DAChartPlotTooltip.TOOLTIP_BOTTOM_MARGIN
} else {
startY = (r.y + r.height / 2) - (totalHeight / 2);
}
- int rowCount = tooltipSize / seriesCountPerColumn;
- if ((tooltipSize % seriesCountPerColumn) != 0) {
- rowCount++;
- }
- int tooltipBoxWidth = (preTextWidthMargin + textWidthMax) * rowCount + DAChartPlotTooltip.TOOLTIP_MARGIN;
+
+ int tooltipBoxWidth = (preTextWidthMargin + textWidthMax)
+ * (tooltipSize / seriesCountPerColumn) + DAChartPlotTooltip.TOOLTIP_MARGIN;
gc.setAlpha(150);
gc.setBackground(tooltip.getBackgroundColor());
gc.setForeground(tooltip.getForegroundColor());
Color colorB = series.getSecondColor();
float aAmount = (float) (1.0 - bAmount);
float r = colorA.getRed() * aAmount + colorB.getRed() * bAmount;
- if (r < 0) {
- r = 0;
- }
float g = colorA.getGreen() * aAmount + colorB.getGreen() * bAmount;
- if (g < 0) {
- g = 0;
- }
float b = colorA.getBlue() * aAmount + colorB.getBlue() * bAmount;
- if (b < 0) {
- b = 0;
- }
return new Color(Display.getCurrent(), (int) r, (int) g, (int) b);
}
this.layout();
}
- private void initWidget(String name, String fullName, Image icon, int chartStyle) {
- heightRatio = getBoardItemHeightRatio();
-
- this.setLayout(new FormLayout());
- itemCell = new DAChartBoardItemCell(this, name, icon, chartStyle);
- itemCell.setFullName(fullName);
- itemCell.addExpandToggleButton();
-
- FormData data = new FormData();
- data.top = new FormAttachment(0, 0);
- data.left = new FormAttachment(0, 0);
- data.right = new FormAttachment(100, 0);
- data.height = (int) (heightRatio * height);
- itemCell.setLayoutData(data);
- this.layout();
- }
-
public DAChartBoardItem(DAChartBoard parent, String itemName) {
super(parent.getItemList(), SWT.NONE);
parentBoard = parent;
initWidget(itemName, null, DAChart.CHART_STYLE_NORMAL);
parentBoard.registerItem(this);
}
-
- //to show full title
- public DAChartBoardItem(DAChartBoard parent, String itemName, String fullName) {
- super(parent.getItemList(), SWT.NONE);
- parentBoard = parent;
- height = parent.getItemHeight();
- initWidget(itemName, fullName, null, DAChart.CHART_STYLE_NORMAL);
- parentBoard.registerItem(this);
- }
-
- //to show full title
- public DAChartBoardItem(DAChartBoardItem parent, String itemName, String fullName) {
- super(parent.getChildItemList(), SWT.NONE);
- parentItem = parent;
- height = parent.getChartBoard().getItemHeight();
- depth = parent.getDepth() + 1;
- initWidget(itemName, fullName, null, DAChart.CHART_STYLE_NORMAL);
- parentItem.registerItem(this);
- }
-
// for sorting of chart items
public DAChartBoardItem(DAChartBoard parent, String itemName,
Object o, Comparator c) {
public DAChartBoardItem(DAChartBoardItem parent, String itemName) {
super(parent.getChildItemList(), SWT.NONE);
parentItem = parent;
- height = parent.getChartBoard().getItemHeight();
+ height = parent.getItemHeight();
depth = parent.getDepth() + 1;
initWidget(itemName, null, DAChart.CHART_STYLE_NORMAL);
parentItem.registerItem(this);
Object o, Comparator c) {
super(parent.getChildItemList(), SWT.NONE);
parentItem = parent;
- height = parent.getChartBoard().getItemHeight();
+ height = parent.getItemHeight();
depth = parent.getDepth() + 1;
sortObj = o;
initWidget(itemName, null, DAChart.CHART_STYLE_NORMAL);
int chartStyle) {
super(parent.getChildItemList(), SWT.NONE);
parentItem = parent;
- height = parent.getChartBoard().getItemHeight();
+ height = parent.getItemHeight();
depth = parent.getDepth() + 1;
initWidget(itemName, icon, chartStyle);
parentItem.registerItem(this);
private PaintListener nameCellPaintListener;
private boolean hasAdditionalInfo = false;
- private String itemFullName = null;
-
//FIXME for debugging
public String getItemName() {
return itemName;
boolean bToggled = expandButton.isToggled();
parentItem.callbackSelect(true);
parentItem.callbackExpand(bToggled);
-
- PaintListener fullNameCellPaintListener = (new PaintListener() {
- @Override
- public void paintControl(PaintEvent e) { // draw full name
- Rectangle rect = ((Canvas) (e.widget)).getClientArea();
- drawNameCellBackGround(e.gc, rect);
- Point point = e.gc.textExtent(itemFullName, SWT.DRAW_DELIMITER);
- int startY = rect.height / 2 - point.y / 2 + NAME_CELL_DEFAULT_MARGIN;
- e.gc.setForeground(ColorResources.BLACK);
- drawText(e.gc, itemFullName, rect, startY);
- }
- });
- if(itemFullName != null) {
- if(bToggled) {
- nameCell.addPaintListener(fullNameCellPaintListener);
- }else{
- nameCell.addPaintListener(nameCellPaintListener);
- }
- }
nameCell.redraw();
}
});
nameCellCurrentBGColorEnd = endColor;
nameCell.redraw();
}
-
- public void setFullName(String fullName) {
- this.itemFullName = fullName;
- }
}
<launcherArgs>
<programArgs>-data @noDefault</programArgs>
<vmArgs>-XX:MaxPermSize=64m
--Xms256m
--Xmx1024m
+-Xms512m
+-Xmx512m
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC</vmArgs>
<vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
public static final String IDE_FOLDER_NAME = "ide"; //$NON-NLS-1$
public static final String PLUGINS_FOLDER_NAME = "plugins"; //$NON-NLS-1$
public static final String BASE_PLATFORM_PLUGIN_FOLDER_NAME = "org.tizen.base.platform"; //$NON-NLS-1$
- public static final String PLATFORM_IDE_PLUGIN_NAME = "org.tizen.nativeplatform"; //$NON-NLS-1$
public static final String WORKBENCH_PLUGIN_FOLDER_NAME = "org.tizen.dynamicanalyzer.workbench"; //$NON-NLS-1$
public static final String ABOUT_FILE_NAME = "about.mappings"; //$NON-NLS-1$
public static final String SINGLETON_LOCK_FILE = "active_da";//$NON-NLS-1$
public static final String DA_INSTALL_PATH = TIZEN_SDK_INSTALL_PATH + File.separator
+ PathConstants.TOOLS_FOLDER_NAME + File.separator
+ PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME;
- public static final String DA_AUTOTEST_PATH = TIZEN_SDK_DATA_PATH + File.separator + "test"
- + File.separator + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME;
+ public static final String DA_AUTOTEST_PATH = TIZEN_SDK_DATA_PATH + File.separator
+ + "test" + File.separator + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME;
public static final String DA_READELF_PATH = DA_INSTALL_PATH + File.separator
+ PathConstants.TARGET_FOLDER_NAME;
public static final String DA_TOOL_FOLDER_PATH = DA_INSTALL_PATH + File.separator
+ PathConstants.TOOL_FOLDER_NAME;
- public static final String DA_DEBUG_DATA_CHANNEL_LOG_FILE = DA_LOG_PATH + File.separator
- + "data.log"; //$NON-NLS-1$
- public static final String DA_DEBUG_CONTROL_CHANNEL_LOG_FILE = DA_LOG_PATH + File.separator
- + "control.log"; //$NON-NLS-1$
+ public static final String DA_DEBUG_DATA_CHANNEL_LOG_FILE = DA_LOG_PATH
+ + File.separator + "data.log"; //$NON-NLS-1$
+ public static final String DA_DEBUG_CONTROL_CHANNEL_LOG_FILE = DA_LOG_PATH
+ + File.separator + "control.log"; //$NON-NLS-1$
public static final String DA_BINARY_AUTO_SAVE_FILE = DA_SAVE_PATH + File.separator
+ "BinarySettings.save";
String platformVersion = platform.replaceAll("[A-Za-z]", "");//$NON-NLS-1$
if (Double.parseDouble(platformVersion) < 2.1) {
- tizenHeaderSouecePath = String.format(tempPath, platformName, currentDevie,
- platformVersion + ".cpp");//$NON-NLS-1$
+ tizenHeaderSouecePath = String.format(tempPath, platformName,
+ currentDevie, platformVersion + ".cpp");//$NON-NLS-1$
} else {
- tizenHeaderSouecePath = String.format(tempPath, platformName, currentDevie,
- platformVersion + ".native");//$NON-NLS-1$
+ tizenHeaderSouecePath = String.format(tempPath, platformName,
+ currentDevie, platformVersion + ".native");//$NON-NLS-1$
}
}
// currently not used
public static String getTargetPath(String platform) {
if (null != platform && !platform.isEmpty()) {
- return TIZEN_SDK_INSTALL_PATH + File.separator + PathConstants.PLATFORM_FOLDER_NAME
- + File.separator + platform + File.separator
- + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME + File.separator;
+ return TIZEN_SDK_INSTALL_PATH + File.separator
+ + PathConstants.PLATFORM_FOLDER_NAME + File.separator + platform
+ + File.separator + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME
+ + File.separator;
} else {
return DA_INSTALL_PATH + File.separator + PathConstants.TARGET_FOLDER_NAME
+ File.separator;
return aboutFilePath;
}
- public static boolean checkPlatformPlugin() {
- String idePluginPath = TIZEN_SDK_INSTALL_PATH + File.separator
- + PathConstants.IDE_FOLDER_NAME + File.separator
- + PathConstants.PLUGINS_FOLDER_NAME;
-
- File dir = new File(idePluginPath);
- String[] files;
- if (dir.exists()) {
- files = dir.list(new FilenameFilter() {
-
- @Override
- public boolean accept(File dir, String name) {
- return name.contains(PathConstants.PLATFORM_IDE_PLUGIN_NAME);
- }
- });
- } else {
- return false;
- }
-
- if (null == files || files.length < 1) {
- return false;
- }
-
- return true;
- }
-
public static String getWorkbenchPluginPath() {
String aboutFolderPath = TIZEN_SDK_INSTALL_PATH + File.separator
+ PathConstants.TOOLS_FOLDER_NAME + File.separator
public static String getRootstrapsPath(String platform) {
if (platform != null) {
- return TIZEN_SDK_INSTALL_PATH + File.separator + PathConstants.PLATFORM_FOLDER_NAME
- + File.separator + platform + File.separator
- + PathConstants.TIZEN_FOLDER_ROOTSTRAPS;
+ return TIZEN_SDK_INSTALL_PATH + File.separator
+ + PathConstants.PLATFORM_FOLDER_NAME + File.separator + platform
+ + File.separator + PathConstants.TIZEN_FOLDER_ROOTSTRAPS;
} else {
return "";
}
returnstr = DA_TOOL_FOLDER_PATH + File.separator
+ PathConstants.WINDOW_ACTIVATOR_WINDOWS;
} else if (CommonUtil.isMac()) {
- returnstr = DA_TOOL_FOLDER_PATH + File.separator + PathConstants.WINDOW_ACTIVATOR_MACOS;
+ returnstr = DA_TOOL_FOLDER_PATH + File.separator
+ + PathConstants.WINDOW_ACTIVATOR_MACOS;
} else if (CommonUtil.isLinux()) {
- returnstr = DA_TOOL_FOLDER_PATH + File.separator + PathConstants.WINDOW_ACTIVATOR_LINUX;
+ returnstr = DA_TOOL_FOLDER_PATH + File.separator
+ + PathConstants.WINDOW_ACTIVATOR_LINUX;
} else {
returnstr = null;
}
return returnstr;
}
-
+
public static String getTestLogPath() {
String returnstr = null;
returnstr = getTizenSdkDataPath();
- if (returnstr == null)
- return returnstr;
- return returnstr + File.separator + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME
- + File.separator + PathConstants.TEST_FOLDER_NAME;
+ if (returnstr == null) return returnstr;
+ return returnstr + File.separator + PathConstants.DYNAMIC_ANALYZER_FOLDER_NAME
+ + File.separator + PathConstants.TEST_FOLDER_NAME;
}
-
+
public static String getDebugInfoScript() {
String path = null;
-
+
if (CommonUtil.isLinux() || CommonUtil.isMac()) {
- path = DA_TOOL_FOLDER_PATH + File.separator + PathConstants.DEBUGINFO_LINUX_MAC;
+ path = DA_TOOL_FOLDER_PATH + File.separator
+ + PathConstants.DEBUGINFO_LINUX_MAC;
} else if (CommonUtil.isWin()) {
- path = DA_TOOL_FOLDER_PATH + File.separator + PathConstants.DEBUGINFO_WINDOWS;
+ path = DA_TOOL_FOLDER_PATH + File.separator
+ + PathConstants.DEBUGINFO_WINDOWS;
} else { // should never be here
- Logger.error("Unknown host OS!\n");
+ Logger.error("Unknown host OS!\n");
}
-
+
return path;
}
}
}
public V getByIndex(int index) {
- if (index >= 0 && index < dataList.size()) {
+ if (index < dataList.size()) {
return dataList.get(index);
} else {
return null;
public void start(BundleContext context) throws Exception {\r
super.start(context);\r
plugin = this;\r
- \r
- // check for platform sdk\r
- Global.setPlatformSDK(PathManager.checkPlatformPlugin());\r
\r
// Adds workbench listener.\r
IWorkbench workbench = PlatformUI.getWorkbench();\r
public static final String CMD_UPLOAD_FILE_LIST = "du -b " + //$NON-NLS-1$
PathConstants.DA_REMOTE_PATH + AnalyzerConstants.READELF_BIN;
public static final String CMD_PROCESS_NAME = "ps -p %d -o comm=rcu_sched";
- public static final String CMD_GET_FILE_SIZE = "stat -c %s";
// via da_command
- public static final String DACOMMAND_KILL_MANAGER = "profile killmanager";
- public static final String DACOMMAND_RUN_MANAGER = "profile runmanager";
- public static final String DACOMMAND_FIND_UNITTEST = "profile findunittest";
- public static final String DACOMMAND_CHECK_VERSION = "profile getversion";
- public static final String DACOMMAND_READLINK = "profile readlink ";
+ public static final String DACOMMAND_KILL_MANAGER = "da killmanager";
+ public static final String DACOMMAND_RUN_MANAGER = "da runmanager";
+ public static final String DACOMMAND_FIND_UNITTEST = "da findunittest";
+ public static final String DACOMMAND_CHECK_VERSION = "da getversion";
+ public static final String DACOMMAND_READLINK = "da readlink ";
// direct shell command
public static final String CMD_FIND_IME = "/usr/bin/pkginfo --arg-flt 10 http://tizen.org/category/ime";
public static final int MAX_BINARY_COUNT = (int) Math.pow(2, 16); // 65535
public static final int MAX_FUNCTION_COUNT = (int) Math.pow(2, 20); // 1,048,576
public static final int MAX_FUNCTION_ARGUMENTS_COUNT = FUNCTION_ARGUMENTS_FORMAT_LENGTH; // Because "MAX_FUNCTION_ARGUMENTS_COUNT < FUNCTION_ARGUMENTS_FORMAT_LENGTH" is always true
- public static final long MAX_DAEMON_LOG_SIZE = 1024*1024; // 1 mega byte
// Leak
public static final int MAX_LEAK_CHECK_BUFFER_SIZE = (int) Math.pow(2, 20); // 1,048,576
public static final int MAX_FILE_ACCESS_COUNT = ((int) Math.pow(2, 10))*100; // 102400 // 102400
public static final int MAX_STRING_LENGTH = 16;
- // Callstack
- public static final int MAX_CALLSTACK_SEQTIMEMAP_SIZE = 100000;
public static void stopTraceAndOpenWarningDialog() {
* - S-Core Co., Ltd
*
*/
-package org.tizen.dynamicanalyzer.swap.communicator;
+package org.tizen.dynamicanalyzer.common;
-public enum SwapErrorCode {
+public enum ErrorCode {
SUCCESS(0, "Success"),
ERR_LOCKFILE_CREATE_FAILED(-101, "Lock file create failed"),
ERR_INITIALIZE_SYSTEM_INFO_FAILED(-103, "Initialize system info failed"),
- ERR_HOST_SERVER_SOCKET_CREATE_FAILED(-104, "host server socket create failed"),
+ ERR_HOST_SERVER_SOCKET_CREATE_FAILED(-104,
+ "host server socket create failed"),
- ERR_TARGET_SERVER_SOCKET_CREATE_FAILED(-105, "target server socket create failed"),
+ ERR_TARGET_SERVER_SOCKET_CREATE_FAILED(-105,
+ "target server socket create failed"),
ERR_WRONG_MESSAGE_FORMAT(-201, "Wrong message format"),
ERR_CANNOT_START_PROFILING(-204, "cannot start profiling"),
- ERR_SER_SOCK_CREATE(-900, "Server socket creation failed"),
-
- ERR_SER_SOCK_BIND(-901, "Server socket bind failed"),
-
- ERR_SER_SOCK_LISTEN(-902, "Server socket listen failed"),
-
ERR_NOT_DEFINED(-999, "Unknown error");
private final String message;
private final int errNo;
- private SwapErrorCode(int num, String msg) {
+ public static final int ERROR_MSG_INDEX = 0;
+ public static final int ERROR_LENGTH_INDEX = 1;
+ public static final int ERROR_NUMBER_INDEX = 2;
+
+ private ErrorCode(int num, String msg) {
errNo = num;
message = msg;
}
return message;
}
- public static SwapErrorCode getError(int num) {
- SwapErrorCode[] errors = values();
+ public static ErrorCode getError(int num) {
+ ErrorCode[] errors = values();
for (int i = 0; i < errors.length; i++) {
if (errors[i].getErrorNumber() == num) {
return errors[i];
}
}
- return SwapErrorCode.ERR_NOT_DEFINED;
+ return ErrorCode.ERR_NOT_DEFINED;
}
}
// This class is for global information that can be accessed from anywhere in dynamic analyzer code.
// So this class contains only static methods and variables.
public class Global {
- private static boolean isPlatformSDK = false;
-
private static DeviceInfo currentDevice = null;
private static PackageInfo currentApplication = null;
private static Project currentProject = null;
private static RunTimeConfiguration currentConfiguration = null;
- public static boolean isPlatformSDK() {
- return isPlatformSDK;
- }
-
- public static void setPlatformSDK(boolean isPlatformSDK) {
- Global.isPlatformSDK = isPlatformSDK;
- }
-
public static DeviceInfo getCurrentDeviceInfo() {
return currentDevice;
}
public static void setCurrentDeviceInfo(DeviceInfo device) {
- Global.currentDevice = device;
+ currentDevice = device;
}
public static PackageInfo getCurrentApplication() {
}
public static void setCurrentApplication(PackageInfo pkgInfo) {
- Global.currentApplication = pkgInfo;
+ currentApplication = pkgInfo;
}
public static RunTimeConfiguration getCurrentConfiguration() {
}
public static void setCurrentConfiguration(RunTimeConfiguration currentConfig) {
- Global.currentConfiguration = currentConfig;
+ currentConfiguration = currentConfig;
}
- public static Project getProject() {
- return currentProject;
+ public static void setProject(Project p) {
+ currentProject = p;
}
- public static void setProject(Project p) {
- Global.currentProject = p;
+ public static Project getProject() {
+ return currentProject;
}
public static String getFunctionName(int id) {
ERR_READELF_UPLOAD_FAILED(-205, "readelf file size is different!!"),
- ERR_DEVICE_IS_NULL(-301, "Current device is not available"),
+ ERR_DEVICE_IS_NULL(-301, "current device is null"),
ERR_DEVICE_IS_OFFLINE(-302, "current device is offline"),
ERR_SELECTED_APP_IS_NULL(-401, "selected app is null"),
- ERR_MSG_START_FAIL(-501, "Current application is not available"),
+ ERR_MSG_START_FAIL(-501, "start message is not ok"),
ERR_MSG_STOP_FAIL(-502, "stop message is not ok"),
ERR_BIN_INFO_GET_FAIL(-507, "binary info get fail..."),
ERR_RECEIVE_ACK_FAIL(-508, "receiving ack message fail..."),
-
- ERR_BY_SECURITY_REASON(-601, "error by security reason"),
ERR_DA_IS_EXIT(-901, "Dynamic Analyzer is closing"),
public static int getRemotePort(IDevice device) {
int remotePort = -1;
-
// add error check
+ System.out.print("Getting Port Progress \n ");
long start = System.currentTimeMillis();
while ((System.currentTimeMillis() - start) < PORT_WAIT_TIME) {
try {
System.out.print("\n");
if (remotePort < 0) {
- Logger.error("!!failed to get port number of da manager!!");
+ Logger.debug("!!port get failed!!");
} else {
- Logger.debug("!!succeeded to get port number!! : " + remotePort);
+ Logger.debug("!!port get success!! : " + remotePort);
}
return remotePort;
import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
import org.tizen.dynamicanalyzer.common.AnalyzerManager;
import org.tizen.dynamicanalyzer.common.AnalyzerShellCommands;
-import org.tizen.dynamicanalyzer.common.DALimit;
import org.tizen.dynamicanalyzer.common.Global;
import org.tizen.dynamicanalyzer.common.HostResult;
import org.tizen.dynamicanalyzer.common.path.PathConstants;
}
}
});
- if (cmdResultMultiLines.size() == 1) {
- processName = "unknow proccess";//$NON-NLS-1$
- } else {
- processName = cmdResultMultiLines.get(1);
- }
-
+ processName = cmdResultMultiLines.get(1);
return processName;
}
}
});
- onDisconnectedInternal(device);
+ Logger.debug("device disconnected : " + device.getSerialNumber());
+ DeviceInfo deviceInfo = getDeviceByName(device.getSerialNumber());
+ DeviceInfo selectedDevice = Global.getCurrentDeviceInfo();
+ if (null != devices && !devices.isEmpty()) {
+ devices.remove(deviceInfo);
+ if (!AnalyzerManager.isRunning()) {
+ updateToolbarDevice();
+ }
+ if (isRunning()) {
+ if (selectedDevice.getIDevice().getSerialNumber()
+ .equals(deviceInfo.getIDevice().getSerialNumber())) {
+ Logger.debug("Disconnected while DA is running."); //$NON-NLS-1$
+ DACommunicator.setRunning(false);
+ }
+ }
+ }
Display.getDefault().syncExec(new Runnable() {
@Override
}
});
- onConnectedInternal(device);
+ Logger.debug("device connected : " + device.getSerialNumber());
+ // addDevice(device);
+ if (!AnalyzerManager.isRunning()) {
+ DeviceInfo devInfo = new DeviceInfo(device);
+ HostResult result = readVersion(devInfo);
+ if (result.isSuccess()) {
+ devInfo.initCommunicator();
+ updateToolbarDevice();
+ }
+ }
+ if (null != Global.getCurrentDeviceInfo() && null != Global.getCurrentApplication()) {
+ Display.getDefault().syncExec(new Runnable() {
+ @Override
+ public void run() {
+ ToolbarArea.getInstance().setStartButtonEnablement(true);
+ }
+ });
+ }
Display.getDefault().syncExec(new Runnable() {
@Override
});
Logger.debug("device changed : " + device.getSerialNumber() + " " + changeMask);
- if (1 == changeMask) { // state changed (offline -> online, vice versa)
- onDisconnectedInternal(device);
- onConnectedInternal(device);
+ if (1 == changeMask) {
+ if (!AnalyzerManager.isRunning()) {
+ DeviceInfo devInfo = new DeviceInfo(device);
+ HostResult result = readVersion(devInfo);
+ if (result.isSuccess()) {
+ devInfo.initCommunicator();
+ updateToolbarDevice();
+ }
+ }
+ if (null != Global.getCurrentDeviceInfo() && null != Global.getCurrentApplication()) {
+ Display.getDefault().syncExec(new Runnable() {
+ @Override
+ public void run() {
+ ToolbarArea.getInstance().setStartButtonEnablement(true);
+ }
+ });
+ }
} else {
Logger.debug("device changed type :" + changeMask);
}
});
}
- private void onDisconnectedInternal(IDevice device) {
- Logger.debug("device disconnected : " + device.getSerialNumber());
- DeviceInfo deviceInfo = getDeviceByName(device.getSerialNumber());
- DeviceInfo selectedDevice = Global.getCurrentDeviceInfo();
- if (null != devices && !devices.isEmpty()) {
- devices.remove(deviceInfo);
- if (!AnalyzerManager.isRunning()) {
- updateToolbarDevice();
- }
- if (isRunning()) {
- if (selectedDevice.getIDevice().getSerialNumber()
- .equals(deviceInfo.getIDevice().getSerialNumber())) {
- Logger.debug("Disconnected while DA is running."); //$NON-NLS-1$
- DACommunicator.setRunning(false);
- }
- }
- }
- }
-
- private void onConnectedInternal(IDevice device) {
- Logger.debug("device connected : " + device.getSerialNumber());
- // addDevice(device);
- if (!AnalyzerManager.isRunning()) {
- DeviceInfo devInfo = new DeviceInfo(device);
- HostResult result = readVersion(devInfo);
- if (result.isSuccess()) {
- devInfo.initCommunicator();
- updateToolbarDevice();
- }
- }
- if (null != Global.getCurrentDeviceInfo() && null != Global.getCurrentApplication()) {
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- ToolbarArea.getInstance().setStartButtonEnablement(true);
- }
- });
- }
- }
};
public static void updateToolbarDevice() {
public static void pullDaemonLog() {
final String from = PathConstants.DA_DAEMON_LOG_PATH;
- String command = AnalyzerShellCommands.CMD_GET_FILE_SIZE + CommonConstants.SPACE + from;
-
- cmdResultMultiLines.clear();
- CommunicatorUtils.execShellCommand(command, new MultiLineReceiver() {
- @Override
- public void processNewLines(String[] lines) {
- for (int i = 0; i < lines.length; i++) {
- cmdResultMultiLines.add(lines[i]);
- }
- }
- });
-
- long filesize = -1;
- if (cmdResultMultiLines.size() > 0) {
- filesize = Long.parseLong(cmdResultMultiLines.get(0));
- }
-
- if (filesize > 0 && filesize < DALimit.MAX_DAEMON_LOG_SIZE) {
- final String to = PathManager.DA_LOG_PATH + File.separator + DAEMONLOG_PREFIX
- + PathManager.getLogPostFix();//$NON-NLS-1$
- SyncResult res = CommunicatorUtils.pull(from, to);
- if (null != res && res.isOk()) {
- Logger.debug("daemon log copying success!!");//$NON-NLS-1$
- } else {
- Logger.debug("Failed to get " + from); //$NON-NLS-1$
- }
-
- AnalyzerUtil.checkLogs(PathManager.DA_LOG_PATH, DAEMONLOG_PREFIX, DAEMONLOG_COUNT);
+ final String to = PathManager.DA_LOG_PATH + File.separator + DAEMONLOG_PREFIX
+ + PathManager.getLogPostFix();//$NON-NLS-1$
+ SyncResult res = CommunicatorUtils.pull(from, to);
+ if (null != res && res.isOk()) {
+ Logger.debug("daemon log copying success!!");//$NON-NLS-1$
} else {
- Logger.debug("daemon log file is too large or does not exist");
+ Logger.debug("Failed to get " + from); //$NON-NLS-1$
}
+
+ AnalyzerUtil.checkLogs(PathManager.DA_LOG_PATH, DAEMONLOG_PREFIX, DAEMONLOG_COUNT);
}
// public static String getLocalhost() {
import java.util.List;
import java.util.Map;
-import org.tizen.dynamicanalyzer.common.Global;
import org.tizen.dynamicanalyzer.constant.CommonConstants;
import org.tizen.dynamicanalyzer.project.AppInfo;
import org.tizen.dynamicanalyzer.project.PackageInfo;
pkgInfo.setPackageId(value);
} else if (key.equals(PackageInfo.VERSION)) {
pkgInfo.setVersion(value);
- } else if (key.equals(PackageInfo.PRELOAD)) {
- pkgInfo.setPreload(Integer.parseInt(value));
} else if (key.equals(PackageInfo.INSTALLTIME)) {
pkgInfo.setInstallTime(Long.parseLong(value));
}
}
-
- if (pkgInfo.getPackageId() == null) {
- return null;
- } else if (!Global.isPlatformSDK() && pkgInfo.getPreload() != 0) {
- return null;
- } else {
+
+ if (pkgInfo.getPackageId() != null) {
return pkgInfo;
+ } else {
+ return null;
}
}
*/
// length of string type column
- public static final int SHORT_TEXT_LEN = 64;
public static final int TEXT_LEN = 256;
public static final int BIG_TEXT_LEN = 1024;
- public static final int LONG_TEXT_LEN = 4096;
public static final int BIGBIG_TEXT_LEN = 16384;
- public static final String SHORT_TEXT = "VARCHAR(" + SHORT_TEXT_LEN + ")";//$NON-NLS-1$
public static final String TEXT = "VARCHAR(" + TEXT_LEN + ")";//$NON-NLS-1$
public static final String BIG_TEXT = "VARCHAR(" + BIG_TEXT_LEN + ")";//$NON-NLS-1$
public static final String BIGBIG_TEXT = "VARCHAR(" + BIGBIG_TEXT_LEN + ")";//$NON-NLS-1$
- public static final String LONG_TEXT = "VARCHAR(" + LONG_TEXT_LEN + ")";//$NON-NLS-1$
public static final String TEXT_LIB_NAME = "VARCHAR(1024)";//$NON-NLS-1$
// types type constant
boolean isSuccess = true;
List<List<Object>> profilingChilds = FunctionUsageProfiler.getInstance()
.getProfilingChildDataTable().getProfilingChildDataFromDB();
- if (null == profilingChilds || 0 == profilingChilds.size()) {
+ if (null == profilingChilds) {
Logger.debug("failed - loadProfilingChildData");
isSuccess = false;
} else {
- int size = profilingChilds.size();
- for (int i = 0; i < size; i++) {
+ for (int i = 0; i < profilingChilds.size(); i++) {
List<Object> data = profilingChilds.get(i);
int parentID = (Integer) data.get(ProfilingChildDataDBTable.COLUMN.PROFILINGDATAID.index);
int pid = (Integer) data.get(ProfilingChildDataDBTable.COLUMN.PID.index);
+ int childID = (Integer) data.get(ProfilingChildDataDBTable.COLUMN.CHILDDATAID.index);
- @SuppressWarnings("unchecked")
- List<Integer> childSeqList =
- (List<Integer>) data.get(ProfilingChildDataDBTable.COLUMN.CHILDSEQARRAY.index);
-
ProfileDataMaker profiler = FunctionUsageProfiler.getInstance()
.getProfileDataMakerByPid(pid);
ProfilingData parent = profiler.getProfilingDataMap().get(parentID);
ProfilingChildData child = parent.getChildData();
- child.getChildren().addAll(childSeqList);
+ child.getChildren().add(childID);
}
}
return isSuccess;
public static final int FD_API_TYPE_LOCK_START = 14;
public static final int FD_API_TYPE_LOCK_END = 15;
public static final int FD_API_TYPE_UNLOCK = 16;
- public static final int FD_API_TYPE_LOCK_AUTORELEASE = 17;
- public static final int FD_API_TYPE_FAIL = 18;
+ public static final int FD_API_TYPE_LOCK_WAIT_START = 17;
+ public static final int FD_API_TYPE_LOCK_WAIT_END = 18;
/* network api type */
public static final int SOCKET_API_FD_OPEN = 0;
public static String FILE_CHART_TOOLTIP_READ;
public static String FILE_CHART_TOOLTIP_CONCURRENT_READ;
public static String FILE_CHART_TOOLTIP_LOCK;
- public static String FILE_CHART_TOOLTIP_UNLOCK;
- public static String FILE_CHART_TOOLTIP_LOCK_AUTORELEASE;
public static String FILE_CHART_TOOLTIP_LOCK_WAIT;
- public static String FILE_CHART_TOOLTIP_FAIL;
-
public static String FILE_API_DB;
public static String FILE_STATUS_DB;
public static String FILE_ACCESS_DB;
- public static String FILE_ACCESSOR_DB;
public static String FILE_CHART_LOCK;
FILE_CHART_TOOLTIP_CONCURRENT_WRITE=CONCURRENT WRITE
FILE_CHART_TOOLTIP_READ=READ
FILE_CHART_TOOLTIP_CONCURRENT_READ=CONCURRENT READ
-FILE_CHART_TOOLTIP_LOCK=LOCK
-FILE_CHART_TOOLTIP_UNLOCK=UNLOCK
+FILE_CHART_TOOLTIP_LOCK=LOCKED
FILE_CHART_TOOLTIP_LOCK_WAIT=LOCK WAITING
-FILE_CHART_TOOLTIP_LOCK_AUTORELEASE=AUTO RELEASE
-FILE_CHART_TOOLTIP_FAIL=FAIL
FILE_API_DB=FILE_API_DB
FILE_STATUS_DB=FILE_STATUS_DB
FILE_ACCESS_DB=FILE_ACCESS_DB
-FILE_ACCESSOR_DB=FILE_ACCESSOR_DB
TIME_MS = ms
public class ThreadPageLabels extends NLS {
private static final String BUNDLE_NAME = "org.tizen.dynamicanalyzer.nl.ThreadPageLabels"; //$NON-NLS-1$
public static String THREAD_CHART_THREAD;
- public static String THREAD_CHART_SYNC;
public static String THREAD_CHART_TITLE;
public static String THREAD_DETAILS_TITLE;
public static String SYNC_CHART_TITLE;
THREAD_CHART_THREAD=Thread
-THREAD_CHART_SYNC=Sync
THREAD_CHART_TITLE=Thread Chart
THREAD_DETAILS_TITLE=Thread Details
SYNC_CHART_TITLE=Sync Chart
public static String ERROR_LIB_NOT_FOUND_INRPM;
public static String ERROR_NO_APPID_FOR_LAUNCHPAD;
public static String ERROR_DEVICE_CONNECTION;
-
- public static String ERROR_BY_SECURITY_REASON;
public static String WARNING_PATH_NOT_FOUND;
public static String WARNING_FILE_NOT_FOUND;
ERROR_NO_APPID_FOR_LAUNCHPAD=There is no appid for launch_app.
ERROR_DEVICE_CONNECTION=Failed to connect with the device.\nPlease re-run Dynamic Analyzer and reboot the device.
-ERROR_BY_SECURITY_REASON=You cannot analyze this application for the security reason.
-
WARNING_PATH_NOT_FOUND=Path cannot be found.
WARNING_FILE_NOT_FOUND=File cannot be found.
private ElfSymbolExtractor symbolExtractor = new ElfSymbolExtractor();
- // temporary information
- private String execPath = null;
private String execFileName = null;
-
private List<String> localPackagePath = null;
private Map<Integer, String> runningProcesses = null;
+ private String execPath = null;
private static List<String> readlinkResult = new ArrayList<String>();
private List<String> properties = new ArrayList<String>();
public void setInfo(int index, String data) {
properties.set(index, data);
- if (index == PROPERTY.EXEC.index) {
- execFileName = null;
- execPath = null;
- }
}
public String getInfo(int index) {
public String getPackageId() {
return properties.get(PROPERTY.PACKAGE.index);
}
-
+
public String getLabel() {
return properties.get(PROPERTY.LABEL.index);
}
readlinkResult.add(appLines[i]);
}
}
- }); // get actual file path using da readlink command (inside target platform)
+ }); // get actual file path using da readlink command (inside target
+ // platform)
- if (readlinkResult.isEmpty() || readlinkResult.size() > 1) {
- // fail to get path
+ if (readlinkResult.isEmpty() || readlinkResult.size() > 1) { // fail
+ // to
+ // get
+ // path
if (getAppType().contains(APPTYPE_CPP)) {
exec = exec.replaceFirst(AnalyzerConstants.TIZEN_APP_PATH,
AnalyzerConstants.TIZEN_USR_APP_PATH);
public static final String PKGTYPE = "pkg_type";
public static final String PKGID = "pkgid";
public static final String VERSION = "version";
- public static final String PRELOAD = "preload";
public static final String INSTALLTIME = "installed_time";
private String id = null;
private String pkgType = null;
private String version = null;
- private int preload = 0; // 1 for preload, otherwise 0
private long installTime = 0;
private List<AppInfo> appInfos = new ArrayList<AppInfo>();
public void setVersion(String version) {
this.version = version;
}
-
- public int getPreload() {
- return preload;
- }
-
- public void setPreload(int preload) {
- this.preload = preload;
- }
public long getInstallTime() {
return installTime;
}
protected ConcurrentHashMap<Integer, ConcurrentHashMap<Long, CallStackUnit>> callstackApiAddrByPidMap = new ConcurrentHashMap<Integer, ConcurrentHashMap<Long, CallStackUnit>>();
- protected ConcurrentSkipListMap<Long, CallStackData> callstackDataBySeqMap = new ConcurrentSkipListMap<Long, CallStackData>();
+ protected ConcurrentHashMap<Long, CallStackData> callstackDataBySeqMap = new ConcurrentHashMap<Long, CallStackData>();
protected String userFunctionBin = null;
protected HashMap<Integer, List<CallStackItem>> userCallstackByTidMap = new HashMap<Integer, List<CallStackItem>>();
protected HashMap<Integer, DuplicateUserCall> dupUserCallByTidMap = new HashMap<Integer, DuplicateUserCall>();
abstract public void makeUserCallstackforRange(LogData log, ProfileDataMaker profiler);
abstract public void makeCallstackWithoutBacktrace(LogData inputData);
- abstract public long getSeqOfUserCallstackForTime(int tid, long time);
- abstract public List<Long> getCallstackAddrListFromSeq(long seq);
- abstract public List<List<Long>> getArrayOfAddrListFromSeq(List<Long> seqs);
public void offerCallStackUnit(CallStackUnit csu) {
if (callstackInserter != null) {
return;
}
+ public List<Integer> getPidsOfCallstackApiAddrMap() {
+ ArrayList<Integer> pids = new ArrayList<Integer>();
+ pids.addAll(callstackApiAddrByPidMap.keySet());
+
+ return pids;
+ }
+
public Map<Long, CallStackUnit> getCallStackApiAddrByPidMap(int pid) {
if (null == callstackApiAddrByPidMap) {
callstackApiAddrByPidMap = new ConcurrentHashMap<Integer, ConcurrentHashMap<Long, CallStackUnit>>();
return callstackApiByAddrMap;
}
- public NavigableMap<Long, CallStackData> getCallStackDataBySeqMap() {
+ public Map<Long, CallStackData> getCallStackDataBySeqMap() {
if (null == callstackDataBySeqMap) {
- callstackDataBySeqMap = new ConcurrentSkipListMap<Long, CallStackData>();
+ callstackDataBySeqMap = new ConcurrentHashMap<Long, CallStackData>();
}
return callstackDataBySeqMap;
}
}
return seqByTimeMap;
}
-
- public List<Integer> getTidsOfSeqTimeMap() {
- ArrayList<Integer> tids = new ArrayList<Integer>();
- tids.addAll(seqTimeByTidMap.keySet());
-
- return tids;
- }
public String getUserFunctionPosition() {
if (userFunctionBin == null || userFunctionBin.isEmpty()) {
import java.util.List;
import java.util.Map;
import java.util.NavigableMap;
-import java.sql.ResultSet;
-import java.sql.SQLException;
import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
import org.tizen.dynamicanalyzer.common.Global;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
import org.tizen.dynamicanalyzer.project.BinaryInfo;
import org.tizen.dynamicanalyzer.project.LibraryObject;
import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackItem;
import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackUnit;
import org.tizen.dynamicanalyzer.ui.summary.profiling.ProfileDataMaker;
-import org.tizen.dynamicanalyzer.ui.timeline.calltrace.FunctionEntryDBTable;
-import org.tizen.dynamicanalyzer.ui.timeline.calltrace.FunctionExitDBTable;
import org.tizen.dynamicanalyzer.util.Logger;
public class SWAPCallStackManager extends BaseCallstackManager {
return;
}
- long userCallstackSeq = getSeqOfUserCallstackForTime(tid, time);
- List<Long> addrs = null;
- int size = 0;
-
- if (-1 != userCallstackSeq) { // seq for usercallstack is found
- addrs = getCallstackAddrListFromSeq(userCallstackSeq);
- if (null != addrs) { // callstack data for seq is found
- size = addrs.size();
- }
- }
+ List<CallStackItem> probeCallstack = new ArrayList<CallStackItem>(getUserCallstack(tid));
+ int size = probeCallstack.size();
CallStackData callstackData = new CallStackData(seq);
offerCallStackUnit(callbackApi);
addrMap.put(LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, callbackApi);
}
- if (null == addrs) {
- addrs = new ArrayList<Long>();
- }
- addrs.add(0, LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR);
+ probeCallstack.add(new CallStackItem(callbackApi));
} else {
CallStackUnit callerCallstackUnit = addrMap.get(callerAddr);
if (null == callerCallstackUnit) {
addrMap.put(callerAddr, callerCallstackUnit);
}
- CallStackUnit topUserCallstack = addrMap.get(addrs.get(0));
+ CallStackUnit topUserCallstack = probeCallstack.get(size - 1).getCallStackUnit();
if (callerCallstackUnit.getFunctionId() == topUserCallstack.getFunctionId()) {
- addrs.set(0, callerAddr);
+ probeCallstack.set(size - 1, new CallStackItem(callerCallstackUnit));
} else {
Logger.debug("probe caller is not the same as top of user callstack"); //$NON-NLS-1$
}
}
- size = addrs.size();
- for (int i = 0; i < size; i++) {
- callstackData.getAddrs().add(addrs.get(i));
+ size = probeCallstack.size();
+ for (int i = size - 1; i >= 0; i--) {
+ callstackData.getAddrs().add(probeCallstack.get(i).getCallStackUnit().getAddr());
}
offerCallStackData(callstackData);
getCallStackDataBySeqMap().put(seq, callstackData);
}
- // to make callstack for sample, probe
- public long getSeqOfUserCallstackForTime(int tid, long time) {
- long seq = -1;
- String query;
- long entrySeq = -1, exitSeq = -1;
- ResultSet rs;
- NavigableMap<Long, Long> seqByTimeMap = getSeqTimeByTidMap(tid);
- Long callstackTime = seqByTimeMap.floorKey(time);
-
- if (null != callstackTime) { // found from memory
- seq = seqByTimeMap.get(callstackTime);
- } else { // select from database
- try {
- query = String.format(FunctionEntryDBTable.USERCALLSTACK_QUERY, time);
- rs = SqlConnectionManager.executeQueryRS(query);
- if (rs.next()) {
- entrySeq = rs.getLong(1);
- }
- SqlConnectionManager.releaseResultSet(rs);
-
- query = String.format(FunctionExitDBTable.USERCALLSTACK_QUERY, time);
- rs = SqlConnectionManager.executeQueryRS(query);
- if (rs.next()) {
- exitSeq = rs.getLong(1);
- }
- SqlConnectionManager.releaseResultSet(rs);
- if (entrySeq < exitSeq) { // greater seq which time is less than sample/probe time
- seq = exitSeq;
- } else {
- seq = entrySeq;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
-
- return seq;
- }
-
- public List<Long> getCallstackAddrListFromSeq(long seq) {
- List<Long> addrs = null;
- CallStackData csd = getCallStackDataBySeqMap().get(seq);
-
- if (null == csd) { // callstackdata is not in memory, find from DB
- List<List<Object>> callStackAddrs = CallStackInserter.getInstance()
- .getCallStackDataTable().getCallStackAddrsFromDB(seq);
-
- if (null == callStackAddrs || 0 == callStackAddrs.size()
- || null == callStackAddrs.get(0)) { // not found
- Logger.debug("CallStackData is not found for seq : " + seq);
- return null;
- }
-
- @SuppressWarnings("unchecked")
- List<Long> addressList = (List<Long>) callStackAddrs.get(0).get(0);
-
- addrs = new ArrayList<Long>();
- addrs.addAll(addressList);
- } else { // callstackdata is in memory
- addrs = csd.getAddrs();
- }
- return addrs;
- }
-//TODO: 1. execute select query once 2. change return type - <seq, List<Long>>
-//TODO: 3. additional discussion with leak analysis implementer if needed
- public List<List<Long>> getArrayOfAddrListFromSeq(List<Long> seqs) {
- List<List<Long>> addrsList = null;
- if (null == seqs) {
- return null;
- }
-
- addrsList = new ArrayList<List<Long>>();
- int size = seqs.size();
- for (int i = 0; i < size; i++) {
- List<Long> addrs = getCallstackAddrListFromSeq(seqs.get(i));
- if (null != addrs) {
- addrsList.add(addrs);
- }
- }
-
- return addrsList;
- }
-
public void clear() {
callstackApiAddrByPidMap.clear();
callstackDataBySeqMap.clear();
}
- // FIXME: black list hard coded.
- // function instrumentation black list
- public static boolean isInBlacklist(String funcname) {
- if (funcname.equals("_start")) {
- return true;
- }
-
- if (funcname.contains("get_pc_thunk")) {
- return true;
- }
-
- return false;
- }
-
}
+++ /dev/null
-package org.tizen.dynamicanalyzer.swap.communicator;
-
-import static org.tizen.dynamicanalyzer.constant.CommonConstants.INT_SIZE;
-
-import java.util.Arrays;
-
-import org.tizen.dynamicanalyzer.util.ByteUtil;
-
-public class AckMessage {
- private int msgID = -1;
- private int payloadLength = -1;
- private int returnCode = -1;
- private byte[] payload = null; // this payload include returnCode
-
- public static AckMessage NOACK = new AckMessage(SwapErrorCode.SUCCESS);
-
- public AckMessage() {
-
- }
-
- private AckMessage(SwapErrorCode errorcode) {
- this.msgID = 0;
- this.returnCode = errorcode.getErrorNumber();
- }
-
- public int getMsgID() {
- return msgID;
- }
-
- public int getPayloadLength() {
- return payloadLength;
- }
-
- public int getReturnCode() {
- return returnCode;
- }
-
- public byte[] getPayload() {
- return payload;
- }
-
- public boolean isSuccess() {
- if (returnCode == SwapErrorCode.SUCCESS.getErrorNumber()) {
- return true;
- } else {
- return false;
- }
- }
-
- public boolean isCorrectID(int msgid) {
- if (this.msgID == msgid) {
- return true;
- } else {
- return false;
- }
- }
-
- public void parseAck(byte[] message) {
- int index = 0;
- this.msgID = ByteUtil.toInt(message, index);
- index += INT_SIZE;
- this.payloadLength = ByteUtil.toInt(message, index);
- index += INT_SIZE;
- if (message.length > index) {
- this.payload = Arrays.copyOfRange(message, index, message.length);
-
- // the first value of payload is usually return code
- this.returnCode = ByteUtil.toInt(this.payload, 0);
- }
- }
-}
import static org.tizen.dynamicanalyzer.common.AnalyzerConstants.MSG_START_ACK;
import static org.tizen.dynamicanalyzer.common.AnalyzerConstants.MSG_STOP_ACK;
import static org.tizen.dynamicanalyzer.common.AnalyzerConstants.MSG_TARGET_INFO_ACK;
-import static org.tizen.dynamicanalyzer.common.AnalyzerConstants.MSG_GET_PROCESS_ADD_INFO_ACK;
import static org.tizen.dynamicanalyzer.constant.CommonConstants.INT_SIZE;
import static org.tizen.dynamicanalyzer.constant.CommonConstants.LONG_SIZE;
import org.tizen.dynamicanalyzer.common.AnalyzerManager;
import org.tizen.dynamicanalyzer.common.AnalyzerShellCommands;
import org.tizen.dynamicanalyzer.common.ElfSymbolExtractor;
+import org.tizen.dynamicanalyzer.common.ErrorCode;
import org.tizen.dynamicanalyzer.common.Global;
import org.tizen.dynamicanalyzer.common.HostResult;
import org.tizen.dynamicanalyzer.common.path.PathManager;
import org.tizen.dynamicanalyzer.model.AddrSymbolPair;
import org.tizen.dynamicanalyzer.model.DeviceInfo;
import org.tizen.dynamicanalyzer.nl.ConfigureLabels;
-import org.tizen.dynamicanalyzer.nl.UserErrorWarningLabels;
import org.tizen.dynamicanalyzer.project.AppInfo;
import org.tizen.dynamicanalyzer.project.BinaryInfo;
import org.tizen.dynamicanalyzer.project.DeviceStatusInfo;
UserSpaceInst userSpaceInst = getUserSpaceInst();
Logger.performance("TEST", "Start Trace", "Set application inst");
- if (userSpaceInst == null || userSpaceInst.getAppInstList().isEmpty()) {
- StartProcessManager.getInstance().setValue(100); // set progress bar to 100%
+ if (userSpaceInst == null) {
Logger.error("cannot get user space inst");
return HostResult.ERR_MSG_START_FAIL;
}
}
}
+ // data receive thread create and start
+ Thread dataThread = new Thread(null, new DataChannelThread(),
+ AnalyzerConstants.COMMUNICATOR_RECEIVE_THREAD);
// start message send
- AckMessage result = handleControlMessage(curDev, ret);
+ HostResult result = handleControlMessage(curDev, ret);
Logger.performance("TEST", "Start Trace", "Make and Send start message");
// FIX
StartProcessManager.getInstance().setValue(100);
}
- if (result != null && result.isCorrectID(MSG_START_ACK) && result.isSuccess()) {
- byte[] payload = result.getPayload();
- int index = INT_SIZE; // return code
- int sec = ByteUtil.toInt(payload, index);
- index += INT_SIZE;
- int nano = ByteUtil.toInt(payload, index);
- index += INT_SIZE;
-
- Global.getProject().setProfilingStartTime(new DATime(sec, nano));
-
- // data receive thread create and start
- Thread dataThread = new Thread(null, new DataChannelThread(),
- AnalyzerConstants.COMMUNICATOR_RECEIVE_THREAD);
- dataThread.start();
- Logger.performance("TEST", "Start Trace", "Start data receiving thread");
-
- ToolbarArea.getInstance().startTimer();
- Logger.performance("TEST", "Start Trace", "Start Timer");
- SWAPLogParser.startLogParser();
- Logger.performance("TEST", "Start Trace", "Start SWAP log parser thread");
-
- // start registered data manager thread
- DataManagerRegistry.startThreads();
- Logger.performance("TEST", "Start Trace", "Start DataManager threads");
-
- /* Timeline */
- UpdateViewTimer.start();
- Logger.performance("TEST", "Start Trace", "Start Update view timer");
-
- Logger.debug("Start recorder, timer, log parser, file, thread, ui, profile , update timer");
- return HostResult.SUCCESS;
+ if (result.isSuccess()) {
+ if (!isCorrectAck(MSG_START_ACK, result)) {
+ HostResult failResult = HostResult.ERR_MSG_START_FAIL;
+ failResult.setMessage(ErrorCode.getError(getReturnId(result.getRet())).toString());
+ DACommunicator.setRunning(false);
+ dataThread = null;
+ return failResult;
+ } else { // right ack for start
+ byte[] data = result.getRet();
+ int index = 0;
+ index += INT_SIZE; // message id
+ index += INT_SIZE; // payload length
+ index += INT_SIZE; // return id
+ int sec = ByteUtil.toInt(data, index);
+ index += INT_SIZE;
+ int nano = ByteUtil.toInt(data, index);
+
+ Global.getProject().setProfilingStartTime(new DATime(sec, nano));
+ }
} else {
DACommunicator.setRunning(false);
- return HostResult.ERR_MSG_START_FAIL;
+ dataThread = null;
+ return result;
}
+
+ dataThread.start();
+ Logger.performance("TEST", "Start Trace", "Start data receiving thread");
+
+ // success start trace!!
+ byte[] payload = getMessagePayload(result.getRet());
+ DATime profilingStartTime = new DATime();
+ int index = 0;
+ int sec = ByteUtil.toInt(payload, index);
+ index += INT_SIZE;
+ int nano = ByteUtil.toInt(payload, index);
+ index += INT_SIZE;
+ profilingStartTime.setSec(sec);
+ profilingStartTime.setNano(nano);
+
+ ToolbarArea.getInstance().startTimer();
+ Logger.performance("TEST", "Start Trace", "Start Timer");
+ SWAPLogParser.startLogParser();
+ Logger.performance("TEST", "Start Trace", "Start SWAP log parser thread");
+ // start registered data manager thread
+ DataManagerRegistry.startThreads();
+ Logger.performance("TEST", "Start Trace", "Start DataManager threads");
+
+ /* Timeline */
+ UpdateViewTimer.start();
+ Logger.performance("TEST", "Start Trace", "Start Update view timer");
+ Logger.debug("Start recorder, timer, log parser, file, thread, ui, profile , update timer");
+ return result;
}
private UserSpaceInst getUserSpaceInst() {
for (int i = 0; i < size; i++) {
AddrSymbolPair addrSymbol = symbols.get(i);
String symbol = addrSymbol.getSymbol();
-
- if (FunctionInst.isInBlacklist(symbol)) {
+ // FIXME: black list hard coded.
+ if (symbol.contains("__i686.get_pc_thunk")) {
continue;
}
int length = preMsg.length;
byte[] msg = ByteUtil.getByte(msgBinInfo, length, preMsg);
- AckMessage result = handleControlMessage(curDevice, msg);
-
- if (result != null && result.isCorrectID(MSG_BINARY_INFO_ACK)) {
- if (result.isSuccess()
- || (result.getReturnCode() == SwapErrorCode.ERR_WRONG_MESSAGE_DATA
- .getErrorNumber() && result.getPayloadLength() > INT_SIZE)) {
+ HostResult result = handleControlMessage(curDevice, msg);
- // parse binary info
- List<BinaryInfo> bininfos = new ArrayList<BinaryInfo>();
- parseBinaryInfo(result.getPayload(), paths, bininfos);
- return HostResult.SUCCESS;
- }
+ if (!result.isSuccess() || !isCorrectAck(MSG_BINARY_INFO_ACK, result)) {
+ return HostResult.ERR_BIN_INFO_GET_FAIL;
}
- return HostResult.ERR_BIN_INFO_GET_FAIL;
+ // parse binary info
+ byte[] payload = getMessagePayload(result.getRet());
+ List<BinaryInfo> bininfos = new ArrayList<BinaryInfo>();
+
+ parseBinaryInfo(payload, paths, bininfos);
+
+ return result;
}
private String getFileName(String fullPath) {
}
private HostResult pullTheFile(String from, String to) {
- boolean becomeSuper = false;
try {
- becomeSuper = Global.getCurrentDeviceInfo().getIDevice().becomeSuperUser(true);
+ Global.getCurrentDeviceInfo().getIDevice().becomeSuperUser(true);
} catch (TimeoutException e) {
e.printStackTrace();
} catch (SdbCommandRejectedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
- } finally {
- if (!becomeSuper) {
- return HostResult.ERR_BY_SECURITY_REASON;
- }
}
SyncResult res = CommunicatorUtils.pull(from, to);
.getSelectedFeatureValue(ConfigureLabels.FEATURE_DETAIL_VALUE_FUNCTION_PROFILING_SAMPLING_RATE);
if (samplingPeriod < 0) {
samplingPeriod = target.getAvailableFeature(
- ConfigureLabels.FEATURE_DETAIL_VALUE_FUNCTION_PROFILING_SAMPLING_RATE)
- .getDefaultValue();
+ ConfigureLabels.FEATURE_DETAIL_VALUE_FUNCTION_PROFILING_SAMPLING_RATE).getDefaultValue();
}
rt.setSystemTracePeriod(systemPeriod);
rt.setSamplingPeriod(samplingPeriod);
int length = rtByte.length;
byte[] msg = ByteUtil.getByte(config, length, rtByte);
- AckMessage result = handleControlMessage(devInfo, msg);
+ // ByteUtils.printByteArrayForStart(msg);
- if (result != null && result.isCorrectID(MSG_CONFIG_ACK) && result.isSuccess()) {
- if (AnalyzerManager.isRunning()) {
- rt.setApplyTime(ToolbarArea.getInstance().getTime());
- Global.getProject().addConfigHistory(rt);
- } else {
- rt.setApplyTime(0); // set time of configuration to zero
- }
+ HostResult result = handleControlMessage(devInfo, msg);
- Global.setCurrentConfiguration(rt);
- return HostResult.SUCCESS;
- } else {
- Display.getDefault().asyncExec(new Runnable() {
- @Override
- public void run() {
- final Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
- DADialog dialog = new DADialog(shell, SWT.NONE, 550, 153);
- dialog.setIcon(ImageResources.DIALOG_WARNING_ICON);
- dialog.setMessage("Configuration failed..");
- dialog.open();
+ if (result.isSuccess()) {
+ if (isCorrectAck(MSG_CONFIG_ACK, result)) {
+ if (AnalyzerManager.isRunning()) {
+ rt.setApplyTime(ToolbarArea.getInstance().getTime());
+ Global.getProject().addConfigHistory(rt);
+ } else {
+ rt.setApplyTime(0); // set time of configuration to zero
}
- });
- return HostResult.ERR_MSG_RUNTIME_FAIL;
+
+ Global.setCurrentConfiguration(rt);
+ return result;
+ }
}
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ final Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
+ DADialog dialog = new DADialog(shell, SWT.NONE, 550, 153);
+ dialog.setIcon(ImageResources.DIALOG_WARNING_ICON);
+ dialog.setMessage("Configuration failed..");
+ dialog.open();
+ }
+ });
+ return HostResult.ERR_MSG_RUNTIME_FAIL;
}
@Override
byte[] stop = ByteUtil.toBytes(AnalyzerConstants.MSG_STOP_SWAP);
int length = 0;
byte[] stopMsg = ByteUtil.getByte(stop, length);
- AckMessage result = handleControlMessage(stopMsg);
+ HostResult result = handleControlMessage(stopMsg);
- if (result != null && result.isCorrectID(MSG_STOP_ACK) && result.isSuccess()) {
- return HostResult.SUCCESS;
+ if (result.isSuccess()) {
+ if (isCorrectAck(MSG_STOP_ACK, result)) {
+ return result;
+ }
}
}
-
return HostResult.ERR_MSG_STOP_FAIL;
}
}
}
- public AckMessage handleControlMessage(byte[] message) {
+ public HostResult handleControlMessage(byte[] message) {
DeviceInfo curDev = Global.getCurrentDeviceInfo();
if (curDev != null) {
return handleControlMessage(curDev, message);
} else {
- return null;
+ return HostResult.ERR_DEVICE_IS_NULL;
}
}
- public AckMessage handleControlMessage(DeviceInfo device, byte[] message) {
+ public HostResult handleControlMessage(DeviceInfo device, byte[] message) {
if (device != null) {
return handleControlMessage(device, message, true,
AnalyzerConstants.CONTROL_SOCKET_TIMEOUT);
} else {
- return null;
+ return HostResult.ERR_DEVICE_IS_NULL;
}
}
* when wait for ack message, time limit of waiting by millisec
* @return HostResult
*/
- public AckMessage handleControlMessage(DeviceInfo device, byte[] message, boolean waitack,
+ public HostResult handleControlMessage(DeviceInfo device, byte[] message, boolean waitack,
int timeout) {
- AckMessage retack = null;
+ HostResult result = null;
Socket controlSock = device.getControlSock();
try {
synchronized (controlSock) {
controlSock.getOutputStream().write(message);
if (!waitack) {
- return AckMessage.NOACK;
+ return HostResult.SUCCESS;
}
Logger.debug("wait for ack of message [" + ByteUtil.toInt(message) + "]");
if (readsize > 0) {
byte[] buf = new byte[readsize];
System.arraycopy(cbuf, 0, buf, 0, readsize);
+ result = HostResult.SUCCESS;
int ackId = ByteUtil.toInt(buf);
// for debug
- Logger.debug("ack id : " + AnalyzerUtil.toHexdecimal(ackId));
+ System.out.print("ack id : ");
+ AnalyzerUtil.printHexdecimal(ackId);
+ Logger.debug();
- retack = new AckMessage();
- retack.parseAck(buf);
+ result.setRet(buf);
} else {
- Logger.warning("Read size for ack message is zero");
+ result = HostResult.ERR_RECEIVE_ACK_FAIL;
+ result.setMessage(result.getMessage());
}
} else {
- Logger.warning("Control socket connection is closed");
+ result = HostResult.ERR_CONTROL_SOCKET_CONNECTION_CLOSED;
+ result.setMessage("Control socket connection is closed");
}
} catch (SocketException e) {
+ result = HostResult.ERR_EXCEPTION_OCCURRED;
+ result.setMessage(e.getMessage());
e.printStackTrace();
} catch (SocketTimeoutException e) {
+ result = HostResult.ERR_EXCEPTION_OCCURRED;
+ result.setMessage(e.getMessage());
e.printStackTrace();
} catch (IOException e) {
+ result = HostResult.ERR_EXCEPTION_OCCURRED;
+ result.setMessage(e.getMessage());
e.printStackTrace();
} finally {
blocked = false;
}
-
- return retack;
+ return result;
}
private HostResult createControlSocket(DeviceInfo device) {
public HostResult getTargetInfo(DeviceInfo device) {
Logger.debug("Send target info...");
- AckMessage result = handleControlMessage(device,
+ HostResult result = handleControlMessage(device,
ByteUtil.getByte(AnalyzerConstants.MSG_TARGET_INFO, 0));
- if (result != null && result.isCorrectID(MSG_TARGET_INFO_ACK)) {
- if (result.isSuccess()) {
- processTargetInfo(result.getPayload(), INT_SIZE, device.getDeviceStatusInfo());
- return HostResult.SUCCESS;
+ if (result.isSuccess()) {
+ // FIXME : log parsing
+ byte[] data = result.getRet();
+ int index = INT_SIZE * 3;
+
+ if (isCorrectAck(MSG_TARGET_INFO_ACK, result)) {
+ processTargetInfo(data, index, device.getDeviceStatusInfo());
+ return result;
}
}
-
return HostResult.ERR_TARGET_INFO_GET_FAIL;
}
@Override
public HostResult sendKeepAliveMessage(DeviceInfo device) {
Logger.debug("Send keep alive message...");
- AckMessage result = handleControlMessage(device,
+ HostResult result = handleControlMessage(device,
ByteUtil.getByte(AnalyzerConstants.MSG_KEEP_ALIVE, 0));
- if (result != null && result.isCorrectID(MSG_KEEP_ALIVE_ACK) && result.isSuccess()) {
- return HostResult.SUCCESS;
- } else {
- return HostResult.ERR_KEEP_ALIVE;
+ if (result.isSuccess()) {
+ Logger.debug("keep alive message ack :" + result.getMessage());
+
+ if (isCorrectAck(MSG_KEEP_ALIVE_ACK, result)) {
+ return result;
+ }
}
+ return HostResult.ERR_KEEP_ALIVE;
+ }
+
+ private boolean isCorrectAck(int ackType, HostResult result) {
+ byte[] data = result.getRet();
+ int index = 0;
+ int msgId = ByteUtil.toInt(data, index);
+ index += INT_SIZE;
+ int paylen = ByteUtil.toInt(data, index);
+ index += INT_SIZE;
+ int retId = ByteUtil.toInt(data, index);
+ index += INT_SIZE;
+
+ if (ackType == msgId) {
+ if (paylen != INT_SIZE || retId == ErrorCode.SUCCESS.getErrorNumber()) {
+ return true;
+ }
+ }
+ return false;
}
@Override
Global.getCurrentDeviceInfo().releaseDataSock();
}
+ private int getReturnId(byte[] data) {
+ int index = INT_SIZE * 2;
+ return ByteUtil.toInt(data, index);
+ }
+
+ private byte[] getMessagePayload(byte[] data) {
+ int index = INT_SIZE;
+ int size = ByteUtil.toInt(data, index);
+ index += INT_SIZE * 2;
+ size -= INT_SIZE;
+ byte[] payload = new byte[size];
+ System.arraycopy(data, index, payload, 0, size);
+ return payload;
+ }
+
private byte[] getFunctionArgs(String symbol) {
int start = symbol.indexOf(CommonConstants.OPEN_BRACKET);
int end = symbol.indexOf(CommonConstants.CLOSE_BRACKET);
public HostResult sendScreenShotRequest() {
byte[] msg = ByteUtil.getByte(AnalyzerConstants.MSG_GET_SCREENSHOT, 0);
- AckMessage result = handleControlMessage(Global.getCurrentDeviceInfo(), msg, false, 0);
- if (result != null && result.isSuccess()) {
- return HostResult.SUCCESS;
- } else {
- return HostResult.ERR_MSG_SEND_FAIL;
- }
+ return handleControlMessage(Global.getCurrentDeviceInfo(), msg, false, 0);
}
public HostResult sendSWAPMessage(int messageId, List<BinarySettingData> settings) {
FunctionInst functionInst = new FunctionInst();
AddrSymbolPair addrSymbol = symbols.get(i);
String symbol = addrSymbol.getSymbol();
-
- if (FunctionInst.isInBlacklist(symbol)) {
+ // FIXME: black list hard coded.
+ if (symbol.contains("__i686.get_pc_thunk")) {
exSize++;
continue;
}
-
functionInst.setAddr(addrSymbol.getAddr());
functionInst.setArgs(getFunctionArgs(addrSymbol.getSymbol()));
functionInstList.add(functionInst);
+
+ // for debug
+ // System.out.print("LIB : addr ");
+ // AnalyzerUtil.printHexdecimal(addrSymbol.getAddr());
+ // System.out.print(" symbol " + addrSymbol.getSymbol()
+ // + " args ");
+ // ByteUtils.printByteArray(functionInst.getArgs());
+ // System.out.println();
}
size = size - exSize;
libInst = ByteUtil.getByte(libInst, binaryPath, size);
msg = ByteUtil.getByte(msg, length, libInst);
// ByteUtils.printByteArrayForStart(msg);
- AckMessage result = handleControlMessage(curDev, msg);
+ HostResult result = handleControlMessage(curDev, msg);
int ackMsg = AnalyzerConstants.MSG_SWAP_INST_ADD_ACK;
if (messageId == AnalyzerConstants.MSG_SWAP_INST_REMOVE) {
ackMsg = AnalyzerConstants.MSG_SWAP_INST_REMOVE_ACK;
}
-
- if (result != null && result.isCorrectID(ackMsg) && result.isSuccess()) {
- return HostResult.SUCCESS;
- } else {
+ if (!result.isSuccess() || !isCorrectAck(ackMsg, result)) {
return HostResult.ERR_BIN_INFO_GET_FAIL;
}
+
+ return HostResult.SUCCESS;
}
public Map<Integer, String> sendProcessAddInfoMessage(List<Integer> pids) {
int length = sendbin.length;
byte[] msg = ByteUtil.getByte(AnalyzerConstants.MSG_GET_PROCESS_ADD_INFO, length,
sendbin);
- AckMessage result = handleControlMessage(curDev, msg, true,
+ HostResult result = handleControlMessage(curDev, msg, true,
AnalyzerConstants.PROC_ADD_INFO_TIMEOUT);
- if (result != null && result.isCorrectID(MSG_GET_PROCESS_ADD_INFO_ACK)) {
- if (result.isSuccess() || result.getPayloadLength() > INT_SIZE) {
- // parse binary info
- byte[] payload = result.getPayload();
- int index = INT_SIZE;
+ if (result.isSuccess()
+ && isCorrectAck(AnalyzerConstants.MSG_GET_PROCESS_ADD_INFO_ACK, result)) {
+ // parse binary info
+ byte[] payload = getMessagePayload(result.getRet());
+ int index = 0;
- int count = ByteUtil.toInt(payload, index);
- index += INT_SIZE;
+ int count = ByteUtil.toInt(payload, index);
+ index += INT_SIZE;
- if (count > 0) {
- infoMap = new HashMap<Integer, String>();
+ if (count > 0) {
+ infoMap = new HashMap<Integer, String>();
- for (int i = 0; i < count; i++) {
- int pid = ByteUtil.toInt(payload, index);
- index += INT_SIZE;
- String cmdname = ByteUtil.getString(payload, index);
- index += ByteUtil.getStringLength(payload, index);
+ for (int i = 0; i < count; i++) {
+ int pid = ByteUtil.toInt(payload, index);
+ index += INT_SIZE;
+ String cmdname = ByteUtil.getString(payload, index);
+ index += ByteUtil.getStringLength(payload, index);
- infoMap.put(Integer.valueOf(pid), cmdname);
- }
+ infoMap.put(Integer.valueOf(pid), cmdname);
}
}
}
int length = sendBin.length;
byte[] msg = ByteUtil.getByte(AnalyzerConstants.MSG_BINARY_INFO, length, sendBin);
- AckMessage result = handleControlMessage(msg);
-
- if (result != null && result.isCorrectID(MSG_BINARY_INFO_ACK)) {
- if (result.isSuccess()
- || (result.getReturnCode() == SwapErrorCode.ERR_WRONG_MESSAGE_DATA
- .getErrorNumber() && result.getPayloadLength() > INT_SIZE)) {
+ HostResult result = handleControlMessage(msg);
- // parse binary info
- List<BinaryInfo> bininfos = new ArrayList<BinaryInfo>();
- parseBinaryInfo(result.getPayload(), binPaths, bininfos);
- return HostResult.SUCCESS;
- }
+ if (!result.isSuccess() || !isCorrectAck(MSG_BINARY_INFO_ACK, result)) {
+ return HostResult.ERR_BIN_INFO_GET_FAIL;
}
- return HostResult.ERR_BIN_INFO_GET_FAIL;
+ // parse binary info
+ byte[] payload = getMessagePayload(result.getRet());
+ List<BinaryInfo> bininfos = new ArrayList<BinaryInfo>();
+
+ parseBinaryInfo(payload, binPaths, bininfos);
+
+ return result;
}
private void parseBinaryInfo(byte[] payload, List<String> targetPaths,
List<BinaryInfo> outBinaries) {
HostResult result;
- int index = INT_SIZE;
+ int index = 0;
DeviceInfo curDevice = Global.getCurrentDeviceInfo();
result = pullTheFile(targetPath, localBinaryPath);
if (result.isSuccess()) {
binInfo.setTempBinaryPath(localBinaryPath);
- } else if (result.equals(HostResult.ERR_BY_SECURITY_REASON)) {
- // popup by security reason
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- final Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
- DADialog dialog = new DADialog(shell, SWT.NONE, 480, 153);
- dialog.setIcon(ImageResources.DIALOG_ERROR_ICON);
- dialog.setMessage(UserErrorWarningLabels.ERROR_BY_SECURITY_REASON);
- dialog.open();
- }
- });
-
- return;
}
} else {
// if local binary exist already, then check for md5sum
result = pullTheFile(targetPath, localBinaryPath);
if (result.isSuccess()) {
binInfo.setTempBinaryPath(localBinaryPath);
- } else if (result.equals(HostResult.ERR_BY_SECURITY_REASON)) {
- // popup by security reason
- Display.getDefault().syncExec(new Runnable() {
- @Override
- public void run() {
- final Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
- DADialog dialog = new DADialog(shell, SWT.NONE, 480, 153);
- dialog.setIcon(ImageResources.DIALOG_ERROR_ICON);
- dialog.setMessage(UserErrorWarningLabels.ERROR_BY_SECURITY_REASON);
- dialog.open();
- }
- });
-
- return;
}
} else {
binInfo.setTempBinaryPath(localBinaryPath);
} else if (CommonUtil.isMac()) {
cmd = AnalyzerShellCommands.CMD_MAC_MD_5_SUM;
} else if (CommonUtil.isWin()) {
- cmd = PathManager.DA_TOOL_FOLDER_PATH + File.separator
- + AnalyzerShellCommands.CMD_WIN_MD_5_SUM;
+ cmd = PathManager.DA_TOOL_FOLDER_PATH + File.separator + AnalyzerShellCommands.CMD_WIN_MD_5_SUM;
} else { // should never be here
Logger.error("Unknown host OS!\n");
}
import org.tizen.dynamicanalyzer.swap.model.data.LogData;
import org.tizen.dynamicanalyzer.swap.model.data.LogDataFactory;
import org.tizen.dynamicanalyzer.swap.model.data.LogDataUtils;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager;
import org.tizen.dynamicanalyzer.ui.toolbar.StartProcessManager;
import org.tizen.dynamicanalyzer.ui.toolbar.StopLogProcessor;
import org.tizen.dynamicanalyzer.ui.toolbar.StopProcessManager;
import org.tizen.dynamicanalyzer.util.CommonUtil;
import org.tizen.dynamicanalyzer.util.Logger;
import org.tizen.dynamicanalyzer.util.UnsignedInt;
+import org.tizen.dynamicanalyzer.util.WorkbenchUtil;
import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
public class MessageParser {
static final int MSG_BUFFER_MAX = 5000;
static final int MSG_BUFFER_TIMER_DELAY = 5;
static final int MSG_BUFFER_TIMER_PERIOD = 1000; // 1 second
- static final int WAITING_TIME = 10;
+ static final int WAITING_TIME = 100;
public static final int MSG_HEADER_SIZE = 20;
final int MSG_PAYLOAD_SIZE_INDEX = 16;
AnalyzerManager.setProcessInfoArrived(true);
- ThreadDataManager.getInstance().getThreadDataMaker().createMainThreadItem(pid);
+ ThreadChartManager.getInstance().getThreadDataManager().createMainThreadItem(pid);
}
private void memoryMapChanged(byte[] data) {
LibraryObject obj = null;
ProcessMemoryMap pmap = process.getProcessMemoryMap(time);
if (pmap == null || (obj = pmap.getLibraryByAddress(pcAddr)) == null) {
- Logger.error("cannot find library for the pid and address : " + pid + ", " + pcAddr);
binaryId = -1;
} else {
binaryId = obj.getBinaryID();
* - S-Core Co., Ltd
*
*/
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui;
import java.util.HashMap;
*
*/
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui;
import org.eclipse.nebula.widgets.grid.GridItem;
import org.tizen.dynamicanalyzer.ui.widgets.table.DATableCellRenderer;
* - S-Core Co., Ltd
*
*/
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui;
import org.eclipse.nebula.widgets.grid.GridItem;
import org.eclipse.swt.graphics.Font;
--- /dev/null
+/*
+ * Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * Jaewon Lim <jaewon81.lim@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.swap.platform.ui.DeviceExplorer;
+
+import org.eclipse.nebula.widgets.grid.GridItem;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.sdblib.service.FileEntry;
+import org.tizen.sdblib.service.FileEntryType;
+
+public class DADeviceExplorer extends DeviceExplorer {
+ public DADeviceExplorer(Composite parent) {
+ super(parent);
+ }
+
+ @Override
+ public void updateData() {
+ if (null == current) {
+ if (null == root) {
+ Logger.debug("Root is empty");
+ return;
+ }
+ current = root;
+ }
+ table.removeAll();
+ inputText.setText(current.getFullPath());
+
+ if (!current.getFullPath().equals(root.getFullPath())) {
+ GridItem parentItem = new GridItem(table, SWT.NONE);
+ parentItem.setText(ExplorerUtil.PARENT_STR);
+ parentItem.setData(ExplorerUtil.DATA_FIEL_KEY, current.getParent());
+ }
+ FileEntry[] children = current.getChildren();
+ int selectionIndex = -1;
+
+ if (null != children) {
+ int size = children.length;
+ // dirs
+ for (int i = 0; i < size; i++) {
+ FileEntry child = children[i];
+ if (!child.isDirectory()
+ || child.getType() == FileEntryType.DirectoryLink) {
+ continue;
+ }
+
+ GridItem item = new GridItem(table, SWT.NONE);
+ item.setText(child.getName());
+ item.setData(ExplorerUtil.DATA_FIEL_KEY, child);
+ if (null != selectionStr
+ && selectionStr.equals(child.getFullPath())) {
+ int index = table.indexOf(item);
+ // table.getVerticalBar().setSelection(index);
+ table.setSelection(index);
+ selected = child;
+ inputText.setText(child.getFullPath());
+ selectionIndex = index;
+ }
+ }
+
+ // files
+ for (int i = 0; i < size; i++) {
+ FileEntry child = children[i];
+ if (child.isDirectory()
+ || child.getType() == FileEntryType.Link) {
+ continue;
+ }
+
+ if (null != filter && !child.getName().contains(filter)) {
+ continue;
+ }
+ GridItem item = new GridItem(table, SWT.NONE);
+ item.setText(child.getName());
+ item.setData(ExplorerUtil.DATA_FIEL_KEY, child);
+ if (null != selectionStr
+ && selectionStr.equals(child.getFullPath())) {
+ int index = table.indexOf(item);
+ table.setSelection(index);
+ selected = child;
+ inputText.setText(child.getFullPath());
+ selectionIndex = index;
+ }
+ }
+ table.getVerticalBar().setMaximum(size);
+ table.getVerticalBar().setSelection(selectionIndex);
+ }
+ table.update();
+ }
+
+}
*
*/
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.widgets.Composite;
import org.tizen.dynamicanalyzer.constant.CommonConstants;
import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil;
+import org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer.DAFileExplorerEmptyCellRenderer;
+import org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer.DAFileExplorerTableRenderer;
import org.tizen.dynamicanalyzer.ui.widgets.DAGrid;
import org.tizen.dynamicanalyzer.ui.widgets.table.DATableHeaderRenderer;
import org.tizen.dynamicanalyzer.util.Logger;
protected static int FILE = 1;
protected static int DIRECTORY = 2;
- private static int PERMISSION_STR_LENGTH = 10;
- private static int PERMISSION_FILTER_LENGTH = 3;
-
protected Grid table = null;
protected DAText inputText = null;
protected DACustomButton goButton = null;
protected IDevice device = null;
protected FileEntry root = null;
- protected FileEntry currentDir = null;
+ protected FileEntry current = null;
protected FileEntry selected = null;
- protected String nameFilter = null;
- protected String permissionFilterStr = null;
- private int permissionFilter = 0; // all permission is allowed
+ protected String filter = null;
protected String selectionStr = null;
public void widgetSelected(SelectionEvent e) {
GridItem[] selections = table.getSelection();
GridItem selection = selections[0];
- FileEntry file = (FileEntry) selection.getData(ExplorerUtil.DATA_FIEL_KEY);
-
+ FileEntry file = (FileEntry) selection
+ .getData(ExplorerUtil.DATA_FIEL_KEY);
Logger.debug("Selected : " + file.getFullPath());
selected = file;
-
- // inputText.setText(selected.getFullPath());
+ inputText.setText(selected.getFullPath());
inputText.setBackground(ColorResources.WHITE);
- inputText.getControl().setSelection(inputText.getText().length());
+
+ int length = inputText.getText().length();
+ inputText.getControl().setSelection(length, length);
}
@Override
@Override
public void mouseUp(MouseEvent e) {
+ // TODO Auto-generated method stub
}
@Override
public void mouseDown(MouseEvent e) {
+ // TODO Auto-generated method stub
}
@Override
public void mouseDoubleClick(MouseEvent e) {
if (selected.isDirectory() || selected.isRoot()) {
- currentDir = selected;
+ current = selected;
updateData();
}
}
@Override
public void keyReleased(KeyEvent e) {
- if (e.keyCode == 13) { // press enter
+ if (e.keyCode == 13) {
adjustInput();
- inputText.getControl().setSelection(inputText.getText().length());
+ inputText.getControl().setSelection(
+ inputText.getText().length());
} else {
}
@Override
public void focusLost(FocusEvent e) {
+ // TODO Auto-generated method stub
}
@Override
public void focusGained(FocusEvent e) {
- // remove selection
GridItem[] selections = new GridItem[0];
table.setSelection(selections);
}
};
- public DeviceExplorer(Composite parent, boolean multiSelection) {
+ public DeviceExplorer(Composite parent) {
super(parent, SWT.NONE);
this.setLayout(new FormLayout());
this.setBackground(ColorResources.DIALOG_BG_UPPER);
goButton.setText("Go");
goButton.addClickListener(goButtonClickListener);
- int style = SWT.BORDER | SWT.V_SCROLL;
- if (multiSelection) {
- style |= SWT.MULTI;
- } else {
- style |= SWT.SINGLE;
- }
-
- table = new DAGrid(this, style);
+ table = new DAGrid(this, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
table.setBackground(ColorResources.TABLE_CONTENTS_NORMAL);
table.setForeground(ColorResources.TABLE_CONTENTS_FONT_COLOR);
setColumns();
table.setEmptyCellRenderer(new DAFileExplorerEmptyCellRenderer());
- table.setItemHeight(32);
+ table.setItemHeight(46);
data = new FormData();
data.top = new FormAttachment(inputText.getControl(), 7);
table.addMouseListener(tableMouseListener);
}
- private void setColumns() {
+ public void setColumns() {
GridColumn fileColumn = new GridColumn(table, SWT.NONE);
- fileColumn.setCellRenderer(new DeviceExplorerTableRenderer());
+ fileColumn.setCellRenderer(new DAFileExplorerTableRenderer());
fileColumn.setHeaderRenderer(new DATableHeaderRenderer());
fileColumn.setText("File");
fileColumn.setWidth(450);
}
public void updateData() {
- if (null == currentDir) {
+ if (null == current) {
if (null == root) {
Logger.debug("Root is empty");
return;
}
- currentDir = root;
+ current = root;
}
table.removeAll();
- inputText.setText(currentDir.getFullPath());
+ inputText.setText(current.getFullPath());
- if (!currentDir.getFullPath().equals(root.getFullPath())) {
+ if (!current.getFullPath().equals(root.getFullPath())) {
GridItem parentItem = new GridItem(table, SWT.NONE);
parentItem.setText(ExplorerUtil.PARENT_STR);
- parentItem.setData(ExplorerUtil.DATA_FIEL_KEY, currentDir.getParent());
+ parentItem.setData(ExplorerUtil.DATA_FIEL_KEY, current.getParent());
}
- FileEntry[] children = currentDir.getChildren();
+ FileEntry[] children = current.getChildren();
int selectionIndex = -1;
if (null != children) {
// dirs
for (int i = 0; i < size; i++) {
FileEntry child = children[i];
- if (!child.isDirectory() || child.getType() == FileEntryType.DirectoryLink) {
+ if (!child.isDirectory()) {
continue;
}
GridItem item = new GridItem(table, SWT.NONE);
item.setText(child.getName());
item.setData(ExplorerUtil.DATA_FIEL_KEY, child);
- if (null != selectionStr && selectionStr.equals(child.getFullPath())) {
+ if (null != selectionStr
+ && selectionStr.equals(child.getFullPath())) {
int index = table.indexOf(item);
+ // table.getVerticalBar().setSelection(index);
table.setSelection(index);
selected = child;
inputText.setText(child.getFullPath());
// files
for (int i = 0; i < size; i++) {
FileEntry child = children[i];
- if (child.isDirectory() || child.getType() == FileEntryType.Link) {
+ if (child.isDirectory()) {
continue;
}
- if (null != nameFilter && !child.getName().contains(nameFilter)) {
+ if (null != filter && !child.getName().contains(filter)) {
continue;
}
-
- if (permissionFilter != 0) {
- int permission = getPermission(child.getPermissions());
- if((permission & permissionFilter) != permissionFilter) {
- continue;
- }
- }
-
GridItem item = new GridItem(table, SWT.NONE);
item.setText(child.getName());
item.setData(ExplorerUtil.DATA_FIEL_KEY, child);
- if (null != selectionStr && selectionStr.equals(child.getFullPath())) {
+ if (null != selectionStr
+ && selectionStr.equals(child.getFullPath())) {
int index = table.indexOf(item);
+ // table.getVerticalBar().setSelection(index);
table.setSelection(index);
selected = child;
inputText.setText(child.getFullPath());
public void setRoot(String r) {
if (null != device && null != r && !r.isEmpty()) {
FileEntry rootDir = device.getFileEntry(r);
- if (null == rootDir || (!rootDir.isDirectory() && !rootDir.isRoot())) {
+ if (null == rootDir
+ || (!rootDir.isDirectory() && !rootDir.isRoot())) {
Logger.debug("root path is invalid");
return;
} else {
}
}
- public void addTableMouseListener(MouseListener listener) {
- table.addMouseListener(listener);
+ public Grid getTable() {
+ return table;
}
public List<FileEntry> getSelection() {
continue;
}
- FileEntry entry = (FileEntry) selection.getData(ExplorerUtil.DATA_FIEL_KEY);
+ FileEntry entry = (FileEntry) selection
+ .getData(ExplorerUtil.DATA_FIEL_KEY);
fileEntries.add(entry);
}
- } else if (null != inputText.getText() && !inputText.getText().isEmpty()) {
+ } else if (null != inputText.getText()
+ && !inputText.getText().isEmpty()) {
String path = inputText.getText();
FileEntry file = device.getFileEntry(path);
if (null != file) {
Logger.debug("invalid path");
return result;
} else if (!file.isDirectory() && !file.isRoot()) {
- currentDir = file.getParent();
+ current = file.getParent();
selectionStr = file.getFullPath();
result = FILE;
} else {
- currentDir = file;
+ current = file;
selectionStr = CommonConstants.EMPTY;
result = DIRECTORY;
}
updateData();
+ return result;
}
return result;
}
private void adjustInput() {
- String errorstr = null;
-
String path = inputText.getText();
- if (null != path && !path.isEmpty()) {
- if (path.contains(root.getFullPath())) {
- if (setCurrent(path) != FAIL) {
- inputText.setBackground(ColorResources.WHITE);
- } else {
- errorstr = "Failed to set current directory";
- }
- } else {
- errorstr = "Out of root range";
- }
- } else {
- errorstr = "path must not empty";
+ if (null == path || path.isEmpty()) {
+ Logger.debug("path must not empty");
+ // inputText.setBackground(ColorResources.RED);
+ // info.setText("Empty path");
+ inputText.setText(current.getFullPath());
+ return;
}
- if (errorstr != null) {
- Logger.debug(errorstr);
+ if (!path.contains(root.getFullPath())) {
+ Logger.debug("Out of root range");
// inputText.setBackground(ColorResources.RED);
- // info.setText(errorstr);
- inputText.setText(currentDir.getFullPath());
- }
- }
-
- private int getPermission(String permissionStr) {
- int permission = 0;
- if(permissionStr != null && permissionStr.length() == PERMISSION_STR_LENGTH) {
- for (int i = 1; i < permissionStr.length(); i++) {
- permission = permission << 1;
- switch (permissionStr.charAt(i)) {
- case 'r':
- case 'w':
- case 'x':
- permission = permission | 1;
- break;
- default:
- // other letter is possible for permission string
- // but it is not necessary to parsing
- break;
- }
- }
+ // info.setText("Out of root range");
+ inputText.setText(current.getFullPath());
+ return;
}
-
- return permission;
- }
- /**
- * set filename filter to filter file entry by file name
- *
- * @param filter
- * file name filter string
- */
- public void setNameFilter(String filter) {
- this.nameFilter = filter;
+ int ret = setCurrent(path);
+ if (ret != FAIL) {
+ inputText.setBackground(ColorResources.WHITE);
+ } else {
+ // inputText.setBackground(ColorResources.RED);
+ // info.setText("Invalid path");
+ inputText.setText(current.getFullPath());
+ }
}
- /**
- * set permission filter to filter file entry by permission
- *
- * @param filter
- * permission filter string (ex. 755)
- */
- public void setPermissionFilter(String filter) {
- if (filter == null || filter.length() == PERMISSION_FILTER_LENGTH) {
- this.permissionFilterStr = filter;
-
- if (filter != null) {
- int userclass = filter.charAt(0) - '0';
- int groupclass = filter.charAt(1) - '0';
- int otherclass = filter.charAt(2) - '0';
- permissionFilter = userclass << 6 | groupclass << 3 | otherclass;
- } else {
- permissionFilter = 0;
- }
- }
+ public void setFilterString(String filter) {
+ this.filter = filter;
}
}
*
*/
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer;
import java.util.ArrayList;
import java.util.List;
import org.tizen.dynamicanalyzer.common.Global;
import org.tizen.dynamicanalyzer.nl.WidgetLabels;
import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil;
import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener;
import org.tizen.dynamicanalyzer.widgets.da.base.DAButton;
import org.tizen.dynamicanalyzer.widgets.da.base.DAMessageBox;
import org.tizen.sdblib.service.FileEntry;
-public class DeviceExplorerDialog extends DAMessageBox {
+public class DeviceExplorerDilaog extends DAMessageBox {
private DeviceExplorer explorer = null;
private DACustomButton okButton = null;
private DACustomButton cancelButton = null;
- public DeviceExplorerDialog(Shell parentShell, boolean multiSelection) {
+ public DeviceExplorerDilaog(Shell parentShell) {
super(parentShell);
shell.setLayout(new FormLayout());
shell.setSize(446, 600);
shell.setBackground(ColorResources.DIALOG_BG_UPPER);
shell.setText("Select binary");
- explorer = new DeviceExplorer(shell, multiSelection);
+ explorer = new DADeviceExplorer(shell);
FormData data = new FormData();
data.top = new FormAttachment(0, 17);
data.left = new FormAttachment(0, 6);
}
});
- explorer.addTableMouseListener(new MouseListener() {
+ explorer.getTable().addMouseListener(new MouseListener() {
@Override
public void mouseUp(MouseEvent e) {
return explorer;
}
- public void setNameFilter(String filter) {
- explorer.setNameFilter(filter);
- }
-
- public void setPermissionFilter(String filter) {
- explorer.setPermissionFilter(filter);
+ public void setFilter(String filter) {
+ explorer.setFilterString(filter);
}
}
*
*/
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui;
import java.io.File;
*
*/
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer;
import java.io.File;
import java.util.ArrayList;
import org.eclipse.swt.widgets.Composite;
import org.tizen.dynamicanalyzer.constant.CommonConstants;
import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil;
import org.tizen.dynamicanalyzer.ui.widgets.DAGrid;
import org.tizen.dynamicanalyzer.ui.widgets.table.DATableHeaderRenderer;
import org.tizen.dynamicanalyzer.util.Logger;
*
*/
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer;
import org.eclipse.nebula.widgets.grid.Grid;
import org.eclipse.swt.SWT;
* - S-Core Co., Ltd
*
*/
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer;
import java.io.File;
import org.tizen.dynamicanalyzer.resources.ColorResources;
import org.tizen.dynamicanalyzer.resources.FontResources;
import org.tizen.dynamicanalyzer.resources.ImageResources;
+import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil;
import org.tizen.dynamicanalyzer.ui.widgets.table.DATableCellRenderer;
import org.tizen.sdblib.service.FileEntry;
* - S-Core Co., Ltd
*
*/
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer;
import java.io.File;
import java.util.ArrayList;
import org.tizen.dynamicanalyzer.appearance.DesignConstants;
import org.tizen.dynamicanalyzer.nl.WidgetLabels;
import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.swap.platform.ui.ExplorerUtil;
import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener;
import org.tizen.dynamicanalyzer.widgets.da.base.DAButton;
* - S-Core Co., Ltd
*
*/
-package org.tizen.dynamicanalyzer.ui.common.explorer;
+package org.tizen.dynamicanalyzer.swap.platform.ui;
import org.eclipse.nebula.widgets.grid.Grid;
import org.eclipse.nebula.widgets.grid.GridItem;
import org.tizen.dynamicanalyzer.widgets.da.base.DAMessageBox;
import org.tizen.sdblib.service.FileEntry;
-public class FileTreeExplorerDialog extends DAMessageBox {
+public class FileExplorerDialog extends DAMessageBox {
private DAFileTreeExplorer explorerTree = null;
private DACustomButton okButton = null;
private DACustomButton cancelButton = null;
- public FileTreeExplorerDialog(Shell parentShell) {
+ public FileExplorerDialog(Shell parentShell) {
super(parentShell);
shell.setLayout(new FormLayout());
shell.setSize(500, 600);
import org.tizen.dynamicanalyzer.resources.ImageResources;
import org.tizen.dynamicanalyzer.swap.platform.BinarySettingData;
import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager;
-import org.tizen.dynamicanalyzer.ui.common.explorer.FileExplorerDialog;
+import org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer.FileExplorerDialog;
import org.tizen.dynamicanalyzer.util.CommonUtil;
import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener;
+++ /dev/null
-package org.tizen.dynamicanalyzer.ui.common.explorer;
-
-import java.io.File;
-
-import org.eclipse.nebula.widgets.grid.GridItem;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.tizen.dynamicanalyzer.resources.ColorResources;
-import org.tizen.dynamicanalyzer.resources.FontResources;
-import org.tizen.dynamicanalyzer.resources.ImageResources;
-import org.tizen.dynamicanalyzer.ui.widgets.table.DATableCellRenderer;
-import org.tizen.sdblib.service.FileEntry;
-
-public class DeviceExplorerTableRenderer extends DATableCellRenderer {
- @Override
- public void paint(GC gc, Object value) {
- textTopMargin = 8;
-
- GridItem item = (GridItem) value;
-
- gc.setFont(item.getFont(getColumn()));
-
- boolean drawAsSelected = isSelected();
-
- boolean drawBackground = true;
-
- if (isCellSelected()) {
- drawAsSelected = true;// (!isCellFocus());
- }
-
- if (drawAsSelected) {
- gc.setForeground(ColorResources.EXPLORER_SELECT_START);
- gc.setBackground(ColorResources.EXPLORER_SELECT_END);
- } else {
- if (item.getParent().isEnabled()) {
- gc.setBackground(ColorResources.EXPLORER_CELL_BG);
- } else {
- gc.setBackground(getDisplay().getSystemColor(
- SWT.COLOR_WIDGET_BACKGROUND));
- }
- }
-
- if (drawBackground && drawAsSelected) {
- gc.fillGradientRectangle(getBounds().x, getBounds().y,
- getBounds().width, getBounds().height, true);
- } else if (drawBackground) {
- gc.fillRectangle(getBounds().x, getBounds().y + 1,
- getBounds().width, getBounds().height);
- }
-
- int x = leftMargin;
-
- if (isCheck()) {
- checkRenderer.setChecked(item.getChecked(getColumn()));
- checkRenderer.setGrayed(item.getGrayed(getColumn()));
- if (!item.getParent().isEnabled()) {
- checkRenderer.setGrayed(true);
- }
- checkRenderer.setHover(getHoverDetail().equals("check")); //$NON-NLS-1$
-
- checkRenderer.setBounds(getBounds().x + x,
- (getBounds().height - checkRenderer.getBounds().height) / 2
- + getBounds().y, checkRenderer.getBounds().width,
- checkRenderer.getBounds().height);
- checkRenderer.paint(gc, null);
-
- x += checkRenderer.getBounds().width + insideMargin;
- }
-
- int width = getBounds().width - x - rightMargin;
-
- String text = item.getText(getColumn());
-
- if (getAlignment() == SWT.RIGHT) {
- int len = gc.stringExtent(text).x;
- if (len < width) {
- x += width - len;
- }
- } else if (getAlignment() == SWT.CENTER) {
- int len = gc.stringExtent(text).x;
- if (len < width) {
- x += (width - len) / 2;
- }
- }
-
- if (drawAsSelected) {
- gc.setForeground(ColorResources.BLACK);
- } else {
- Color fontColor = item.getForeground();
- if (null != fontColor) {
- gc.setForeground(item.getForeground());
- } else {
- gc.setForeground(ColorResources.BLACK);
- }
- }
-
- Image image = null;
- Object object = item.getData(ExplorerUtil.DATA_FIEL_KEY);
- if (object instanceof File) {
- File file = (File) object;
- if (file.isDirectory()) {
- image = ImageResources.FILE_TYPE_DIR;
- } else if (file.isFile()) {
- image = ImageResources.FILE_TYPE_FILE;
- } else {
- image = ImageResources.FILE_TYPE_ETC;
- }
- } else if (object instanceof FileEntry) {
- FileEntry entry = (FileEntry) object;
- switch (entry.getType()) {
- case File:
- image = ImageResources.FILE_TYPE_FILE;
- break;
- case Link:
- image = ImageResources.FILE_TYPE_FILE_LINK;
- break;
- case Directory:
- image = ImageResources.FILE_TYPE_DIR;
- break;
- case DirectoryLink:
- image = ImageResources.FILE_TYPE_DIR_LINK;
- break;
- case RootEmulator:
- image = ImageResources.FILE_TYPE_EMULATOR;
- break;
- case RootDevice:
- image = ImageResources.FILE_TYPE_DEVICE;
- break;
- default:
- image = ImageResources.FILE_TYPE_ETC;
- break;
- }
- }
-
- int imageTopMargin = 0;
- int imageLeftMargin = 16;
- int textLeftMargin = 66;
- Rectangle rect = getBounds();
- gc.drawImage(image, rect.x + imageLeftMargin, rect.y + imageTopMargin);
- gc.setFont(FontResources.getDADefaultFont());
- gc.drawText(text, rect.x + textLeftMargin, rect.y + textTopMargin, true);
-
- if (item.getParent().getLinesVisible()) {
- gc.setForeground(ColorResources.EXPLORER_CELL_LINE);
- gc.drawLine(rect.x, rect.y + rect.height,
- rect.x + rect.width - 1, rect.y
- + rect.height);
- // gc.drawLine(getBounds().x + getBounds().width - 1, getBounds().y,
- // getBounds().x + getBounds().width - 1, getBounds().y
- // + getBounds().height);
- }
-
- if (isCellFocus()) {
- Rectangle focusRect = new Rectangle(getBounds().x - 1,
- getBounds().y - 1, getBounds().width,
- getBounds().height + 1);
-
- gc.setForeground(ColorResources.RED);
- gc.drawRectangle(focusRect);
-
- if (isFocus()) {
- focusRect.x++;
- focusRect.width -= 2;
- focusRect.y++;
- focusRect.height -= 2;
-
- gc.drawRectangle(focusRect);
- }
- }
- }
-}
package org.tizen.dynamicanalyzer.ui.file;
-import java.sql.ResultSet;
-import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.tizen.dynamicanalyzer.common.DASelectionData;
import org.tizen.dynamicanalyzer.common.Global;
import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
import org.tizen.dynamicanalyzer.error.ErrorCodeManager;
import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
import org.tizen.dynamicanalyzer.model.TableInput;
import org.tizen.dynamicanalyzer.swap.model.data.FileData;
import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager;
-import org.tizen.dynamicanalyzer.ui.file.model.FileAccessor;
import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
-import org.tizen.dynamicanalyzer.ui.file.model.FileSelectedData;
import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
import org.tizen.dynamicanalyzer.ui.widgets.table.DAApiListTableComposite;
import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat;
public class FileApiListTable extends DAApiListTableComposite {
- private FileDataManager fileDataManager = FileDataManager.getInstance();
-
public FileApiListTable(Composite parent, int compStyle, int tableStyle) {
super(parent, compStyle, tableStyle);
table.addSelectionListener(new SelectionListener() {
long rangeEndTime = view.getRangeEndTime();
HashMap<String, Integer> findStartAPITableIndexHashMap = new HashMap<String, Integer>();
- HashMap<Integer, Long> findStartTimeHashMap = new HashMap<Integer, Long>();
List<Integer> removeTableIndex = new ArrayList<Integer>();
List<TableInput> input = new ArrayList<TableInput>();
- FileSelectedData selectedData = fileDataManager.getSelectedData();
- ResultSet rs = fileDataManager.getApiDB().selectAPI(
- selectedData.getFileId(),
- selectedData.getAccessorId(),
- selectedData.isParentChart());
- FileAccessor accessor = selectedData.getFileAccessor();
- boolean isParentChart = selectedData.isParentChart();
- String filePath = null;
- int pid = -1;
- int tid = -1;
- if (rs != null) {
- try {
- int i = -1;
- int index = 0;
- while (rs.next()) {
- i++;
- index++;
-
- List<String> contentText = new ArrayList<String>();
- List<String> contentData = new ArrayList<String>();
- Integer startLogIndex = 0;
+ List<FileEvent> contents = FileDataManager.getInstance().getSelectedTableAPIList();
+ if(contents == null) {
+ return null;
+ }
+ for (int i = 0; i < contents.size(); i++) {
+ FileEvent contentTemp = contents.get(i);
+ List<String> contentText = new ArrayList<String>();
+ List<String> contentData = new ArrayList<String>();
- long seq = rs.getLong(1);
- long fd = rs.getLong(2);
- int fdApiType = rs.getInt(3);
- long time = rs.getLong(4);
- int apiId = rs.getInt(5);
- long errno = rs.getLong(6);
- long fileSize = rs.getLong(7);
- long ioSize = rs.getLong(8);
- String returns = rs.getString(9);
- String args = rs.getString(10);
-
- if(isParentChart){
- filePath = rs.getString(11);
- pid = rs.getInt(12);
- tid = rs.getInt(13);
- }else{
- filePath = accessor.getFilePath();
- pid = accessor.getPid();
- tid = accessor.getTid();
- }
-
- FileEvent fileEvent = new FileEvent(seq, filePath, pid,
- tid, fd, fdApiType, apiId, time, fileSize, ioSize,
- args, returns, errno);
-
- String apiName = Global.getFunctionName(apiId);
- long startTime = 0;
-
- boolean isExistStartTimeLog = false;
- if (fdApiType == LogCenterConstants.FD_API_TYPE_READ_START
- || fdApiType == LogCenterConstants.FD_API_TYPE_WRITE_START
- || fdApiType == LogCenterConstants.FD_API_TYPE_LOCK_START) {
- String keString = apiName + pid + tid + fd;
- findStartAPITableIndexHashMap.put(keString, i);
- findStartTimeHashMap.put(i, time);
- index--;
- } else if (fdApiType == LogCenterConstants.FD_API_TYPE_READ_END
- || fdApiType == LogCenterConstants.FD_API_TYPE_WRITE_END
- || fdApiType == LogCenterConstants.FD_API_TYPE_LOCK_END) {
- String keString = apiName + pid + tid + fd;
- startLogIndex = findStartAPITableIndexHashMap.get(keString);
- findStartAPITableIndexHashMap.remove(keString);
- if (null != startLogIndex) {
- contentText.add(input.get(startLogIndex.intValue())
- .getText().get(1)); // start time
- contentData.add(input.get(startLogIndex.intValue())
- .getText().get(1));
+ Integer startLogIndex = 0;
+ int fdApiType = contentTemp.getFdApiType();
- startTime = findStartTimeHashMap.get(startLogIndex);
- String timeFormat = Formatter
- .toTimeFormat(time - startTime);
- String removeTimeFormat = timeFormat.replace(
- "00:", CommonConstants.EMPTY);//$NON-NLS-1$
+ long seq = contentTemp.getSeq();
+ contentText.add(0, Long.toString(seq));
+ contentData.add(Long.toString(seq));
+ long time = contentTemp.getTime();
- contentText.add(removeTimeFormat); // elapsed time
- contentData.add(Long.toString(time - startTime));
-
- isExistStartTimeLog = true;
- removeTableIndex.add(startLogIndex.intValue());
- } else {
- contentText.add(Formatter.toTimeFormat(time)); // start//
- contentData.add(Long.toString(time));
- contentText.add("00.000");//$NON-NLS-1$
- contentData.add("00.000");//$NON-NLS-1$
- }
- }
+ boolean isExistStartTimeLog = false;
+ if (fdApiType == LogCenterConstants.FD_API_TYPE_READ_START
+ || fdApiType == LogCenterConstants.FD_API_TYPE_WRITE_START
+ || fdApiType == LogCenterConstants.FD_API_TYPE_LOCK_START) {
+ String keString = contentTemp.getApiName()
+ + contentTemp.getPid() + contentTemp.getTid() + contentTemp.getFdValue();
+ findStartAPITableIndexHashMap.put(keString, i);
- if (!isExistStartTimeLog) {
- contentText.add(Formatter.toTimeFormat(time)); // start time
- contentData.add(Long.toString(time));
- contentText.add("00.000");//$NON-NLS-1$ //elapsed time
- contentData.add("00.000");//$NON-NLS-1$
- }
+ } else if (fdApiType == LogCenterConstants.FD_API_TYPE_READ_END
+ || fdApiType == LogCenterConstants.FD_API_TYPE_WRITE_END
+ || fdApiType == LogCenterConstants.FD_API_TYPE_LOCK_END) {
+ String keString = contentTemp.getApiName()
+ + contentTemp.getPid() + contentTemp.getTid() + contentTemp.getFdValue();
+ startLogIndex = findStartAPITableIndexHashMap.get(keString);
+ findStartAPITableIndexHashMap.remove(keString);
+ if (null != startLogIndex) {
+ contentText.add(input.get(startLogIndex.intValue())
+ .getText().get(1)); // start time
+ contentData.add(input.get(startLogIndex.intValue())
+ .getText().get(1));
- contentText.add(0, Integer.toString(index));
- contentData.add(0, Integer.toString(index));
-
- contentText.add(Integer.toString(pid));
- contentData.add(Integer.toString(pid));
+ long startTime = contents.get(startLogIndex.intValue()).getTime();
+ String timeFormat = Formatter
+ .toTimeFormat(time - startTime);
+ String removeTimeFormat = timeFormat.replace(
+ "00:", CommonConstants.EMPTY);//$NON-NLS-1$
- contentText.add(Integer.toString(tid));
- contentData.add(Integer.toString(tid));
+ contentText.add(removeTimeFormat); // elapsed time
+ contentData.add(Long.toString(time - startTime));
- contentText.add(Long.toString(fd));
- contentData.add(Long.toString(fd));
+ isExistStartTimeLog = true;
+ removeTableIndex.add(startLogIndex.intValue());
+ } else {
+ contentText.add(Formatter.toTimeFormat(contentTemp
+ .getTime())); // start//
+ contentData.add(Long.toString(contentTemp.getTime()));
+ contentText.add("00.000");//$NON-NLS-1$
+ contentData.add("00.000");//$NON-NLS-1$
+ }
+ }
+
+ if (!isExistStartTimeLog) {
+ contentText.add(Formatter.toTimeFormat(time)); // start time
+ contentData.add(Long.toString(time));
+ contentText.add("00.000");//$NON-NLS-1$ //elapsed time
+ contentData.add("00.000");//$NON-NLS-1$
+ }
- contentText.add(apiName);
- contentData.add(apiName);
+ contentText.add(Integer.toString(contentTemp.getPid()));
+ contentData.add(Integer.toString(contentTemp.getPid()));
- contentText.add(args);
- contentData.add(args);
-
- contentText.add(returns);
- contentData.add(returns);
-
- contentText.add(Long.toString(seq));
- contentData.add(Long.toString(seq));
+ contentText.add(Integer.toString(contentTemp.getTid()));
+ contentData.add(Integer.toString(contentTemp.getTid()));
+
+ contentText.add(Long.toString(contentTemp.getFdValue()));
+ contentData.add(Long.toString(contentTemp.getFdValue()));
- String errMsg = ErrorCodeManager.getInatance()
- .getErrorCode(errno).name();
- if (null == errMsg) {
- errMsg = "undefined error code"; //$NON-NLS-1$
- }
+ contentText.add(Global.getFunctionName(contentTemp.getApiId()));
+ contentData.add(Global.getFunctionName(contentTemp.getApiId()));
- // create DATableDataFormat
- DATableDataFormat tableData = new DATableDataFormat(seq);
- tableData.setLogData(fileEvent);
- tableData.getData().addAll(contentData);
- TableInput tableInput = new TableInput();
- tableInput.setText(contentText);
- tableInput.setData(tableData);
- if (!errMsg.contains("SUCCESS")) {//$NON-NLS-1$
- tableInput.setFailed(true);
- }
- input.add(tableInput);
+ contentText.add(contentTemp.getArgs());
+ contentData.add(contentTemp.getArgs());
- if (time >= rangeStartTime && time <= rangeEndTime) {
- tableInput.setInRange(true);
- }
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- SqlConnectionManager.releaseResultSet(rs);
+ contentText.add(contentTemp.getReturn());
+ contentData.add(contentTemp.getReturn());
+
+ String errMsg = ErrorCodeManager.getInatance()
+ .getErrorCode(contentTemp.getErrno()).name();
+ if (null == errMsg) {
+ errMsg = "undefined error code"; //$NON-NLS-1$
+ }
+ contentText.add(errMsg);
+ contentData.add(errMsg);
+ contentText.add(Long.toString(contentTemp.getFileSize()));
+ contentData.add(Long.toString(contentTemp.getFileSize()));
+
+ DATableDataFormat tableData = new DATableDataFormat(
+ contentTemp.getSeq());
+ tableData.setLogData(contentTemp);
+ tableData.getData().addAll(contentData);
+ TableInput tableInput = new TableInput();
+ tableInput.setText(contentText);
+ tableInput.setData(tableData);
+ if (!errMsg.contains("SUCCESS")) {//$NON-NLS-1$
+ tableInput.setFailed(true);
+ }
+ input.add(tableInput);
+
+ if (time >= rangeStartTime && time <= rangeEndTime) {
+ tableInput.setInRange(true);
}
}
-
int removeCount = 0;
for (int index : removeTableIndex) {
int removeIndex = index - removeCount;
package org.tizen.dynamicanalyzer.ui.file;
+import java.util.List;
+
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.tizen.dynamicanalyzer.nl.FilePageLabels;
import org.tizen.dynamicanalyzer.resources.ColorResources;
import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager;
+import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
import org.tizen.dynamicanalyzer.ui.file.model.FileSelectedData;
import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
}
// if new event is put from swap, update table
- /*int newTotal = manager.getApiDB().getTotal();
- if(tableComp.getTable().getItemCount() > 0 && newTotal > currentTotal) {
- manager.setSelectedData(selectedData);
- isUpdate = true;
- }*/
+ List<FileEvent> events = manager.getApiDB().selectAPITable(
+ selectedData.getFilePath(), selectedData.getPid(),
+ selectedData.getTid(),
+ selectedData.isParentChart());
+ if(events != null) {
+ if (tableComp.getTable().getItemCount() > 0
+ && events.size() != tableComp.getTable().getItemCount()) {
+ manager.setSelectedTableAPIList(events);
+ isUpdate = true;
+ }
+ }
return isUpdate;
}
if (null == selectedData) {
return;
}
-
- manager.setSelectedData(selectedData);
+ manager.setSelectedTableAPIList(
+ manager.getApiDB().
+ selectAPITable(selectedData.getFilePath(),
+ selectedData.getPid(),
+ selectedData.getTid(),
+ selectedData.isParentChart()));
tableComp.updateTable();
tableComp.setSelectionByTime(selectionStartTime,
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.swt.graphics.Color;
+import org.tizen.dynamicanalyzer.common.Global;
import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
import org.tizen.dynamicanalyzer.nl.FilePageLabels;
import org.tizen.dynamicanalyzer.resources.ColorResources;
import org.tizen.dynamicanalyzer.ui.file.model.FileAccess;
-import org.tizen.dynamicanalyzer.ui.file.model.FileAccessor;
+import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
import org.tizen.dynamicanalyzer.ui.file.model.FileStatus;
import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
import org.tizen.dynamicanalyzer.utils.Formatter;
private DAChartSeries accessSeries;
private String filePath = null;
- private int fileId = -1;
-
- private FileAccessor fileAccessor = null;
+ private int pid = -1;
+ private int tid = -1;
+ private long fd = -1;
+ private long fileSize = 0;
+ //private int parentChartIndex = -1;
private int chartIndex = -1;
private boolean isTarget = false;
- public FileChart(String filePath, int fileId) {
+ public FileChart(String filePath) {
this.filePath = filePath;
- this.fileId = fileId;
}
- public FileChart(FileAccessor fileAccessor, int chartIndex, boolean isTarget) {
- this.fileAccessor = fileAccessor;
- this.chartIndex = chartIndex;
+ public FileChart(String filePath, int pid, int tid, long fd) {
+ this.filePath = filePath;
+ this.pid = pid;
+ this.tid = tid;
+ this.fd = fd;
+ }
+
+ public FileChart(int pid, int tid, long fd, String filePath, long fileSize,
+ boolean isTarget, int chartIndex) {
+ this.filePath = filePath;
+ this.pid = pid;
+ this.tid = tid;
+ this.fd = fd;
+ this.fileSize = fileSize;
this.isTarget = isTarget;
+ this.chartIndex = chartIndex;
}
public void setItem(DAChartBoardItem item) {
}
/**
+ * Update API series chart
+ * @param apiList
+ */
+ public void updateApiSeries(List<FileEvent> apiList){
+ for(int i=0; i < apiList.size(); i++) {
+ FileEvent event = apiList.get(i);
+ if(!event.getFilePath().equals(this.filePath) ||
+ event.getPid() != this.pid ||
+ event.getTid() != this.tid) {
+ continue;
+ }
+ double time = event.getTime() / TimelineConstants.MEGA_DOUBLE;
+ String apiName = Global.getFunctionName(event.getApiId());
+ Color color = ColorResources.FILE_API_FAILED;
+
+ DAChartSeriesItem seriesItem = new DAChartSeriesItem(time,
+ DAChartSeriesItem.SERIES_AREA_BAR, color, color, apiName);
+ accessSeries.addSeriesItem(seriesItem);
+ }
+ chart.redraw();
+ }
+
+ /**
* Update access series chart - read/write/lock event
* @param accessList
*/
public void updateAccessSeries(List<FileAccess> accessList) {
for(int i=0; i < accessList.size(); i++) {
FileAccess data = accessList.get(i);
- if(data.getAccessorId() != this.fileAccessor.getAccessorId()) {
+ if(!data.getFilePath().equals(this.filePath) ||
+ data.getPid() != this.pid ||
+ data.getTid() != this.tid ||
+ data.getErroNo() != 0) {
continue;
}
+
double startTime = data.getStartTime() / TimelineConstants.MEGA_DOUBLE;
double endTime = data.getEndTime() / TimelineConstants.MEGA_DOUBLE;
startTime, DAChartSeriesItem.SERIES_AREA_START,
ColorResources.FILE_ACCESS_CONCURRENT_READ,
ColorResources.FILE_ACCESS_CONCURRENT_READ, false,
- data.getTooltip()));
+ FilePageLabels.FILE_CHART_TOOLTIP_CONCURRENT_READ));
if(endTime > 0) {
accessSeries.addSeriesItem(new DAChartSeriesItem(
endTime, DAChartSeriesItem.SERIES_AREA_END,
ColorResources.FILE_ACCESS_CONCURRENT_READ,
ColorResources.FILE_ACCESS_CONCURRENT_READ, false,
- data.getTooltip()));
+ FilePageLabels.FILE_CHART_TOOLTIP_CONCURRENT_READ));
} // else, if endTime <=0, still accessing
}else{
// the file has been read by only one process or thread
startTime, DAChartSeriesItem.SERIES_AREA_START,
ColorResources.FILE_ACCESS_READ,
ColorResources.FILE_ACCESS_READ, false,
- data.getTooltip()));
+ FilePageLabels.FILE_CHART_TOOLTIP_READ));
if(endTime > 0) {
accessSeries.addSeriesItem(new DAChartSeriesItem(
endTime, DAChartSeriesItem.SERIES_AREA_END,
ColorResources.FILE_ACCESS_READ,
ColorResources.FILE_ACCESS_READ, false,
- data.getTooltip()));
+ FilePageLabels.FILE_CHART_TOOLTIP_READ));
} // else, if endTime <=0, still accessing
}
break;
startTime, DAChartSeriesItem.SERIES_AREA_START,
ColorResources.FILE_ACCESS_CONCURRENT_WRITE,
ColorResources.FILE_ACCESS_CONCURRENT_WRITE, false,
- data.getTooltip()));
+ FilePageLabels.FILE_CHART_TOOLTIP_CONCURRENT_WRITE));
if(endTime > 0) {
accessSeries.addSeriesItem(new DAChartSeriesItem(
endTime, DAChartSeriesItem.SERIES_AREA_END,
ColorResources.FILE_ACCESS_CONCURRENT_WRITE,
ColorResources.FILE_ACCESS_CONCURRENT_WRITE, false,
- data.getTooltip()));
+ FilePageLabels.FILE_CHART_TOOLTIP_CONCURRENT_WRITE));
} // else, if endTime <=0, still accessing
}else{
// the file has been written by only one process or thread
startTime, DAChartSeriesItem.SERIES_AREA_START,
ColorResources.FILE_ACCESS_WRITE,
ColorResources.FILE_ACCESS_WRITE, false,
- data.getTooltip()));
+ FilePageLabels.FILE_CHART_TOOLTIP_WRITE));
if(endTime > 0) {
accessSeries.addSeriesItem(new DAChartSeriesItem(
endTime, DAChartSeriesItem.SERIES_AREA_END,
ColorResources.FILE_ACCESS_WRITE,
ColorResources.FILE_ACCESS_WRITE, false,
- data.getTooltip()));
+ FilePageLabels.FILE_CHART_TOOLTIP_WRITE));
}// else, if endTime <=0, still accessing
}
break;
case LogCenterConstants.FD_API_TYPE_LOCK_START:
lockSeries.addSeriesItem(new DAChartSeriesItem(
startTime, DAChartSeriesItem.SERIES_AREA_START,
- ColorResources.FILE_LOCK,
- ColorResources.FILE_LOCK, false,
- data.getTooltip()));
+ ColorResources.FILE_LOCK_ACQUIRED,
+ ColorResources.FILE_LOCK_ACQUIRED, false,
+ FilePageLabels.FILE_CHART_TOOLTIP_LOCK));
if(endTime > 0){
lockSeries.addSeriesItem(new DAChartSeriesItem(
endTime, DAChartSeriesItem.SERIES_AREA_END,
- ColorResources.FILE_LOCK,
- ColorResources.FILE_LOCK, false,
- data.getTooltip()));
+ ColorResources.FILE_LOCK_ACQUIRED,
+ ColorResources.FILE_LOCK_ACQUIRED, false,
+ FilePageLabels.FILE_CHART_TOOLTIP_LOCK));
}// else, if endTime <=0, still accessing
break;
- case LogCenterConstants.FD_API_TYPE_UNLOCK:
- lockSeries.addSeriesItem(new DAChartSeriesItem(
- startTime, DAChartSeriesItem.SERIES_AREA_BAR,
- ColorResources.FILE_UNLOCK, ColorResources.FILE_UNLOCK,
- data.getTooltip()));
- break;
- case LogCenterConstants.FD_API_TYPE_LOCK_AUTORELEASE:
- lockSeries.addSeriesItem(new DAChartSeriesItem(
- startTime, DAChartSeriesItem.SERIES_AREA_BAR,
- ColorResources.FILE_UNLOCK, ColorResources.FILE_UNLOCK,
- data.getTooltip()));
- break;
- case LogCenterConstants.FD_API_TYPE_FAIL:
- accessSeries.addSeriesItem(new DAChartSeriesItem(
- startTime, DAChartSeriesItem.SERIES_AREA_BAR,
- ColorResources.FILE_API_FAILED, ColorResources.FILE_API_FAILED,
- data.getTooltip()));
+ case LogCenterConstants.FD_API_TYPE_LOCK_WAIT_START:
+ lockSeries.addSeriesItem(new DAChartSeriesItem(startTime,
+ DAChartSeriesItem.SERIES_AREA_START,
+ ColorResources.FILE_LOCK_WAITING,
+ ColorResources.FILE_LOCK_WAITING, false,
+ FilePageLabels.FILE_CHART_TOOLTIP_LOCK_WAIT));
+ if (endTime > 0) {
+ lockSeries.addSeriesItem(new DAChartSeriesItem(endTime,
+ DAChartSeriesItem.SERIES_AREA_END,
+ ColorResources.FILE_LOCK_WAITING,
+ ColorResources.FILE_LOCK_WAITING, false,
+ FilePageLabels.FILE_CHART_TOOLTIP_LOCK_WAIT));
+ }// else, if endTime <=0, still accessing
break;
}
}
for(int i =0; i < statusList.size(); i++) {
FileStatus data = statusList.get(i);
- if(data.getFileId() != this.fileId) {
+ if(!data.getFilePath().equals(this.filePath)
+ || data.getErrNo() != 0) {
continue;
}
double time = Formatter.longTimeToDoubleTime(data.getEventTime());
}
}
- public FileChart getChildChart(FileAccessor accessor) {
+ public FileChart getChildChart(FileEvent event) {
int size = child.size();
FileChart row;
for (int i = 0; i < size; i++) {
row = child.get(i);
- if (row.getFileAccessor().equals(accessor)){
+ if (row.getPid() == event.getPid()
+ && row.getTid() == event.getTid()){
return row;
}
}
return null;
}
-
public DAChartBoardItem getItem() {
return item;
}
this.filePath = filePath;
}
- public void setTarget(boolean isTarget) {
- this.isTarget = isTarget;
+ public int getPid() {
+ return pid;
+ }
+
+ public void setPid(int pid) {
+ this.pid = pid;
+ }
+
+ public int getTid() {
+ return tid;
+ }
+
+ public void setTid(int tid) {
+ this.tid = tid;
}
- public boolean isTarget() {
- return isTarget;
+ public long getFileSize() {
+ return fileSize;
}
- public int getChartIndex() {
- return chartIndex;
+ public void getFileSize(long fileSize) {
+ this.fileSize = fileSize;
}
- public void setChartIndex(int index) {
- this.chartIndex = index;
+ public long getFd() {
+ return fd;
}
- public int getFileId() {
- return fileId;
+ public void setFd(long fd) {
+ this.fd = fd;
}
- public void setFileId(int fileId) {
- this.fileId = fileId;
+ public void setTarget(boolean isTarget) {
+ this.isTarget = isTarget;
}
- public void setFileAccessor(FileAccessor fileAccessor) {
- this.fileAccessor = fileAccessor;
+ public boolean isTarget() {
+ return isTarget;
}
- public FileAccessor getFileAccessor() {
- return fileAccessor;
+ public int getChartIndex() {
+ return chartIndex;
+ }
+
+ public void setChartIndex(int index) {
+ this.chartIndex = index;
}
}
\ No newline at end of file
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import org.eclipse.swt.widgets.Composite;
+import org.tizen.dynamicanalyzer.common.DALimit;
import org.tizen.dynamicanalyzer.communicator.DACommunicator;
import org.tizen.dynamicanalyzer.constant.CommonConstants;
import org.tizen.dynamicanalyzer.nl.FilePageLabels;
import org.tizen.dynamicanalyzer.ui.common.PopupStartMenuItemClickListener;
import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener;
import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter;
+import org.tizen.dynamicanalyzer.ui.file.data.FileApiDB;
import org.tizen.dynamicanalyzer.ui.file.manager.FileDataMaker;
import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager;
import org.tizen.dynamicanalyzer.ui.file.model.FileAccess;
-import org.tizen.dynamicanalyzer.ui.file.model.FileAccessor;
+import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
import org.tizen.dynamicanalyzer.ui.file.model.FileSelectedData;
import org.tizen.dynamicanalyzer.ui.file.model.FileStatus;
-import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
import org.tizen.dynamicanalyzer.util.Logger;
import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
import org.tizen.dynamicanalyzer.utils.Formatter;
private List<FileChart> chartList = new ArrayList<FileChart>();
private FileDataManager fileChartManager = FileDataManager.getInstance();
private FileDataMaker dataMaker;
+ private FileApiDB apiDB;
private int parentChartIndex = -1;
- private int preSelectionPId = -1;
- private Map<Integer, int[]> chartIndexMap = new HashMap<Integer, int[]>();
- public static final int FILE_NAME_MAX_LENGTH = 12;
- public static final int FILE_NAME_SHOW_LINENUM = 2;
- public static final int PROCESS_NAME_MAX_LENGTH = 16;
- public static final int PROCESS_NAME_SHOW_LINENUM = 1;
- public static final int MAX_LINE = 10;
+ private Map<HashSet<Object>, int[]> chartIndexMap = new HashMap<HashSet<Object>, int[]>();
public FileChartBoard(Composite parent, String title) {
super(parent, title);
dataMaker = fileChartManager.getFileChartDataMaker();
+ apiDB = fileChartManager.getApiDB();
}
@Override
addNewFileChartRows();
updateStatusSeries();
updateAccessSeries();
- chartFilteringByPId();
+ updateApiSeries();
}
public void clear() {
}
}
- private void chartFilteringByPId() {
- if (null == getItemList()) {
- return;
- }
- int selectedPid = ToolbarArea.getInstance().getSelectedPid();
- if (preSelectionPId != -1 && preSelectionPId != selectedPid) {
- return;
- }
-
- int parentIndex = 0;
- for (FileChart chart : chartList) {
- if (!chart.isParentChart()) {
- continue;
- }
- if (selectedPid == 0) {
- showItem(parentIndex);
- } else if (selectedPid == chart.getFileAccessor().getPid()) {
- showItem(parentIndex);
- } else {
- hideItem(parentIndex);
- }
- parentIndex++;
- }
- preSelectionPId = selectedPid;
- }
-
+ /**
+ * create chart rows
+ */
private void addNewFileChartRows() {
FileChart parent = null;
FileChart child = null;
String filePath = null;
- boolean isTarget = false;
- int fileId = 0;
-
- // 1. get accessorlist from data maker
- List<FileAccessor> accessorList = dataMaker.getFileAccessor();
- if (accessorList == null) {
- if(dataMaker.getFileAccessorList() != null) {
- accessorList = dataMaker.getFileAccessorList();
+
+ List<FileEvent> eventList = dataMaker.getFileEventList();
+ if (eventList == null) {
+ // no file event at all.
+ if(dataMaker.getFileApiList() != null) {
+ eventList = dataMaker.getFileApiList();
}else {
return;
}
}
- for (FileAccessor accessor : accessorList) {
- filePath = accessor.getFilePath();
- fileId = accessor.getFileId();
- isTarget = accessor.isTarget();
- parent = getParentChart(fileId);
-
+ for (FileEvent event : eventList) {
+ filePath = event.getFilePath();
+ parent = getParentChart(filePath);
if (parent == null) {
parentChartIndex++;
- parent = new FileChart(filePath, fileId);
- child = new FileChart(accessor, parentChartIndex, isTarget);
+ parent = new FileChart(filePath);
+ child = new FileChart(event.getPid(), event.getTid(),
+ event.getFdValue(), event.getFilePath(),
+ event.getFileSize(), event.isTarget(), parentChartIndex);
parent.addChild(child);
parent.setChartIndex(parentChartIndex);
createChartItem(null, parent);
chartList.add(child);
putChartIndextoMap(child, parent);
} else {
- child = parent.getChildChart(accessor);
+ child = parent.getChildChart(event);
if (child == null) {
- child = new FileChart(accessor, parent.getChartIndex(), isTarget);
+ child = new FileChart(event.getPid(), event.getTid(),
+ event.getFdValue(), event.getFilePath(),
+ event.getFileSize(), event.isTarget(), parent.getChartIndex());
parent.addChild(child);
createChartItem(parent, child);
chartList.add(child);
}
}
-
/**
* Drawing the chart title 1. parent: file name: max 2line, last: ... 2.
* child: "pid(PID) \n tid(TID)"
private void createChartItem(FileChart parent, FileChart fileChart) {
DAChartBoardItem item;
DAChart chart;
+
if (parent != null) { // child chart row
DAChartBoardItem parentItem = parent.getItem();
StringBuffer title = new StringBuffer();
- //StringBuffer fullTitle = new StringBuffer();
- int pid = fileChart.getFileAccessor().getPid();
+ int pid = fileChart.getPid();
String processName = null;
- String porcessInfo = fileChart.getFileAccessor().getPid() + "(PID)"//$NON-NLS-1$
- + CommonConstants.NEW_LINE + fileChart.getFileAccessor().getTid() + "(TID)";//$NON-NLS-1$
- if(fileChart.getFileAccessor().isTarget()) {
- processName = AnalyzerUtil.getProcessName(fileChart.getFileAccessor().getPid());
+ if(fileChart.isTarget()) {
+ processName = AnalyzerUtil.getProcessName(fileChart.getPid());
} else {
processName = DACommunicator.getProcessNameFromTarget(pid);
}
if(processName!=null){
- title.append(processName + CommonConstants.NEW_LINE + porcessInfo);
+ processName = splitTitle(processName, DALimit.MAX_STRING_LENGTH);
+ title.append(processName + CommonConstants.NEW_LINE);
}else{
- title.append("unKnown process" + CommonConstants.NEW_LINE + porcessInfo);
+ title.append("unKnown process" + CommonConstants.NEW_LINE);
}
- String name = splitTitle(title.toString(), PROCESS_NAME_MAX_LENGTH, false, PROCESS_NAME_SHOW_LINENUM);
- String fullName = splitTitle(title.toString(), PROCESS_NAME_MAX_LENGTH, false, MAX_LINE);
- item = new DAChartBoardItem(parentItem, name, fullName);
+ title.append(fileChart.getPid() + "(PID)"
+ + CommonConstants.NEW_LINE + fileChart.getTid() + "(TID)");
+ item = new DAChartBoardItem(parentItem, title.toString());
chart = item.getChart();
- // add a selected data
- item.setData(new FileSelectedData(fileChart.getFileAccessor(), false));
+ item.setData(new FileSelectedData(fileChart.getFilePath(), fileChart.getPid(),
+ fileChart.getTid(), fileChart.getFd(), false));
// disable non-target rows
if(!fileChart.isTarget()) {
item.setSelectable(false);
initFileChart(chart, false);
} else { // parent chart row
String fileName = fileChart.getFileName();
- String title = splitTitle(fileName, FILE_NAME_MAX_LENGTH, true, FILE_NAME_SHOW_LINENUM);
- String fullName = splitTitle(fileName, FILE_NAME_MAX_LENGTH, true, MAX_LINE);
- item = new DAChartBoardItem(this, title, fullName);
- // add a selected data
- item.setData(new FileSelectedData(fileChart.getFileId(), true));
+ String title = splitTitle(fileName, DALimit.MAX_STRING_LENGTH);
+ item = new DAChartBoardItem(this, title);
+ item.setData(new FileSelectedData(fileChart.getFilePath(),
+ fileChart.getPid(), fileChart.getTid(), fileChart.getFd(),
+ fileChart.getFileSize(), true));
chart = item.getChart();
initFileChart(chart, true);
}
chart.redraw();
}
+ private String splitTitle(String name, int maxLen) {
+ String title = name;
+ if (name.length() > maxLen ) {
+ title = name.substring(0, maxLen) + "...";
+ }
+ return title;
+ }
+
/**
* update file open status
*/
if (chartList.size() > 0) {
List<FileAccess> accessList = getVisibleAccessList();
for (FileChart chart : chartList) {
- if(!chart.isParentChart()) {
- chart.updateAccessSeries(accessList);
+ chart.updateAccessSeries(accessList);
+ }
+ }
+ }
+
+ /**
+ * update file api
+ */
+ private void updateApiSeries() {
+ if (chartList.size() > 0) {
+ /*List<FileEvent> apiList = apiDB.selectAPISeries(
+ getVisibleStartTime(), getVisibleEndTime());*/
+ List<FileEvent> apiList = apiDB.selectFailedAPISeries(
+ getVisibleStartTime(), getVisibleEndTime());
+ if (null == apiList) {
+ // no file event within the selected time range.
+ return;
+ }
+ for (FileChart chart : chartList) {
+ if (chart.isParentChart()) {
+ continue;
}
+ chart.updateApiSeries(apiList);
}
+ } else { // chartList.size() <= 0
+ // no data at all
}
}
- private FileChart getParentChart(int id) {
+ private FileChart getParentChart(String filePath) {
for (FileChart chart : chartList) {
- if (chart.getFileId()==id && chart.isParentChart()) {
+ if (chart.getFilePath().equals(filePath) && chart.isParentChart()) {
return chart;
}
}
}
private void putChartIndextoMap(FileChart childChart, FileChart parentChart ) {
- chartIndexMap.put(childChart.getFileAccessor().getAccessorId(),
- new int[] { parentChart.getChartIndex(), parentChart.getLastChildChartIndex() });
+ HashSet<Object> set = new HashSet<Object>();
+ set.add(childChart.getFilePath());
+ set.add(childChart.getPid());
+ set.add(childChart.getTid());
+ chartIndexMap.put(set, new int[] { parentChart.getChartIndex(),
+ parentChart.getLastChildChartIndex() });
}
- public int[] getChartIndex(int accessorId) {
- if(chartIndexMap.containsKey(accessorId)) {
- return chartIndexMap.get(accessorId);
+ public int[] getChartIndex(FileEvent event) {
+ HashSet<Object> set = new HashSet<Object>();
+ set.add(event.getFilePath());
+ set.add(event.getPid());
+ set.add(event.getTid());
+ if(chartIndexMap.containsKey(set)) {
+ return chartIndexMap.get(set);
}
- Logger.error("couldn't find index:" + accessorId );
+ Logger.error("couldn't find index:" + event.getFilePath() + ","
+ + event.getPid() + "," + event.getTid());
return new int[]{0, 0};
}
- private String splitTitle(String name, int maxLen, boolean isParent, int line) {
- String titleString = null;
- String title[] = null;
- int i = 1;
- int len = name.length();
- if (!isParent) {
- title = name.split("\n");
- name = title[0];
- }
- if (len > maxLen) {
- String slice = splitTitle(name, maxLen);
- String spare = name.substring(maxLen, name.length());
- titleString = slice;
- if (spare.length() <= maxLen) {
- if (line > 1) {
- titleString += (CommonConstants.NEW_LINE + spare);
- } else {
- titleString += "...";//$NON-NLS-1$
- }
- } else {
- while (spare.length() > maxLen) {
- i++;
- slice = splitTitle(spare, maxLen);
- spare = spare.substring(maxLen, spare.length());
- titleString += (CommonConstants.NEW_LINE + slice);
- if (i >= line) {
- break;
- }
- }
- if (i < line) {
- titleString += (CommonConstants.NEW_LINE + spare);
- } else {
- String temp = (titleString.substring(titleString.length()
- - maxLen, titleString.length() - 3) + "...");//$NON-NLS-1$
- String text = titleString.substring(0, titleString.length()
- - maxLen);
- text += temp;
- titleString = text;
- }
- }
- } else {
- titleString = name;
- }
- if (!isParent) {
- titleString += (CommonConstants.NEW_LINE + title[1]
- + CommonConstants.NEW_LINE + title[2]);
- }
- return titleString;
- }
-
- private String splitTitle(String text, int maxLen) {
- String spare = null;
- int len = text.length();
- if(len > maxLen) {
- spare = text.substring(0, maxLen);
- }else{
- spare = text;
- }
- return spare;
- }
-
-
private void initFileChart(DAChart chart, boolean isParent) {
if (null == chart) {
return;
}
DAChartPlot plot = chart.getPlot();
- chart.setChartRenderer(new FileChartRenderer()); // need to custom Chart Render for file chart
+
if (isParent) {
DAChartSeries statusSeries = new DAChartSeries(
FilePageLabels.FILE_CHART_SERIES,
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyeran kim <hyearn74.kim@samsung.com>
- * Jungwook Ryu <jungwook.ryu@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.file;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.GC;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartRenderer;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
-import org.tizen.dynamicanalyzer.widgets.helper.ColorResources;
-
-public class FileChartRenderer extends DAChartRenderer {
- @Override
- protected void drawToGc(GC gc, DAChart chart) {
- if (!preDraw(gc, chart)) {
- return;
- }
- for (int i = 0; i < seriesList.size(); i++) {
- drawSeries(gc, seriesList.get(i), i, seriesList.size());
- }
- }
-
- /*
- * This method is one of Chart renderer. Real chart using this method is
- * File Analysis chart. This renderer draws Rectangle and bar in multi line
- * and need specific seriesItem type. Type is possible SERIES_AREA_START,
- * SERIES_AREA_END, SERIES_AREA_BAR.
- */
- private void drawSeries(GC gc, DAChartSeries series, int seriesIndex, int seriesSize) {
- List<DAChartSeriesItem> seriesItems = series.getSeriesItemList();
- if (null == seriesItems) {
- return;
- }
-
- int seriesItemSize = seriesItems.size();
- if (seriesItemSize < 1) {
- return;
- }
- int index = series.getPrevIndexByXvalue(plot.getVisibleStartX());
- if (index < 0) {
- index = 0;
- }
-
- final int MARGIN_PERCENT = 20; // It's mean 20%
- final int STATE_AREA_BAR_WIDTH = 1;
- final int DIAGONAL_DIVIDE = 16; // divided in 16 pieces for diagonal box
- // size.
- final Color DIAGONAL_BOX_COLOR = ColorResources.WHITE;
- /*
- * Formula to divide in equal series heights.
- */
- int margin = (int) ((r.height * (MARGIN_PERCENT / 100.0)) / (seriesSize + 1));
- int areaHeight = (r.height - margin * (seriesSize + 1)) / seriesSize;
- int pixcelStartY = (margin * (seriesIndex + 1)) + (areaHeight * seriesIndex);
-
- List<DAChartSeriesItem> barSeriesItems = new ArrayList<DAChartSeriesItem>();
- /*
- * 1. Draw Start/End Status Area.
- */
- for (int i = 0; i < seriesItemSize; i++) {
- DAChartSeriesItem seriesItem = seriesItems.get(i);
- DAChartSeriesItem endSeriesItem = null;
-
- int type = (int) seriesItem.getY();
- if (DAChartSeriesItem.SERIES_AREA_START == type) {
- int startCount = 1;
- /*
- * Find end series item matched with start series item.
- */
- for (int ii = i + 1; ii < seriesItemSize; ii++) {
- DAChartSeriesItem nextSeriesItem = seriesItems.get(ii);
- int nextType = (int) nextSeriesItem.getY();
- if (nextType == DAChartSeriesItem.SERIES_AREA_START) {
- startCount += 1;
- } else if (nextType == DAChartSeriesItem.SERIES_AREA_END) {
- --startCount;
- if (startCount == 0) {
- endSeriesItem = nextSeriesItem;
- break;
- }
- }
- }
- Color foreGroundColor = seriesItem.getGradationForegroundColor();
- Color backGroundcolor = seriesItem.getColor();
- gc.setForeground(foreGroundColor);
- gc.setBackground(backGroundcolor);
-
- int pixcelStartX = plot.getXPixcelFromX(seriesItem.getX(), r);
- int pixcelWidth;
- if (endSeriesItem != null) {
- pixcelWidth = plot.getXPixcelFromX(endSeriesItem.getX(), r) - pixcelStartX;
- } else {
- /*
- * endSeriesItem is null when end series is not exist. this
- * case, draw it as much as getValidEndX.
- */
- pixcelWidth = plot.getXPixcelFromX(plot.getValidEndX(), r) - pixcelStartX;
- }
- if (pixcelWidth == 0) { // If diffence is less than 1 second.
- // draw 1 pixcel force.
- pixcelWidth = 1;
- }
- gc.fillRectangle(pixcelStartX, pixcelStartY, pixcelWidth, areaHeight);
-
- /*
- * If it's needed, draw diagonal line. diagonal line is composed
- * of square boxes. Direction of diagonal line is right top to
- * left down like "/".
- */
- if (seriesItem.getDiagonal()) {
- int diagonalBoxSize = areaHeight / DIAGONAL_DIVIDE;
- gc.setForeground(DIAGONAL_BOX_COLOR);
- gc.setBackground(DIAGONAL_BOX_COLOR);
- for (int j = 0; j < 16; j++) {
- int boxY = pixcelStartY + (diagonalBoxSize * j);
- // Formula to draw diagonal line like "/"
- for (int k = 3 - (j % 4) - (j / 4); k < pixcelWidth; k = k + 3) {
- int boxX = diagonalBoxSize * k + pixcelStartX;
- if (pixcelStartX <= boxX && boxX <= pixcelWidth + pixcelStartX - diagonalBoxSize) {
- gc.fillRectangle(boxX, boxY, diagonalBoxSize, diagonalBoxSize);
- }
- }
- }
- }
- } else if (DAChartSeriesItem.SERIES_AREA_BAR == type) {
- barSeriesItems.add(seriesItem);
- }
- }
-
- /*
- * 2. Draw Bar series
- */
- for (int i = 0; i < barSeriesItems.size(); i++) {
- DAChartSeriesItem barSeriesItem = barSeriesItems.get(i);
- Color foreGroundColor = barSeriesItem.getGradationForegroundColor();
- Color backGroundcolor = barSeriesItem.getColor();
- gc.setForeground(foreGroundColor);
- gc.setBackground(backGroundcolor);
- int pixcelStartX = plot.getXPixcelFromX(barSeriesItem.getX(), r);
- gc.fillRectangle(pixcelStartX, pixcelStartY, STATE_AREA_BAR_WIDTH, areaHeight);
- }
- }
-
- @Override
- protected void drawTooltip(GC gc) {
- DAChartPlotTooltip tooltip = plot.getTooltip();
- if (tooltip == null || tooltip.shouldBeDrawn() == false || tooltip.getStartVal() == -1) {
- return;
- }
-
- gc.setFont(tooltip.getFont());
-
- List<String> tooltipTexts = new ArrayList<String>();
- List<String> tooltipTimes = new ArrayList<String>();
- List<Color> tooltipColor = new ArrayList<Color>();
-
- // make text,time & draw auxiliary line
- int textWidthMax = 0;
- double realXVal = tooltip.getStartVal();
- int tooltipSize = 0;
-
- int seriesIndex = (int) (seriesList.size() * tooltip.getYPosRatio());
- DAChartSeries series = seriesList.get(seriesIndex);
-
- int index = series.getPrevIndexByXvalue(realXVal);
- String text = "";
- String time = "";
- Color color;
- if (index >= 0) {
- double xVal = series.getSeriesItemList().get(index).getX();
-
- text += series.getName() + ": ";
- time += toTimeFormat(xVal);
-
- if (true == series.isSummarizeTooltip() && true == checkOverlapFromPrevItem(series, index)) {
- text += series.getSummarizeString();
- } else {
- text += series.getSeriesItemList().get(index).getTooltipText();
- }
-
- gc.setForeground(tooltip.getLineColor());
- gc.setLineStyle(SWT.LINE_DOT);
- gc.setLineWidth(1);
- gc.drawLine(plot.getXPixcelFromX(xVal), 0, plot.getXPixcelFromX(xVal), r.height);
- gc.setLineStyle(SWT.LINE_CUSTOM);
-
- // event color
- color = series.getSeriesItemList().get(index).getColor();
- } else {
- return;
- }
-
- tooltipTexts.add(text);
- tooltipTimes.add(time);
- tooltipColor.add(color);
-
- int textWidth = gc.textExtent(text).x + DAChartPlotTooltip.TOOLTIP_TIME_MARGIN + gc.textExtent(time).x;
- if (textWidthMax < textWidth) {
- textWidthMax = textWidth;
- }
-
- /*
- * Drawing Tooltip Box
- */
- int preTextWidthMargin = DAChartPlotTooltip.TOOLTIP_MARGIN + DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH
- + DAChartPlotTooltip.TOOLTIP_MARGIN;
- int startX = getTooltipStartX(realXVal, textWidthMax + preTextWidthMargin, DAChartPlotTooltip.TOOLTIP_MARGIN);
-
- int totalHeight;
- if (!tooltipTexts.isEmpty()) {
- totalHeight = gc.textExtent(tooltipTexts.get(0)).y + DAChartPlotTooltip.TOOLTIP_MARGIN
- + DAChartPlotTooltip.TOOLTIP_MARGIN;
- } else {
- totalHeight = DAChartPlotTooltip.TOOLTIP_TEXT_HEIGHT + DAChartPlotTooltip.TOOLTIP_MARGIN
- + DAChartPlotTooltip.TOOLTIP_MARGIN;
- }
-
- int startY;
- tooltipSize = seriesList.size();
- int heightPerSeries = r.height / tooltipSize;
- int currentSeries = ((int) (tooltip.getYPosRatio() * tooltipSize) + 1);
- startY = r.y + (heightPerSeries * (currentSeries - 1)) + (heightPerSeries / 2) - (totalHeight / 2);
- if (r.height - startY - totalHeight < 0) {
- startY = r.height - totalHeight - 1;
- if (startY < 0) {
- startY = DAChartPlotTooltip.TOOLTIP_MARGIN;
- }
- }
- gc.setAlpha(150);
- gc.setBackground(tooltip.getBackgroundColor());
- gc.setForeground(tooltip.getForegroundColor());
- gc.fillGradientRectangle(startX, startY, preTextWidthMargin + textWidthMax + DAChartPlotTooltip.TOOLTIP_MARGIN,
- totalHeight, true);
- gc.setAlpha(255);
- gc.setForeground(tooltip.getLineColor());
- gc.drawRoundRectangle(startX, startY, preTextWidthMargin + textWidthMax + DAChartPlotTooltip.TOOLTIP_MARGIN,
- totalHeight, 5, 5);
- gc.setFont(tooltip.getFont());
-
- /*
- * Drawing Tooltip contents (color square, text, time)
- */
- int y = startY + DAChartPlotTooltip.TOOLTIP_MARGIN;
- Color col = tooltipColor.get(0);
- if (col == null) {
- gc.setBackground(series.getColor());
- } else {
- gc.setBackground(col);
- }
-
- gc.fillRectangle(startX + DAChartPlotTooltip.TOOLTIP_MARGIN, y + DAChartPlotTooltip.TOOLTIP_TEXT_HEIGHT / 2
- - DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH / 2, DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH,
- DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH);
- gc.setBackground(tooltip.getBackgroundColor());
-
- gc.setForeground(tooltip.getTextColor());
- gc.drawText(tooltipTexts.get(0), startX + DAChartPlotTooltip.TOOLTIP_MARGIN
- + DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH + DAChartPlotTooltip.TOOLTIP_MARGIN, y,
- SWT.DRAW_DELIMITER | SWT.DRAW_TRANSPARENT);
-
- gc.setForeground(tooltip.getTimeColor());
- String timeStr = tooltipTimes.get(0);
- gc.drawText(tooltipTimes.get(0), startX + DAChartPlotTooltip.TOOLTIP_MARGIN
- + DAChartPlotTooltip.TOOLTIP_SERIES_RECT_LENGTH + DAChartPlotTooltip.TOOLTIP_MARGIN + textWidthMax
- - DAChartPlotTooltip.TOOLTIP_MARGIN - gc.textExtent(timeStr).x, y, SWT.DRAW_DELIMITER
- | SWT.DRAW_TRANSPARENT);
- }
-}
package org.tizen.dynamicanalyzer.ui.file;
-import java.sql.ResultSet;
-import java.sql.SQLException;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.tizen.dynamicanalyzer.common.AnalyzerManager;
import org.tizen.dynamicanalyzer.common.DASelectionData;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
import org.tizen.dynamicanalyzer.nl.FilePageLabels;
import org.tizen.dynamicanalyzer.resources.ColorResources;
import org.tizen.dynamicanalyzer.resources.FontResources;
import org.tizen.dynamicanalyzer.ui.common.SetRangeMarkerMouseMoveListener;
import org.tizen.dynamicanalyzer.ui.common.UICommonConstants;
import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager;
+import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
import org.tizen.dynamicanalyzer.ui.timeline.logparser.LifecycleLogParser;
@Override
public void handleSelectionEvent(DAChartBoardItem item) {
lastSelectedItemForSummary = item;
- DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) fileChartBoard
- .getMarkers().get(UICommonConstants.SELECTION_MARKER_INDEX);
- long selectiedStartTime = (long) (intervalMarker.getStartVal() * TimelineConstants.MEGA_DOUBLE);
- long selectiedEndTime = (long) (intervalMarker.getEndVal() * TimelineConstants.MEGA_DOUBLE);
- AnalyzerManager.getCurrentPage().updateView(
- new DASelectionData(FilePage.chartViewID,
- selectiedStartTime, selectiedEndTime, item.getData(), null));
+ AnalyzerManager
+ .getCurrentPage().updateView(
+ new DASelectionData(
+ FilePage.chartViewID,
+ (long) (((DAChartPlotIntervalMarker) fileChartBoard
+ .getMarkers()
+ .get(UICommonConstants.SELECTION_MARKER_INDEX))
+ .getStartVal() * TimelineConstants.MEGA_DOUBLE),
+ (long) (((DAChartPlotIntervalMarker) fileChartBoard
+ .getMarkers()
+ .get(UICommonConstants.SELECTION_MARKER_INDEX))
+ .getEndVal() * TimelineConstants.MEGA_DOUBLE),
+ item.getData(), null));
}
});
if (null != obData && (obData instanceof LogData)) { // summary
LogData ldata = (LogData) obData;
dataTime = ldata.getTime();
-
long seq = ldata.getSeq();
-
- ResultSet rs = chartManager.getApiDB().selectFileEventBySeq(seq);
- if (rs != null) {
- try {
- if (rs.next()) {
- int selectedIndex[] = fileChartBoard.getChartIndex(rs.getInt(1));
- fileChartBoard.selectItem(selectedIndex[0], selectedIndex[1]);
- if (null != lastSelectedItemForSummary) {
- AnalyzerManager.getCurrentPage().updateView(
- new DASelectionData(FilePage.chartViewID,
- dataTime, dataTime,
- lastSelectedItemForSummary.getData(),
- null));
- }
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- SqlConnectionManager.releaseResultSet(rs);
+ FileEvent event = chartManager.getApiDB().selectFileEventBySeq(seq);
+ if(event != null) {
+ int selectedIndex[] = fileChartBoard.getChartIndex(event);
+ fileChartBoard.selectItem(selectedIndex[0], selectedIndex[1]);
+ if (null != lastSelectedItemForSummary) {
+ AnalyzerManager.getCurrentPage().updateView(
+ new DASelectionData(FilePage.chartViewID,
+ dataTime, dataTime,
+ lastSelectedItemForSummary.getData(),
+ null));
}
- }
+ } // else, no need to update
}
} else {
dataTime = selData.getStartTime();
package org.tizen.dynamicanalyzer.ui.file;
-import java.sql.ResultSet;
-import java.sql.SQLException;
+import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
import org.tizen.dynamicanalyzer.common.DASelectionData;
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
import org.tizen.dynamicanalyzer.nl.AnalyzerLabels;
import org.tizen.dynamicanalyzer.nl.FilePageLabels;
import org.tizen.dynamicanalyzer.resources.ColorResources;
import org.tizen.dynamicanalyzer.resources.FontResources;
import org.tizen.dynamicanalyzer.ui.file.manager.FileDataManager;
-import org.tizen.dynamicanalyzer.ui.file.model.FileAccessor;
+import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
import org.tizen.dynamicanalyzer.ui.file.model.FileSelectedData;
import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite;
import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData;
public class FileDetailInfoView extends DAViewComposite {
-
private Canvas canvas = null;
private String fileName = AnalyzerLabels.EMPTY_STRING;
private String filePath = AnalyzerLabels.EMPTY_STRING;
private int failedApiCount = 0;
private FileDataManager fileChartManager = FileDataManager.getInstance();
-
- private Text detailText = null;
- private Label labelMessage = null;
-
+
private void init() {
fileName = AnalyzerLabels.EMPTY_STRING;
filePath = AnalyzerLabels.EMPTY_STRING;
this.setLayout(new FillLayout());
setTitle(FilePageLabels.FILE_DETAILS_TITLE);
-
- Composite detailCom = getContentArea();
- detailCom.setBackground(ColorResources.VIEW_BG_COLOR);
- detailCom.setLayout(new FormLayout());
- FormData labelData = new FormData();
- labelData.top = new FormAttachment(0, 0);
- labelData.left = new FormAttachment(0, 0);
- labelData.right = new FormAttachment(100, 0);
- labelData.bottom = new FormAttachment(100, 0);
- detailCom.setLayoutData(labelData);
- Composite contents = detailCom;
+ Composite contents = getContentArea();
contents.setBackground(ColorResources.VIEW_BG_COLOR);
- contents.setLayout(new FormLayout());
-
- detailText = new Text(contents, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
- detailText.setBackground(ColorResources.VIEW_BG_COLOR);
- detailText.setForeground(ColorResources.TABLE_CONTENTS_FONT_COLOR);
- detailText.setFont(FontResources.DETAIL_INFO_FONT);
-
- FormData buttonData = new FormData();
- buttonData.top = new FormAttachment(labelMessage, 0);
- buttonData.left = new FormAttachment(0, 0);
- buttonData.right = new FormAttachment(100, 0);
- buttonData.bottom = new FormAttachment(100, 0);
- detailText.setLayoutData(buttonData);
- detailText.getVerticalBar().setVisible(true);
- detailText.getHorizontalBar().setVisible(true);
-
- showDetailInfoContents();
-
+ contents.setLayout(new FillLayout());
+ canvas = new Canvas(contents, SWT.TRANSPARENT);
+ canvas.addPaintListener(new PaintListener() {
+
+ @Override
+ public void paintControl(PaintEvent e) {
+ int x = 0;
+ int y = 0;
+ Rectangle rect = canvas.getBounds();
+ e.gc.setBackground(ColorResources.VIEW_BG_COLOR);
+ e.gc.fillRectangle(rect.x, rect.y, rect.width, rect.height);
+ e.gc.setForeground(ColorResources.TABLE_CONTENTS_FONT_COLOR);
+ e.gc.setFont(FontResources.DETAIL_INFO_FONT);
+
+ String pathLabel = FilePageLabels.FILE_DETAILS_FILE_PATH;
+ Point pathSize = e.gc.textExtent(pathLabel, SWT.DRAW_MNEMONIC);
+ int fontHeight = pathSize.y + 5;
+ e.gc.drawString(FilePageLabels.FILE_DETAILS_FILE_PATH
+ + filePath, x + 10, y += fontHeight);
+
+ e.gc.drawString( FilePageLabels.FILE_DETAILS_FILE_NAME
+ + fileName, x += 10, y += fontHeight);
+
+ e.gc.drawString(
+ FilePageLabels.FILE_DETAILS_TOTAL_SIZE
+ + Long.toString(fileSize), x, y += fontHeight);
+ e.gc.drawString(
+ FilePageLabels.FILE_DETAILS_READ_SIZE
+ + Long.toString(readSize), x, y += fontHeight);
+ e.gc.drawString(
+ FilePageLabels.FILE_DETAILS_WRITE_SIZE
+ + Long.toString(writeSize), x, y += fontHeight);
+ e.gc.drawString(
+ FilePageLabels.FILE_DETAILS_API_COUNT
+ + Integer.toString(apiCount), x,
+ y += fontHeight);
+ e.gc.drawString(FilePageLabels.FILE_DETAILS_FAILED_API_COUNT
+ + Integer.toString(failedApiCount), x, y += fontHeight);
+ }
+ });
}
@Override
private void updateData(FileSelectedData selectData) {
failedApiCount = 0;
- ResultSet rs = fileChartManager.getApiDB().selectAPI(
- selectData.getFileId(),
- selectData.getAccessorId(),
- selectData.isParentChart());
- boolean isParentChart = selectData.isParentChart();
- FileAccessor accessor = selectData.getFileAccessor();
- String path = null;
- if (rs != null) {
- try {
- long readSize = 0;
- long writeSize = 0;
- int apiCount = 0;
-
- while (rs.next()) {
- apiCount++;
- if(rs.isFirst()) {
- if(isParentChart){
- path = rs.getString(11);
- }else{
- path = accessor.getFilePath();
- }
- boolean isFindSpliter = false;
- for(int i= path.length()-1; i > 0; i--) {
- char character = path.charAt(i);
- if(Character.toString(character).matches("\\/")) { //$NON-NLS-1$*/
- filePath = path.substring(0, i+1);
- fileName = path.substring(i+1, path.length());
- isFindSpliter = true;
- break;
- }
- }
- if(!isFindSpliter) {
- fileName = path;
- filePath = AnalyzerLabels.EMPTY_STRING;
- }
- }else if(rs.isLast()) {
- fileSize = rs.getLong(7);
+ List<FileEvent> events = null;
+ events = fileChartManager.getApiDB().selectAPITable(
+ selectData.getFilePath(), selectData.getPid(),
+ selectData.getTid(), selectData.isParentChart());
+ if (events != null) {
+ filePath = events.get(0).getFilePath();
+ fileName = events.get(0).getFileName();
+ fileSize = events.get(events.size()-1).getFileSize();
+
+ long readSize = 0;
+ long writeSize = 0;
+ int apiCount = events.size();
+ for(FileEvent data : events) {
+ switch(data.getFdApiType()) {
+ case LogCenterConstants.FD_API_TYPE_OPEN:
+ case LogCenterConstants.FD_API_TYPE_CLOSE:
+ case LogCenterConstants.FD_API_TYPE_OTHERS:
+ case LogCenterConstants.FD_API_TYPE_UNLOCK:
+ if(data.getErrno() != 0) {
+ failedApiCount++;
+ }
+ break;
+ case LogCenterConstants.FD_API_TYPE_LOCK_END:
+ if(data.getErrno() != 0) {
+ failedApiCount++;
}
- int apiType = rs.getInt(3);
- long errno = rs.getInt(6);
- long ioSize = rs.getLong(8);
-
- switch(apiType) {
- case LogCenterConstants.FD_API_TYPE_OPEN:
- case LogCenterConstants.FD_API_TYPE_CLOSE:
- case LogCenterConstants.FD_API_TYPE_OTHERS:
- case LogCenterConstants.FD_API_TYPE_UNLOCK:
- if(errno != 0) {
- failedApiCount++;
- }
- break;
- case LogCenterConstants.FD_API_TYPE_LOCK_END:
- if(errno != 0) {
- failedApiCount++;
- }
- apiCount--;
- break;
- case LogCenterConstants.FD_API_TYPE_READ_END:
- if(errno != 0) {
- failedApiCount++;
- }
- readSize += ioSize;
- // except *_end event among the API count
- apiCount--;
- break;
- case LogCenterConstants.FD_API_TYPE_WRITE_END:
- if(errno != 0) {
- failedApiCount++;
- }
- writeSize += ioSize;
- // except *_end event among the API count
- apiCount--;
- break;
- default:
- break;
+ apiCount--;
+ break;
+ case LogCenterConstants.FD_API_TYPE_READ_END:
+ if(data.getErrno() != 0) {
+ failedApiCount++;
}
+ readSize += data.getSize();
+ // except *_end event among the API count
+ apiCount--;
+ break;
+ case LogCenterConstants.FD_API_TYPE_WRITE_END:
+ if(data.getErrno() != 0) {
+ failedApiCount++;
+ }
+ writeSize += data.getSize();
+ // except *_end event among the API count
+ apiCount--;
+ break;
+ default:
+ break;
}
- this.apiCount = apiCount;
- this.readSize = readSize;
- this.writeSize = writeSize;
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- SqlConnectionManager.releaseResultSet(rs);
}
-
- showDetailInfoContents();
+ this.apiCount = apiCount;
+ this.readSize = readSize;
+ this.writeSize = writeSize;
}
+ canvas.redraw();
}
- private void showDetailInfoContents() {
- StringBuffer strDetailView = new StringBuffer(CommonConstants.DOUBLE_NEW_LINE);
- strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_FILE_PATH );
- strDetailView.append(filePath);
- strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
- strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_FILE_NAME);
- strDetailView.append(fileName);
- strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
- strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_TOTAL_SIZE);
- strDetailView.append(fileSize);
- strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
- strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_READ_SIZE);
- strDetailView.append(readSize);
- strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
- strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_WRITE_SIZE);
- strDetailView.append(writeSize);
- strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
- strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_API_COUNT);
- strDetailView.append(apiCount);
- strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
- strDetailView.append(CommonConstants.DOUBLE_SPACE + FilePageLabels.FILE_DETAILS_FAILED_API_COUNT);
- strDetailView.append(failedApiCount);
- strDetailView.append(CommonConstants.DOUBLE_NEW_LINE);
- detailText.setText(strDetailView.toString());
- }
-
@Override
public Control getControl() {
return canvas;
@Override
public void clear() {
init();
- showDetailInfoContents();
+ canvas.redraw();
}
}
package org.tizen.dynamicanalyzer.ui.file.data;
import java.sql.PreparedStatement;
-import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.tizen.dynamicanalyzer.nl.FilePageLabels;
import org.tizen.dynamicanalyzer.ui.file.model.FileAccess;
+// read, write, lock
public class FileAccessDB extends DBTable {
- private static final String ACCESS_TABLE = FilePageLabels.FILE_ACCESS_DB;
- private static final String DBTYPE_TOOLTIP = "VARCHAR(256)";//$NON-NLS-1$
-
+ private static final String TABLE_NAME = FilePageLabels.FILE_ACCESS_DB;
+
public static enum COLUMN {
- ACCESSOR_ID(1, "ACCESSOR_ID"),
- API_TYPE(2, "API_TYPE"),
- START_TIME(3, "START_TIME"),
- END_TIME(4, "END_TIME"),
- TOOLTIP(5, "TOOLTIP");
+ PID(0, "pid"),
+ TID(1, "tid"),
+ FILE_PATH(2, "filePath"),
+ FD(3, "fd"),
+ API_TYPE(4, "apiType"),
+ START_TIME(5, "startTime"),
+ END_TIME(6, "endTime"),
+ ERRNO(7, "errNo"),
+ FILE_SIZE(8, "fileSize");
- private final int index;
+ private final int value;
private final String name;
- private COLUMN(int index, String name) {
- this.index = index;
+ private COLUMN(int value, String name) {
+ this.value = value;
this.name = name;
}
- public int getIndex() {
- return index;
+ public int getValue() {
+ return value;
}
public String getName() {
return name;
}
}
-
+
public FileAccessDB() {
- addColumn(new DBColumn(COLUMN.ACCESSOR_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.API_TYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.START_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.END_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.TOOLTIP.name, DBConstants.EMPTY, DBTYPE_TOOLTIP));
+ addColumn(new DBColumn(COLUMN.PID.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+ addColumn(new DBColumn(COLUMN.TID.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+ addColumn(new DBColumn(COLUMN.FILE_PATH.getName(), DBConstants.EMPTY, DBConstants.BIG_TEXT));
+ addColumn(new DBColumn(COLUMN.FD.getName(), DBConstants.EMPTY, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.API_TYPE.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+ addColumn(new DBColumn(COLUMN.START_TIME.getName(), DBConstants.NOT_NULL, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.END_TIME.getName(), DBConstants.NOT_NULL, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.ERRNO.getName(), DBConstants.EMPTY, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.FILE_SIZE.getName(), DBConstants.EMPTY, DBConstants.LONG));
}
@Override
public String getTableName() {
- return ACCESS_TABLE;
+ return TABLE_NAME;
}
private static final String selectAll = selectAll();
private static final String SELECT_QUERY = "select "
+ selectAll
- + " from " + ACCESS_TABLE;
-
- public List<FileAccess> executeQueryRS(String query) {
- List<FileAccess> resultData = new ArrayList<FileAccess>();
- ResultSet rs = SqlConnectionManager.executeQueryRS(query);
- if (rs != null) {
- try {
- while (rs.next()) {
- FileAccess access= getDataFromResultSet(rs);
- if (access != null) {
- resultData.add(access);
- }
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- SqlConnectionManager.releaseResultSet(rs);
- }
- }
- return resultData;
- }
-
- public FileAccess getDataFromResultSet(ResultSet rs) {
- FileAccess access = null;
- try {
- access = new FileAccess(
- rs.getInt(COLUMN.ACCESSOR_ID.index),
- rs.getInt(COLUMN.API_TYPE.index),
- rs.getLong(COLUMN.START_TIME.index),
- rs.getLong(COLUMN.END_TIME.index),
- rs.getString(COLUMN.TOOLTIP.index)
- );
- } catch (SQLException e) {
- e.printStackTrace();
- return null;
- }
- return access;
- }
+ + " from " + TABLE_NAME; //$NON-NLS-1$
public void insert(FileAccess insertData) {
List<List<Object>> insertDataList = new ArrayList<List<Object>>();
insertDataList.add(insertData.getDBData());
insertData(insertDataList);
}
-
+
public List<FileAccess> select() {
String query = String.format(SELECT_QUERY);
List<FileAccess> accessList = new ArrayList<FileAccess>();
- accessList = executeQueryRS(query);
+
+ List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+ if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+ return accessList;
+ }
+
+ for (List<Object> data : result) {
+ accessList.add(new FileAccess(data));
+ }
return accessList;
}
-
+
public static String selectAll() {
StringBuffer selectAllColumn = new StringBuffer();
- selectAllColumn.append(COLUMN.ACCESSOR_ID.name);
+ selectAllColumn.append(COLUMN.PID.getName());
+ selectAllColumn.append(",");
+ selectAllColumn.append(COLUMN.TID.getName());
+ selectAllColumn.append(",");
+ selectAllColumn.append(COLUMN.FILE_PATH.getName());
+ selectAllColumn.append(",");
+ selectAllColumn.append(COLUMN.FD.getName());
+ selectAllColumn.append(",");
+ selectAllColumn.append(COLUMN.API_TYPE.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.API_TYPE.name);
+ selectAllColumn.append(COLUMN.START_TIME.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.START_TIME.name);
+ selectAllColumn.append(COLUMN.END_TIME.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.END_TIME.name);
+ selectAllColumn.append(COLUMN.ERRNO.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.TOOLTIP.name);
+ selectAllColumn.append(COLUMN.FILE_SIZE.getName());
return selectAllColumn.toString();
}
isPrepared = false;
} else {
try {
- prep.setInt(1, (Integer)(rowData.get(0)));
- prep.setInt(2, (Integer)(rowData.get(1)));
- prep.setLong(3, (Long)(rowData.get(2)));
- prep.setLong(4, (Long)(rowData.get(3)));
- prep.setString(5, (String)(rowData.get(4)));
+ prep.setInt(1, (Integer)(rowData.get(COLUMN.PID.getValue())));
+ prep.setInt(2, (Integer)(rowData.get(COLUMN.TID.getValue())));
+ prep.setString(3, (String)(rowData.get(COLUMN.FILE_PATH.getValue())));
+ prep.setLong(4, (Long)(rowData.get(COLUMN.FD.getValue())));
+ prep.setInt(5, (Integer)(rowData.get(COLUMN.API_TYPE.getValue())));
+ prep.setLong(6, (Long)(rowData.get(COLUMN.START_TIME.getValue())));
+ prep.setLong(7, (Long)(rowData.get(COLUMN.END_TIME.getValue())));
+ prep.setLong(8, (Long)(rowData.get(COLUMN.ERRNO.getValue())));
+ prep.setLong(9, (Long)(rowData.get(COLUMN.FILE_SIZE.getValue())));
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyeran Kim <Hyeran74.kim@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.file.data;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-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.nl.FilePageLabels;
-import org.tizen.dynamicanalyzer.ui.file.model.FileAccessor;
-
-public class FileAccessorDB extends DBTable {
- private static final String ACCESSOR_TABLE = FilePageLabels.FILE_ACCESSOR_DB;
- private static final String DBTYPE_FILEPATH = "VARCHAR(4096)";//$NON-NLS-1$
-
- public static enum COLUMN {
- ACCESSOR_ID(1, "ACCESSOR_ID"),
- FILE_ID(2, "FILE_ID"),
- FILE_PATH(3, "FILE_PATH"),
- PID(4, "PID"),
- TID(5, "TID"),
- IS_TARGET(6, "IS_TARGET");
-
-
- private final int index;
- private final String name;
- private COLUMN(int index, String name) {
- this.index = index;
- this.name = name;
- }
-
- public int getIndex() {
- return index;
- }
-
- public String getName() {
- return name;
- }
- }
-
- public FileAccessorDB() {
- addColumn(new DBColumn(COLUMN.ACCESSOR_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.FILE_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.FILE_PATH.name, DBConstants.NOT_NULL, DBTYPE_FILEPATH));
- addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.IS_TARGET.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_BOOLEAN));
- }
-
-
- @Override
- public String getTableName() {
- return ACCESSOR_TABLE;
- }
-
- private static final String selectAll = selectAll();
- private static final String SELECT_QUERY = "select "
- + selectAll
- + " from " + ACCESSOR_TABLE; //$NON-NLS-1$
-
- public List<FileAccessor> executeQueryRS(String query) {
- List<FileAccessor> resultData = new ArrayList<FileAccessor>();
- ResultSet rs = SqlConnectionManager.executeQueryRS(query);
- if (rs != null) {
- try {
- while (rs.next()) {
- FileAccessor accessor = getDataFromResultSet(rs);
- if (accessor != null) {
- resultData.add(accessor);
- }
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- SqlConnectionManager.releaseResultSet(rs);
- }
- }
- return resultData;
- }
-
- public FileAccessor getDataFromResultSet(ResultSet rs) {
- FileAccessor accessor = null;
- try {
- accessor = new FileAccessor(
- rs.getInt(COLUMN.ACCESSOR_ID.index),
- rs.getInt(COLUMN.FILE_ID.index),
- rs.getString(COLUMN.FILE_PATH.index),
- rs.getInt(COLUMN.PID.index),
- rs.getInt(COLUMN.TID.index),
- rs.getBoolean(COLUMN.IS_TARGET.index)
- );
- } catch (SQLException e) {
- e.printStackTrace();
- return null;
- }
- return accessor;
- }
-
- public void insert(FileAccessor insertData) {
- List<List<Object>> insertDataList = new ArrayList<List<Object>>();
- insertDataList.add(insertData.getDBData());
- insertData(insertDataList);
- }
-
- public List<FileAccessor> select() {
- String query = String.format(SELECT_QUERY);
-
- List<FileAccessor> accessorList = new ArrayList<FileAccessor>();
- accessorList = executeQueryRS(query);
- return accessorList;
- }
-
- public static String selectAll() {
- StringBuffer selectAllColumn = new StringBuffer();
- selectAllColumn.append(COLUMN.ACCESSOR_ID.name);
- selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.FILE_ID.name);
- selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.FILE_PATH.name);
- selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.PID.name);
- selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.TID.name);
- selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.IS_TARGET.name);
- return selectAllColumn.toString();
- }
-
- @Override
- public boolean prepare(PreparedStatement prep, List<Object> rowData) {
- boolean isPrepared = true;
-
- int columnsize = getColumnSize();
- if (columnsize != rowData.size()) {
- isPrepared = false;
- } else {
- try {
- prep.setInt(1, (Integer)(rowData.get(0)));
- prep.setInt(2, (Integer)(rowData.get(1)));
- prep.setString(3, (String)(rowData.get(2)));
- prep.setLong(4, (Integer)(rowData.get(3)));
- prep.setInt(5, (Integer)(rowData.get(4)));
- prep.setBoolean(6, (Boolean)(rowData.get(5)));
- } catch (SQLException e) {
- e.printStackTrace();
- isPrepared = false;
- }
- }
- return isPrepared;
- }
-}
package org.tizen.dynamicanalyzer.ui.file.data;
import java.sql.PreparedStatement;
-import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
import org.tizen.dynamicanalyzer.nl.FilePageLabels;
import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
+import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
public class FileApiDB extends DBTable {
- private static final String API_TABLE = FilePageLabels.FILE_API_DB;
- private static final String ACCESSOR_TABLE = FilePageLabels.FILE_ACCESSOR_DB;
- private static final String DBTYPE_RETUREN_VALUE = "VARCHAR(1024)";//$NON-NLS-1$
- private static final String DBTYPE_ARGUMENTS_VALUE = "VARCHAR(1024)";//$NON-NLS-1$
+ private static final String TABLE_NAME = FilePageLabels.FILE_API_DB;
public static enum COLUMN {
- SEQUENCE_NUMBER(1, "SEQUENCE_NUMBER"),
- FILE_ID(2, "FILE_ID"),
- ACCESSOR_ID(3, "ACCESSOR_ID"),
- FD(4, "FD"),
- API_TYPE(5, "API_TYPE"),
- EVENT_TIME(6, "EVENT_TIME"),
- API_ID(7, "API_ID"),
- ERRNO(8, "ERRNO"),
- IO_SIZE(9, "IO_SIZE"),
- FILE_SIZE(10, "FILE_SIZE"),
- RETURN_VALUE(11, "RETURN_VALUE"),
- ARGUMENTS_VALUE(12, "ARGUMENTS_VALUE");
+ SEQ(0, "seq"),
+ FILE_PATH(1, "filePath"),
+ PID(2, "pid"),
+ TID(3, "tid"),
+ FD(4, "fd"),
+ API_TYPE(5, "apiType"),
+ EVENT_TIME(6, "eventTime"),
+ API_ID(7, "apiId"),
+ ERRNO(8, "errNo"),
+ IO_SIZE(9, "ioSize"),
+ FILE_SIZE(10, "fileSize"),
+ SIZE(11, "size"),
+ RETURN_VALUE(12, "returnValue"),
+ ARGS(13, "args"),
+ TARGET(14, "target");
- public final int index;
- public final String name;
+ private final int value;
+ private final String name;
- private COLUMN(int index, String name) {
- this.index = index;
+ private COLUMN(int value, String name) {
+ this.value = value;
this.name = name;
}
- public int getIndex() {
- return index;
+ public int getValue() {
+ return value;
}
public String getName() {
@Override
public String getTableName() {
- return API_TABLE;
+ return TABLE_NAME;
}
-
+
public FileApiDB() {
- addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.FILE_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.ACCESSOR_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.FD.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.API_TYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.EVENT_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.API_ID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.ERRNO.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.IO_SIZE.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.FILE_SIZE.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.RETURN_VALUE.name, DBConstants.EMPTY, DBTYPE_RETUREN_VALUE));
- addColumn(new DBColumn(COLUMN.ARGUMENTS_VALUE.name, DBConstants.EMPTY, DBTYPE_ARGUMENTS_VALUE));
+ addColumn(new DBColumn(COLUMN.SEQ.getName(), DBConstants.NOT_NULL, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.FILE_PATH.getName(), DBConstants.EMPTY, DBConstants.BIG_TEXT));
+ addColumn(new DBColumn(COLUMN.PID.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+ addColumn(new DBColumn(COLUMN.TID.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+ addColumn(new DBColumn(COLUMN.FD.getName(), DBConstants.EMPTY, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.API_TYPE.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+ addColumn(new DBColumn(COLUMN.EVENT_TIME.getName(), DBConstants.NOT_NULL, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.API_ID.getName(), DBConstants.EMPTY, DBConstants.INTEGER));
+ addColumn(new DBColumn(COLUMN.ERRNO.getName(), DBConstants.EMPTY, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.IO_SIZE.getName(), DBConstants.EMPTY, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.FILE_SIZE.getName(), DBConstants.EMPTY, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.SIZE.getName(), DBConstants.EMPTY, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.RETURN_VALUE.getName(), DBConstants.EMPTY, DBConstants.BIG_TEXT));
+ addColumn(new DBColumn(COLUMN.ARGS.getName(), DBConstants.EMPTY, DBConstants.BIG_TEXT));
+ addColumn(new DBColumn(COLUMN.TARGET.getName(), DBConstants.NOT_NULL, DBConstants.BOOLEAN));
}
private static final String selectAllColumn = selectAllColumn();
+ private static final String SELECT_API_SERIES = "select "
+ + selectAllColumn
+ +" from "
+ + TABLE_NAME + " where %s <= "
+ + COLUMN.EVENT_TIME.getName() + " and "
+ + COLUMN.EVENT_TIME.getName()
+ + " <= %s";
+
+ private static final String SELECT_FAILED_API_SERIES = "select "
+ + selectAllColumn
+ +" from "
+ + TABLE_NAME + " where %s <= "
+ + COLUMN.EVENT_TIME.getName() + " and "
+ + COLUMN.EVENT_TIME.getName()
+ + " <= %s" + " and "
+ + COLUMN.ERRNO.getName() + " != '0'" + " and "
+ + COLUMN.TARGET.getName() + " = 'true'";
+
+ private static final String SELECT_APIS_FOR_CHILD = "select "
+ + selectAllColumn
+ +" from "
+ + TABLE_NAME + " where "
+ + COLUMN.FILE_PATH.getName() + " = '%s'" + " and "
+ + COLUMN.PID.getName() + " = '%d'" + " and "
+ + COLUMN.TID.getName() + " = '%d'" + " and "
+ + COLUMN.TARGET.getName() + " = 'true'";
- private static final String SELECT_APIS_FOR_CHILD =
- "select "
- + "SEQUENCE_NUMBER, FD, API_TYPE, EVENT_TIME, API_ID, ERRNO, "
- + "IO_SIZE, FILE_SIZE, RETURN_VALUE, ARGUMENTS_VALUE "
- + "from " + API_TABLE
- + " where "
- + "ACCESSOR_ID" + " = '%d'";
-
-
- private static final String SELECT_APIS_FOR_PARENT=
- "select "
- + "api.SEQUENCE_NUMBER, api.FD, api.API_TYPE, api.EVENT_TIME, api.API_ID, api.ERRNO, "
- + "api.IO_SIZE, api.FILE_SIZE, api.RETURN_VALUE, api.ARGUMENTS_VALUE, "
- + "accessor.FILE_PATH, accessor.PID, accessor.TID "
- + "from " + API_TABLE + " api, " + ACCESSOR_TABLE + " accessor "
- + "where "
- + "api.FILE_ID" + " = '%d'"+ " and " + "api.ACCESSOR_ID = accessor.ACCESSOR_ID";
+ private static final String SELECT_APIS_FOR_PARENT= "select "
+ + selectAllColumn
+ + " from "
+ + TABLE_NAME + " where "
+ + COLUMN.FILE_PATH.getName() + " = '%s'" + " and "
+ + COLUMN.TARGET.getName() + " = 'true'";
private static final String SELECT_FILE_EVENT_BY_SEQ = "select "
- + COLUMN.ACCESSOR_ID.name
- + " from " + API_TABLE
- + " where "
- + COLUMN.SEQUENCE_NUMBER.name + " = '%d'";
-
- private static final String SELECT_APIS_COUNT =
- "select COUNT(*) from " + API_TABLE;
+ //+ selectAllColumn
+ + COLUMN.SEQ.getName() + " , "
+ + COLUMN.FILE_PATH.getName() + " , "
+ + COLUMN.PID.getName() + " , "
+ + COLUMN.TID.getName()
+ + " from "
+ + TABLE_NAME + " where "
+ + COLUMN.SEQ.getName() + " = '%d'"+ " and "
+ + COLUMN.TARGET.getName() + " = 'true'";
private static final String SELECT_ALL = "select "
+ selectAllColumn
+ " from "
- + API_TABLE;
+ + TABLE_NAME + " where "
+ + COLUMN.TARGET.getName() + " = 'true'";
- public ResultSet executeQuery(String query) {
- ResultSet rs = SqlConnectionManager.executeQueryRS(query);
- return rs;
+ public void insert(List<List<Object>> insertData) {
+ insertData(insertData);
}
- public List<FileEvent> executeQueryRS(String query) {
- List<FileEvent> resultData = new ArrayList<FileEvent>();
- ResultSet rs = SqlConnectionManager.executeQueryRS(query);
- if (rs != null) {
- try {
- while (rs.next()) {
- FileEvent event= getDataFromResultSet(rs);
- if (event != null) {
- resultData.add(event);
- }
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- SqlConnectionManager.releaseResultSet(rs);
- }
+ // for updating api series chart
+ public List<FileEvent> selectAPISeries(double visibleStartTime,
+ double visibleEndTime) {
+ double selectStartTime = visibleStartTime * TimelineConstants.MEGA_DOUBLE;
+ double selectEndTime = visibleEndTime * TimelineConstants.MEGA_DOUBLE;
+
+ String query = String.format(SELECT_API_SERIES, selectStartTime, selectEndTime);
+
+ List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+ if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+ return null;
}
- return resultData;
+ List<FileEvent> apiList = new ArrayList<FileEvent>();
+ for (List<Object> data : result) {
+ apiList.add(new FileEvent(data));
+ }
+ return apiList;
}
- public FileEvent getDataFromResultSet(ResultSet rs) {
- FileEvent event = null;
- try {
- event = new FileEvent(
- rs.getLong(COLUMN.SEQUENCE_NUMBER.index),
- rs.getInt(COLUMN.FILE_ID.index),
- rs.getInt(COLUMN.ACCESSOR_ID.index),
- rs.getLong(COLUMN.FD.index),
- rs.getInt(COLUMN.API_TYPE.index),
- rs.getInt(COLUMN.API_ID.index),
- rs.getLong(COLUMN.EVENT_TIME.index),
- rs.getLong(COLUMN.FILE_SIZE.index),
- rs.getLong(COLUMN.IO_SIZE.index),
- rs.getString(COLUMN.ARGUMENTS_VALUE.index),
- rs.getString(COLUMN.RETURN_VALUE.index),
- rs.getLong(COLUMN.ERRNO.index)
- );
- } catch (SQLException e) {
- e.printStackTrace();
+ // for updating api series chart
+ public List<FileEvent> selectFailedAPISeries(double visibleStartTime,
+ double visibleEndTime) {
+ double selectStartTime = visibleStartTime
+ * TimelineConstants.MEGA_DOUBLE;
+ double selectEndTime = visibleEndTime * TimelineConstants.MEGA_DOUBLE;
+
+ String query = String.format(SELECT_FAILED_API_SERIES, selectStartTime,
+ selectEndTime);
+
+ List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+ if (null == result || result.size() == 0 || result.get(0).size() == 0) {
return null;
}
- return event;
- }
-
- public void insert(List<List<Object>> insertData) {
- insertData(insertData);
+ List<FileEvent> apiList = new ArrayList<FileEvent>();
+ for (List<Object> data : result) {
+ apiList.add(new FileEvent(data));
+ }
+ return apiList;
}
-
- // for updating api table view and detail view
- public ResultSet selectAPI(int fileId, int accessorId,
+
+ // for updating api table view
+ public List<FileEvent> selectAPITable(String filePath, int pid, int tid,
boolean isParentChart) {
- String query = null;
+ String query = String.format(SELECT_APIS_FOR_CHILD, filePath, pid, tid);
if (isParentChart) {
- query = String.format(SELECT_APIS_FOR_PARENT, fileId);
- }else{
- query = String.format(SELECT_APIS_FOR_CHILD, accessorId);
+ query = String
+ .format(SELECT_APIS_FOR_PARENT, filePath);
+ }
+ List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+ if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+ return null;
}
- return SqlConnectionManager.executeQueryRS(query);
+ List<FileEvent> apiList = new ArrayList<FileEvent>();
+ for (List<Object> data : result) {
+ apiList.add(new FileEvent(data));
+ }
+ return apiList;
}
-
- // to get chart row index
- public ResultSet selectFileEventBySeq(long seq) {
- String query = String.format(SELECT_FILE_EVENT_BY_SEQ, seq);
- return SqlConnectionManager.executeQueryRS(query);
- }
-
- public int getTotal() {
- String query = SELECT_APIS_COUNT;
- ResultSet rs = SqlConnectionManager.executeQueryRS(query);
- int totalCount = 0;
- if (rs != null) {
- try {
- if (rs.next()) {
- totalCount = rs.getInt(1);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- SqlConnectionManager.releaseResultSet(rs);
- }
+ public FileEvent selectFileEventBySeq(long seq) {
+ String query = String.format(SELECT_FILE_EVENT_BY_SEQ, seq);
+ List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+ if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+ return null;
}
- return totalCount;
+ List<Object> data = result.get(0);
+ FileEvent fileEvent = new FileEvent(
+ (Long) data.get(FileApiDB.COLUMN.SEQ.getValue()),
+ (String) data.get(FileApiDB.COLUMN.FILE_PATH.getValue()),
+ (Integer) data.get(FileApiDB.COLUMN.PID.getValue()),
+ (Integer) data.get(FileApiDB.COLUMN.TID.getValue()));
+ return fileEvent;
}
public List<FileEvent> select() {
String query = String.format(SELECT_ALL);
- List<FileEvent> apiList = executeQueryRS(query);
-
+
+ List<FileEvent> apiList = new ArrayList<FileEvent>();
+
+ List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+ if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+ return apiList;
+ }
+
+ for (List<Object> data : result) {
+ apiList.add(new FileEvent(data));
+ }
return apiList;
}
public static String selectAllColumn() {
StringBuffer selectAllColumn = new StringBuffer();
- selectAllColumn.append(COLUMN.SEQUENCE_NUMBER.name);
+ selectAllColumn.append(COLUMN.SEQ.getName());
+ selectAllColumn.append(",");
+ selectAllColumn.append(COLUMN.FILE_PATH.getName());
+ selectAllColumn.append(",");
+ selectAllColumn.append(COLUMN.PID.getName());
+ selectAllColumn.append(",");
+ selectAllColumn.append(COLUMN.TID.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.FILE_ID.name);
+ selectAllColumn.append(COLUMN.FD.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.ACCESSOR_ID.name);
+ selectAllColumn.append(COLUMN.API_TYPE.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.FD.name);
+ selectAllColumn.append(COLUMN.EVENT_TIME.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.API_TYPE.name);
+ selectAllColumn.append(COLUMN.API_ID.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.EVENT_TIME.name);
+ selectAllColumn.append(COLUMN.ERRNO.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.API_ID.name);
+ selectAllColumn.append(COLUMN.IO_SIZE.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.ERRNO.name);
+ selectAllColumn.append(COLUMN.FILE_SIZE.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.IO_SIZE.name);
+ selectAllColumn.append(COLUMN.SIZE.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.FILE_SIZE.name);
+ selectAllColumn.append(COLUMN.RETURN_VALUE.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.RETURN_VALUE.name);
+ selectAllColumn.append(COLUMN.ARGS.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.ARGUMENTS_VALUE.name);
+ selectAllColumn.append(COLUMN.TARGET.getName());
return selectAllColumn.toString();
}
isPrepared = false;
} else {
try {
- prep.setLong(1, (Long)(rowData.get(0)));
- prep.setInt(2, (Integer)(rowData.get(1)));
- prep.setInt(3, (Integer)(rowData.get(2)));
- prep.setLong(4, (Long)(rowData.get(3)));
- prep.setInt(5, (Integer)(rowData.get(4)));
- prep.setLong(6, (Long)(rowData.get(5)));
- prep.setInt(7, (Integer)(rowData.get(6)));
- prep.setLong(8, (Long)(rowData.get(7)));
- prep.setLong(9, (Long)(rowData.get(8)));
- prep.setLong(10, (Long)(rowData.get(9)));
- prep.setString(11, (String)(rowData.get(10)));
- prep.setString(12, (String)(rowData.get(11)));
+ prep.setLong(1, (Long)(rowData.get(COLUMN.SEQ.getValue())));
+ prep.setString(2, (String)(rowData.get(COLUMN.FILE_PATH.getValue())));
+ prep.setInt(3, (Integer)(rowData.get(COLUMN.PID.getValue())));
+ prep.setInt(4, (Integer)(rowData.get(COLUMN.TID.getValue())));
+ prep.setLong(5, (Long)(rowData.get(COLUMN.FD.getValue())));
+ prep.setInt(6, (Integer)(rowData.get(COLUMN.API_TYPE.getValue())));
+ prep.setLong(7, (Long)(rowData.get(COLUMN.EVENT_TIME.getValue())));
+ prep.setInt(8, (Integer)(rowData.get(COLUMN.API_ID.getValue())));
+ prep.setLong(9, (Long)(rowData.get(COLUMN.ERRNO.getValue())));
+ prep.setLong(10, (Long)(rowData.get(COLUMN.IO_SIZE.getValue())));
+ prep.setLong(11, (Long)(rowData.get(COLUMN.FILE_SIZE.getValue())));
+ prep.setLong(12, (Long)(rowData.get(COLUMN.SIZE.getValue())));
+ prep.setString(13, (String)(rowData.get(COLUMN.RETURN_VALUE.getValue())));
+ prep.setString(14, (String)(rowData.get(COLUMN.ARGS.getValue())));
+ prep.setBoolean(15, (Boolean)(rowData.get(COLUMN.TARGET.getValue())));
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
package org.tizen.dynamicanalyzer.ui.file.data;
import java.sql.PreparedStatement;
-import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
// open, close
public class FileStatusDB extends DBTable {
- private static final String STATUS_TABLE = FilePageLabels.FILE_STATUS_DB;
+ private static final String TABLE_NAME = FilePageLabels.FILE_STATUS_DB;
public static enum COLUMN {
- FILE_ID(1, "FILE_ID"),
- API_TYPE(2, "API_TYPE"),
- EVENT_TIME(3, "EVENT_TIME");
+ PID(0, "pid"),
+ TID(1, "tid"),
+ FILE_PATH(2, "filePath"),
+ FD(3, "FD"),
+ API_TYPE(4, "apiType"),
+ EVENT_TIME(5, "eventTime"),
+ ERRNO(6, "errNo");
- private final int index;
+ private final int value;
private final String name;
- private COLUMN(int index, String name) {
- this.index = index;
+ private COLUMN(int value, String name) {
+ this.value = value;
this.name = name;
}
- public int getIndex() {
- return index;
+ public int getValue() {
+ return value;
}
public String getName() {
}
public FileStatusDB() {
- addColumn(new DBColumn(COLUMN.FILE_ID.name, DBConstants.NOT_NULL, DBConstants.INTEGER));
- addColumn(new DBColumn(COLUMN.API_TYPE.name, DBConstants.NOT_NULL, DBConstants.INTEGER));
- addColumn(new DBColumn(COLUMN.EVENT_TIME.name, DBConstants.NOT_NULL, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.PID.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+ addColumn(new DBColumn(COLUMN.TID.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+ addColumn(new DBColumn(COLUMN.FILE_PATH.getName(), DBConstants.NOT_NULL, DBConstants.BIG_TEXT));
+ addColumn(new DBColumn(COLUMN.FD.getName(), DBConstants.EMPTY, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.API_TYPE.getName(), DBConstants.NOT_NULL, DBConstants.INTEGER));
+ addColumn(new DBColumn(COLUMN.EVENT_TIME.getName(), DBConstants.NOT_NULL, DBConstants.LONG));
+ addColumn(new DBColumn(COLUMN.ERRNO.getName(), DBConstants.NOT_NULL, DBConstants.LONG));
}
@Override
public String getTableName() {
- return STATUS_TABLE;
+ return TABLE_NAME;
}
private static final String selectAll = selectAll();
private static final String SELECT_QUERY = "select "
+ selectAll
- + " from " + STATUS_TABLE; //$NON-NLS-1$
-
- public List<FileStatus> executeQueryRS(String query) {
- List<FileStatus> resultData = new ArrayList<FileStatus>();
- ResultSet rs = SqlConnectionManager.executeQueryRS(query);
- if (rs != null) {
- try {
- while (rs.next()) {
- FileStatus status= getDataFromResultSet(rs);
- if (status != null) {
- resultData.add(status);
- }
- }
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- SqlConnectionManager.releaseResultSet(rs);
- }
- }
- return resultData;
- }
-
- public FileStatus getDataFromResultSet(ResultSet rs) {
- FileStatus status = null;
- try {
- status = new FileStatus(
- rs.getInt(COLUMN.FILE_ID.index),
- rs.getInt(COLUMN.API_TYPE.index),
- rs.getLong(COLUMN.EVENT_TIME.index)
- );
- } catch (SQLException e) {
- e.printStackTrace();
- return null;
- }
- return status;
- }
+ + " from " + TABLE_NAME; //$NON-NLS-1$
public void insert(FileStatus insertData) {
List<List<Object>> insertDataList = new ArrayList<List<Object>>();
String query = String.format(SELECT_QUERY);
List<FileStatus> statusList = new ArrayList<FileStatus>();
- statusList = executeQueryRS(query);
+
+ List<List<Object>> result = SqlConnectionManager.executeQuery(query);
+ if (null == result || result.size() == 0 || result.get(0).size() == 0) {
+ return statusList;
+ }
+
+ for (List<Object> data : result) {
+ statusList.add(new FileStatus(data));
+ }
return statusList;
}
public static String selectAll() {
StringBuffer selectAllColumn = new StringBuffer();
- selectAllColumn.append(COLUMN.FILE_ID.name);
+ selectAllColumn.append(COLUMN.PID.getName());
+ selectAllColumn.append(",");
+ selectAllColumn.append(COLUMN.TID.getName());
+ selectAllColumn.append(",");
+ selectAllColumn.append(COLUMN.FILE_PATH.getName());
+ selectAllColumn.append(",");
+ selectAllColumn.append(COLUMN.FD.getName());
+ selectAllColumn.append(",");
+ selectAllColumn.append(COLUMN.API_TYPE.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.API_TYPE.name);
+ selectAllColumn.append(COLUMN.EVENT_TIME.getName());
selectAllColumn.append(",");
- selectAllColumn.append(COLUMN.EVENT_TIME.name);
+ selectAllColumn.append(COLUMN.ERRNO.getName());
return selectAllColumn.toString();
}
isPrepared = false;
} else {
try {
- prep.setInt(1, (Integer)(rowData.get(0)));
- prep.setInt(2, (Integer)(rowData.get(1)));
- prep.setLong(3, (Long)(rowData.get(2)));
+ prep.setInt(1, (Integer)(rowData.get(COLUMN.PID.getValue())));
+ prep.setInt(2, (Integer)(rowData.get(COLUMN.TID.getValue())));
+ prep.setString(3, (String)(rowData.get(COLUMN.FILE_PATH.getValue())));
+ prep.setLong(4, (Long)(rowData.get(COLUMN.FD.getValue())));
+ prep.setInt(5, (Integer)(rowData.get(COLUMN.API_TYPE.getValue())));
+ prep.setLong(6, (Long)(rowData.get(COLUMN.EVENT_TIME.getValue())));
+ prep.setLong(7, (Long)(rowData.get(COLUMN.ERRNO.getValue())));
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
package org.tizen.dynamicanalyzer.ui.file.manager;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Queue;
-import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.atomic.AtomicInteger;
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
import org.tizen.dynamicanalyzer.common.AnalyzerManager;
import org.tizen.dynamicanalyzer.common.DALimit;
import org.tizen.dynamicanalyzer.common.Global;
import org.tizen.dynamicanalyzer.swap.model.data.LogData;
import org.tizen.dynamicanalyzer.swap.model.data.ProfileData;
import org.tizen.dynamicanalyzer.ui.file.model.FileAccess;
-import org.tizen.dynamicanalyzer.ui.file.model.FileAccessor;
import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
import org.tizen.dynamicanalyzer.ui.file.model.FileStatus;
import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager;
private List<FileStatus> fileStatusList = new ArrayList<FileStatus>();
private List<FileAccess> fileAccessList = new ArrayList<FileAccess>();
private List<FileEvent> fileApiList = new ArrayList<FileEvent>();
- private List<FileAccessor> fileAccessorList = new ArrayList<FileAccessor>();
+
+
+ // to find file path, (key(PID, TID, FD), value (file_path))
+ private Map<String, String> fileAccessorMap = new HashMap<String, String>();
+
+ // temporary, file log list for 1second
+ private Queue<List<FileEvent>> fileLogsQueue = new ConcurrentLinkedQueue<List<FileEvent>>();
+
+ // (key(file path), value (read_count or write_count))
+ private Map<String, Integer> concurrentAccessNumMap = new HashMap<String, Integer>();
+ private Map<String, Integer> lockNumMap = new HashMap<String, Integer>();
- private Map<Long, FileEvent> entryMap = new HashMap<Long, FileEvent>(); // to match entry and exit message
- private Map<String, List<Object>> fileAccessorMap= new HashMap<String, List<Object>>();
- private Map<String, List<Object>> filePathMap= new HashMap<String, List<Object>>(); // to find file path
- private Queue<List<FileAccessor>> fileAccessorQueue = new ConcurrentLinkedQueue<List<FileAccessor>>();
- private Map<List<Integer>, List<Integer>> accessorHasLockMap = new HashMap<List<Integer>, List<Integer>>(); //to auto release
- private Map<String, Integer> concurrentAccessNumMap = new HashMap<String, Integer>(); // to check concurrent access
+ // for filtering out non-target file from syscall messages
+ List<String> accessedFilePathList = new ArrayList<String>();
- AtomicInteger idGenerator = new AtomicInteger();
+ // temporary, to check if open event has been sent before the event has been sent
+ private Map<String, FileEvent> sysCallMap = new HashMap<String, FileEvent>();
+ // for searching entry message from exit message
+ Map<Long, FileEvent> entryMap = new HashMap<Long, FileEvent>();
public FileDataMaker() {}
public void clear(){
fileStatusList.clear();
fileAccessList.clear();
- fileApiList.clear();
- fileAccessorList.clear();
fileAccessorMap.clear();
- fileAccessorQueue.clear();
- filePathMap.clear();
- accessorHasLockMap.clear();
+ fileLogsQueue.clear();
concurrentAccessNumMap.clear();
+ lockNumMap.clear();
+ sysCallMap.clear();
+ accessedFilePathList.clear();
entryMap.clear();
}
*/
List<FileEvent> fileEventList = new ArrayList<FileEvent>();
- List<FileAccessor> fileAccessorList = new ArrayList<FileAccessor>();
// 1. In case of target process that the user is interested to analyze
ArrayList<List<Object>> fileApiList = new ArrayList<List<Object>>();
}
// filtering out print log and main func log
+ // TODO: DISCUSSION: checkInvalidApiName: make the SWAP not send
+ // TODO: DISCUSSION: isOpenMainLog: why osp main?
if (checkInvalidApiName(input) || isOpenMainLog(input)) {
continue;
}
input.getArgs(), input.getReturn(), input.getErrno(),
true);
+ switch(input.getFdApiType()) {
+ case LogCenterConstants.FD_API_TYPE_OPEN:
+ accessedFilePathList.add(input.getFilePath());
+ break;
+ case LogCenterConstants.FD_API_TYPE_LOCK_START:
+ case LogCenterConstants.FD_API_TYPE_LOCK_END:
+ String args = input.getArgs();
+ String[] splitPath = args.split(",\\s+");
+ event.setLockType(Integer.parseInt(splitPath[1]));
+ break;
+ }
addFileEvent(fileEventList, event, input);
}
}
if (syscallLogs != null) {
ProfileData profileData = null;
FileEvent event = null;
- FileEvent fakeOpenEvent = null;
String filePath = null;
long fd = 0;
String[] splitPath = args.split(",\\s+");
filePath = splitPath[0];
fd = Long.parseLong(splitPath[1]);
-
- event = new FileEvent(seq, pid, tid, fd, filePath, eventType, time, 0, false);
- fakeOpenEvent = new FileEvent(0, pid, tid, fd, filePath,
- LogCenterConstants.FD_API_TYPE_OPEN, time, 0, false);
+ FileEvent openEvent = null;
- //fileAccessorMap: to filter out non-target files that user in not interested
- //filePathMap: to check if the open event is exist
- if(fileAccessorMap.containsKey(filePath)) {
+ // filtering out non-target files that user in not interested
+ if(accessedFilePathList.contains(filePath)) {
+ // target file
Logger.debug(">> syscall:seq:" + seq + ", pid:" + pid
+ ", tid:" + tid + ", type:" + eventType + ", args:" + args);
if(fd == -1) {
event.setErrNo(-1);
}
-
- String key = createKey(pid, tid, fd);
switch(eventType) {
case LogCenterConstants.FD_API_TYPE_OPEN:
- addFilePathInfo(key, filePath, -1, -1);
+ sysCallMap.put(filePath, event);
addFileEvent(fileEventList, event, null);
break;
case LogCenterConstants.FD_API_TYPE_CLOSE:
- if(filePathMap.containsKey(key)) {
+ openEvent = sysCallMap.get(filePath);
+ if(openEvent != null) {
addFileEvent(fileEventList, event, null);
- removeFilePathInfo(key);
}
break;
case LogCenterConstants.FD_API_TYPE_LOCK_START:
- if(!filePathMap.containsKey(key)){
+ openEvent = sysCallMap.get(filePath);
+ if(openEvent == null) {
+ // make fake open event
+ FileEvent fakeOpenEvent = new FileEvent(0, pid,
+ tid, fd, filePath,
+ LogCenterConstants.FD_API_TYPE_OPEN,
+ time, 0, false);
addFileEvent(fileEventList, fakeOpenEvent, null);
- addFilePathInfo(key, filePath, -1, -1);
}
entryMap.put(seq, event);
+ event.setLockType(Integer.parseInt(splitPath[2]));
addFileEvent(fileEventList, event, null);
break;
case LogCenterConstants.FD_API_TYPE_UNLOCK:
- if(!filePathMap.containsKey(key)){
+ openEvent = sysCallMap.get(filePath);
+ if(openEvent == null) {
+ // make fake open event
+ FileEvent fakeOpenEvent = new FileEvent(0, pid,
+ tid, fd, filePath,
+ LogCenterConstants.FD_API_TYPE_OPEN,
+ time, 0, false);
addFileEvent(fileEventList, fakeOpenEvent, null);
- addFilePathInfo(key, filePath, -1, -1);
}
+ entryMap.put(seq, event);
break;
case LogCenterConstants.FD_API_TYPE_READ_START:
case LogCenterConstants.FD_API_TYPE_WRITE_START:
- if(!filePathMap.containsKey(key)){
+ openEvent = sysCallMap.get(filePath);
+ if(openEvent == null) {
+ // make fake open event
+ FileEvent fakeOpenEvent = new FileEvent(0, pid,
+ tid, fd, filePath,
+ LogCenterConstants.FD_API_TYPE_OPEN,
+ time, 0, false);
addFileEvent(fileEventList, fakeOpenEvent, null);
- addFilePathInfo(key, filePath, -1, -1);
}
entryMap.put(seq, event);
addFileEvent(fileEventList, event, null);
}// else, non-target file
break;
case DataChannelConstants.MSG_FUNCTION_EXIT:
- // for creating read/write/lock end event with MSG_FUNCTION_EXIT
+ // for creating read/write end event with MSG_FUNCTION_EXIT
long entrySeq = profileData.getEntrySeq();
- String ret = profileData.getReturn();
if(entryMap.containsKey(entrySeq)) {
+ Logger.debug(">> syscall entrySeq:" + + entrySeq + "endseq:" + seq + ", pid:" + pid
+ + ", tid:" + tid + ", type:" + eventType);
event = entryMap.get(entrySeq);
if(Long.parseLong(profileData.getReturn()) == -1) {
event.setErrNo(-1);
switch(eventType) {
case LogCenterConstants.FD_API_TYPE_READ_START:
event.setFdApiType(LogCenterConstants.FD_API_TYPE_READ_END);
- event.setTime(time);
addFileEvent(fileEventList, event, null);
break;
case LogCenterConstants.FD_API_TYPE_WRITE_START:
event.setFdApiType(LogCenterConstants.FD_API_TYPE_WRITE_END);
- event.setTime(time);
addFileEvent(fileEventList, event, null);
break;
case LogCenterConstants.FD_API_TYPE_LOCK_START:
event.setFdApiType(LogCenterConstants.FD_API_TYPE_LOCK_END);
- event.setTime(time);
addFileEvent(fileEventList, event, null);
break;
case LogCenterConstants.FD_API_TYPE_UNLOCK:
event.setFdApiType(LogCenterConstants.FD_API_TYPE_UNLOCK);
event.setTime(time);
addFileEvent(fileEventList, event, null);
- break;
default:
break;
}
for(FileEvent data : fileEventList) {
fileApiList.add(data.getDBData());
}
+ fileLogsQueue.add(fileEventList);
FileDataManager.getInstance().getApiDB().insert((List<List<Object>>)fileApiList);
}
-
- Set<String> kyeSet = fileAccessorMap.keySet();
- for (Iterator<String> iterator = kyeSet.iterator(); iterator.hasNext();) {
- String key = (String) iterator.next();
- List<Object> values= fileAccessorMap.get(key);
- Object[] list = values.toArray();
- List<FileAccessor> accessor = (ArrayList<FileAccessor>)list[1];
- fileAccessorList.addAll(accessor);
- }
- fileAccessorQueue.add(fileAccessorList);
}
/**
String key = null;
Logger.debug("pid:" + pid + " tid:" +tid + " apiType:" + apiType);
-
if(isTarget) {
key = createKey(pid, tid, fd);
if(fd == -1) {
- filePath = FilePageLabels.FILE_CHART_UNKNOWN_FILE;
- int[] fileInfo = addFileAccessor(filePath, pid, tid, isTarget);
- event.setFileId(fileInfo[0]);
- event.setAccessorId(fileInfo[1]);
- event.setFilePath(filePath);
- }else if(filePath == null || filePath.equals("")) {
- // get file path except open event
- Object[] fileInfo = getFilePathInfo(key);
- filePath = (String)fileInfo[0];
+ // set the unknown file if the file open or close has been failed
+ event.setFilePath(FilePageLabels.FILE_CHART_UNKNOWN_FILE);
+ } else if(filePath == null || filePath.equals("")) {
+ // set the file path to all normal file event that open and close was succeed
+ filePath = getFilePath(key);
event.setFilePath(filePath);
- event.setFileId((Integer)fileInfo[1]);
- event.setAccessorId((Integer)fileInfo[2]);
}
- }else{
- int[] fileInfo = addFileAccessor(filePath, pid, tid, isTarget);
- event.setFileId(fileInfo[0]);
- event.setAccessorId(fileInfo[1]);
}
switch (apiType) {
case LogCenterConstants.FD_API_TYPE_OPEN:
- if (isTarget) {
- int[] fileInfo = addFileAccessor(filePath, pid, tid, isTarget);
- event.setFileId(fileInfo[0]);
- event.setAccessorId(fileInfo[1]);
- addFilePathInfo(key, filePath, fileInfo[0], fileInfo[1]);
- }
- if (errNo == 0) {
- addStatusData(new FileStatus(event.getFileId(), apiType, eventTime));
+ if(isTarget && errNo == 0) {
+ addFileAccessor(key, filePath);
}
+ addStatusData(new FileStatus(pid, tid, fd, filePath,
+ apiType, eventTime, errNo));
break;
case LogCenterConstants.FD_API_TYPE_CLOSE:
- if(errNo == 0) {
- if(isTarget) {
- removeFilePathInfo(key);
- }
- addStatusData(new FileStatus(event.getFileId(), apiType, eventTime));
- List<Integer> accessorIds = getTidsHasLock(event.getFileId(), pid);
- if(accessorIds != null) {
- // lock auto release
- for(Integer accessor : accessorIds){
- FileAccess access = new FileAccess(accessor,
- LogCenterConstants.FD_API_TYPE_LOCK_AUTORELEASE,
- eventTime, eventTime, FilePageLabels.FILE_CHART_TOOLTIP_LOCK_AUTORELEASE);
- addAccessData(access);
- }
- removeTidsHasLock(event.getFileId(), pid);
- }
+ if(isTarget && errNo == 0) {
+ removeFileAccessor(key);
+ }
+ addStatusData(new FileStatus(pid, tid, fd, filePath,
+ apiType, eventTime, errNo));
+ // if it remains lock without lock release
+ if(getCurrentLockNum(filePath) > 0) {
+ removeLockNum(filePath);
+ addEndAccessData(pid, tid, fd, filePath, eventTime, size,
+ LogCenterConstants.FD_API_TYPE_LOCK_START, errNo);
}
break;
case LogCenterConstants.FD_API_TYPE_READ_START:
- FileAccess readAccess = new FileAccess(event.getAccessorId(), fd, apiType,
- eventTime, FilePageLabels.FILE_CHART_TOOLTIP_READ);
+ FileAccess readAccess = new FileAccess(filePath, pid,
+ tid, fd, apiType, eventTime);
if(checkConcurrentAccess(filePath)) {
readAccess.setWarning();
- readAccess.setTooltip(FilePageLabels.FILE_CHART_TOOLTIP_CONCURRENT_READ);
if(logData != null) {
SummaryDataManager.getInstance().getWarningDataMaker().add(
logData,
addStartAccessData(readAccess);
break;
case LogCenterConstants.FD_API_TYPE_READ_END:
- addEndAccessData(event.getAccessorId(), fd, eventTime,
- size, LogCenterConstants.FD_API_TYPE_READ_START, errNo);
+ addEndAccessData(pid, tid, fd, filePath, eventTime,
+ size, LogCenterConstants.FD_API_TYPE_READ_START, errNo);
removeConcurrentAccess(filePath);
break;
case LogCenterConstants.FD_API_TYPE_WRITE_START:
- FileAccess writeAccess = new FileAccess(event.getAccessorId(), fd, apiType,
- eventTime, FilePageLabels.FILE_CHART_TOOLTIP_WRITE);
+ FileAccess writeAccess = new FileAccess(filePath, pid,
+ tid, fd, apiType, eventTime);
if(checkConcurrentAccess(filePath)) {
writeAccess.setWarning();
- writeAccess.setTooltip(FilePageLabels.FILE_CHART_TOOLTIP_CONCURRENT_WRITE);
if(logData != null) {
SummaryDataManager.getInstance().getWarningDataMaker().add(
logData,
addStartAccessData(writeAccess);
break;
case LogCenterConstants.FD_API_TYPE_WRITE_END:
- addEndAccessData(event.getAccessorId(), fd, eventTime,
+ addEndAccessData(pid, tid, fd, filePath, eventTime,
size, LogCenterConstants.FD_API_TYPE_WRITE_START, errNo);
removeConcurrentAccess(filePath);
break;
case LogCenterConstants.FD_API_TYPE_LOCK_START:
- addStartAccessData(new FileAccess(event.getAccessorId(), fd, apiType,
- eventTime, FilePageLabels.FILE_CHART_TOOLTIP_LOCK));
+ if(event.getLockType() == AnalyzerConstants.F_SETLKW) {// F_SETLKW
+ addStartAccessData(new FileAccess(filePath, pid, tid, fd,
+ LogCenterConstants.FD_API_TYPE_LOCK_WAIT_START, eventTime));
+ }else{
+ addStartAccessData(new FileAccess(filePath, pid, tid, fd,
+ LogCenterConstants.FD_API_TYPE_LOCK_START, eventTime));
+ }
+ addCurrentLock(filePath);
break;
case LogCenterConstants.FD_API_TYPE_LOCK_END:
- addEndAccessData(event.getAccessorId(), fd, eventTime, size,
- LogCenterConstants.FD_API_TYPE_LOCK_START, errNo);
- addFileLock(event.getFileId(), pid, event.getAccessorId());
+ if(event.getLockType() == AnalyzerConstants.F_SETLKW) {// F_SETLKW
+ addEndAccessData(pid, tid, fd, filePath, eventTime,
+ size, LogCenterConstants.FD_API_TYPE_LOCK_WAIT_START, errNo);
+ addStartAccessData(new FileAccess(filePath, pid, tid, fd,
+ LogCenterConstants.FD_API_TYPE_LOCK_START, eventTime));
+ }
break;
case LogCenterConstants.FD_API_TYPE_UNLOCK:
- addAccessData(new FileAccess(event.getAccessorId(), apiType,
- eventTime, eventTime, FilePageLabels.FILE_CHART_TOOLTIP_UNLOCK));
+ removeLockNum(filePath);
+ addEndAccessData(pid, tid, fd, filePath, eventTime,
+ size, LogCenterConstants.FD_API_TYPE_LOCK_START, errNo);
break;
default:
break;
}
-
- // file access fail
- if (errNo != 0) {
- String tooltip = FilePageLabels.FILE_CHART_TOOLTIP_FAIL + " "
- + Global.getFunctionName(event.getApiId());
- FileAccess accessFail = new FileAccess(event.getAccessorId(),
- LogCenterConstants.FD_API_TYPE_FAIL, eventTime, eventTime,
- tooltip);
- addAccessData(accessFail);
- }
-
- if(event.isTarget()) {
- fileEventList.add(event);
- }
+ fileEventList.add(event);
}
public void addStatusData(FileStatus data) {
public void addStartAccessData(FileAccess data) {
fileAccessList.add(data);
}
-
- public void addAccessData(FileAccess data) {
- fileAccessList.add(data);
- FileDataManager.getInstance().getAccessDB().insert(data);
- }
-
+
// in case of file read/write/lock probe/system call
- public void addEndAccessData(int accessorId, long fd, long endTime,
- long ioSize, int apiType, long errNo) {
+ public void addEndAccessData(int pid, int tid, long fd, String filePath,
+ long endTime, long fileSize, int apiType, long errNo) {
for (int i = 0; i < fileAccessList.size(); i++) {
FileAccess data = fileAccessList.get(i);
- if (data.getAccessorId() == accessorId
+ if (data.getPid() == pid
+ && data.getTid() == tid
&& data.getFd() == fd
&& data.getApiType() == apiType
&& data.getEndTime() <= 0){
- if(errNo!=0) {
- fileAccessList.remove(i);
- }else{
- data.setEndTime(endTime);
- if(apiType == LogCenterConstants.FD_API_TYPE_WRITE_START
- || apiType == LogCenterConstants.FD_API_TYPE_READ_START){
- String tooltip = data.getTooltip() + " , " + String.valueOf(ioSize);
- data.setTooltip(tooltip);
- }
- FileDataManager.getInstance().getAccessDB().insert(data);
- }
+ data.setEndTime(endTime);
+ data.setFileSize(fileSize);
+ data.setErroNo(errNo);
+ FileDataManager.getInstance().getAccessDB().insert(data);
break;
}
}
// when failed search start time, dump endEvent.
}
+ public List<FileEvent> getFileEventList() {
+ return fileLogsQueue.poll();
+ }
+
+ public List<FileAccess> getFileAccessList() {
+ return fileAccessList;
+ }
+
+ public List<FileStatus> getFileStatusList() {
+ return fileStatusList;
+ }
+
+ public List<FileEvent> getFileApiList() {
+ return fileApiList;
+ }
+
private String createKey(int pid, int tid, long fd) {
StringBuffer key = new StringBuffer();
key.append(pid);
return key.toString();
}
+ // for the open log: probe only
+ private void addFileAccessor(String key, String filePath) {
+ if(!fileAccessorMap.containsKey(key)) {
+ fileAccessorMap.put(key, filePath);
+ } else {
+ Logger.error(" addFileAccessor:" + key + "is aleady exist" );
+ }
+ }
+
+ // for the close log: probe only
+ private void removeFileAccessor(String key) {
+ if(fileAccessorMap.containsKey(key)) {
+ fileAccessorMap.remove(key);
+ }else {
+ Logger.error(" removeFileAccessor:" + key + "is not exist" );
+ }
+ }
+
+ private String getFilePath(String key) {
+ String filePath = null;
+ if(fileAccessorMap.containsKey(key)) {
+ filePath = fileAccessorMap.get(key);
+ }else{
+ Logger.error("The key is not exist : " + key);
+ }
+ return filePath;
+ }
+
/**
* Check if it is concurrent access
* @param concurrentKey
int num = 0;
if(concurrentAccessNumMap.containsKey(concurrentKey)) {
num = concurrentAccessNumMap.get(concurrentKey);
- }else{
- concurrentAccessNumMap.put(concurrentKey, 1);
}
+ concurrentAccessNumMap.put(concurrentKey, num+1);
if(num > 0) {
return true;
}else {
}
}
- /**
- * Add a new file accessor
- * @param filePath
- * @param pid
- * @param tid
- * @return fileId
- */
- private int[] addFileAccessor(String filePath, int pid, int tid, boolean isTarget) {
- int fileId = -1;
- int accessorId = -1;
- if(fileAccessorMap.containsKey(filePath)) {
- List<Object> set = fileAccessorMap.get(filePath);
- Object[] list = set.toArray();
- fileId = (Integer) list[0];
- List<FileAccessor> accessorList = (ArrayList<FileAccessor>) list[1];
- boolean isExistAccessor = false;
- for(FileAccessor accessor : accessorList) {
- if(pid == accessor.getPid() && tid == accessor.getTid()) {
- accessorId = accessor.getAccessorId();
- isExistAccessor = true;
- break;
- }
- }
- if(!isExistAccessor){
- // add a new file accessor
- accessorId = idGenerator.incrementAndGet();
- FileAccessor newAccessor = new FileAccessor(
- accessorId, fileId, filePath, pid, tid, isTarget);
- accessorList.add(newAccessor);
- set.add(fileId);
- set.add(accessorList);
- fileAccessorMap.put(filePath, set);
- FileDataManager.getInstance().getAccessorDB().insert(newAccessor);
- }
- }else{
- fileId = fileAccessorMap.size()+1;
- accessorId = idGenerator.incrementAndGet();
- List<FileAccessor> accessorList = new ArrayList<FileAccessor>();
- FileAccessor newAccessor = new FileAccessor(accessorId,
- fileId, filePath, pid, tid, isTarget);
- accessorList.add(newAccessor);
- List<Object> set = new ArrayList<Object>();
- set.add(fileId);
- set.add(accessorList);
- fileAccessorMap.put(filePath, set);
- FileDataManager.getInstance().getAccessorDB().insert(newAccessor);
- }
- return new int[]{fileId, accessorId};
- }
-
-
- /**
- * Get file path
- * @param key
- * @return Object[0]:filePath,Object[1]:fileId, Object[2]:accessorId
- */
- private Object[] getFilePathInfo(String key) {
- Object[] list = null;
- if(filePathMap.containsKey(key)) {
- List<Object> set = filePathMap.get(key);
- list = set.toArray();
- }else{
- Logger.error("The key is not exist : " + key);
- }
- return list;
- }
-
- /**
- * Add file path information
- * @param key
- * @param filePath
- * @param fileId
- * @param accessorId
- */
- private void addFilePathInfo(String key, String filePath, int fileId, int accessorId){
- if(!filePathMap.containsKey(key)) {
- List<Object> set = new ArrayList<Object>();
- set.add((String)filePath);
- set.add((Integer)fileId);
- set.add((Integer)accessorId);
- filePathMap.put(key, set);
- }
- }
-
- private void removeFilePathInfo(String key) {
- if(filePathMap.containsKey(key)) {
- filePathMap.remove(key);
- }
- }
-
- /**
- * Add file lock information
- * @param fileId
- * @param pid
- * @param accessorId
- */
- private void addFileLock(int fileId, int pid, int accessorId) {
- List<Integer> key = Arrays.asList(fileId, pid);
- List<Integer> tids = new ArrayList<Integer>();
- if(accessorHasLockMap.containsKey(key)){
- tids = accessorHasLockMap.get(key);
- if(!tids.contains(accessorId)) {
- tids.add(accessorId);
- accessorHasLockMap.put(key, tids);
- }
- }else{
- tids.add(accessorId);
- accessorHasLockMap.put(key, tids);
+ private int addCurrentLock(String lockKey) {
+ int num = 0;
+ if(lockNumMap.containsKey(lockKey)) {
+ num = lockNumMap.get(lockKey);
+ lockNumMap.put(lockKey, num+1);
}
+ lockNumMap.put(lockKey, num+1);
+ return num;
}
- /**
- * Get TIDs which has file locks
- * @param fileId
- * @param pid
- * @return
- */
- private List<Integer> getTidsHasLock(int fileId, int pid) {
- List<Integer> tids = null;
- List<Integer> key = Arrays.asList(fileId, pid);
- if(accessorHasLockMap.containsKey(key)) {
- tids = accessorHasLockMap.get(key);
+ private int getCurrentLockNum(String lockKey) {
+ int num = 0;
+ if(lockNumMap.containsKey(lockKey)) {
+ num = lockNumMap.get(lockKey);
}
- return tids;
+ return num;
}
-
- private void removeTidsHasLock(int fileId, int pid) {
- List<Integer> key = Arrays.asList(fileId, pid);
- if(accessorHasLockMap.containsKey(key)) {
- accessorHasLockMap.remove(key);
+
+ private void removeLockNum(String lockKey) {
+ int num = 0;
+ if(lockNumMap.containsKey(lockKey)) {
+ num = lockNumMap.get(lockKey);
+ lockNumMap.put(lockKey, num-1);
+ } else {
+ Logger.error("Couldn't get current lock num!, key :" + lockKey);
}
}
}
}
+
/**
* filtering out STDIN/STDOUT ops
* @param input
return false;
}
- public List<FileAccessor> getFileAccessor() {
- return fileAccessorQueue.poll();
- }
-
- public List<FileAccess> getFileAccessList() {
- return fileAccessList;
- }
-
- public List<FileStatus> getFileStatusList() {
- return fileStatusList;
- }
-
- public List<FileEvent> getFileApiList() {
- return fileApiList;
- }
-
- public List<FileAccessor> getFileAccessorList() {
- return fileAccessorList;
- }
-
public void setFileAccessList(List<FileAccess> fileAccessList) {
this.fileAccessList = fileAccessList;
}
public void setFileApiList(List<FileEvent> fileApiList) {
this.fileApiList = fileApiList;
}
-
- public void setFileAccessorList(List<FileAccessor> fileAccessorList) {
- this.fileAccessorList = fileAccessorList;
- }
}
package org.tizen.dynamicanalyzer.ui.file.manager;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.tizen.dynamicanalyzer.swap.logparser.LogPackage;
import org.tizen.dynamicanalyzer.swap.logparser.PageDataManager;
import org.tizen.dynamicanalyzer.ui.file.data.FileAccessDB;
-import org.tizen.dynamicanalyzer.ui.file.data.FileAccessorDB;
import org.tizen.dynamicanalyzer.ui.file.data.FileApiDB;
import org.tizen.dynamicanalyzer.ui.file.data.FileStatusDB;
import org.tizen.dynamicanalyzer.ui.file.model.FileAccess;
-import org.tizen.dynamicanalyzer.ui.file.model.FileSelectedData;
+import org.tizen.dynamicanalyzer.ui.file.model.FileEvent;
public class FileDataManager extends PageDataManager {
private FileAccessDB accessDB = null;
private FileApiDB apiDB = null;
private FileStatusDB statusDB = null;
- private FileAccessorDB accessorDB = null;
- private FileSelectedData selectedData = null;
+ private List<FileEvent> selectedTableAPIList = new ArrayList<FileEvent>();
private FileDataManager() {
dataMaker = new FileDataMaker();
accessDB = new FileAccessDB();
apiDB = new FileApiDB();
statusDB = new FileStatusDB();
- accessorDB = new FileAccessorDB();
}
public void clear() {
accessDB = null;
apiDB = null;
statusDB = null;
- accessorDB = null;
- selectedData = null;
+ selectedTableAPIList = new ArrayList<FileEvent>();
}
public FileAccessDB getAccessDB(){
return statusDB;
}
- public FileAccessorDB getAccessorDB() {
- return accessorDB;
- }
-
public void saveData(Map<String, String> dataMap) {
List<FileAccess> accessList = dataMaker.getFileAccessList();
if (accessList != null ) {
if (dataMaker.getFileApiList().size() == 0) {
dataMaker.setFileApiList(apiDB.select());
}
-
- if (dataMaker.getFileAccessorList().size() == 0) {
- dataMaker.setFileAccessorList(accessorDB.select());
- }
}
public FileDataMaker getFileChartDataMaker() {
return dataMaker;
}
- public void setSelectedData(FileSelectedData selectedData) {
- this.selectedData = selectedData;
+ public List<FileEvent> getSelectedTableAPIList() {
+ return selectedTableAPIList;
}
-
- public FileSelectedData getSelectedData() {
- return selectedData;
+
+ public void setSelectedTableAPIList(
+ List<FileEvent> selectedTableAPIList) {
+ this.selectedTableAPIList = selectedTableAPIList;
}
/**
import java.util.ArrayList;
import java.util.List;
+import org.tizen.dynamicanalyzer.ui.file.data.FileAccessDB;
public class FileAccess {
- private int accessorId = -1;
+ private String filePath = null;
+ private int pid = -1;
+ private int tid = -1;
private long fd = -1;
- private int apiType = -1; // r/w, concurrent r/w, lock, lock wait, unlock, auto release, fail
+ private int apiType = -1; // only read, write, lock event
private long startTime = -1;
private long endTime = -1;
- private String tooltip = null;
+ private long erroNo = 0;
+ private long fileSize = -1;
private boolean isAlreadyReading = false;
private boolean isAlreadyWriting = false;
private boolean isAlreadyLocking = false;
private boolean isWarning = false;
- public FileAccess(int accessorId, long fd, int apiType, long startTime, String tooltip) {
- this.fd = fd;
- this.accessorId = accessorId;
+ public FileAccess(String filePath, int pid, int tid, int apiType, long startTime) {
+ this.filePath = filePath;
+ this.pid = pid;
+ this.tid = tid;
this.apiType = apiType;
this.startTime = startTime;
- this.tooltip = tooltip;
}
-
- public FileAccess(int accessorId, int apiType, long startTime, long endTime, String tooltip) {
- this.accessorId = accessorId;
+
+ public FileAccess(String filePath, int pid, int tid, long fd, int apiType, long startTime) {
+ this.filePath = filePath;
+ this.pid = pid;
+ this.tid = tid;
+ this.fd = fd;
this.apiType = apiType;
this.startTime = startTime;
- this.endTime = endTime;
- this.tooltip = tooltip;
}
public List<Object> getDBData() {
List<Object> data = new ArrayList<Object>();
- data.add(this.accessorId);
- data.add(this.apiType);
- data.add(this.startTime);
- data.add(this.endTime);
- data.add(this.tooltip);
+ data.add(new Integer(this.pid));
+ data.add(new Integer(this.tid));
+ data.add(this.filePath);
+ data.add(new Long(this.fd));
+ data.add(new Integer(this.apiType));
+ data.add(new Long(this.startTime));
+ data.add(new Long(this.endTime));
+ data.add(new Long(this.erroNo));
+ data.add(new Long(this.fileSize));
return data;
}
+
+ public FileAccess(List<Object> data) {
+ this.pid = (Integer)data.get(FileAccessDB.COLUMN.PID.getValue());
+ this.tid = (Integer)data.get(FileAccessDB.COLUMN.TID.getValue());
+ this.filePath = (String)data.get(FileAccessDB.COLUMN.FILE_PATH.getValue());
+ this.fd = (Long)data.get(FileAccessDB.COLUMN.FD.getValue());
+ this.apiType = (Integer)data.get(FileAccessDB.COLUMN.API_TYPE.getValue());
+ this.startTime = (Long)data.get(FileAccessDB.COLUMN.START_TIME.getValue());
+ this.endTime = (Long)data.get(FileAccessDB.COLUMN.END_TIME.getValue());
+ this.erroNo = (Long)data.get(FileAccessDB.COLUMN.ERRNO.getValue());
+ this.fileSize = (Long)data.get(FileAccessDB.COLUMN.FILE_SIZE.getValue());
+ }
+
+ public String getFilePath() {
+ return filePath;
+ }
+
+ public void setFilePath(String filePath) {
+ this.filePath = filePath;
+ }
+
+ public int getPid() {
+ return pid;
+ }
+
+ public void setPid(int pid) {
+ this.pid = pid;
+ }
+
+ public int getTid() {
+ return tid;
+ }
+
+ public void setTid(int tid) {
+ this.tid = tid;
+ }
+
+ public long getFd() {
+ return fd;
+ }
+
+ public void setFd(long fd) {
+ this.fd = fd;
+ }
public int getApiType() {
return apiType;
this.isAlreadyLocking = isAlreadyLocking;
}
+ public long getErroNo() {
+ return erroNo;
+ }
+
+ public void setErroNo(long erroNo) {
+ this.erroNo = erroNo;
+ }
- public String getTooltip() {
- return tooltip;
+ public long getFileSize() {
+ return fileSize;
}
- public void setTooltip(String tooltip) {
- this.tooltip = tooltip;
+ public void setFileSize(long fileSize) {
+ this.fileSize = fileSize;
}
public void setWarning() {
public boolean isWarning() {
return isWarning;
}
-
- public void setFd(long fd) {
- this.fd = fd;
- }
-
- public long getFd() {
- return fd;
- }
-
- public int getAccessorId() {
- return accessorId;
- }
-
- public void setAccessorId(int accessorId) {
- this.accessorId = accessorId;
- }
}
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyeran Kim <Hyeran74.kim@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.file.model;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-public class FileAccessor {
- private int accessorId = -1;
- private int fileId = -1;
- private String filePath = null;
- private int pid = -1;
- private int tid = -1;
- private boolean isTarget = true;
-
- public FileAccessor(int accessorId, int fileId, String filePath, int pid, int tid, boolean isTarget) {
- this.accessorId = accessorId;
- this.fileId = fileId;
- this.filePath = filePath;
- this.pid = pid;
- this.tid = tid;
- this.isTarget = isTarget;
- }
-
- public List<Object> getDBData() {
- List<Object> data = new ArrayList<Object>();
- data.add(this.accessorId);
- data.add(this.fileId);
- data.add(this.filePath);
- data.add(this.pid);
- data.add(this.tid);
- data.add(this.isTarget);
- return data;
- }
-
- public int getAccessorId() {
- return accessorId;
- }
- public void setAccessorId(int accessorId) {
- this.accessorId = accessorId;
- }
- public int getFileId() {
- return fileId;
- }
- public void setFileId(int fileId) {
- this.fileId = fileId;
- }
- public String getFilePath() {
- return filePath;
- }
- public void setFilePath(String filePath) {
- this.filePath = filePath;
- }
- public int getPid() {
- return pid;
- }
- public void setPid(int pid) {
- this.pid = pid;
- }
- public int getTid() {
- return tid;
- }
- public void setTid(int tid) {
- this.tid = tid;
- }
- public boolean isTarget() {
- return isTarget;
- }
- public void setIsTarget(boolean isTarget) {
- this.isTarget = isTarget;
- }
-
- @Override
- public boolean equals(Object o){
- FileAccessor s = (FileAccessor) o;
- if(this.fileId == s.getFileId()
- && this.pid == s.getPid()
- && this.tid == s.getTid()){
- return true;
- } else {
- return false;
- }
- }
-}
import java.util.List;
import org.tizen.dynamicanalyzer.swap.model.data.FileData;
+import org.tizen.dynamicanalyzer.ui.file.data.FileApiDB;
public class FileEvent extends FileData{
+ // TODO considering apiId
private int apiId = -1;
+ private long ioSize =-1;
private boolean target = false;
private int lockType = -1;
-
- protected int fileId = -1;
- protected int accessorId = -1;
-
+
public FileEvent() { }
// for non-target process
this.target = target;
}
- public FileEvent(long seq, String filePath, int pid, int tid,
- long fd, int apiType, int apiId, long eventTime, long fileSize, long size,
- String args, String returnVal, long errNo){
+ public FileEvent(long seq, String filePath, int pid, int tid) {
this.seq = seq;
+ this.filePath = filePath;
this.pid = pid;
this.tid = tid;
- this.filePath = filePath;
- this.fdValue = fd;
- this.fdApiType = apiType;
- this.apiId = apiId;
- this.time = eventTime;
- this.fileSize = fileSize;
- this.size = size;
- this.args = args;
- this.ret = returnVal;
- this.errno = errNo;
}
-
- public FileEvent(long seq, int accessorId, int fileId,
- long fd, int apiType, int apiId, long eventTime, long fileSize, long size,
- String args, String returnVal, long errNo){
- this.seq = seq;
- this.fileId = fileId;
- this.accessorId = accessorId;
- this.fdValue = fd;
- this.fdApiType = apiType;
- this.apiId = apiId;
- this.time = eventTime;
- this.fileSize = fileSize;
- this.size = size;
- this.args = args;
- this.ret = returnVal;
- this.errno = errNo;
+
+ public FileEvent(List<Object> data) {
+ this.seq = (Long) data.get(FileApiDB.COLUMN.SEQ.getValue());
+ this.filePath = (String) data.get(FileApiDB.COLUMN.FILE_PATH.getValue());
+ this.pid = (Integer) data.get(FileApiDB.COLUMN.PID.getValue());
+ this.tid = (Integer) data.get(FileApiDB.COLUMN.TID.getValue());
+ this.fdValue = (Long) data.get(FileApiDB.COLUMN.FD.getValue());
+ this.fdApiType = (Integer) data.get(FileApiDB.COLUMN.API_TYPE.getValue());
+ this.apiId = (Integer) data.get(FileApiDB.COLUMN.API_ID.getValue());
+ this.time = (Long) data.get(FileApiDB.COLUMN.EVENT_TIME.getValue());
+ this.fileSize = (Long) data.get(FileApiDB.COLUMN.FILE_SIZE.getValue());
+ this.size = (Long) data.get(FileApiDB.COLUMN.SIZE.getValue());
+ this.ret = (String) data.get(FileApiDB.COLUMN.RETURN_VALUE.getValue());
+ this.args = (String) data.get(FileApiDB.COLUMN.ARGS.getValue());
+ this.errno = (Long) data.get(FileApiDB.COLUMN.ERRNO.getValue());
+ this.target = (Boolean) data.get(FileApiDB.COLUMN.TARGET.getValue());
}
public List<Object> getDBData() {
List<Object> data = new ArrayList<Object>();
data.add(this.seq);
- data.add(this.fileId);
- data.add(this.accessorId);
+ data.add(this.filePath);
+ data.add(this.pid);
+ data.add(this.tid);
data.add(this.fdValue);
data.add(this.fdApiType);
data.add(this.time);
data.add(this.apiId);
data.add(this.errno);
+ data.add(this.ioSize);
data.add(this.fileSize);
data.add(this.size);
data.add(this.ret);
data.add(this.args);
-
+ data.add(this.target);
return data;
}
this.seq = seqNo;
}
+ public long getIoSize() {
+ return ioSize;
+ }
+
+ public void setIoSize(long ioSize) {
+ this.ioSize = ioSize;
+ }
+
public long getFileSize() {
return fileSize;
}
public int getLockType() {
return lockType;
}
-
- public void setFileId(int fileId) {
- this.fileId = fileId;
- }
-
- public int getFileId() {
- return fileId;
- }
-
- public int getAccessorId() {
- return accessorId;
- }
-
- public void setAccessorId(int accessorId) {
- this.accessorId = accessorId;
- }
}
public class FileSelectedData extends FileEvent{
private boolean isParentChart = false;
- private FileAccessor accessor = null;
- public FileSelectedData(FileAccessor accessor, boolean isParentChart) {
- this.accessor = accessor;
- this.accessorId = accessor.getAccessorId();
- this.fileId = accessor.getFileId();
- }
-
- /*public FileSelectedData(int accessorId, int fileId, boolean isParentChart) {
- this.fileId = fileId;
- this.accessorId = accessorId;
+ public FileSelectedData(String filePath, int pid, int tid,long fd, boolean isParentChart) {
+ this.filePath = filePath;
+ this.pid = pid;
+ this.tid = tid;
+ this.fdValue = fd;
this.isParentChart = isParentChart;
- }*/
+ }
- public FileSelectedData(int fileId, boolean isParentChart) {
- this.fileId = fileId;
+ public FileSelectedData(String filePath, int pid, int tid, long fd,
+ long fileSize, boolean isParentChart) {
+ this.pid = pid;
+ this.tid = tid;
+ this.fdValue = fd;
this.isParentChart = isParentChart;
+ this.filePath = filePath;
+ this.fileSize = fileSize;
+ }
+
+ public int getPid() {
+ return pid;
+ }
+
+ public void setPid(int pid) {
+ this.pid = pid;
+ }
+
+ public int getTid() {
+ return tid;
+ }
+
+ public void setTid(int tid) {
+ this.tid = tid;
}
-
-
+
public boolean isParentChart() {
return isParentChart;
}
this.isParentChart = isParentChart;
}
- public FileAccessor getFileAccessor() {
- return accessor;
+ public String getFilePath(){
+ return filePath;
}
public String getFileName() {
return fileName;
}
+ public long getFileSize() {
+ return fileSize;
+ }
+
+ public void getFileSize(long fileSize) {
+ this.fileSize = fileSize;
+ }
+
}
import java.util.ArrayList;
import java.util.List;
+import org.tizen.dynamicanalyzer.ui.file.data.FileStatusDB;
+
public class FileStatus {
- private int fileId = -1;
+ private String filePath = null;
+ private int pid = -1;
+ private int tid = -1;
+ private long fd = -1;
private int apiType = -1; // only open, close event
private long eventTime = -1;
-
- public FileStatus(int fileId, int apiType, long eventTime) {
- this.fileId = fileId;
+ private long errNo = 0;
+
+ public FileStatus(int pid, int tid, long fd, String filePath,
+ int apiType, long eventTime, long errNo) {
+ this.filePath = filePath;
+ this.pid = pid;
+ this.tid = tid;
+ this.fd = fd;
this.apiType = apiType;
this.eventTime = eventTime;
+ this.errNo = errNo;
}
public List<Object> getDBData() {
List<Object> data = new ArrayList<Object>();
- data.add(this.fileId);
+ data.add(this.pid);
+ data.add(this.tid);
+ data.add(this.filePath);
+ data.add(this.fd);
data.add(this.apiType);
data.add(this.eventTime);
+ data.add(this.errNo);
return data;
}
+ public FileStatus(List<Object> data) {
+ this.pid = (Integer)data.get(FileStatusDB.COLUMN.PID.getValue());
+ this.tid = (Integer)data.get(FileStatusDB.COLUMN.TID.getValue());
+ this.filePath = (String)data.get(FileStatusDB.COLUMN.FILE_PATH.getValue());
+ this.fd = (Long)data.get(FileStatusDB.COLUMN.FD.getValue());
+ this.apiType = (Integer)data.get(FileStatusDB.COLUMN.API_TYPE.getValue());
+ this.eventTime = (Long)data.get(FileStatusDB.COLUMN.EVENT_TIME.getValue());
+ this.errNo = (Long)data.get(FileStatusDB.COLUMN.ERRNO.getValue());
+ }
+
+ public String getFilePath() {
+ return filePath;
+ }
+
+ public void setFilePath(String filePath) {
+ this.filePath = filePath;
+ }
+
+ public int getPid() {
+ return pid;
+ }
+
+ public void setPid(int pid) {
+ this.pid = pid;
+ }
+
+ public int getTid() {
+ return tid;
+ }
+
+ public void setTid(int tid) {
+ this.tid = tid;
+ }
+
+ public long getFd() {
+ return fd;
+ }
+
+ public void setFd(long fd) {
+ this.fd = fd;
+ }
+
public int getApiType() {
return apiType;
}
public void setApiType(int apiType) {
this.apiType = apiType;
}
- public void setFileId(int fileId) {
- this.fileId = fileId;
+
+ public void setErrNo(long errNo) {
+ this.errNo = errNo;
+ }
+
+ public long getErrNo() {
+ return errNo;
}
- public int getFileId() {
- return fileId;
- }
}
public class CallStackDataDBTable extends DBTable {
private static final String TABLENAME="CallStackData";
private static final String queryto_withSeq = "where %s = %s";
-
+ //TODO: use Array type of DB
public enum COLUMN {
SEQ(0, "SEQNUMBER"),
- ADDRESS_ARRAY(1, "ADDRESS_ARRAY");
+ ORDER(1, "CallStackOrder"),
+ PCADDR(2, "PcAddr");
public final int index;
public final String name;
public CallStackDataDBTable() {
addColumn(new DBColumn(COLUMN.SEQ.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.ADDRESS_ARRAY.name, DBConstants.NOT_NULL, DBConstants.BIGINT_ARRAY));
+ addColumn(new DBColumn(COLUMN.ORDER.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.PCADDR.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
}
public List<List<Object>> getCallStackAddrsFromDB(long seq) {
COLUMN.SEQ.name, seq);
List<String> selectColumn = new ArrayList<String>();
- selectColumn.add(COLUMN.ADDRESS_ARRAY.name);
+ selectColumn.add(COLUMN.PCADDR.name);
return selectData(selectColumn, where, new IResultSet() {
@Override
public List<Object> extractDataFromResultSet(ResultSet rs) {
List<Object> row = new ArrayList<Object>();
- row.add(getArrayFromResultSet(rs, 1, Long.valueOf(0)));
+ try {
+ row.add(Long.valueOf(rs.getLong(1)));
+ } catch (SQLException e) {
+ e.printStackTrace();
+ return null;
+ }
+
return row;
}
});
} else {
try {
prep.setLong(COLUMN.SEQ.index + 1, (Long) (rowData.get(COLUMN.SEQ.index)));
- setArrayToPreparedStatement(COLUMN.ADDRESS_ARRAY.index, DBConstants.LONG,
- prep, rowData);
+ prep.setInt(COLUMN.ORDER.index + 1, (Integer) (rowData.get(COLUMN.ORDER.index)));
+ prep.setLong(COLUMN.PCADDR.index + 1, (Long) (rowData.get(COLUMN.PCADDR.index)));
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
package org.tizen.dynamicanalyzer.ui.info.callstack;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
-import java.util.Map;
-import java.util.NavigableMap;
-import java.util.SortedMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
-import org.tizen.dynamicanalyzer.common.AnalyzerManager;
-import org.tizen.dynamicanalyzer.common.DALimit;
import org.tizen.dynamicanalyzer.common.Global;
-import org.tizen.dynamicanalyzer.nl.ConfigureLabels;
import org.tizen.dynamicanalyzer.project.BinaryInfo;
-import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler;
-import org.tizen.dynamicanalyzer.ui.toolbar.setting.SettingDataManager;
-import org.tizen.dynamicanalyzer.ui.toolbar.setting.TargetData;
// inserter thread for callstackdata, callstackunit
public class CallStackInserter implements Runnable {
private static volatile Thread inserterThread = null;
private static final int FULL_COUNT = 100;
private static boolean stopTrace = false;
- private static long lastInsertSeq = -1;
private CallStackDataDBTable callStackDataTable = null;
private CallStackUnitDBTable callStackUnitTable = null;
while ((csd = callstackDataQueue.poll()) != null) {
List<Long> addrs = csd.getAddrs();
-
- List<Object> insertRowData = new ArrayList<Object>();
- try {
- insertRowData.add(new Long(csd.getSeq()));
- insertRowData.add(addrs);
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
+ int size = addrs.size();
+
+ for(int i = 0; i < size; i++) {
+ List<Object> insertRowData = new ArrayList<Object>();
+ try {
+ insertRowData.add(new Long(csd.getSeq()));
+ insertRowData.add(new Integer(i));
+ insertRowData.add(new Long(addrs.get(i)));
+ } catch (ArrayIndexOutOfBoundsException e) {
+ e.printStackTrace();
+ }
+ insertData.add(insertRowData);
}
- insertData.add(insertRowData);
-
- lastInsertSeq = csd.getSeq();
if ((insertCount-- <= 0) && (stopTrace == false)) {
break;
}
if (insertData.size() > 0) {
callStackDataTable.insertData(insertData);
}
- // remove unnecessary callstackdata from memory
- TargetData target = SettingDataManager.getInstance().getConnectedTarget();
- if (target.isSelectedFeature(ConfigureLabels.FEATURE_FUNCTION_SAMPLING)) {
- // sample feature is on
- long lastSampleSeq = FunctionUsageProfiler.getInstance().getLastSampleSeq();
- if (lastSampleSeq != -1) {
- if (lastSampleSeq <= lastInsertSeq) {
- removeCallstackData(lastSampleSeq);
- } else { // lastSampleSeq > lastInsertSeq
- removeCallstackData(lastInsertSeq);
- }
- }
- } else { // sample feature is off
- // callstackdata is not needed in memory after insertion to DB
- removeCallstackData(lastInsertSeq);
- }
- // clear SeqTimeMap if number of entries over > 1M
- List<Integer> tids = AnalyzerManager.getCallstackManager().getTidsOfSeqTimeMap();
- int size = tids.size();
- for (int i = 0; i < size; i++) {
- NavigableMap<Long, Long> seqByTimeMap =
- AnalyzerManager.getCallstackManager()
- .getSeqTimeByTidMap(tids.get(i));
- if (seqByTimeMap.size() > DALimit.MAX_CALLSTACK_SEQTIMEMAP_SIZE) {
- seqByTimeMap.clear();
- }
- }
}
public void offerCallstackUnit(CallStackUnit csu) {
callstackDataQueue.offer(csd);
}
}
-
- private void removeCallstackData(long seq) {
- NavigableMap<Long, CallStackData> callstackDataMap = AnalyzerManager
- .getCallstackManager().getCallStackDataBySeqMap();
- SortedMap<Long, CallStackData> headMap = callstackDataMap.headMap(seq);
- Iterator<Map.Entry<Long, CallStackData>> itr = headMap.entrySet().iterator();
- while (itr.hasNext()) {
- itr.next();
- itr.remove();
- }
- }
@Override
public void run() {
package org.tizen.dynamicanalyzer.ui.info.callstack;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
time = logData.getTime();
}
+ Map<Long, CallStackData> cdMap = AnalyzerManager
+ .getCallstackManager().getCallStackDataBySeqMap();
Map<Long, CallStackUnit> addrMap = AnalyzerManager
.getCallstackManager().getCallStackApiAddrByPidMap(pid);
- if (null == addrMap) {
+ if (null == cdMap || null == addrMap) {
return;
}
-
+ CallStackData csd = cdMap.get(seqNum);
List<Long> addrs = null;
- addrs = AnalyzerManager.getCallstackManager().getCallstackAddrListFromSeq(seqNum);
- if (null == addrs) {
- return;
+ if (null == csd) { // callstackdata is not in memory, find from DB
+ List<List<Object>> callStackAddrs =
+ CallStackInserter.getInstance().getCallStackDataTable()
+ .getCallStackAddrsFromDB(seqNum);
+
+ if (null == callStackAddrs || 0 == callStackAddrs.size()
+ || null == callStackAddrs.get(0)) { // not found
+ return;
+ }
+
+ int size = callStackAddrs.size();
+ addrs = new ArrayList<Long>();
+ for (int i = 0; i < size; i++) {
+ addrs.add((Long) callStackAddrs.get(i).get(0));
+ }
+ } else { // callstackdata is in memory
+ addrs = csd.getAddrs();
}
-
+
int size = addrs.size();
for (int i = 0; i < size; i++) {
String hexAddr = Formatter.toHexString(addrs.get(i).toString());
CallStackUnit api = addrMap.get(addrs.get(i));
if (null == api) {
- Logger.debug("callstackunit for addr : " + hexAddr + " not found");
+ Logger.debug("callstackunit for addr : " + hexAddr + " not found");
return;
}
public void clear() {
leakDataMaker.clear();
- warningDataMaker.clear();
}
@Override
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.NavigableMap;
+import java.util.SortedMap;
import org.tizen.dynamicanalyzer.common.AnalyzerManager;
import org.tizen.dynamicanalyzer.common.Global;
import org.tizen.dynamicanalyzer.swap.logparser.PageDataManager;
import org.tizen.dynamicanalyzer.swap.model.data.LogData;
import org.tizen.dynamicanalyzer.swap.model.data.ProfileData;
+import org.tizen.dynamicanalyzer.ui.info.callstack.CallStackData;
import org.tizen.dynamicanalyzer.ui.toolbar.setting.SettingDataManager;
import org.tizen.dynamicanalyzer.ui.toolbar.setting.TargetData;
public static final String APPLICATION_KEY = "profiling_app_bin_key";//$NON-NLS-1$
public static final String DEPENDENT_LIB_KEY = "profiling_dependent_lib_key";//$NON-NLS-1$
public static final String UNKNOWN = CommonConstants.EMPTY;
+ public static final int CALLSTACKDATA_MAX = 5000;
private static FunctionUsageProfiler instance = null;
private boolean isSetSamplePeriod = false;
private FunctionSampleDBTable functionSampleTable = null;
private HashMap<Integer, ProfileDataMaker> profileDataMakerMap = null;
-
- private static long lastSampleSeq = -1;
- private Object sampleSeqLock = new Object();
-
- public void setLastSampleSeq(long seq) {
- synchronized(sampleSeqLock) {
- lastSampleSeq = seq;
- }
- }
-
- public long getLastSampleSeq() {
- synchronized(sampleSeqLock) {
- return lastSampleSeq;
- }
- }
private FunctionUsageProfiler() {
profilingDataTable = new ProfilingDataDBTable();
for (int j = 0; j < count; j++) {
ProfilingChildData data = pDataList.get(j);
List<Integer> childList = data.getChildren();
+ int childCount = childList.size();
try {
- List<Object> insertRowData = new ArrayList<Object>();
- insertRowData.add(Integer.valueOf(data.getProfilingDataID()));
- insertRowData.add(new Integer(data.getPid()));
- insertRowData.add(childList);
- insertData.add(insertRowData);
+ for (int k = 0; k < childCount; k++)
+ {
+ List<Object> insertRowData = new ArrayList<Object>();
+ insertRowData.add(Integer.valueOf(data.getProfilingDataID()));
+ insertRowData.add(new Integer(data.getPid()));
+ insertRowData.add(new Integer(childList.get(k)));
+ insertData.add(insertRowData);
+ }
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
getInstance().getProfileDataMakerByPid(
sample.get(i).getPid())
.makeFunctionUsageProfileData(sampleLog);
- // set LastSampleSeq
- NavigableMap<Long, Long> seqByTimeMap =
- AnalyzerManager.getCallstackManager()
- .getSeqTimeByTidMap(sampleLog.getTid());
- // find the time of callstackdata which was made
- // right before the current sample time
- // callstackdatas made before that time is needless
- Long lastTime = seqByTimeMap
- .floorKey(sampleLog.getTime());
- if (lastTime != null) {
- Long lastSeq = seqByTimeMap.get(lastTime);
- setLastSampleSeq(lastSeq);
+ Map<Long, CallStackData> callstackDataMap = AnalyzerManager.getCallstackManager()
+ .getCallStackDataBySeqMap();
+ if (callstackDataMap.size() > CALLSTACKDATA_MAX) {
+ // remove unnecessary callstackdata from memory
+ NavigableMap<Long, Long> seqByTimeMap =
+ AnalyzerManager.getCallstackManager()
+ .getSeqTimeByTidMap(sampleLog.getTid());
+ // find the time of callstackdata which was made
+ // right before the current sample time
+ // callstackdatas made before that time is needless
+ Long lastTime = seqByTimeMap
+ .floorKey(sampleLog.getTime());
+ if (null != lastTime) {
+ SortedMap<Long, Long> headMap =
+ seqByTimeMap.headMap(lastTime);
+ Iterator<Map.Entry<Long, Long>> itr = headMap
+ .entrySet().iterator();
+ while (itr.hasNext()) {
+ Map.Entry<Long, Long> entry = itr.next();
+ callstackDataMap.remove(entry.getValue());
+ itr.remove();
+ }
+ }
}
// save to DB
try {
functionSampleTable.insertData(insertData);
}
}
+ } else { // sampling is off, callstackdata is not needed in memory
+ // need to maintain callstackdata until insertion to DB is finished
+ Map<Long, CallStackData> callstackDataMap = AnalyzerManager.getCallstackManager()
+ .getCallStackDataBySeqMap();
+ if (callstackDataMap.size() > CALLSTACKDATA_MAX) {
+ callstackDataMap.clear();
+ }
}
}
}
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.NavigableMap;
import java.util.concurrent.ConcurrentHashMap;
import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
int pid = sampleLog.getPid();
if(DACommunicator.isSWAPVersion()) {
- long userCallstackSeq;
+ long seq;
int tid = sampleLog.getTid();
long sampleTime = sampleLog.getTime();
-
+ long callstackTime;
+ Long longTime = null;
CallStackData callstackData;
+ NavigableMap<Long, Long> seqByTimeMap = callstackManager.getSeqTimeByTidMap(tid);
Map<Long, CallStackUnit> addrMap = callstackManager
.getCallStackApiAddrByPidMap(pid);
addrMap.put(selfAddr, newCallstackUnit);
}
- userCallstackSeq = callstackManager.getSeqOfUserCallstackForTime(tid, sampleTime);
- if (-1 != userCallstackSeq) {
- callstackData = callstackManager.getCallStackDataBySeqMap().get(userCallstackSeq);
- if (null == callstackData) {
- Logger.debug("CallStackData is not found for seq : " + userCallstackSeq);
- addrs = new ArrayList<Long>();
- addrs.add(selfAddr);
- } else {
- addrs = new ArrayList<Long>(callstackData.getAddrs());
- for(int i = 0; i < addrs.size(); i++) {
- if(addrs.get(i) == 0) {
- addrs.remove(i);
- }
+ longTime = seqByTimeMap.floorKey(sampleTime);
+ if(null != longTime) {
+ callstackTime = longTime.longValue();
+ seq = seqByTimeMap.get(callstackTime);
+ callstackData = callstackManager.getCallStackDataBySeqMap().get(seq);
+ addrs = new ArrayList<Long>(callstackData.getAddrs());
+ for(int i = 0; i < addrs.size(); i++) {
+ if(addrs.get(i) == 0) {
+ addrs.remove(i);
}
- addrs.add(0, selfAddr);
}
+ addrs.add(0, selfAddr);
} else {
// Logger.debug("makeFunctionUsageProfileData : cannot find seq by time");
addrs = new ArrayList<Long>();
public class ProfilingChildDataDBTable extends DBTable {
private static final String TABLENAME="ProfilingChildData";
-
+ // TODO: use Array type of DB
public enum COLUMN {
PROFILINGDATAID(0, "ProfilingDataID"),
PID(1, "PID"),
- CHILDSEQARRAY(2, "CHILD_SEQUENCE_ARRAY");
+ CHILDDATAID(2, "ChildDataID");
public final int index;
public final String name;
public ProfilingChildDataDBTable() {
addColumn(new DBColumn(COLUMN.PROFILINGDATAID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.CHILDSEQARRAY.name, DBConstants.NOT_NULL, DBConstants.INTEGER_ARRAY));
- }
+ addColumn(new DBColumn(COLUMN.CHILDDATAID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+ }
public List<List<Object>> getProfilingChildDataFromDB() {
return selectAllColumnData(null);
try {
prep.setInt(COLUMN.PROFILINGDATAID.index + 1, (Integer) (rowData.get(COLUMN.PROFILINGDATAID.index)));
prep.setInt(COLUMN.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index)));
- setArrayToPreparedStatement(COLUMN.CHILDSEQARRAY.index, DBConstants.DBTYPE_INT4, prep, rowData);
+ prep.setInt(COLUMN.CHILDDATAID.index + 1, (Integer) (rowData.get(COLUMN.CHILDDATAID.index)));
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
try {
row.add(Integer.valueOf(rs.getInt(1)));
row.add(Integer.valueOf(rs.getInt(2)));
- row.add(getArrayFromResultSet(rs, 3, Integer.valueOf(0)));
+ row.add(Integer.valueOf(rs.getInt(3)));
} catch (SQLException e) {
e.printStackTrace();
return null;
* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
* WooJin Jung <woojin2.jung@samsung.com>
* yeongtaik byeon <yeongtaik.byeon@samsung.com>
* Juyoung Kim <j0.kim@samsung.com>
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
import org.eclipse.nebula.widgets.grid.GridItem;
import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
import org.tizen.dynamicanalyzer.error.ErrorCodeManager;
import org.tizen.dynamicanalyzer.model.TableInput;
+import org.tizen.dynamicanalyzer.swap.model.data.LogData;
import org.tizen.dynamicanalyzer.swap.model.data.ProbeCommonData;
-import org.tizen.dynamicanalyzer.swap.model.data.SyncData;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.db.SyncAPIDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.db.ThreadAPIDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncDataEvent;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncAPIDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.data.ThreadAPIDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData;
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadData;
+import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
+import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
import org.tizen.dynamicanalyzer.ui.widgets.table.DAApiListTableComposite;
import org.tizen.dynamicanalyzer.ui.widgets.table.DATableDataFormat;
import org.tizen.dynamicanalyzer.util.Logger;
import org.tizen.dynamicanalyzer.utils.Formatter;
public class ThreadAPIListTable extends DAApiListTableComposite {
-
+
private enum API {
- SEQ(1), APICALLTIME(2), APIID(3), PID(4), TID(5), ARGUMENT(6), RETURN(7), ERRORNO(8);
+ SEQ(1),
+ APICALLTIME(2),
+ APIID(3),
+ PID(4),
+ TID(5),
+ ARGUMENT(6),
+ RETURN(7),
+ ERRORNO(8);
+
public final int index;
-
+
API(int index) {
this.index = index;
}
}
-
+
public ThreadAPIListTable(Composite parent, int compStyle, int tableStyle) {
super(parent, compStyle, tableStyle);
table.addSelectionListener(new SelectionListener() {
+
@Override
public void widgetSelected(SelectionEvent e) {
GridItem[] items = table.getSelection();
}
long startTime = 0;
long endTime = 0;
+
DATableDataFormat dataFormat;
for (int i = 0; i < items.length; i++) {
dataFormat = (DATableDataFormat) items[i].getData();
endTime = itemTime;
}
}
- DASelectionData selData = new DASelectionData(ThreadPage.listViewID, startTime,
- endTime, items, table);
+
+ DASelectionData selData = new DASelectionData(
+ ThreadPage.listViewID, startTime, endTime, items, table);
AnalyzerManager.getCurrentPage().updateView(selData);
}
@Override
protected List<TableInput> makeTableInput() {
- List<TableInput> input = new ArrayList<TableInput>();
- ThreadAPIListView view = (ThreadAPIListView) AnalyzerManager.getCurrentPage().getView(
- ThreadPage.listViewID);
- if(null == view){
- return input;
- }
+ ThreadAPIListView view = (ThreadAPIListView) AnalyzerManager
+ .getCurrentPage().getView(ThreadPage.listViewID);
+
ThreadPageData data = view.getPageData();
- if (null == data) {
- return input;
- }
+ long rangeStartTime = view.getAnalysisStartTime();
+ long rangeEndTime = view.getAnaysisEndTime();
- int selectID = -1;
- List<ProbeCommonData> syncAPIList = new ArrayList<ProbeCommonData>();
- if (data instanceof ThreadPageThreadData) {
- ThreadPageThreadData tData = (ThreadPageThreadData) data;
- selectID = tData.getThreadDataID();
- } else if (data instanceof ThreadPageSyncData) {
- ThreadPageSyncData sData = (ThreadPageSyncData) data;
- selectID = sData.getSyncDataID();
- syncAPIList.addAll(getSyncAPIOfNotInsert(selectID));
- } else {
- Logger.debug("failed to selectionD data in Thread Page API table");
+ if (null == data) {
return null;
}
- syncAPIList.addAll(selectAPIListFromDB(data, selectID));
- sortListByTime(syncAPIList);
- for (ProbeCommonData apiData : syncAPIList) {
- List<String> contentText = new ArrayList<String>();
- List<String> contentData = new ArrayList<String>();
-
- contentText.add(0, String.valueOf(apiData.getSeq()));
- contentData.add(String.valueOf(apiData.getSeq()));
-
- contentText.add(Formatter.toTimeFormat(apiData.getTime()));
- contentData.add(Long.toString(apiData.getTime()));
-
- contentText.add(Integer.toString(apiData.getPid()));
- contentData.add(Integer.toString(apiData.getPid()));
-
- contentText.add(Long.toString(apiData.getTid()));
- contentData.add(Long.toString(apiData.getTid()));
-
- contentText.add(apiData.getApiName());
- contentData.add(apiData.getApiName());
-
- contentText.add(apiData.getArgs());
- contentData.add(apiData.getArgs());
-
- contentText.add(apiData.getReturn());
- contentData.add(apiData.getReturn());
-
- String errMsg = ErrorCodeManager.getInatance().getErrorCode(apiData.getErrno()).name();
- if (null == errMsg) {
- errMsg = "undefined error code";
- }
- contentText.add(errMsg);
- contentData.add(errMsg);
-
- DATableDataFormat tableData = new DATableDataFormat(apiData.getSeq());
- tableData.setLogData(apiData);
- tableData.getData().addAll(contentData);
- TableInput tableInput = new TableInput();
- tableInput.setText(contentText);
- tableInput.setData(tableData);
- if (!errMsg.contains("SUCCESS")) {//$NON-NLS-1$
- tableInput.setFailed(true);
- }
- input.add(tableInput);
- if (apiData.getTime() >= view.getAnalysisStartTime()
- && apiData.getTime() <= view.getAnaysisEndTime()) {
- tableInput.setInRange(true);
- }
- }
- return input;
- }
-
- private List<ProbeCommonData> selectAPIListFromDB(ThreadPageData data, int selectID) {
- List<ProbeCommonData> returnList = new ArrayList<ProbeCommonData>();
- if(null == data){
- return returnList;
- }
+ List<TableInput> input = new ArrayList<TableInput>();
ResultSet rs = null;
+
if (data instanceof ThreadPageThreadData) {
- String query = String.format(ThreadAPIDBTable.SELECT_QUERY, selectID);
+ ThreadPageThreadData tData = (ThreadPageThreadData) data;
+ String query = String.format(ThreadAPIDBTable.SELECT_QUERY, tData.getThreadDataID());
rs = SqlConnectionManager.executeQueryRS(query);
if (null == rs) {
Logger.debug("failed to query api data in thread API table");
- return returnList;
+ return null;
}
} else if (data instanceof ThreadPageSyncData) {
- String query = String.format(SyncAPIDBTable.SELECT_QUERY, selectID);
+ ThreadPageSyncData sData = (ThreadPageSyncData) data;
+ String query = String.format(SyncAPIDBTable.SELECT_QUERY, sData.getSyncDataID());
rs = SqlConnectionManager.executeQueryRS(query);
if (null == rs) {
Logger.debug("failed to query api data in sync API table");
- return returnList;
- }
+ return null;
+ }
} else {
Logger.error("unknown thread page data type!!");
- return returnList;
+ return null;
}
+
try {
- while (rs.next()) {
- returnList.add(makeProbeCommonData(rs));
+ while(rs.next()) {
+ ProbeCommonData apiData = makeProbeCommonData(rs);
+
+ int selectedPid = ToolbarArea.getInstance().getSelectedPid();
+ if (selectedPid != 0) {
+ if (selectedPid != apiData.getPid()) {
+ continue;
+ }
+ }
+ List<String> contentText = new ArrayList<String>();
+ List<String> contentData = new ArrayList<String>();
+
+ contentText.add(0, String.valueOf(apiData.getSeq()));
+ contentData.add(String.valueOf(apiData.getSeq()));
+
+ contentText.add(Formatter.toTimeFormat(apiData.getTime()));
+ contentData.add(Long.toString(apiData.getTime()));
+
+ contentText.add(Integer.toString(apiData.getPid()));
+ contentData.add(Integer.toString(apiData.getPid()));
+
+ contentText.add(Long.toString(apiData.getTid()));
+ contentData.add(Long.toString(apiData.getTid()));
+
+ contentText.add(apiData.getApiName());
+ contentData.add(apiData.getApiName());
+
+ contentText.add(apiData.getArgs());
+ contentData.add(apiData.getArgs());
+
+ contentText.add(apiData.getReturn());
+ contentData.add(apiData.getReturn());
+
+ String errMsg = ErrorCodeManager.getInatance()
+ .getErrorCode(apiData.getErrno()).name();
+ if (null == errMsg) {
+ errMsg = "undefined error code";
+ }
+ contentText.add(errMsg);
+ contentData.add(errMsg);
+
+ DATableDataFormat tableData = new DATableDataFormat(apiData.getSeq());
+ tableData.setLogData(apiData);
+ tableData.getData().addAll(contentData);
+ TableInput tableInput = new TableInput();
+ tableInput.setText(contentText);
+ tableInput.setData(tableData);
+ if (!errMsg.contains("SUCCESS")) {//$NON-NLS-1$
+ tableInput.setFailed(true);
+ }
+ input.add(tableInput);
+
+ if (apiData.getTime() >= rangeStartTime && apiData.getTime() <= rangeEndTime) {
+ tableInput.setInRange(true);
+ }
}
} catch (SQLException e) {
e.printStackTrace();
SqlConnectionManager.releaseResultSet(rs);
}
}
- return returnList;
- }
- private List<ProbeCommonData> getSyncAPIOfNotInsert(int selectID) {
- List<ProbeCommonData> returnList = new ArrayList<ProbeCommonData>();
- List<ThreadPageSyncDataEvent> notInsertList = ThreadDataManager.getInstance()
- .getSyncDataMaker().getNotInsertSyncEventList();
- for (ThreadPageSyncDataEvent event : notInsertList) {
- if (event.getSyncDataID() != selectID) {
- continue;
- }
- returnList.add((SyncData) event.getContents());
- }
- return returnList;
+ return input;
}
- private void sortListByTime(List<ProbeCommonData> list) {
- Comparator<ProbeCommonData> comparator = new Comparator<ProbeCommonData>() {
- @Override
- public int compare(ProbeCommonData arg0, ProbeCommonData arg1) {
- if (arg0.getTime() > arg1.getTime()) {
- return 1;
- } else if (arg0.getTime() < arg1.getTime()) {
- return -1;
- } else {
- return 0;
- }
+ protected void actionSetStartEnd(int type) {
+ GridItem item = table.getItem(mousePoint);
+ if (null != item) {
+ LogData data = ((DATableDataFormat) item.getData()).getLogData();
+ long inputTime = data.getTime();
+ double startTime = -1;
+ double endTime = -1;
+
+ if (type == START_TIME) {
+ rangeDataManager.setMarkerStartTime(inputTime);
+ startTime = inputTime / TimelineConstants.MEGA_DOUBLE;
+ endTime = rangeDataManager.getMarkerEndTime()
+ / TimelineConstants.MEGA_DOUBLE;
+
+ } else if (type == END_TIME) {
+ rangeDataManager.setMarkerEndTime(inputTime);
+ endTime = inputTime / TimelineConstants.MEGA_DOUBLE;
+ startTime = rangeDataManager.getMarkerStartTime()
+ / TimelineConstants.MEGA_DOUBLE;
}
- };
- Collections.sort(list, comparator);
- }
+ ThreadChartView chartview = (ThreadChartView) (AnalyzerManager
+ .getCurrentPage().getView(ThreadPage.chartViewID));
+
+ chartview.setRangeMarker(startTime, endTime);
+ }
+ }
+
private ProbeCommonData makeProbeCommonData(ResultSet rs) {
ProbeCommonData pData = null;
try {
String args = rs.getString(API.ARGUMENT.index);
String returnValue = rs.getString(API.RETURN.index);
int errorno = rs.getInt(API.ERRORNO.index);
-
+
pData = new ProbeCommonData(seq, time, apiID, pid, tid, args, returnValue, errorno);
} catch (SQLException e) {
e.printStackTrace();
* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
* WooJin Jung <woojin2.jung@samsung.com>
* yeongtaik byeon <yeongtaik.byeon@samsung.com>
* Jooyoul Lee <jy.exe.lee@samsung.com>
import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
import org.tizen.dynamicanalyzer.resources.ColorResources;
import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageData;
-import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage;
import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
import org.tizen.dynamicanalyzer.ui.widgets.table.TableColumnSizePackListener;
import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite;
private long selectionEndTime = 0;
private int preSelectionPid = -1;
- private String[] columnNames = { ThreadPageLabels.THREAD_API_LIST_VIEW_INDEX,
- ThreadPageLabels.THREAD_API_LIST_VIEW_TIME, ThreadPageLabels.THREAD_API_LIST_VIEW_PID,
+ private String[] columnNames = {
+ ThreadPageLabels.THREAD_API_LIST_VIEW_INDEX,
+ ThreadPageLabels.THREAD_API_LIST_VIEW_TIME,
+ ThreadPageLabels.THREAD_API_LIST_VIEW_PID,
ThreadPageLabels.THREAD_API_LIST_VIEW_THREAD_ID,
ThreadPageLabels.THREAD_API_LIST_VIEW_NAME,
ThreadPageLabels.THREAD_API_LIST_VIEW_PARAMETER,
private int[] columnSizes = { 35, 70, 45, 45, 180, 240, 75, 100 };
- private int[] columnAlignment = { SWT.RIGHT, SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT,
- SWT.LEFT, SWT.LEFT };
+ private int[] columnAlignment = { SWT.RIGHT, SWT.LEFT, SWT.LEFT, SWT.LEFT,
+ SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT };
- int[] sortTypes = { AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM,
+ int[] sortTypes = { AnalyzerConstants.SORT_TYPE_NUM,
AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM,
- AnalyzerConstants.SORT_TYPE_STRING, AnalyzerConstants.SORT_TYPE_STRING,
- AnalyzerConstants.SORT_TYPE_STRING, AnalyzerConstants.SORT_TYPE_STRING };
+ AnalyzerConstants.SORT_TYPE_NUM,
+ AnalyzerConstants.SORT_TYPE_STRING,
+ AnalyzerConstants.SORT_TYPE_STRING,
+ AnalyzerConstants.SORT_TYPE_STRING,
+ AnalyzerConstants.SORT_TYPE_STRING };
+
+ // int[] sourceColumns = { LogCenterConstants.SEQUENCE_NUMBER_INDEX,
+ // LogCenterConstants.TIME_INDEX, LogCenterConstants.APINAME_INDEX,
+ // LogCenterConstants.INPUTPARM_INDEX,
+ // LogCenterConstants.THREAD_ID_INDEX,
+ // LogCenterConstants.RETURN_INDEX, LogCenterConstants.ERROR_INDEX };
ThreadAPIListTable tableComp = null;
Composite contents = getContentArea();
contents.setBackground(ColorResources.WINDOW_BG_COLOR);
contents.setLayout(new FillLayout());
- tableComp = new ThreadAPIListTable(contents, SWT.NONE, SWT.MULTI | SWT.BORDER
- | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
+ tableComp = new ThreadAPIListTable(contents, SWT.NONE, SWT.MULTI
+ | SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
tableComp.setTableName("Thread API List");
tableComp.setSortTypes(sortTypes);
+ // tableComp.setSourceColumns(sourceColumns);
tableComp.setColumnAlignment(columnAlignment);
tableComp.setColumns(columnNames);
tableComp.setColumnSize(columnSizes);
- contents.addControlListener(new TableColumnSizePackListener(tableComp, columnSizes));
+ contents.addControlListener(new TableColumnSizePackListener(tableComp,
+ columnSizes));
}
@Override
long newAnalysisEndTime = 0;
if (RangeDataManager.getInstance().isBeingAnalyzed()) {
- newAnalysisStartTime = RangeDataManager.getInstance().getAnalysisStartTime();
- newAnalysisEndTime = RangeDataManager.getInstance().getAnalysisEndTime();
+ newAnalysisStartTime = RangeDataManager.getInstance()
+ .getAnalysisStartTime();
+ newAnalysisEndTime = RangeDataManager.getInstance()
+ .getAnalysisEndTime();
} else {
newAnalysisStartTime = 0;
newAnalysisEndTime = 0;
}
- if (newAnalysisStartTime != analysisStartTime || newAnalysisEndTime != analysisEndTime) {
+ if (newAnalysisStartTime != analysisStartTime
+ || newAnalysisEndTime != analysisEndTime) {
analysisStartTime = newAnalysisStartTime;
analysisEndTime = newAnalysisEndTime;
tableComp.updateTable();
}
preSelectionPid = selectedPid;
- tableComp.updateTable();
+ if (tableComp.getTable().getItemCount() > 0
+ && data.getContents().size() != tableComp.getTable()
+ .getItemCount()) {
+ tableComp.updateTable();
+ }
}
@Override
public void updateView(DAViewData vdata) {
- if(vdata.getViewID().equals(TimelinePage.timelineViewID)){
- return;
- }
- if (vdata instanceof DASelectionData == false) {
- return;
- }
- tableComp.clear();
- DASelectionData data = (DASelectionData) vdata;
- ThreadPageData pageData;
-
- if (data.getData() instanceof ThreadPageData) {
- pageData = (ThreadPageData) data.getData();
- this.data = pageData;
- } else if (data.getData() instanceof Integer) {
- this.data = null;
- }
+ if (vdata instanceof DASelectionData) {
+ DASelectionData data = (DASelectionData) vdata;
+ ThreadPageData pageData;
- selectionStartTime = data.getStartTime();
- selectionEndTime = data.getEndTime();
+ if (data.getData() instanceof ThreadPageData) {
+ pageData = (ThreadPageData) data.getData();
+ this.data = pageData;
+ } else if (data.getData() instanceof Integer) {
+ this.data = null;
+ }
- tableComp.getTable().removeAll();
- tableComp.updateTable();
- tableComp.setSelectionByTime(selectionStartTime, selectionEndTime);
+ selectionStartTime = data.getStartTime();
+ selectionEndTime = data.getEndTime();
+
+ tableComp.getTable().removeAll();
+ tableComp.updateTable();
+ tableComp.setSelectionByTime(selectionStartTime, selectionEndTime);
+ }
}
@Override
--- /dev/null
+/*
+ * Dynamic Analyzer
+ *
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.ui.thread;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+import org.tizen.dynamicanalyzer.swap.channel.data.DataChannelConstants;
+import org.tizen.dynamicanalyzer.swap.logparser.LogPackage;
+import org.tizen.dynamicanalyzer.swap.logparser.Logs;
+import org.tizen.dynamicanalyzer.swap.logparser.PageDataManager;
+import org.tizen.dynamicanalyzer.swap.model.data.LogData;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncAPIDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncDataDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncEventDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.data.ThreadAPIDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.data.ThreadEventDBTable;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataEvent;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataManager;
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadData;
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadDataEvent;
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadDataManager;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
+
+public class ThreadChartManager extends PageDataManager {
+ private static ThreadChartManager instance = null;
+
+ private ThreadDataDBTable threadDataTable = null;
+ private ThreadEventDBTable threadEventTable = null;
+ private ThreadAPIDBTable threadAPITable = null;
+
+ private SyncDataDBTable syncDataTable = null;
+ private SyncEventDBTable syncEventTable = null;
+ private SyncAPIDBTable syncAPITable = null;
+
+ private ThreadPageThreadDataManager tManager;
+ private ThreadPageSyncDataManager sManager;
+
+ private enum THREADEVENT {
+ EVENTTIME(0),
+ TID(1),
+ APITYPE(2),
+ TOOLTIP(3),
+ ERRORNO(4),
+ EVENTTYPE(5),
+ THREADTYPE(6),
+ CALLERID(7);
+
+ public final int index;
+
+ THREADEVENT(int index) {
+ this.index = index;
+ }
+ }
+
+ private enum SYNCEVENT {
+ EVENTTIME(0),
+ APITYPE(1),
+ TOOLTIP(2),
+ ERRORNO(3),
+ SYNCVALUE(4);
+
+ public final int index;
+
+ SYNCEVENT(int index) {
+ this.index = index;
+ }
+ }
+
+ private ThreadChartManager() {
+ threadDataTable = new ThreadDataDBTable();
+ threadEventTable = new ThreadEventDBTable();
+ threadAPITable = new ThreadAPIDBTable();
+
+ syncDataTable = new SyncDataDBTable();
+ syncEventTable = new SyncEventDBTable();
+ syncAPITable = new SyncAPIDBTable();
+
+ tManager = new ThreadPageThreadDataManager(null);
+ sManager = new ThreadPageSyncDataManager(null);
+ }
+
+ public static ThreadChartManager getInstance() {
+ if (null == instance) {
+ instance = new ThreadChartManager();
+ }
+ return instance;
+ }
+
+ public ThreadPageThreadDataManager getThreadDataManager() {
+ return tManager;
+ }
+
+ public ThreadEventDBTable getThreadEventDBTable() {
+ return threadEventTable;
+ }
+
+ public ThreadAPIDBTable getThreadAPIDBTable() {
+ return threadAPITable;
+ }
+
+ public SyncDataDBTable getSyncDataDBTable() {
+ return syncDataTable;
+ }
+
+ public SyncEventDBTable getSyncEventDBTable() {
+ return syncEventTable;
+ }
+
+ public SyncAPIDBTable getSyncAPIDBTable() {
+ return syncAPITable;
+ }
+
+ private List<LogData> getLogsFromLogPackage(LogPackage logPack,
+ int logCenterConstants) {
+ Logs logs = logPack.getLogs(logCenterConstants);
+ if (null == logs || logs.getRawLogs().size() == 0) {
+ return null;
+ }
+ List<LogData> ret = logs.getLogs();
+
+ return ret;
+ }
+
+ public void update() {
+ tManager.checkUpdate();
+ sManager.checkUpdate();
+ }
+
+ public void clear() {
+ tManager.clear();
+ sManager.clear();
+ }
+
+ @Override
+ protected void onThreadStop() {
+ saveRemainingThreadData();
+ }
+
+ private void saveRemainingThreadData() {
+ // ThreadPageThreadData
+ List<ThreadPageThreadData> remainedThreadData = tManager.getRows();
+ int size = remainedThreadData.size();
+ for (int i = 0; i < size; i++) {
+ ThreadPageThreadData threadData = remainedThreadData.get(i);
+ if (threadData.getEndTime() < 0) {
+ saveThreadPageThreadData(threadData);
+ }
+ }
+ }
+
+ public void openData(Map<String, String> dataMap) {
+ openThreadData();
+ }
+
+ private void openThreadData() {
+ //TODO: use ResultSet
+ // load ThreadPageThreadData
+ List<List<Object>> threadDatas = threadDataTable.getThreadDataFromDB();
+ int size = threadDatas.size();
+ for (int i = 0; i < size; i++) {
+ List<Object>rowData = threadDatas.get(i);
+ int id = (Integer) rowData.get(ThreadDataDBTable.COLUMN.THREADDATAID.index);
+ int pid = (Integer) rowData.get(ThreadDataDBTable.COLUMN.PID.index);
+ int tid = (Integer) rowData.get(ThreadDataDBTable.COLUMN.TID.index);
+ byte threadType = (Byte) rowData.get(ThreadDataDBTable.COLUMN.THREADTYPE.index);
+ byte attrType = (Byte) rowData.get(ThreadDataDBTable.COLUMN.ATTRIBUTETYPE.index);
+ String attributeType = ThreadPageThreadDataManager.getAttrTypeByTypeInt(attrType);
+ long startTime = (Long) rowData.get(ThreadDataDBTable.COLUMN.STARTTIME.index);
+ long endTime = (Long) rowData.get(ThreadDataDBTable.COLUMN.ENDTIME.index);
+ int functionID = (Integer) rowData.get(ThreadDataDBTable.COLUMN.FUNCTIONID.index);
+ String className = (String) rowData.get(ThreadDataDBTable.COLUMN.CLASSNAME.index);
+
+ ThreadPageThreadData threadData = new ThreadPageThreadData(id, pid, tid, threadType,
+ attributeType, startTime, endTime, functionID, className);
+ tManager.pushRow(threadData);
+
+ // load ThreadPageThreadDataEvent for the ThreadPageThreadData
+ String query = String.format(ThreadEventDBTable.SELECT_QUERY, id);
+ List<List<Object>> threadEvents = SqlConnectionManager.executeQuery(query);
+ int eventSize = threadEvents.size();
+ for (int j = 0; j < eventSize; j++) {
+ ThreadPageThreadDataEvent threadEvent = makeThreadEvent(threadEvents.get(j));
+ threadData.pushEvent(threadEvent);
+ }
+ }
+
+ // load ThreadPageSyncData
+// List<List<Object>> syncDatas = SqlConnectionManager.executeQuery(SyncDataDBTable.SELECT_QUERY);
+ List<List<Object>> syncDatas = syncDataTable.getSyncDataFromDB();
+ int syncSize = syncDatas.size();
+ for (int i = 0; i < syncSize; i++) {
+ ThreadPageSyncData syncData = makeSyncData(syncDatas.get(i));
+ // load ThreadPageSyncDataEvent for the ThreadPageSyncData
+ String query = String.format(SyncEventDBTable.SELECT_QUERY, syncData.getSyncDataID());
+ List<List<Object>> syncEvents = SqlConnectionManager.executeQuery(query);
+ int eventSize = syncEvents.size();
+ for (int j = 0; j < eventSize; j++) {
+ ThreadPageSyncDataEvent syncEvent = makeSyncEvent(syncEvents.get(j));
+ syncData.pushEvent(syncEvent);
+ }
+
+ switch (syncData.getSyncDataType()) {
+ case ThreadPageSyncData.SYNC_PARENT:
+ case ThreadPageSyncData.SYNC_CHILD:
+ sManager.pushRow(syncData);
+ break;
+ case ThreadPageSyncData.THREAD_CHILD:
+ tManager.pushSyncData(syncData);
+ break;
+ default:
+ Logger.error("unknown sync data type");
+ }
+ }
+ }
+
+ private ThreadPageThreadDataEvent makeThreadEvent(List<Object> rowData) {
+ ThreadPageThreadDataEvent threadEvent = null;
+ long time = (Long) rowData.get(THREADEVENT.EVENTTIME.index);
+ int tid = (Integer) rowData.get(THREADEVENT.TID.index);
+ String tidStr = String.valueOf(tid);
+ byte apiType = (Byte) rowData.get(THREADEVENT.APITYPE.index);
+ String tooltip = (String) rowData.get(THREADEVENT.TOOLTIP.index);
+ long errorNum = (Long) rowData.get(THREADEVENT.ERRORNO.index);
+ byte eventType = (Byte) rowData.get(THREADEVENT.EVENTTYPE.index);
+ int threadType = (Integer) rowData.get(THREADEVENT.THREADTYPE.index);
+ int callerId = (Integer) rowData.get(THREADEVENT.CALLERID.index);
+ String callerIdStr = null;
+ if (callerId != -1) {
+ callerIdStr = String.valueOf(callerId);
+ }
+
+ threadEvent = new ThreadPageThreadDataEvent(eventType, threadType, apiType, time,
+ tidStr, tooltip, errorNum, null);
+ threadEvent.setCallerTid(callerIdStr);
+
+ return threadEvent;
+ }
+
+ private ThreadPageSyncData makeSyncData(List<Object> rowData) {
+ ThreadPageSyncData syncData = null;
+ int id = (Integer) rowData.get(SyncDataDBTable.COLUMN.SYNCDATAID.index);
+ int pid = (Integer) rowData.get(SyncDataDBTable.COLUMN.PID.index);
+ int tid = (Integer) rowData.get(SyncDataDBTable.COLUMN.TID.index);
+ byte syncType = (Byte) rowData.get(SyncDataDBTable.COLUMN.SYNCTYPE.index);
+ long syncValue = (Long) rowData.get(SyncDataDBTable.COLUMN.SYNCVALUE.index);
+ byte attrType = (Byte) rowData.get(SyncDataDBTable.COLUMN.ATTRIBUTETYPE.index);
+ String attributeType = ThreadPageSyncDataManager.getAttrTypeByTypeInt(attrType);
+ byte syncDataType = (Byte) rowData.get(SyncDataDBTable.COLUMN.SYNCDATATYPE.index);
+ int parentID = (Integer) rowData.get(SyncDataDBTable.COLUMN.PARENTID.index);
+
+ syncData = new ThreadPageSyncData(id, pid, tid, syncType, syncValue, attributeType,
+ syncDataType, parentID);
+
+ return syncData;
+ }
+
+ private ThreadPageSyncDataEvent makeSyncEvent(List<Object> rowData) {
+ ThreadPageSyncDataEvent syncEvent = null;
+ long time = (Long) rowData.get(SYNCEVENT.EVENTTIME.index);
+ byte apiType = (Byte) rowData.get(SYNCEVENT.APITYPE.index);
+ String tooltip = (String) rowData.get(SYNCEVENT.TOOLTIP.index);
+ long errorNum = (Long) rowData.get(SYNCEVENT.ERRORNO.index);
+ long syncValue = (Long) rowData.get(SYNCEVENT.SYNCVALUE.index);
+ String syncValueStr = String.valueOf(syncValue);
+
+ syncEvent = new ThreadPageSyncDataEvent(time, apiType, tooltip, errorNum, syncValueStr);
+
+ return syncEvent;
+ }
+
+ public int getItemIndexByTid(String tid) {
+ return tManager.getItemIndexByTid(tid);
+ }
+
+ // FIXME
+ public void setBoard(DAChartBoard threadBoard, DAChartBoard syncBoard) {
+ tManager.setBoard(threadBoard);
+ sManager.setBoard(syncBoard);
+ }
+
+ @Override
+ protected void makeData(LogPackage pack) {
+ List<LogData> loadInputs = getLogsFromLogPackage(pack,
+ DataChannelConstants.MSG_DATA_SYSTEM);
+ if (null != loadInputs) {
+ int logSize = loadInputs.size();
+ for (int i = 0; i < logSize; i++) {
+ tManager.parseLoad(loadInputs.get(i));
+ }
+ }
+
+ List<LogData> threadInputs = getLogsFromLogPackage(pack,
+ DataChannelConstants.MSG_PROBE_THREAD);
+ if (null != threadInputs) {
+ int logSize = threadInputs.size();
+ for (int i = 0; i < logSize; i++) {
+ tManager.parseAPI(threadInputs.get(i));
+ }
+ }
+
+ List<LogData> syncInputs = getLogsFromLogPackage(pack,
+ DataChannelConstants.MSG_PROBE_SYNC);
+ if (null != syncInputs) {
+ int logSize = syncInputs.size();
+ for (int i = 0; i < logSize; i++) {
+ tManager.parseSync(syncInputs.get(i));
+ sManager.parseSync(syncInputs.get(i));
+ }
+ }
+ }
+
+ public void saveThreadPageThreadData(ThreadPageData threadPageData) {
+ List<List<Object>> insertData = new ArrayList<List<Object>>();
+ List<Object> insertRowData = new ArrayList<Object>();
+
+ if (threadPageData instanceof ThreadPageThreadData) {
+ ThreadPageThreadData threadData = (ThreadPageThreadData) threadPageData;
+ try {
+ insertRowData.add(new Integer(threadData.getThreadDataID()));
+ insertRowData.add(new Integer(threadData.getPid()));
+ insertRowData.add(new Integer(threadData.getTid()));
+ Integer type = new Integer(threadData.getType());
+ byte threadType = type.byteValue();
+ insertRowData.add(new Byte(threadType));
+ String attrTypeStr = threadData.getAttrType();
+ byte attrType = -1;
+ if (attrTypeStr.equals(ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE)) {
+ attrType = ThreadPageThreadDataManager.PTHREAD_CREATE_JOINABLE;
+ } else if (attrTypeStr.equals(ThreadPageLabels.THREAD_ATTR_TYPE_DETACHED)) {
+ attrType = ThreadPageThreadDataManager.PTHREAD_CREATE_DETACHED;
+ } else { // main thread has no attribute
+ attrType = -1;
+ }
+ insertRowData.add(new Byte(attrType));
+ insertRowData.add(new Long(threadData.getStartTime()));
+ insertRowData.add(new Long(threadData.getEndTime()));
+ insertRowData.add(new Integer(threadData.getThreadFuncID()));
+ insertRowData.add(new String(threadData.getThreadClassName()));
+ } catch (ArrayIndexOutOfBoundsException e) {
+ e.printStackTrace();
+ }
+ insertData.add(insertRowData);
+ } else if (threadPageData instanceof ThreadPageSyncData) {
+
+ } else {
+ Logger.error("Unknown ThreadPageData type!");
+ }
+
+ if (insertData.size() > 0) {
+ threadDataTable.insertData(insertData);
+ }
+ }
+}
\ No newline at end of file
* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@samsung.com>
* Juyoung Kim <j0.kim@samsung.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* - S-Core Co., Ltd
*
*/
-
-package org.tizen.dynamicanalyzer.ui.thread.chart;
+package org.tizen.dynamicanalyzer.ui.thread;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
import org.tizen.dynamicanalyzer.common.AnalyzerManager;
import org.tizen.dynamicanalyzer.common.DASelectionData;
import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
import org.tizen.dynamicanalyzer.resources.ColorResources;
import org.tizen.dynamicanalyzer.resources.FontResources;
import org.tizen.dynamicanalyzer.resources.ImageResources;
-import org.tizen.dynamicanalyzer.swap.model.data.LogDataFactory;
import org.tizen.dynamicanalyzer.swap.model.data.ProbeCommonData;
import org.tizen.dynamicanalyzer.ui.common.SetRangeMarkerMouseMoveListener;
import org.tizen.dynamicanalyzer.ui.common.UICommonConstants;
import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.ThreadPage;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadData;
import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
import org.tizen.dynamicanalyzer.ui.timeline.logparser.LifecycleLogParser;
import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline;
public class ThreadChartView extends DAViewComposite {
- public static final String ID = ThreadChartView.class.getName();
public final static int THREAD_CHART_HEIGHT = 70;
+ public final static int THREAD_COMBO_ITEM_HEIGHT = 24;
+
private final Composite contents;
- private ThreadChartBoard threadChartBoard;
- private SyncChartBoard syncChartBoard;
+ private DAChartBoard threadChart;
+ private DAChartBoard syncChart;
private DACustomCombo threadCombo;
private DACustomCombo syncCombo;
private final StackLayout stackLayout;
+ ThreadChartManager manager;
+
+ private final RangeDataManager rangeDataManager = RangeDataManager.getInstance();
+
public ThreadChartView(Composite parent, int style) {
super(parent, style, false);
- setLayout(new FillLayout());
+ this.setLayout(new FillLayout());
setTitle(ThreadPageLabels.THREAD_CHART_TITLE);
stackLayout = new StackLayout();
contents.setLayout(stackLayout);
+ threadChart = new DAChartBoard(contents, ThreadPageLabels.THREAD_CHART_TITLE);
+ threadChart.setItemHeight(THREAD_CHART_HEIGHT);
+ threadChart.setNameFont(FontResources.CHART_NAME_FONT);
- initThreadChart();
- initSyncChart();
-
- stackLayout.topControl = threadChartBoard;
-
- syncChartBoard.setSelectable(true);
- threadChartBoard.setSelectable(true);
+ threadChart.addSelectionListener(new DAChartBoardSelectionListener() {
+ @Override
+ public void handleSelectionEvent(DAChartBoardItem item) {
+ callUpdatePage(item);
+ }
+ });
- initializeCharts();
- }
+ initIntervalMarkers(threadChart);
+ syncChart = new DAChartBoard(contents, ThreadPageLabels.SYNC_CHART_TITLE);
+ syncChart.setItemHeight(THREAD_CHART_HEIGHT);
+ syncChart.setNameFont(FontResources.CHART_NAME_FONT);
- private void initSyncChart() {
- syncChartBoard = new SyncChartBoard(contents, ThreadPageLabels.THREAD_CHART_SYNC,
- DAChartBoard.BOARD_STYLE_TIME);
- syncChartBoard.setItemHeight(THREAD_CHART_HEIGHT);
- syncChartBoard.setNameFont(FontResources.CHART_NAME_FONT);
- syncChartBoard.addSelectionListener(new DAChartBoardSelectionListener() {
+ syncChart.addSelectionListener(new DAChartBoardSelectionListener() {
@Override
public void handleSelectionEvent(DAChartBoardItem item) {
callUpdatePage(item);
+
}
});
- syncCombo = makeDACustomCombo(syncChartBoard.getTitleComp());
- syncCombo.initCombo();
- syncCombo.add(ThreadPageLabels.THREAD_CHART_THREAD);
- syncCombo.add(ThreadPageLabels.THREAD_CHART_SYNC);
- syncCombo.select(1);
- syncCombo.setEnabled(true);
- syncCombo.addSelectionListener(new DACustomComboSelectionListener() {
+ initIntervalMarkers(syncChart);
+
+ stackLayout.topControl = threadChart;
+ threadCombo = makeDACustomCombo(threadChart.getTitleComp());
+ threadCombo.initCombo();
+ threadCombo.add("Thread");
+ threadCombo.add("Sync");
+ threadCombo.select(0);
+ threadCombo.setEnabled(true);
+ threadCombo.addSelectionListener(new DACustomComboSelectionListener() {
@Override
public void selectionEvent(DACustomCombo combo) {
String selected = combo.getText();
if (null == selected || selected.isEmpty()) {
return;
}
- if (selected.equals(ThreadPageLabels.THREAD_CHART_THREAD)) {
- changeComboSyncToThread();
+ if (selected.equals("Sync")) {
+ changeComboThreadToSync();
} else {
return;
}
}
});
- }
- private void initThreadChart() {
- threadChartBoard = new ThreadChartBoard(contents, ThreadPageLabels.THREAD_CHART_THREAD,
- DAChartBoard.BOARD_STYLE_TIME);
- threadChartBoard.setItemHeight(THREAD_CHART_HEIGHT);
- threadChartBoard.setNameFont(FontResources.CHART_NAME_FONT);
- threadChartBoard.addSelectionListener(new DAChartBoardSelectionListener() {
- @Override
- public void handleSelectionEvent(DAChartBoardItem item) {
- callUpdatePage(item);
- }
- });
- threadCombo = makeDACustomCombo(threadChartBoard.getTitleComp());
- threadCombo.initCombo();
- threadCombo.add(ThreadPageLabels.THREAD_CHART_THREAD);
- threadCombo.add(ThreadPageLabels.THREAD_CHART_SYNC);
- threadCombo.select(0);
- threadCombo.setEnabled(true);
- threadCombo.addSelectionListener(new DACustomComboSelectionListener() {
+ syncCombo = makeDACustomCombo(syncChart.getTitleComp());
+ syncCombo.initCombo();
+ syncCombo.add("Thread");
+ syncCombo.add("Sync");
+ syncCombo.select(1);
+ syncCombo.setEnabled(true);
+ syncCombo.addSelectionListener(new DACustomComboSelectionListener() {
@Override
public void selectionEvent(DACustomCombo combo) {
String selected = combo.getText();
if (null == selected || selected.isEmpty()) {
return;
}
- if (selected.equals(ThreadPageLabels.THREAD_CHART_SYNC)) {
- changeComboThreadToSync();
+ if (selected.equals("Thread")) {
+ changeComboSyncToThread();
} else {
return;
}
}
});
- }
- private void callUpdatePage(DAChartBoardItem selectItem) {
- if (null == selectItem) {
- AnalyzerManager.getCurrentPage()
- .updateView(
- new DASelectionData(ThreadPage.chartViewID,
- (long) (((DAChartPlotIntervalMarker) threadChartBoard
- .getMarkers().get(
- UICommonConstants.SELECTION_MARKER_INDEX))
- .getStartVal() * TimelineConstants.MEGA_DOUBLE),
- (long) (((DAChartPlotIntervalMarker) threadChartBoard
- .getMarkers().get(
- UICommonConstants.SELECTION_MARKER_INDEX))
- .getEndVal() * TimelineConstants.MEGA_DOUBLE),
- new Integer(0), null));
- } else {
- AnalyzerManager.getCurrentPage()
- .updateView(
- new DASelectionData(ThreadPage.chartViewID,
- (long) (((DAChartPlotIntervalMarker) threadChartBoard
- .getMarkers().get(
- UICommonConstants.SELECTION_MARKER_INDEX))
- .getStartVal() * TimelineConstants.MEGA_DOUBLE),
- (long) (((DAChartPlotIntervalMarker) threadChartBoard
- .getMarkers().get(
- UICommonConstants.SELECTION_MARKER_INDEX))
- .getEndVal() * TimelineConstants.MEGA_DOUBLE),
- selectItem.getData(), null));
- }
+ DATimeline threadTimeline = threadChart.getTimeline();
+ DATimeline syncTimeline = syncChart.getTimeline();
+
+ threadTimeline.setTimeTickFont(FontResources.TIMELINE_TICK_FONT);
+ threadTimeline.setTimeBalloonFont(FontResources.TIMELINE_BALLOON_FONT);
+ syncTimeline.setTimeTickFont(FontResources.TIMELINE_TICK_FONT);
+ syncTimeline.setTimeBalloonFont(FontResources.TIMELINE_BALLOON_FONT);
+
+ LifecycleLogParser.getInstance().registerLifecycleBar(threadChart.getLifecycleBar());
+ LifecycleLogParser.getInstance().registerTimeline(threadTimeline);
+ LifecycleLogParser.getInstance().registerLifecycleBar(syncChart.getLifecycleBar());
+ LifecycleLogParser.getInstance().registerTimeline(syncTimeline);
+
+ setTimelineMouseListener(threadTimeline, threadChart);
+ setTimelineMouseListener(syncTimeline, syncChart);
+
+ manager = ThreadChartManager.getInstance();
+ manager.setBoard(threadChart, syncChart);
}
private DACustomCombo makeDACustomCombo(Composite parent) {
returnCombo.setComboImages(ImageResources.TAB_COMBO_BUTTON_DOWN,
ImageResources.TAB_COMBO_BUTTON_DOWN, ImageResources.TAB_COMBO_BUTTON_DOWN,
ImageResources.TAB_COMBO_BUTTON_DOWN);
- returnCombo.setComboImagePoint(new Point(71, 10));
+ returnCombo.setComboImagePoint(new Point(65, 9));
returnCombo.setButtonImages(ImageResources.TAB_COMBO_BUTTON_DOWN,
ImageResources.TAB_COMBO_BUTTON_DOWN);
returnCombo.setFontPoint(new Point(7, 5));
return returnCombo;
}
- private void changeComboThreadToSync() {
- stackLayout.topControl = syncChartBoard;
- threadCombo.setText(ThreadPageLabels.THREAD_CHART_SYNC);
- syncChartBoard.setScaleVal(threadChartBoard.getScaleVal());
- syncChartBoard.setVisibleStart(threadChartBoard.getVisibleStart());
- syncChartBoard.setItemsHeightMode(threadChartBoard.isItemMinimized());
+ private void callUpdatePage(DAChartBoardItem selectItem) {
+ if (null == selectItem) {
+ AnalyzerManager.getCurrentPage()
+ .updateView(
+ new DASelectionData(ThreadPage.chartViewID,
+ (long) (((DAChartPlotIntervalMarker) threadChart.getMarkers()
+ .get(UICommonConstants.SELECTION_MARKER_INDEX))
+ .getStartVal() * TimelineConstants.MEGA_DOUBLE),
+ (long) (((DAChartPlotIntervalMarker) threadChart.getMarkers()
+ .get(UICommonConstants.SELECTION_MARKER_INDEX))
+ .getEndVal() * TimelineConstants.MEGA_DOUBLE),
+ new Integer(0), null));
+ } else {
+ AnalyzerManager.getCurrentPage()
+ .updateView(
+ new DASelectionData(ThreadPage.chartViewID,
+ (long) (((DAChartPlotIntervalMarker) threadChart.getMarkers()
+ .get(UICommonConstants.SELECTION_MARKER_INDEX))
+ .getStartVal() * TimelineConstants.MEGA_DOUBLE),
+ (long) (((DAChartPlotIntervalMarker) threadChart.getMarkers()
+ .get(UICommonConstants.SELECTION_MARKER_INDEX))
+ .getEndVal() * TimelineConstants.MEGA_DOUBLE),
+ selectItem.getData(), null));
+ }
+ }
+
+ private void changeComboSyncToThread() {
+ stackLayout.topControl = threadChart;
contents.layout();
+ threadCombo.setText("Thread");
+ threadChart.setScaleVal(syncChart.getScaleVal());
+ threadChart.setVisibleStart(syncChart.getVisibleStart());
+ threadChart.setItemsHeightMode(syncChart.isItemMinimized());
+ callUpdatePage(threadChart.getSelectItem());
updateView();
}
- private void changeComboSyncToThread() {
- stackLayout.topControl = threadChartBoard;
- threadCombo.setText(ThreadPageLabels.THREAD_CHART_THREAD);
- threadChartBoard.setScaleVal(syncChartBoard.getScaleVal());
- threadChartBoard.setVisibleStart(syncChartBoard.getVisibleStart());
- threadChartBoard.setItemsHeightMode(syncChartBoard.isItemMinimized());
+ private void changeComboThreadToSync() {
+ stackLayout.topControl = syncChart;
contents.layout();
+ syncCombo.setText("Sync");
+ syncChart.setScaleVal(threadChart.getScaleVal());
+ syncChart.setVisibleStart(threadChart.getVisibleStart());
+ syncChart.setItemsHeightMode(threadChart.isItemMinimized());
+ callUpdatePage(syncChart.getSelectItem());
updateView();
}
+ private void setTimelineMouseListener(final DATimeline timeline, DAChartBoard chartBoard) {
+ timeline.addMouseMoveListener(new SetRangeMarkerMouseMoveListener(rangeDataManager,
+ chartBoard, timeline));
+ }
+
@Override
public void updateView() {
- if (stackLayout.topControl == syncChartBoard) {
- updateTimeLine(syncChartBoard);
- updateRange(syncChartBoard);
- syncChartBoard.updateChart();
- } else {
- updateTimeLine(threadChartBoard);
- updateRange(threadChartBoard);
- threadChartBoard.updateChart();
- }
- }
+ threadChart.setTotalEndTime(ToolbarArea.getInstance().getTime());
+ syncChart.setTotalEndTime(ToolbarArea.getInstance().getTime());
+ manager.update();
- private void updateRange(DAChartBoard chartBoard) {
- chartBoard.setTimelineMarkerStartTime(RangeDataManager.getInstance().getMarkerStartTime()
+ threadChart.setTimelineMarkerStartTime(rangeDataManager.getMarkerStartTime()
+ / TimelineConstants.MEGA_DOUBLE);
+ threadChart.setTimelineMarkerEndTime(rangeDataManager.getMarkerEndTime()
+ / TimelineConstants.MEGA_DOUBLE);
+ syncChart.setTimelineMarkerStartTime(rangeDataManager.getMarkerStartTime()
/ TimelineConstants.MEGA_DOUBLE);
- chartBoard.setTimelineMarkerEndTime(RangeDataManager.getInstance().getMarkerEndTime()
+ syncChart.setTimelineMarkerEndTime(rangeDataManager.getMarkerEndTime()
/ TimelineConstants.MEGA_DOUBLE);
+
if (RangeDataManager.getInstance().isBeingAnalyzed()) {
- ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get(
- UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(RangeDataManager
- .getInstance().getAnalysisStartTime() / TimelineConstants.MEGA_DOUBLE,
- RangeDataManager.getInstance().getAnalysisEndTime()
- / TimelineConstants.MEGA_DOUBLE);
+ ((DAChartPlotIntervalMarker) threadChart.getMarkers().get(
+ UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(
+ rangeDataManager.getAnalysisStartTime() / TimelineConstants.MEGA_DOUBLE,
+ rangeDataManager.getAnalysisEndTime() / TimelineConstants.MEGA_DOUBLE);
+
+ ((DAChartPlotIntervalMarker) syncChart.getMarkers().get(
+ UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(
+ rangeDataManager.getAnalysisStartTime() / TimelineConstants.MEGA_DOUBLE,
+ rangeDataManager.getAnalysisEndTime() / TimelineConstants.MEGA_DOUBLE);
} else {
- ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get(
+ ((DAChartPlotIntervalMarker) threadChart.getMarkers().get(
+ UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(-1, -1);
+
+ ((DAChartPlotIntervalMarker) syncChart.getMarkers().get(
UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX)).setInterval(-1, -1);
}
- ((DAChartPlotIntervalMarker) chartBoard.getMarkers().get(
- UICommonConstants.RANGE_MARKER_INDEX)).setInterval(RangeDataManager.getInstance()
- .getMarkerStartTime() / TimelineConstants.MEGA_DOUBLE, RangeDataManager
- .getInstance().getMarkerEndTime() / TimelineConstants.MEGA_DOUBLE);
- }
- private void updateTimeLine(DAChartBoard chartBoard) {
- chartBoard.setTotalEndTime(ToolbarArea.getInstance().getTime());
+ ((DAChartPlotIntervalMarker) threadChart.getMarkers().get(
+ UICommonConstants.RANGE_MARKER_INDEX)).setInterval(
+ rangeDataManager.getMarkerStartTime() / TimelineConstants.MEGA_DOUBLE,
+ rangeDataManager.getMarkerEndTime() / TimelineConstants.MEGA_DOUBLE);
+
+ ((DAChartPlotIntervalMarker) syncChart.getMarkers().get(
+ UICommonConstants.RANGE_MARKER_INDEX)).setInterval(
+ rangeDataManager.getMarkerStartTime() / TimelineConstants.MEGA_DOUBLE,
+ rangeDataManager.getMarkerEndTime() / TimelineConstants.MEGA_DOUBLE);
+
}
@Override
public void updateView(DAViewData data) {
- if (data instanceof DASelectionData == false) {
- return;
- }
- DASelectionData selData = (DASelectionData) data;
- if (selData.isLogData()) {
- selectionFromSummary(selData);
- } else {
- selectionFromAPITable(selData);
- }
- }
+ if (data instanceof DASelectionData) {
+ DASelectionData selData = (DASelectionData) data;
- private void selectionFromSummary(DASelectionData selData) {
- Object odata = selData.getData();
- String category = LogDataFactory.getLogFormatName(((ProbeCommonData) odata).getId());
- if(null == category){
- return;
- }
- String selectTid = Integer.toString(((ProbeCommonData) odata).getTid());
- if (category.equals(ThreadPageLabels.THREAD_CHART_THREAD)) {
- changeComboSyncToThread();
- threadChartBoard.selectItem(getThreadChartIndexOfSelected(selectTid));
- } else {
- changeComboThreadToSync();
- syncChartBoard.selectItem(getSyncChartIndexOfSelected(selectTid));
+ if (selData.isLogData()) {
+ Object odata = selData.getData();
+ if (stackLayout.topControl.equals(syncChart)) {
+ changeComboSyncToThread();
+ }
+ String selectTid = Integer.toString(((ProbeCommonData) odata).getTid());
+ threadChart.selectItem(getChartIndexOfSelected(selectTid));
+ } else {
+ long start = selData.getStartTime();
+ long end = selData.getEndTime();
+
+ double startTime = (double) start / TimelineConstants.MEGA_DOUBLE;
+ double endTime = (double) end / TimelineConstants.MEGA_DOUBLE;
+ // double middleTime = (startTime + endTime) / 2.0;
+ // if (start == end) {
+ // middleTime = startTime;
+ // }
+
+ DAChartBoard chartBoard = (DAChartBoard) stackLayout.topControl;
+
+ // chartBoard.setVisibleMiddleTime(middleTime);
+ DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) chartBoard
+ .getMarkers().get(UICommonConstants.SELECTION_MARKER_INDEX);
+ intervalMarker.setInterval(startTime, endTime);
+ }
}
- DAChartBoard chartBoard = (DAChartBoard) stackLayout.topControl;
- DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) chartBoard
- .getMarkers().get(UICommonConstants.SELECTION_MARKER_INDEX);
- long start = ((ProbeCommonData) odata).getTime();
- long end = ((ProbeCommonData) odata).getTime();
- double startTime = (double) start / TimelineConstants.MEGA_DOUBLE;
- double endTime = (double) end / TimelineConstants.MEGA_DOUBLE;
- intervalMarker.setInterval(startTime, endTime);
}
- private void selectionFromAPITable(DASelectionData selData) {
- DAChartBoard chartBoard = (DAChartBoard) stackLayout.topControl;
- DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) chartBoard
- .getMarkers().get(UICommonConstants.SELECTION_MARKER_INDEX);
- long start = selData.getStartTime();
- long end = selData.getEndTime();
- double startTime = (double) start / TimelineConstants.MEGA_DOUBLE;
- double endTime = (double) end / TimelineConstants.MEGA_DOUBLE;
- intervalMarker.setInterval(startTime, endTime);
- }
-
- private int getThreadChartIndexOfSelected(String tID) {
- int itemSize = threadChartBoard.getItemList().getItemSize();
- if (null == tID || 0 == itemSize) {
+ private int getChartIndexOfSelected(String tID) {
+ int itemSize = threadChart.getItemList().getItemSize();
+ if (0 == itemSize) {
return 0;
}
for (int i = 0; i < itemSize; i++) {
- DAChartBoardItem item = threadChartBoard.getItemList().get(i);
+ DAChartBoardItem item = threadChart.getItemList().get(i);
ThreadPageThreadData pageData = (ThreadPageThreadData) item.getData();
- if (pageData.getTid() == Integer.parseInt(tID)) {
+ if (pageData.getTid().equals(tID)) {
return i;
}
}
return 0;
}
-
- private int getSyncChartIndexOfSelected(String tID) {
- int itemSize = syncChartBoard.getItemList().getItemSize();
- if (null == tID || 0 == itemSize) {
- return 0;
- }
- for (int i = 0; i < itemSize; i++) {
- DAChartBoardItem item = syncChartBoard.getItemList().get(i);
- ThreadPageThreadData pageData = (ThreadPageThreadData) item.getData();
- if (pageData.getTid() == Integer.parseInt(tID)) {
- return i;
- }
- }
- return 0;
+
+ @Override
+ public void clear() {
+ threadChart.clear();
+ syncChart.clear();
+ initIntervalMarkers(threadChart);
+ initIntervalMarkers(syncChart);
+ manager.clear();
+ manager.setBoard(threadChart, syncChart);
+ }
+
+ @Override
+ public Control getControl() {
+ return stackLayout.topControl;
+ }
+
+ private void initIntervalMarkers(DAChartBoard board) {
+ // selection marker
+ DAChartPlotIntervalMarker selectionMarker = new DAChartPlotIntervalMarker(-1, -1,
+ DAChartPlotIntervalMarker.INTERVAL_MARKER_STYLE_AREA);
+ selectionMarker.setBackgroundColor(ColorResources.SELECTION_RANGE);
+ selectionMarker.setAlpha((int) (255 * 0.25));
+ board.addIntervalMarker(selectionMarker);
+
+ // range analysis marker
+ DAChartPlotIntervalMarker rangeAnalyzeMarker = new DAChartPlotIntervalMarker(-1, -1,
+ DAChartPlotIntervalMarker.INTERVAL_MARKER_STYLE_AREA);
+ rangeAnalyzeMarker.setBackgroundColor(ColorResources.YELLOW);
+ rangeAnalyzeMarker.setAlpha((int) (255 * 0.25));
+ board.addIntervalMarker(rangeAnalyzeMarker);
+
+ // range marker
+ DAChartPlotIntervalMarker rangeMarker = new DAChartPlotIntervalMarker(-1, -1,
+ DAChartPlotIntervalMarker.INTERVAL_MARKER_STYLE_LINE);
+ rangeMarker.setForegroundColor(ColorResources.RED);
+ rangeMarker.setAlpha((int) (255 * 0.25));
+ board.addIntervalMarker(rangeMarker);
}
public void setRangeMarker(double starttime, double endtime) {
UICommonConstants.RANGE_MARKER_INDEX)).setInterval(starttime, endtime);
}
- @Override
- public void clear() {
- ThreadDataManager.getInstance().clear();
- syncChartBoard.contentsClear();
- syncChartBoard.clear();
- threadChartBoard.contentsClear();
- threadChartBoard.clear();
- initializeCharts();
- }
-
- private void initializeCharts() {
- threadChartBoard.initIntervalMarkers();
- syncChartBoard.initIntervalMarkers();
- initTimeline();
- }
-
- private void initTimeline() {
- DATimeline threadTimeline = threadChartBoard.getTimeline();
- DATimeline syncTimeline = syncChartBoard.getTimeline();
-
- threadTimeline.setTimeTickFont(FontResources.TIMELINE_TICK_FONT);
- threadTimeline.setTimeBalloonFont(FontResources.TIMELINE_BALLOON_FONT);
- syncTimeline.setTimeTickFont(FontResources.TIMELINE_TICK_FONT);
- syncTimeline.setTimeBalloonFont(FontResources.TIMELINE_BALLOON_FONT);
-
- LifecycleLogParser.getInstance().registerLifecycleBar(threadChartBoard.getLifecycleBar());
- LifecycleLogParser.getInstance().registerTimeline(threadTimeline);
- LifecycleLogParser.getInstance().registerLifecycleBar(syncChartBoard.getLifecycleBar());
- LifecycleLogParser.getInstance().registerTimeline(syncTimeline);
-
- threadTimeline.addMouseMoveListener(new SetRangeMarkerMouseMoveListener(RangeDataManager
- .getInstance(), threadChartBoard, threadTimeline));
- syncTimeline.addMouseMoveListener(new SetRangeMarkerMouseMoveListener(RangeDataManager
- .getInstance(), syncChartBoard, syncTimeline));
- }
}
* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
* WooJin Jung <woojin2.jung@samsung.com>
* yeongtaik byeon <yeongtaik.byeon@samsung.com>
* Jooyoul Lee <jy.exe.lee@samsung.com>
import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
import org.tizen.dynamicanalyzer.resources.ColorResources;
import org.tizen.dynamicanalyzer.resources.FontResources;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
-import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData;
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadData;
import org.tizen.dynamicanalyzer.widgets.da.view.DAViewComposite;
import org.tizen.dynamicanalyzer.widgets.da.view.DAViewData;
private Composite contents = null;
private Text detailText = null;
- private final static String leftFormAttachment = CommonConstants.SPACE + CommonConstants.SPACE;
+ private final static String leftFormAttachment = CommonConstants.SPACE
+ + CommonConstants.SPACE;
private final static String heightFormAttachment = CommonConstants.NEW_LINE
+ CommonConstants.NEW_LINE;
contents.setBackground(ColorResources.VIEW_BG_COLOR);
contents.setLayout(new FormLayout());
- detailText = new Text(contents, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+ detailText = new Text(contents, SWT.BORDER | SWT.V_SCROLL
+ | SWT.H_SCROLL);
detailText.setBackground(ColorResources.VIEW_BG_COLOR);
detailText.setForeground(ColorResources.TABLE_CONTENTS_FONT_COLOR);
detailText.setFont(FontResources.DETAIL_INFO_FONT);
String str;
if (item instanceof ThreadPageThreadData) {
- tid = Integer.toString(item.getTid());
+ tid = item.getTid();
type = ((ThreadPageThreadData) item).getTypeString();
str = ((ThreadPageThreadData) item).getThreadFuncName();
if (null != str && !(str.equals(CommonConstants.EMPTY))) {
List<ThreadPageSyncData> children = syncItem.getChildren();
int childrenSize = children.size();
if (0 == childrenSize) {
- tid = Integer.toString(item.getTid());
+ tid = item.getTid();
}
str = item.getAttrType();
if (null != str && !(str.equals(CommonConstants.EMPTY))) {
}
}
- StringBuffer strDetailView = new StringBuffer(CommonConstants.NEW_LINE);
- addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_TYPE + type);
+ StringBuffer strDetailView = new StringBuffer(heightFormAttachment);
+ addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_TYPE
+ + type);
if (null != tid && !(tid.equals(CommonConstants.EMPTY))) {
- addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_TID + tid);
+ addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_TID
+ + tid);
}
if (type.equals(ThreadPageLabels.THREAD_ITEM_TYPE_TIZEN)) {
if (null != className && !(className.equals(CommonConstants.EMPTY))) {
- addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_CLASSNAME + className);
+ addDetailInfo(strDetailView,
+ ThreadPageLabels.THREAD_DETAILS_CLASSNAME + className);
}
} else {
if (null != funcName && !(funcName.equals(CommonConstants.EMPTY))) {
- addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_FUNCNAME + funcName);
+ addDetailInfo(strDetailView,
+ ThreadPageLabels.THREAD_DETAILS_FUNCNAME + funcName);
}
}
if (null != startTime && !(startTime.equals(CommonConstants.EMPTY))) {
- addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_STARTTIME + startTime);
+ addDetailInfo(strDetailView,
+ ThreadPageLabels.THREAD_DETAILS_STARTTIME + startTime);
}
if (null != endTime && !(endTime.equals(CommonConstants.EMPTY))) {
- addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_ENDTIME + endTime);
+ addDetailInfo(strDetailView,
+ ThreadPageLabels.THREAD_DETAILS_ENDTIME + endTime);
}
if (null != attrType && !(attrType.equals(CommonConstants.EMPTY))) {
- addDetailInfo(strDetailView, ThreadPageLabels.THREAD_DETAILS_ATTRTYPE + attrType);
+ addDetailInfo(strDetailView,
+ ThreadPageLabels.THREAD_DETAILS_ATTRTYPE + attrType);
}
detailText.setText(strDetailView.toString());
detailText.redraw();
private boolean isChange() {
if (item instanceof ThreadPageThreadData) {
- if (!tid.equals(Integer.toString(item.getTid()))) {
+ if (!tid.equals(item.getTid())) {
return true;
}
if (!type.equals(((ThreadPageThreadData) item).getTypeString())) {
return true;
}
- if (!funcName.equals(((ThreadPageThreadData) item).getThreadFuncName())) {
+ if (!funcName.equals(((ThreadPageThreadData) item)
+ .getThreadFuncName())) {
return true;
}
- if (!className.equals(((ThreadPageThreadData) item).getThreadClassName())) {
+ if (!className.equals(((ThreadPageThreadData) item)
+ .getThreadClassName())) {
return true;
}
- if (!startTime.equals(((ThreadPageThreadData) item).getStartTimeString())) {
+ if (!startTime.equals(((ThreadPageThreadData) item)
+ .getStartTimeString())) {
return true;
}
- if (!endTime.equals(((ThreadPageThreadData) item).getEndTimeString())) {
+ if (!endTime.equals(((ThreadPageThreadData) item)
+ .getEndTimeString())) {
return true;
}
if (!attrType.equals(item.getAttrType())) {
return true;
}
} else if (item instanceof ThreadPageSyncData) {
- if (!tid.equals(Integer.toString(item.getTid()))) {
+ if (!tid.equals(item.getTid())) {
return true;
}
if (!attrType.equals(item.getAttrType())) {
@Override
public void updateView(DAViewData vdata) {
- if(vdata.getViewID().equals(TimelinePage.timelineViewID)){
- return;
- }
- if (vdata instanceof DASelectionData == false) {
- return;
- }
- DASelectionData data = (DASelectionData) vdata;
- String id = data.getViewID();
- if (!(id.equals(ThreadPage.chartViewID))) {
- return;
- }
- if (data.getData() instanceof ThreadPageData) {
- item = (ThreadPageData) data.getData();
- } else {
- item = null;
+ if (vdata instanceof DASelectionData) {
+ DASelectionData data = (DASelectionData) vdata;
+ String id = data.getViewID();
+ if (!(id.equals(ThreadPage.chartViewID))) {
+ return;
+ }
+ if (data.getData() instanceof ThreadPageData) {
+ item = (ThreadPageData) data.getData();
+ } else {
+ item = null;
+ }
+
+ updateDetails();
}
- updateDetails();
}
@Override
* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
* WooJin Jung <woojin2.jung@samsung.com>
* yeongtaik byeon <yeongtaik.byeon@samsung.com>
* Jooyoul Lee <jy.exe.lee@samsung.com>
import org.tizen.dynamicanalyzer.shortcut.ShortCutManager;
import org.tizen.dynamicanalyzer.swap.logparser.DataManagerRegistry;
import org.tizen.dynamicanalyzer.ui.page.ScreenshotTabComposite;
-import org.tizen.dynamicanalyzer.ui.thread.chart.ThreadChartView;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager;
import org.tizen.dynamicanalyzer.widgets.da.view.DAPageComposite;
public class ThreadPage extends DAPageComposite {
public ThreadPage(Composite parent, int style) {
super(parent, style);
setTitle(AnalyzerLabels.COOLBAR_AREA_THREAD);
- this.setData(DAPageComposite.KEY_TOOLTIP, ShortCutManager.COOLBAR_AREA_THREAD_TOOLTIP);
+ this.setData(DAPageComposite.KEY_TOOLTIP,
+ ShortCutManager.COOLBAR_AREA_THREAD_TOOLTIP);
this.setLayout(new FillLayout());
baseForm = new SashForm(this, SWT.HORIZONTAL);
baseForm.setLayout(new FillLayout());
leftForm = new SashForm(baseForm, SWT.VERTICAL);
- ThreadChartView threadChartView = new ThreadChartView(leftForm, SWT.NONE);
+ ThreadChartView threadChartView = new ThreadChartView(leftForm,
+ SWT.NONE);
addView(threadChartView);
- ThreadAPIListView threadAPIListView = new ThreadAPIListView(leftForm, SWT.NONE);
+ ThreadAPIListView threadAPIListView = new ThreadAPIListView(leftForm,
+ SWT.NONE);
addView(threadAPIListView);
leftForm.setWeights(new int[] { 60, 40 });
rightForm = new SashForm(baseForm, SWT.VERTICAL);
-
- ScreenshotTabComposite tabView = new ScreenshotTabComposite(rightForm, SWT.NONE,
- ThreadPage.pageID);
+ // INFO_VIEW_INDEX = 2;
+
+ ScreenshotTabComposite tabView = new ScreenshotTabComposite(rightForm,
+ SWT.NONE, ThreadPage.pageID);
tabView.setObservingViews(ScreenshotTabComposite.screenshotViewID,
new String[] { ThreadPage.listViewID });
tabView.setObservingViews(ScreenshotTabComposite.callstackViewID,
new String[] { ThreadPage.listViewID });
addView(tabView);
- ThreadDetailInfoView detailInfo = new ThreadDetailInfoView(rightForm, SWT.NONE);
+ // FILE_DETAIL = 3;
+ ThreadDetailInfoView detailInfo = new ThreadDetailInfoView(rightForm,
+ SWT.NONE);
addView(detailInfo);
rightForm.setWeights(new int[] { 50, 50 });
baseForm.setSashWidth(AnalyzerConstants.SASH_WIDTH);
leftForm.setSashWidth(AnalyzerConstants.SASH_WIDTH);
rightForm.setSashWidth(AnalyzerConstants.SASH_WIDTH);
-
- DataManagerRegistry.registerPageDataManager(ThreadDataManager.getInstance());
+
+ DataManagerRegistry.registerPageDataManager(ThreadChartManager.getInstance());
}
@Override
--- /dev/null
+/*
+ * Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.ui.thread;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
+
+public abstract class ThreadPageData {
+ private String pid;
+ private String tid;
+ private int type;
+ private String key;
+ private String attrType;
+ protected DAChartBoardItem item;
+ protected List<ThreadPageDataEvent> contents = new ArrayList<ThreadPageDataEvent>();
+ protected List<ThreadPageDataEvent> contentsQueue = new ArrayList<ThreadPageDataEvent>();
+ protected DAChart chart;
+ protected boolean hasUpdate = false;
+
+ public ThreadPageData(int type, String name, String pid, String tid, String attrType) {
+ setType(type);
+ setKey(name);
+ setPid(pid);
+ setTid(tid);
+ setAttrType(attrType);
+ }
+
+ public String getTid() {
+ return tid;
+ }
+
+ public void setTid(String tid) {
+ this.tid = tid;
+ }
+
+ public String getPid() {
+ return pid;
+ }
+
+ public void setPid(String pid) {
+ this.pid = pid;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String name) {
+ this.key = name;
+ }
+
+ public DAChartBoardItem getItem() {
+ return item;
+ }
+
+ public DAChart getChart() {
+ return chart;
+ }
+
+ public void setChart(DAChart chart) {
+ this.chart = chart;
+ }
+
+ public void pushEvent(ThreadPageDataEvent event) {
+ contentsQueue.add(event);
+ hasUpdate = true;
+ }
+
+ public void setHasUpdate() {
+ hasUpdate = true;
+ }
+
+ public List<ThreadPageDataEvent> getContents() {
+ return contents;
+ }
+
+ protected abstract void checkUpdate();
+
+ public abstract void setItem(DAChartBoardItem item);
+
+ protected abstract int createChartItem(ThreadPageDataEvent event);
+
+ public String getAttrType() {
+ return attrType;
+ }
+
+ public void setAttrType(String attrType) {
+ this.attrType = attrType;
+ }
+
+ protected DAChartSeriesItem createApiItem(
+ ThreadPageDataEvent event, long errno) {
+ DAChartSeriesItem apiItem = null;
+ if (0 != errno) {
+ apiItem = new DAChartSeriesItem(event.getDoubleTime(),
+ DAChartSeriesItem.SERIES_STATE_BAR,
+ ColorResources.RED, event.getTooltipContent()
+ + ThreadPageLabels.SYNC_CHART_ITEM_FAILED);
+ } else {
+ apiItem = new DAChartSeriesItem(event.getDoubleTime(),
+ DAChartSeriesItem.SERIES_STATE_BAR,
+ ColorResources.YELLOW, event.getTooltipContent());
+ }
+ return apiItem;
+ }
+}
\ No newline at end of file
* - S-Core Co., Ltd
*
*/
-package org.tizen.dynamicanalyzer.ui.thread.type;
+package org.tizen.dynamicanalyzer.ui.thread;
import org.tizen.dynamicanalyzer.swap.model.data.LogData;
import org.tizen.dynamicanalyzer.utils.Formatter;
public abstract class ThreadPageDataEvent implements Cloneable {
private LogData contents;
private long time = -1;
- private int tid = -1;
+ private String tid = null;
private int apiType = -1;
private String tooltip = null;
private long errorNum = -1;
- public ThreadPageDataEvent(long time, int tid, int apiType, String tooltip, long errorNum,
- LogData contents) {
+ public ThreadPageDataEvent(long time, String tid, int apiType,
+ String tooltip, long errorNum, LogData contents) {
setTime(time);
setTid(tid);
setApiType(apiType);
setErrorNum(errorNum);
setContents(contents);
}
-
+
public ThreadPageDataEvent clone() throws CloneNotSupportedException {
ThreadPageDataEvent dataEvent = (ThreadPageDataEvent) super.clone();
dataEvent.setContents(contents);
dataEvent.setApiType(apiType);
dataEvent.setTooltipContent(tooltip);
dataEvent.setErrorNum(errorNum);
-
+
return dataEvent;
}
public long getTime() {
return time;
- }
+ }
public void setTime(long time) {
this.time = time;
}
-
+
public double getDoubleTime() {
double dTime = Formatter.longTimeToDoubleTime(time);
return dTime;
}
- public int getTid() {
+ public String getTid() {
return tid;
}
- public void setTid(int tid) {
+ public void setTid(String tid) {
this.tid = tid;
}
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.chart;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.resources.ColorResources;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageDataEvent;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncDataEvent;
-import org.tizen.dynamicanalyzer.utils.Formatter;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
-
-public class SyncChart {
- public final static int SYNC_PARENT_CHART = 0;
- public final static int SYNC_CHILD_CHART = 1;
- public final static int THREAD_CHART = 2;
- protected int chartType = -1;;
- protected DAChartBoardItem item;
- protected DAChart chart;
- protected List<SyncChart> children = new ArrayList<SyncChart>();
- protected DAChartSeries syncAPISeries;
- protected DAChartSeries syncStateSeries;
-
- protected String chartName = CommonConstants.EMPTY;
- protected int chartID = -1;
- protected int pId = -1;
- protected int tId = -1;
-
- public SyncChart(int chartId, DAChartBoardItem item, DAChart chart, int chartType) {
- setChartType(chartType);
- setChartID(chartId);
- setItem(item);
- setChart(chart);
- }
-
- public int getChartID() {
- return chartID;
- }
-
- public void setChartID(int chartID) {
- this.chartID = chartID;
- }
-
- public String getChartName() {
- return chartName.trim();
- }
-
- public void setChartName(String chartName) {
- this.chartName = chartName;
- }
-
- public int getpId() {
- return pId;
- }
-
- public void setpId(int pId) {
- this.pId = pId;
- }
-
- public int gettId() {
- return tId;
- }
-
- public void settId(int tId) {
- this.tId = tId;
- }
-
- public boolean isParentChartRow() {
- if (children.size() > 0) {
- return true;
- } else {
- return false;
- }
- }
-
- public void pushChild(SyncChart data) {
- children.add(data);
- }
-
- public void setItem(DAChartBoardItem item) {
- this.item = item;
- setChart(item.getChart());
- if (chartType == THREAD_CHART) {
- return;
- }
- syncStateSeries = new DAChartSeries(ThreadPageLabels.THREAD_SYNC_CHART_SERIES_STATE,
- DAChartSeries.SERIES_STYLE_STATE, ColorResources.WHITE, false);
-
- syncAPISeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_API,
- DAChartSeries.SERIES_STYLE_EVENT, ColorResources.YELLOW);
- syncAPISeries.setSummarizeTooltipText(ThreadPageLabels.THREAD_TOOLTIP_APIS);
-
- chart.addSeries(syncStateSeries);
- chart.addSeries(syncAPISeries);
- }
-
- public DAChartBoardItem getItem() {
- return item;
- }
-
- public DAChart getChart() {
- return chart;
- }
-
- public void setChart(DAChart chart) {
- this.chart = chart;
- }
-
- public void clearSeries() {
- if (null != syncAPISeries) {
- syncAPISeries.clear();
- }
- if (null != syncStateSeries) {
- syncStateSeries.clear();
- }
- }
-
- public void updateSyncSeries(List<ThreadPageSyncDataEvent> eventList) {
- if (chartType == THREAD_CHART) {
- return;
- }
- for (ThreadPageSyncDataEvent syncEvent : eventList) {
- if (chartID != syncEvent.getSyncDataID()) {
- continue;
- }
- addSyncSeriesItem(syncEvent);
- }
- chart.redraw();
- }
-
- private void addSyncSeriesItem(ThreadPageSyncDataEvent syncEvent) {
- double startTime = syncEvent.getDoubleTime();
- double endTime = Formatter.longTimeToDoubleTime(syncEvent.getBlockEndTime());
- long errorNum = syncEvent.getErrorNum();
- switch (syncEvent.getApiType()) {
- case LogCenterConstants.SYNC_API_TYPE_NEW:
- case LogCenterConstants.SYNC_API_TYPE_NOTIFY:
- case LogCenterConstants.SYNC_API_TYPE_NOTIFY_ALL:
- case LogCenterConstants.SYNC_API_TYPE_OTHER:
- syncStateSeries.addSeriesItem(new DAChartSeriesItem(startTime,
- DAChartSeriesItem.SERIES_STATE_BAR,
- ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
- ThreadPageLabels.SYNC_CHART_ITEM_UNUSED));
- syncAPISeries.addSeriesItem(createAPIItem(syncEvent, errorNum));
- break;
- case LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START:
- case LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START:
- syncStateSeries.addSeriesItem(new DAChartSeriesItem(startTime,
- DAChartSeriesItem.SERIES_STATE_CONNECTION,
- ColorResources.THREAD_GRAPH_LOCK_WAIT_COLOR,
- ThreadPageLabels.SYNC_CHART_ITEM_WAITED));
- if (syncEvent.getBlockEndTime() != -1) {
- syncStateSeries.addSeriesItem(new DAChartSeriesItem(endTime,
- DAChartSeriesItem.SERIES_STATE_CONNECTION,
- ColorResources.THREAD_GRAPH_LOCK_ACQUIRE_COLOR,
- ThreadPageLabels.SYNC_CHART_ITEM_USED));
- }
- syncAPISeries.addSeriesItem(createAPIItem(syncEvent, errorNum));
- break;
- case LogCenterConstants.SYNC_API_TYPE_RELEASE:
- if (syncEvent.getBlockEndTime() == -1) {
- syncStateSeries.addSeriesItem(new DAChartSeriesItem(startTime,
- DAChartSeriesItem.SERIES_STATE_BAR,
- ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
- ThreadPageLabels.SYNC_CHART_ITEM_UNUSED));
- } else {
- syncStateSeries.addSeriesItem(new DAChartSeriesItem(startTime,
- DAChartSeriesItem.SERIES_STATE_CONNECTION,
- ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
- ThreadPageLabels.SYNC_CHART_ITEM_UNUSED));
- syncStateSeries.addSeriesItem(new DAChartSeriesItem(endTime,
- DAChartSeriesItem.SERIES_STATE_CONNECTION,
- ColorResources.THREAD_GRAPH_LOCK_WAIT_COLOR,
- ThreadPageLabels.SYNC_CHART_ITEM_WAITED));
- }
- syncAPISeries.addSeriesItem(createAPIItem(syncEvent, errorNum));
- break;
- case LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_END:
- case LogCenterConstants.SYNC_API_TYPE_COND_WAIT_END:
- syncStateSeries.addSeriesItem(new DAChartSeriesItem(startTime,
- DAChartSeriesItem.SERIES_STATE_CONNECTION,
- ColorResources.THREAD_GRAPH_LOCK_ACQUIRE_COLOR,
- ThreadPageLabels.SYNC_CHART_ITEM_USED));
- if (syncEvent.getBlockEndTime() != -1) {
- syncStateSeries.addSeriesItem(new DAChartSeriesItem(endTime,
- DAChartSeriesItem.SERIES_STATE_CONNECTION,
- ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
- ThreadPageLabels.SYNC_CHART_ITEM_UNUSED));
- }
- break;
- case LogCenterConstants.SYNC_API_TYPE_TRY_ACQUIRE:
- syncStateSeries.addSeriesItem(new DAChartSeriesItem(startTime,
- DAChartSeriesItem.SERIES_STATE_CONNECTION,
- ColorResources.THREAD_GRAPH_LOCK_ACQUIRE_COLOR,
- ThreadPageLabels.SYNC_CHART_ITEM_USED));
- if (syncEvent.getBlockEndTime() != -1) {
- syncStateSeries.addSeriesItem(new DAChartSeriesItem(endTime,
- DAChartSeriesItem.SERIES_STATE_CONNECTION,
- ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
- ThreadPageLabels.SYNC_CHART_ITEM_UNUSED));
- }
- syncAPISeries.addSeriesItem(createAPIItem(syncEvent, errorNum));
- break;
- default:
- return;
- }
- }
-
- protected DAChartSeriesItem createAPIItem(ThreadPageDataEvent event, long errno) {
- DAChartSeriesItem apiItem = null;
- if (0 != errno) {
- apiItem = new DAChartSeriesItem(event.getDoubleTime(),
- DAChartSeriesItem.SERIES_STATE_BAR, ColorResources.RED,
- event.getTooltipContent() + ThreadPageLabels.SYNC_CHART_ITEM_FAILED);
- } else {
- apiItem = new DAChartSeriesItem(event.getDoubleTime(),
- DAChartSeriesItem.SERIES_STATE_BAR, ColorResources.YELLOW,
- event.getTooltipContent());
- }
- return apiItem;
- }
-
- public int getChartType() {
- return chartType;
- }
-
- public void setChartType(int chartType) {
- this.chartType = chartType;
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.chart;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.widgets.Composite;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.nl.TimelineChartLabels;
-import org.tizen.dynamicanalyzer.resources.ColorResources;
-import org.tizen.dynamicanalyzer.resources.FontResources;
-import org.tizen.dynamicanalyzer.resources.ImageResources;
-import org.tizen.dynamicanalyzer.ui.common.PopupAnalysisMenuItemClickListener;
-import org.tizen.dynamicanalyzer.ui.common.PopupClearMenuItemClickListener;
-import org.tizen.dynamicanalyzer.ui.common.PopupEndMenuItemClickListener;
-import org.tizen.dynamicanalyzer.ui.common.PopupFromSelectionMenuItemClickListener;
-import org.tizen.dynamicanalyzer.ui.common.PopupStartMenuItemClickListener;
-import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener;
-import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.db.SyncEventDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncDataEvent;
-import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
-import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
-import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
-import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu;
-import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem;
-
-public class SyncChartBoard extends DAChartBoard {
- private List<SyncChart> syncChartItemList = new ArrayList<SyncChart>();
- protected int syncListCount = -1;
- private int preSelectionPId = -1;
-
- public SyncChartBoard(Composite parent, String title) {
- super(parent, title);
- initIntervalMarkers();
-
- }
-
- public SyncChartBoard(Composite parent, String title, int[] scaleValues) {
- super(parent, title, scaleValues);
- }
-
- public SyncChartBoard(Composite parent, String title, int boardStyle) {
- super(parent, title, boardStyle);
- }
-
- @Override
- protected void callBackScaleChanged() {
- super.callBackScaleChanged();
- updateChart();
- }
-
- @Override
- protected void callBackScrollChanged() {
- super.callBackScrollChanged();
- updateChart();
- }
-
- @Override
- protected void callBackSizeChanged() {
- layout(true, true);
- super.callBackSizeChanged();
- }
-
- public void updateChart() {
- createChartItem();
- clearSeries();
- updateSeries();
- chartFilteringByPId();
- }
-
- protected void chartFilteringByPId() {
- if (null == getItemList()) {
- return;
- }
- int selectedPid = ToolbarArea.getInstance().getSelectedPid();
- if (preSelectionPId != -1 && preSelectionPId != selectedPid) {
- return;
- }
-
- int parentIndex = 0;
- for (SyncChart chart : syncChartItemList) {
- if (!chart.isParentChartRow()) {
- continue;
- }
- if (selectedPid == 0) {
- showItem(parentIndex);
- } else if (selectedPid == chart.getpId()) {
- showItem(parentIndex);
- } else {
- hideItem(parentIndex);
- }
- parentIndex++;
- }
- preSelectionPId = selectedPid;
- }
-
- public void clear() {
- super.clear();
- syncChartItemList.clear();
- syncListCount = -1;
- preSelectionPId = -1;
- initIntervalMarkers();
- }
-
- public void initIntervalMarkers() {
- // selection marker
- DAChartPlotIntervalMarker selectionMarker = new DAChartPlotIntervalMarker(-1, -1,
- DAChartPlotIntervalMarker.INTERVAL_MARKER_STYLE_AREA);
- selectionMarker.setBackgroundColor(ColorResources.SELECTION_RANGE);
- selectionMarker.setAlpha((int) (255 * 0.25));
- addIntervalMarker(selectionMarker);
-
- // range analysis marker
- DAChartPlotIntervalMarker rangeAnalyzeMarker = new DAChartPlotIntervalMarker(-1, -1,
- DAChartPlotIntervalMarker.INTERVAL_MARKER_STYLE_AREA);
- rangeAnalyzeMarker.setBackgroundColor(ColorResources.YELLOW);
- rangeAnalyzeMarker.setAlpha((int) (255 * 0.25));
- addIntervalMarker(rangeAnalyzeMarker);
-
- // range marker
- DAChartPlotIntervalMarker rangeMarker = new DAChartPlotIntervalMarker(-1, -1,
- DAChartPlotIntervalMarker.INTERVAL_MARKER_STYLE_LINE);
- rangeMarker.setForegroundColor(ColorResources.RED);
- rangeMarker.setAlpha((int) (255 * 0.25));
- addIntervalMarker(rangeMarker);
-
- }
-
- protected void initChart(DAChart chart, boolean isParent) {
- if (null == chart) {
- return;
- }
-
- DAChartPlot plot = chart.getPlot();
- if (null == plot) {
- return;
- }
- if (true == isParent) {
- plot.setBackgroundImage(ImageResources.BG_GRADIENT);
- } else {
- plot.setBackgroundImage(ImageResources.BG_CHILD_GRADIENT);
- }
- plot.setAutoHeightRange(AutoRangeType.MANUAL);
- plot.setAxisFont(FontResources.CHART_AXIS_FONT);
- plot.setAxisRangeY(0, 101);
- plot.setAxisRangeX(getVisibleStartTime(), getVisibleEndTime());
- DAChartPlotTooltip tooltip = new DAChartPlotTooltip(-1);
- tooltip.setFont(FontResources.CHART_TOOLTIP_FONT);
- plot.setTooltip(tooltip);
-
- DAPopupMenu popupMenu = new DAPopupMenu(chart);
- popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT);
- DAPopupMenuItem startItem = new DAPopupMenuItem(popupMenu, DAPopupMenuItem.NONE);
- startItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_START);
- startItem.addListener(new PopupStartMenuItemClickListener(startItem, this));
-
- DAPopupMenuItem endItem = new DAPopupMenuItem(popupMenu, DAPopupMenuItem.NONE);
- endItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_END);
- endItem.addListener(new PopupEndMenuItemClickListener(endItem, this));
-
- DAPopupMenuItem fromSelectionItem = new DAPopupMenuItem(popupMenu, DAPopupMenuItem.NONE);
- fromSelectionItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_FROM_SELECTION);
- fromSelectionItem.addListener(new PopupFromSelectionMenuItemClickListener(
- fromSelectionItem, this));
-
- DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu, DAPopupMenuItem.NONE);
- analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS);
- analysisItem.addListener(new PopupAnalysisMenuItemClickListener());
-
- DAPopupMenuItem clearItem = new DAPopupMenuItem(popupMenu, DAPopupMenuItem.NONE);
- clearItem.setText(TimelineChartLabels.RANGE_CONTEXT_CLEAR);
- clearItem.addListener(new PopupClearMenuItemClickListener());
-
- TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener(
- popupMenu, getTimeline());
- chart.addMouseListener(timelineChartMouseEventListener);
- chart.addMouseMoveListener(timelineChartMouseEventListener);
- chart.addMouseTrackListener(new TimelineChartMouseTrackAdapter(getTimeline()));
- plot.setMarkers(getMarkers());
- }
-
- public boolean createChartItem() {
- if (syncListCount != ThreadDataManager.getInstance().getSyncDataMaker().getChartRowData()
- .size()) {
- for (ThreadPageSyncData data : ThreadDataManager.getInstance().getSyncDataMaker()
- .getChartRowData()) {
- if (isExistSyncChartRow(data)) {
- continue;
- }
- if (data.getSyncDataType() == ThreadPageSyncData.SYNC_PARENT) {
- addSyncParentChartItemList(data);
- } else if (data.getSyncDataType() == ThreadPageSyncData.SYNC_CHILD) {
- addChartChildItemList(data);
- }
- }
- }
- syncListCount = ThreadDataManager.getInstance().getSyncDataMaker().getChartRowData().size();
- return true;
- }
-
- protected boolean isExistSyncChartRow(ThreadPageSyncData data) {
- for (SyncChart chart : syncChartItemList) {
- if (chart.getChartID() == data.getSyncDataID()) {
- return true;
- }
- }
- return false;
- }
-
- private void addChartChildItemList(ThreadPageSyncData data) {
- SyncChart parent = getParentChartData(data);
- if (null != parent) {
- addSyncChildChartItemList(parent, data);
- }
- }
-
- private void addSyncParentChartItemList(ThreadPageSyncData sync) {
- DAChartBoardItem parentItem = new DAChartBoardItem(this, sync.getTypeString()
- + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
- + ThreadPageLabels.THREAD_CHART_NAME_OBJ + AnalyzerUtil.toHexdecimal(sync.getKey())
- + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
- parentItem.setData(sync);
- DAChart parentDAChart = parentItem.getChart();
- initChart(parentDAChart, true);
- SyncChart parentChartData = new SyncChart(sync.getSyncDataID(), parentItem, parentDAChart,
- ThreadChart.SYNC_PARENT_CHART);
- parentChartData.setpId(Integer.parseInt(sync.getPid()));
- syncChartItemList.add(parentChartData);
- }
-
- protected void addSyncChildChartItemList(SyncChart parent, ThreadPageSyncData sync) {
- DAChartBoardItem parentItem = parent.getItem();
- DAChartBoardItem childItem = new DAChartBoardItem(parentItem, sync.getTypeString()
- + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
- + ThreadPageLabels.THREAD_CHART_NAME_OBJ + AnalyzerUtil.toHexdecimal(sync.getKey())
- + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
- childItem.setData(sync);
- DAChart childChart = childItem.getChart();
- initChart(childChart, false);
- SyncChart childChartData = new SyncChart(sync.getSyncDataID(), childItem, childChart,
- ThreadChart.SYNC_CHILD_CHART);
- parent.pushChild(childChartData);
- syncChartItemList.add(childChartData);
- }
-
- private SyncChart getParentChartData(ThreadPageSyncData syncData) {
- if (syncData.getSyncDataType() != ThreadPageSyncData.SYNC_CHILD) {
- return null;
- }
- for (SyncChart chart : syncChartItemList) {
- if (chart.getChartID() == syncData.getParentID()) {
- return chart;
- }
- }
- return null;
- }
-
- public void clearSeries() {
- clearSyncSeries();
- }
-
- private void clearSyncSeries() {
- if (null == syncChartItemList) {
- return;
- }
- for (SyncChart chart : syncChartItemList) {
- chart.clearSeries();
- }
- }
-
- private void updateSeries() {
- updateSyncEventSeries();
- }
-
- protected void updateSyncEventSeries() {
- if (null == syncChartItemList) {
- return;
- }
- List<ThreadPageSyncDataEvent> seriesList = getSyncEventList();
- if (null == seriesList) {
- return;
- }
- for (SyncChart chart : syncChartItemList) {
- chart.updateSyncSeries(seriesList);
- }
- }
-
- private List<ThreadPageSyncDataEvent> getSyncEventList() {
- List<ThreadPageSyncDataEvent> returnList = new ArrayList<ThreadPageSyncDataEvent>();
- returnList.addAll(selectSyncEventFromDB());
- returnList.addAll(ThreadDataManager.getInstance().getSyncDataMaker()
- .getNotInsertSyncEventList());
- return returnList;
- }
-
- private List<ThreadPageSyncDataEvent> selectSyncEventFromDB() {
- List<ThreadPageSyncDataEvent> returnList = new ArrayList<ThreadPageSyncDataEvent>();
- double chartStartTime = (getVisibleStartTime() - 2) * TimelineConstants.MEGA_LONG;
- double chartEndTime = getVisibleEndTime() * TimelineConstants.MEGA_LONG;
- String query = String.format(SyncEventDBTable.SELECT_QUERY, chartStartTime, chartEndTime,
- chartStartTime, chartEndTime);
- ResultSet rs = SqlConnectionManager.executeQueryRS(query);
- if (rs == null) {
- SqlConnectionManager.releaseResultSet(rs);
- return returnList;
- }
- try {
- while (rs.next()) {
- int syncDataID = rs.getInt(SyncEventDBTable.COLUMN.SYNCDATAID.index + 1);
- long time = rs.getLong(SyncEventDBTable.COLUMN.EVENTTIME.index + 1);
- int apiType = rs.getByte(SyncEventDBTable.COLUMN.APITYPE.index + 1);
- String tooltip = rs.getString(SyncEventDBTable.COLUMN.TOOLTIP.index + 1);
- long errorNum = rs.getLong(SyncEventDBTable.COLUMN.ERRORNO.index + 1);
- long syncValue = rs.getLong(SyncEventDBTable.COLUMN.SYNCVALUE.index + 1);
- long releaseTime = rs.getLong(SyncEventDBTable.COLUMN.RELEASETIME.index + 1);
- ThreadPageSyncDataEvent syncData = new ThreadPageSyncDataEvent(time, apiType,
- tooltip, errorNum, Long.toString(syncValue));
- syncData.setSyncDataID(syncDataID);
- syncData.setBlockEndTime(releaseTime);
- returnList.add(syncData);
- }
- SqlConnectionManager.releaseResultSet(rs);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return returnList;
- }
-}
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.chart;
-
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.resources.ColorResources;
-import org.tizen.dynamicanalyzer.resources.FontResources;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadDataEvent;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
-
-public class ThreadChart extends SyncChart {
- private DAChartSeries threadLoadSeries;
- private DAChartSeries threadEventSeries;
- private DAChartSeries threadAPISeries;
-
- public ThreadChart(int chartId, DAChartBoardItem item, DAChart chart, int chartType) {
- super(chartId, item, chart, chartType);
- }
-
- public void setItem(DAChartBoardItem item) {
- super.setItem(item);
- this.item = item;
- setChart(item.getChart());
- threadLoadSeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_LOAD,
- DAChartSeries.SERIES_STYLE_LOAD, ColorResources.THREAD_GRAPH_MIN_CPU_LOAD_COLOR,
- ColorResources.THREAD_GRAPH_MAX_CPU_LOAD_COLOR);
- threadLoadSeries.setBarWidth(1);
-
- threadAPISeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_API,
- DAChartSeries.SERIES_STYLE_EVENT, ColorResources.YELLOW);
-
- threadEventSeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_EVENT,
- DAChartSeries.SERIES_STYLE_ARROW, ColorResources.THREAD_GRAPH_CALLEE_COLOR);
-
- threadAPISeries.setSummarizeTooltipText(ThreadPageLabels.THREAD_TOOLTIP_APIS);
- threadEventSeries.setFont(FontResources.CHART_ARROW_TID_FONT);
-
- chart.addSeries(threadLoadSeries);
- chart.addSeries(threadAPISeries);
- chart.addSeries(threadEventSeries);
- }
-
- public void clearSeries() {
- super.clearSeries();
- if (null != threadLoadSeries) {
- threadLoadSeries.clear();
- }
- if (null != threadEventSeries) {
- threadEventSeries.clear();
- }
- if (null != threadAPISeries) {
- threadAPISeries.clear();
- }
- }
-
- public void updateThreadSeries(List<ThreadPageThreadDataEvent> eventList) {
- for (ThreadPageThreadDataEvent threadEvent : eventList) {
- if (getChartType() != THREAD_CHART || chartID != threadEvent.getThreadDataID()) {
- continue;
- }
- addThreadSeriesItem(threadEvent);
- }
- chart.redraw();
- }
-
- private void addThreadSeriesItem(ThreadPageThreadDataEvent threadEvent) {
- switch (threadEvent.getEventType()) {
- case ThreadPageThreadDataEvent.TYPE_LOAD:
- updateLoadSeries(threadEvent);
- break;
- case ThreadPageThreadDataEvent.TYPE_EVENT:
- updateEventSeries(threadEvent);
- break;
- case ThreadPageThreadDataEvent.TYPE_API:
- updateAPISeries(threadEvent);
- break;
- default:
- break;
- }
- }
-
- private void updateLoadSeries(ThreadPageThreadDataEvent threadEvent) {
- DAChartSeriesItem seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
- (double) (threadEvent.getThreadType() * 2.55), threadEvent.getTooltipContent());
- threadLoadSeries.addSeriesItem(seriesItem);
- }
-
- private void updateEventSeries(ThreadPageThreadDataEvent threadEvent) {
- DAChartSeriesItem seriesItem;
- int eventApiType = threadEvent.getApiType();
- if (eventApiType == LogCenterConstants.THREAD_API_TYPE_INTERNAL_START) {
- seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
- DAChartSeriesItem.SERIES_ARROW_LEFT, threadEvent.getTooltipContent());
- seriesItem.setBarWidth(threadEvent.getCallerTid());
- } else if (eventApiType == LogCenterConstants.THREAD_API_TYPE_WAIT_END) {
- if (threadEvent.isJoinAPI()) {
- seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
- DAChartSeriesItem.SERIES_ARROW_LEFT,
- ThreadPageLabels.THREAD_CHART_ITEM_JOINED);
- seriesItem.setBarWidth(threadEvent.getCallerTid());
- } else {
- seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
- DAChartSeriesItem.SERIES_ARROW_NONE, threadEvent.getTooltipContent());
- }
- } else if (eventApiType == LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
- if (threadEvent.getCallerTid() != -1) {
- seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
- DAChartSeriesItem.SERIES_ARROW_RIGHT, threadEvent.getTooltipContent());
- seriesItem.setBarWidth(threadEvent.getCallerTid());
- } else {
- seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
- DAChartSeriesItem.SERIES_ARROW_NONE, threadEvent.getTooltipContent());
- }
- } else {
- seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
- DAChartSeriesItem.SERIES_ARROW_NONE, threadEvent.getTooltipContent());
- }
- threadEventSeries.addSeriesItem(seriesItem);
- }
-
- private void updateAPISeries(ThreadPageThreadDataEvent threadEvent) {
- long errorNum = threadEvent.getErrorNum();
- DAChartSeriesItem seriesItem = createAPIItem(threadEvent, errorNum);
- threadAPISeries.addSeriesItem(seriesItem);
- }
-
- private DAChartSeriesItem createAPIItem(ThreadPageThreadDataEvent event, long errno) {
- DAChartSeriesItem apiItem = null;
- if (0 != errno) {
- apiItem = new DAChartSeriesItem(event.getDoubleTime(),
- DAChartSeriesItem.SERIES_STATE_BAR, ColorResources.RED,
- event.getTooltipContent() + ThreadPageLabels.SYNC_CHART_ITEM_FAILED);
- } else {
- apiItem = new DAChartSeriesItem(event.getDoubleTime(),
- DAChartSeriesItem.SERIES_STATE_BAR, ColorResources.YELLOW,
- event.getTooltipContent());
- }
- return apiItem;
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.chart;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import org.eclipse.swt.widgets.Composite;
-import org.tizen.dynamicanalyzer.database.SqlConnectionManager;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.db.ThreadEventDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadDataEvent;
-import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
-import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
-
-public class ThreadChartBoard extends SyncChartBoard {
-
- private List<ThreadChart> threadChartItemList = new ArrayList<ThreadChart>();
-
- private int threadListCount = -1;
- private int preSelectionPId = -1;
-
- public ThreadChartBoard(Composite parent, String title) {
- super(parent, title);
- initIntervalMarkers();
- }
-
- public ThreadChartBoard(Composite parent, String title, int[] scaleValues) {
- super(parent, title, scaleValues);
- }
-
- public ThreadChartBoard(Composite parent, String title, int boardStyle) {
- super(parent, title, boardStyle);
- }
-
- @Override
- protected void callBackScaleChanged() {
- super.callBackScaleChanged();
- updateChart();
- }
-
- @Override
- protected void callBackScrollChanged() {
- super.callBackScrollChanged();
- updateChart();
- }
-
- @Override
- protected void callBackSizeChanged() {
- super.callBackSizeChanged();
- layout(true, true);
- }
-
- public void updateChart() {
- createChartItem();
- clearSeries();
- updateSeries();
- chartFilteringByPId();
- }
-
- protected void chartFilteringByPId() {
- super.chartFilteringByPId();
- if (null == getItemList()) {
- return;
- }
- int selectedPid = ToolbarArea.getInstance().getSelectedPid();
- if (preSelectionPId != -1 && preSelectionPId != selectedPid) {
- return;
- }
-
- int parentIndex = 0;
- for (ThreadChart chart : threadChartItemList) {
- if (!chart.isParentChartRow()) {
- continue;
- }
- if (selectedPid == 0) {
- showItem(parentIndex);
- } else if (selectedPid == chart.getpId()) {
- showItem(parentIndex);
- } else {
- hideItem(parentIndex);
- }
- parentIndex++;
- }
- preSelectionPId = selectedPid;
- }
-
- public void clear() {
- super.clear();
- threadChartItemList.clear();
- threadListCount = -1;
- preSelectionPId = -1;
- initIntervalMarkers();
- }
-
- public boolean createChartItem() {
- createThreadItem();
- createSyncItem();
- return true;
- }
-
- private void createThreadItem() {
- if (threadListCount == ThreadDataManager.getInstance().getThreadDataMaker()
- .getChartRowData().size()) {
- return;
- }
-
- List<ThreadPageThreadData> sortList = sortThreadChartByTID(ThreadDataManager.getInstance()
- .getThreadDataMaker().getChartRowData());
- for (ThreadPageThreadData data : sortList) {
- if (isExistThreadChartRow(data)) {
- continue;
- }
- addThreadParentChartItemList(data);
- }
- threadListCount = ThreadDataManager.getInstance().getThreadDataMaker().getChartRowData()
- .size();
- }
-
- private List<ThreadPageThreadData> sortThreadChartByTID(List<ThreadPageThreadData> list) {
- Comparator<ThreadPageThreadData> comparator = new Comparator<ThreadPageThreadData>() {
- @Override
- public int compare(ThreadPageThreadData arg0, ThreadPageThreadData arg1) {
- if (arg0.getTid() > arg1.getTid()) {
- return 1;
- } else if (arg0.getTid() < arg1.getTid()) {
- return -1;
- } else {
- return 0;
- }
- }
- };
- Collections.sort(list, comparator);
- return list;
- }
-
- private void createSyncItem() {
- if (syncListCount == ThreadDataManager.getInstance().getSyncDataMaker().getChartRowData()
- .size()) {
- return;
- }
- for (ThreadPageSyncData data : ThreadDataManager.getInstance().getSyncDataMaker()
- .getChartRowData()) {
- if (isExistSyncChartRow(data)) {
- continue;
- }
- addChartChildItemList(data);
- }
- syncListCount = ThreadDataManager.getInstance().getSyncDataMaker().getChartRowData().size();
- }
-
- private boolean isExistThreadChartRow(ThreadPageThreadData data) {
- for (ThreadChart chart : threadChartItemList) {
- if (chart.getChartID() == data.getThreadDataID()) {
- return true;
- }
- }
- return false;
- }
-
- private void addChartChildItemList(ThreadPageSyncData data) {
- ThreadChart parent = getParentChartData(data);
- if (null != parent) {
- addSyncChildChartItemList(parent, data);
- }
- }
-
- private ThreadChart getParentChartData(ThreadPageSyncData syncData) {
- if (syncData.getSyncDataType() != ThreadPageSyncData.THREAD_CHILD) {
- return null;
- }
- for (ThreadChart chart : threadChartItemList) {
- if (chart.getChartID() == syncData.getParentID()) {
- return chart;
- }
- }
- return null;
- }
-
- private void addThreadParentChartItemList(ThreadPageThreadData data) {
- DAChartBoardItem parentItem = new DAChartBoardItem(this, data.getTypeString()
- + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
- + ThreadPageLabels.THREAD_CHART_NAME_PID + data.getPid()
- + ThreadPageLabels.THREAD_CHART_NAME_COMMA + ThreadPageLabels.THREAD_CHART_NAME_TID
- + data.getKey() + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
- parentItem.setData(data);
- DAChart parentDAChart = parentItem.getChart();
- initChart(parentDAChart, true);
- ThreadChart parentChartData = new ThreadChart(data.getThreadDataID(), parentItem,
- parentDAChart, ThreadChart.THREAD_CHART);
- parentChartData.setpId(Integer.parseInt(data.getPid()));
- threadChartItemList.add(parentChartData);
- }
-
- public void clearSeries() {
- super.clearSeries();
- clearThreadSeries();
- }
-
- private void clearThreadSeries() {
- if (null == threadChartItemList) {
- return;
- }
- for (ThreadChart chart : threadChartItemList) {
- chart.clearSeries();
- }
- }
-
- private void updateSeries() {
- updateThreadEventSeries();
- updateSyncEventSeries();
- }
-
- private void updateThreadEventSeries() {
- if (null == threadChartItemList) {
- return;
- }
- List<ThreadPageThreadDataEvent> seriesList = selectThreadEventSeriesListFromDB();
- if (null == seriesList) {
- return;
- }
- for (ThreadChart chart : threadChartItemList) {
- chart.updateThreadSeries(seriesList);
- }
- }
-
- private List<ThreadPageThreadDataEvent> selectThreadEventSeriesListFromDB() {
- List<ThreadPageThreadDataEvent> returnValue = new ArrayList<ThreadPageThreadDataEvent>();
- String query = String.format(ThreadEventDBTable.SELECT_QUERY, (getVisibleStartTime() - 2)
- * TimelineConstants.MEGA_LONG, getVisibleEndTime() * TimelineConstants.MEGA_LONG);
-
- ResultSet rs = SqlConnectionManager.executeQueryRS(query);
- if (rs == null) {
- SqlConnectionManager.releaseResultSet(rs);
- return null;
- }
- try {
- while (rs.next()) {
- int chartID = rs.getInt(ThreadEventDBTable.COLUMN.THREADDATAID.index + 1);
- long time = rs.getLong(ThreadEventDBTable.COLUMN.EVENTTIME.index + 1);
- int tID = rs.getInt(ThreadEventDBTable.COLUMN.TID.index + 1);
- int apiType = rs.getByte(ThreadEventDBTable.COLUMN.APITYPE.index + 1);
- String tooltip = rs.getString(ThreadEventDBTable.COLUMN.TOOLTIP.index + 1);
- long errorNum = rs.getLong(ThreadEventDBTable.COLUMN.ERRORNO.index + 1);
- int eventType = rs.getByte(ThreadEventDBTable.COLUMN.EVENTTYPE.index + 1);
- int threadType = rs.getInt(ThreadEventDBTable.COLUMN.THREADTYPE.index + 1);
- int callerID = rs.getInt(ThreadEventDBTable.COLUMN.CALLERID.index + 1);
- ThreadPageThreadDataEvent chartData = new ThreadPageThreadDataEvent(eventType,
- threadType, apiType, time, tID, tooltip, errorNum, null);
- chartData.setThreadDataID(chartID);
- chartData.setCallerTid(callerID);
- returnValue.add(chartData);
- }
- SqlConnectionManager.releaseResultSet(rs);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return returnValue;
- }
-}
*
* Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
*
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
+ * Contact:
* WooJin Jung <woojin2.jung@samsung.com>
* Juyoung Kim <j0.kim@samsung.com>
*
*
*/
-package org.tizen.dynamicanalyzer.ui.thread.db;
+package org.tizen.dynamicanalyzer.ui.thread.data;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.tizen.dynamicanalyzer.constant.CommonConstants;
import org.tizen.dynamicanalyzer.database.DBColumn;
import org.tizen.dynamicanalyzer.database.DBConstants;
-import org.tizen.dynamicanalyzer.database.DBInsertManager;
-import org.tizen.dynamicanalyzer.database.DBInserter;
import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.swap.model.data.SyncData;
-
-public class SyncAPIDBTable extends DBTable {
- public static final String TABLENAME = "SYNCAPI";
- private DBInserter dbInserter = null;
-
- private static final String SELECT_COLUMN = COLUMN.SEQ.name + CommonConstants.COMMA
- + COLUMN.APICALLTIME.name + CommonConstants.COMMA + COLUMN.APIID.name
- + CommonConstants.COMMA + COLUMN.PID.name + CommonConstants.COMMA + COLUMN.TID.name
- + CommonConstants.COMMA + COLUMN.ARGUMENT.name + CommonConstants.COMMA
- + COLUMN.RETURN.name + CommonConstants.COMMA + COLUMN.ERRORNO.name;
- public static final String SELECT_QUERY = "select " + SELECT_COLUMN + " from "
- + SyncEventDBTable.TABLENAME + CommonConstants.COMMA + TABLENAME + " where "
- + SyncEventDBTable.COLUMN.SYNCDATAID.name + " = %s and "
- + SyncEventDBTable.COLUMN.API_SEQNUMBER.name + " = " + COLUMN.SEQ.name;
+import org.tizen.dynamicanalyzer.database.IResultSet;
+public class SyncAPIDBTable extends DBTable implements IResultSet {
+ public static final String TABLENAME="SyncAPI";
+
+ private static final String SELECT_COLUMN =
+ COLUMN.SEQ.name + CommonConstants.COMMA +
+ COLUMN.APICALLTIME.name + CommonConstants.COMMA +
+ COLUMN.APIID.name + CommonConstants.COMMA +
+ COLUMN.PID.name + CommonConstants.COMMA +
+ COLUMN.TID.name + CommonConstants.COMMA +
+ COLUMN.ARGUMENT.name + CommonConstants.COMMA +
+ COLUMN.RETURN.name + CommonConstants.COMMA +
+ COLUMN.ERRORNO.name;
+ public static final String SELECT_QUERY =
+ "select " + SELECT_COLUMN + " from " + SyncEventDBTable.TABLENAME +
+ CommonConstants.COMMA + TABLENAME +
+ " where " + SyncEventDBTable.COLUMN.SYNCDATAID.name + " = %s and " +
+ SyncEventDBTable.COLUMN.API_SEQNUMBER.name + " = " + COLUMN.SEQ.name;
+
public enum COLUMN {
- SEQ(0, "SEQNUMBER"), APICALLTIME(1, "APICallTime"), APIID(2, "APIID"), PID(3, "PID"), TID(
- 4, "TID"), ARGUMENT(5, DBConstants.DBCOLUMN_ARGUMENT), RETURN(6,
- DBConstants.DBCOLUMN_RETURN_VALUE), ERRORNO(7, DBConstants.DBCOLUMN_ERROR_NUMBER), SYNCVALUE(
- 8, "SyncValue");
-
+ SEQ(0, "SEQNUMBER"),
+ APICALLTIME(1, "APICallTime"),
+ APIID(2, "APIID"),
+ PID(3, "PID"),
+ TID(4, "TID"),
+ ARGUMENT(5, DBConstants.DBCOLUMN_ARGUMENT),
+ RETURN(6, DBConstants.DBCOLUMN_RETURN_VALUE),
+ ERRORNO(7, DBConstants.DBCOLUMN_ERROR_NUMBER),
+ SYNCVALUE(8, "SyncValue");
+
public final int index;
public final String name;
-
+
COLUMN(int index, String name) {
this.index = index;
this.name = name;
}
}
-
+
@Override
public String getTableName() {
return TABLENAME;
}
-
+
public SyncAPIDBTable() {
addColumn(new DBColumn(COLUMN.SEQ.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.APICALLTIME.name, DBConstants.NOT_NULL,
- DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.APIID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.APICALLTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+ addColumn(new DBColumn(COLUMN.APIID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.ARGUMENT.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR,
- DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH));
- addColumn(new DBColumn(COLUMN.RETURN.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR,
- DALimit.FUNCTION_RETURN_VALUE_LENGTH));
+ addColumn(new DBColumn(COLUMN.ARGUMENT.name, DBConstants.EMPTY,
+ DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH));
+ addColumn(new DBColumn(COLUMN.RETURN.name, DBConstants.EMPTY,
+ DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_RETURN_VALUE_LENGTH));
addColumn(new DBColumn(COLUMN.ERRORNO.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
addColumn(new DBColumn(COLUMN.SYNCVALUE.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
- dbInserter = DBInsertManager.makeInserter(this);
- }
-
- public void insertSyncAPIData(List<SyncData> insertSyncAPIList) {
- if (insertSyncAPIList.size() == 0) {
- return;
- }
- ArrayList<List<Object>> insertData = new ArrayList<List<Object>>();
- for (SyncData syncAPI : insertSyncAPIList) {
- List<Object> insertRowData = new ArrayList<Object>();
- try {
- insertRowData.add(new Long(syncAPI.getSeq()));
- insertRowData.add(new Long(syncAPI.getTime()));
- insertRowData.add(new Integer(syncAPI.getApiId()));
- insertRowData.add(new Integer(syncAPI.getPid()));
- insertRowData.add(new Integer(syncAPI.getTid()));
- insertRowData.add(new String(syncAPI.getArgs()));
- insertRowData.add(new String(syncAPI.getReturn()));
- insertRowData.add(new Long(syncAPI.getErrno()));
- insertRowData.add(new Long(syncAPI.getSyncValue()));
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- }
- insertData.add(insertRowData);
- }
- if (insertData.size() > 0) {
- dbInserter.pushData(insertData);
- }
}
public List<List<Object>> getSyncAPIFromDB() {
return selectAllColumnData(null);
}
-
+
@Override
public boolean prepare(PreparedStatement prep, List<Object> rowData) {
boolean isPrepared = true;
+
int columnsize = getColumnSize();
if (columnsize != rowData.size()) {
isPrepared = false;
} else {
try {
prep.setLong(COLUMN.SEQ.index + 1, (Long) (rowData.get(COLUMN.SEQ.index)));
- prep.setLong(COLUMN.APICALLTIME.index + 1,
- (Long) (rowData.get(COLUMN.APICALLTIME.index)));
+ prep.setLong(COLUMN.APICALLTIME.index + 1, (Long) (rowData.get(COLUMN.APICALLTIME.index)));
prep.setInt(COLUMN.APIID.index + 1, (Integer) (rowData.get(COLUMN.APIID.index)));
prep.setInt(COLUMN.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index)));
prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));
String argumentStr = clipString((String) (rowData.get(COLUMN.ARGUMENT.index)),
- DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index)
- .toString());
+ DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index).toString());
prep.setString(COLUMN.ARGUMENT.index + 1, argumentStr);
String retStr = clipString((String) (rowData.get(COLUMN.RETURN.index)),
- DALimit.FUNCTION_RETURN_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index)
- .toString());
+ DALimit.FUNCTION_RETURN_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index).toString());
prep.setString(COLUMN.RETURN.index + 1, retStr);
prep.setLong(COLUMN.ERRORNO.index + 1, (Long) (rowData.get(COLUMN.ERRORNO.index)));
- prep.setLong(COLUMN.SYNCVALUE.index + 1,
- (Long) (rowData.get(COLUMN.SYNCVALUE.index)));
+ prep.setLong(COLUMN.SYNCVALUE.index + 1, (Long) (rowData.get(COLUMN.SYNCVALUE.index)));
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
}
}
+
return isPrepared;
}
-
+
@Override
public List<Object> extractDataFromResultSet(ResultSet rs) {
List<Object> row = new ArrayList<Object>();
e.printStackTrace();
return null;
}
-
+
return row;
}
}
--- /dev/null
+/*\r
+ * Dynamic Analyzer\r
+ *\r
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: \r
+ * WooJin Jung <woojin2.jung@samsung.com>\r
+ * Juyoung Kim <j0.kim@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * Contributors:\r
+ * - S-Core Co., Ltd\r
+ * \r
+ */\r
+\r
+package org.tizen.dynamicanalyzer.ui.thread.data;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.concurrent.LinkedBlockingQueue;\r
+\r
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;\r
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;\r
+import org.tizen.dynamicanalyzer.swap.model.data.SyncData;\r
+import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager;\r
+//TODO: use DBInserter\r
+public class SyncAPIInserter implements Runnable {\r
+ private static LinkedBlockingQueue<SyncData> syncAPIQueue = new LinkedBlockingQueue<SyncData>();\r
+\r
+ private static volatile Thread inserterThread = null;\r
+\r
+ public static void startThread() {\r
+ if (inserterThread == null || !inserterThread.isAlive()) {\r
+ synchronized (SyncAPIInserter.class) {\r
+ if (inserterThread == null || !inserterThread.isAlive()) {\r
+ inserterThread = new Thread(null,\r
+ new SyncAPIInserter());\r
+ inserterThread.start();\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ public static void stopThread() {\r
+ if (inserterThread != null && inserterThread.isAlive()) {\r
+ try {\r
+ sendNotify();\r
+ inserterThread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME);\r
+ } catch (InterruptedException e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ }\r
+\r
+ public static void pushSyncEvent(SyncData syncAPI) {\r
+ syncAPIQueue.offer(syncAPI);\r
+ }\r
+\r
+ public static void clear() {\r
+ stopThread();\r
+ }\r
+\r
+ @Override\r
+ public void run() {\r
+ while (!AnalyzerManager.isExit()) {\r
+ SyncData syncAPI = syncAPIQueue.poll();\r
+\r
+ if (syncAPI != null) {\r
+ ArrayList<List<Object>> insertData = new ArrayList<List<Object>>(); \r
+ List<Object> insertRowData = new ArrayList<Object>();\r
+ try {\r
+ insertRowData.add(new Long(syncAPI.getSeq()));\r
+ insertRowData.add(new Long(syncAPI.getTime()));\r
+ insertRowData.add(new Integer(syncAPI.getApiId()));\r
+ insertRowData.add(new Integer(syncAPI.getPid()));\r
+ insertRowData.add(new Integer(syncAPI.getTid()));\r
+ insertRowData.add(new String(syncAPI.getArgs()));\r
+ insertRowData.add(new String(syncAPI.getReturn()));\r
+ insertRowData.add(new Long(syncAPI.getErrno()));\r
+ insertRowData.add(new Long(syncAPI.getSyncValue()));\r
+ } catch (ArrayIndexOutOfBoundsException e) {\r
+ e.printStackTrace();\r
+ }\r
+ insertData.add(insertRowData);\r
+ if (insertData.size() > 0) {\r
+ ThreadChartManager.getInstance().getSyncAPIDBTable().insertData(insertData);\r
+ } \r
+ }\r
+ } \r
+ }\r
+\r
+ public static void sendNotify() {\r
+// syncAPIQueue.wake();\r
+ }\r
+}\r
--- /dev/null
+/*
+ * Dynamic Analyzer
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.ui.thread.data;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.database.DBColumn;
+import org.tizen.dynamicanalyzer.database.DBConstants;
+import org.tizen.dynamicanalyzer.database.DBTable;
+import org.tizen.dynamicanalyzer.database.IResultSet;
+
+public class SyncDataDBTable extends DBTable implements IResultSet {
+ public static final String TABLENAME="SyncData";
+
+ public static final String QUERY_OPTION = "order by " + COLUMN.SYNCDATAID.name;
+
+ private static final String SELECT_COLUMN =
+ COLUMN.SYNCDATAID.name + CommonConstants.COMMA +
+ COLUMN.PID.name + CommonConstants.COMMA +
+ COLUMN.TID.name + CommonConstants.COMMA +
+ COLUMN.SYNCTYPE.name + CommonConstants.COMMA +
+ COLUMN.SYNCVALUE.name + CommonConstants.COMMA +
+ COLUMN.ATTRIBUTETYPE.name + CommonConstants.COMMA +
+ COLUMN.SYNCDATATYPE.name + CommonConstants.COMMA +
+ COLUMN.PARENTID.name;
+ public static final String SELECT_QUERY =
+ "select " + SELECT_COLUMN + " from " + TABLENAME +
+ " order by " + COLUMN.SYNCDATAID.name;
+
+ public enum COLUMN {
+ SYNCDATAID(0, "SyncDataID"),
+ PID(1, "PID"),
+ TID(2, "TID"),
+ SYNCTYPE(3, "SyncType"),
+ SYNCVALUE(4, "SyncValue"),
+ ATTRIBUTETYPE(5, "AttributeType"),
+ SYNCDATATYPE(6, "SyncDataType"),
+ PARENTID(7, "ParentId");
+
+ public final int index;
+ public final String name;
+
+ COLUMN(int index, String name) {
+ this.index = index;
+ this.name = name;
+ }
+ }
+
+ @Override
+ public String getTableName() {
+ return TABLENAME;
+ }
+
+ public SyncDataDBTable() {
+ addColumn(new DBColumn(COLUMN.SYNCDATAID.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.SYNCTYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
+ addColumn(new DBColumn(COLUMN.SYNCVALUE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+ addColumn(new DBColumn(COLUMN.ATTRIBUTETYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
+ addColumn(new DBColumn(COLUMN.SYNCDATATYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
+ addColumn(new DBColumn(COLUMN.PARENTID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
+ }
+
+ public List<List<Object>> getSyncDataFromDB() {
+ return selectAllColumnData(QUERY_OPTION);
+ }
+
+ @Override
+ public boolean prepare(PreparedStatement prep, List<Object> rowData) {
+ boolean isPrepared = true;
+
+ int columnsize = getColumnSize();
+ if (columnsize != rowData.size()) {
+ isPrepared = false;
+ } else {
+ try {
+ prep.setInt(COLUMN.SYNCDATAID.index + 1, (Integer) (rowData.get(COLUMN.SYNCDATAID.index)));
+ prep.setInt(COLUMN.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index)));
+ prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));
+ prep.setByte(COLUMN.SYNCTYPE.index + 1, (Byte) (rowData.get(COLUMN.SYNCTYPE.index)));
+ prep.setLong(COLUMN.SYNCVALUE.index + 1, (Long) (rowData.get(COLUMN.SYNCVALUE.index)));
+ prep.setByte(COLUMN.ATTRIBUTETYPE.index + 1, (Byte) (rowData.get(COLUMN.ATTRIBUTETYPE.index)));
+ prep.setByte(COLUMN.SYNCDATATYPE.index + 1, (Byte) (rowData.get(COLUMN.SYNCDATATYPE.index)));
+ prep.setInt(COLUMN.PARENTID.index + 1, (Integer) (rowData.get(COLUMN.PARENTID.index)));
+
+ } catch (SQLException e) {
+ e.printStackTrace();
+ isPrepared = false;
+ }
+ }
+
+ return isPrepared;
+ }
+
+ @Override
+ public List<Object> extractDataFromResultSet(ResultSet rs) {
+ List<Object> row = new ArrayList<Object>();
+ try {
+ row.add(Integer.valueOf(rs.getInt(COLUMN.SYNCDATAID.index + 1)));
+ row.add(Integer.valueOf(rs.getInt(COLUMN.PID.index + 1)));
+ row.add(Integer.valueOf(rs.getInt(COLUMN.TID.index + 1)));
+ row.add(Byte.valueOf(rs.getByte(COLUMN.SYNCTYPE.index + 1)));
+ row.add(Long.valueOf(rs.getLong(COLUMN.SYNCVALUE.index + 1)));
+ row.add(Byte.valueOf(rs.getByte(COLUMN.ATTRIBUTETYPE.index + 1)));
+ row.add(Byte.valueOf(rs.getByte(COLUMN.SYNCDATATYPE.index + 1)));
+ row.add(Integer.valueOf(rs.getInt(COLUMN.PARENTID.index + 1)));
+ } catch (SQLException e) {
+ e.printStackTrace();
+ return null;
+ }
+
+ return row;
+ }
+}
--- /dev/null
+/*\r
+ * Dynamic Analyzer\r
+ *\r
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: \r
+ * WooJin Jung <woojin2.jung@samsung.com>\r
+ * Juyoung Kim <j0.kim@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * Contributors:\r
+ * - S-Core Co., Ltd\r
+ * \r
+ */\r
+\r
+package org.tizen.dynamicanalyzer.ui.thread.data;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.concurrent.LinkedBlockingQueue;\r
+\r
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;\r
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;\r
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;\r
+import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager;\r
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData;\r
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataManager;\r
+//TODO: use DBInserter\r
+public class SyncDataInserter implements Runnable {\r
+ private static LinkedBlockingQueue<ThreadPageSyncData> syncDataQueue = new LinkedBlockingQueue<ThreadPageSyncData>();\r
+\r
+ private static volatile Thread inserterThread = null;\r
+\r
+ public static void startThread() {\r
+ if (inserterThread == null || !inserterThread.isAlive()) {\r
+ synchronized (SyncDataInserter.class) {\r
+ if (inserterThread == null || !inserterThread.isAlive()) {\r
+ inserterThread = new Thread(null,\r
+ new SyncDataInserter());\r
+ inserterThread.start();\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ public static void stopThread() {\r
+ if (inserterThread != null && inserterThread.isAlive()) {\r
+ try {\r
+ sendNotify();\r
+ inserterThread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME);\r
+ } catch (InterruptedException e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ }\r
+\r
+ public static void pushSyncData(ThreadPageSyncData syncData) {\r
+ syncDataQueue.offer(syncData);\r
+ }\r
+\r
+ public static void clear() {\r
+ stopThread();\r
+ }\r
+\r
+ @Override\r
+ public void run() {\r
+ while (!AnalyzerManager.isExit()) {\r
+ ThreadPageSyncData syncData = syncDataQueue.poll();\r
+\r
+ if (syncData != null) {\r
+ ArrayList<List<Object>> insertData = new ArrayList<List<Object>>(); \r
+ List<Object> insertRowData = new ArrayList<Object>();\r
+ try {\r
+ insertRowData.add(new Integer(syncData.getSyncDataID()));\r
+ insertRowData.add(new Integer(syncData.getPid()));\r
+ insertRowData.add(new Integer(syncData.getTid()));\r
+ Integer type = new Integer(syncData.getType());\r
+ byte syncType = type.byteValue();\r
+ insertRowData.add(new Byte(syncType));\r
+ insertRowData.add(new Long(syncData.getKey()));\r
+ String attrTypeStr = syncData.getAttrType();\r
+ byte attrType = -1;\r
+ if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_NORMAL)) {\r
+ attrType = ThreadPageSyncDataManager.PTHREAD_MUTEX_NORMAL;\r
+ } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE)) {\r
+ attrType = ThreadPageSyncDataManager.PTHREAD_MUTEX_RECURSIVE;\r
+ } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_ERRORCHECK)) {\r
+ attrType = ThreadPageSyncDataManager.PTHREAD_MUTEX_ERRORCHECK; \r
+ } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT)) {\r
+ attrType = ThreadPageSyncDataManager.PTHREAD_MUTEX_DEFAULT;\r
+ } else {\r
+ attrType = -1;\r
+ }\r
+ insertRowData.add(new Byte(attrType));\r
+ insertRowData.add(new Byte(syncData.getSyncDataType()));\r
+ insertRowData.add(new Integer(syncData.getParentID()));\r
+ } catch (ArrayIndexOutOfBoundsException e) {\r
+ e.printStackTrace();\r
+ }\r
+ insertData.add(insertRowData);\r
+ if (insertData.size() > 0) {\r
+ ThreadChartManager.getInstance().getSyncDataDBTable().insertData(insertData);\r
+ }\r
+ }\r
+ } \r
+ }\r
+\r
+ public static void sendNotify() {\r
+// syncDataQueue.wake();\r
+ }\r
+}\r
--- /dev/null
+/*
+ * Dynamic Analyzer
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.ui.thread.data;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.common.DALimit;
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.database.DBColumn;
+import org.tizen.dynamicanalyzer.database.DBConstants;
+import org.tizen.dynamicanalyzer.database.DBTable;
+import org.tizen.dynamicanalyzer.database.IResultSet;
+
+public class SyncEventDBTable extends DBTable implements IResultSet {
+ public static final String TABLENAME="SyncEvent";
+
+ private static final String SELECT_COLUMN =
+ COLUMN.EVENTTIME.name + CommonConstants.COMMA +
+ COLUMN.APITYPE.name + CommonConstants.COMMA +
+ COLUMN.TOOLTIP.name + CommonConstants.COMMA +
+ COLUMN.ERRORNO.name + CommonConstants.COMMA +
+ COLUMN.SYNCVALUE.name;
+ public static final String SELECT_QUERY =
+ "select " + SELECT_COLUMN + " from " + TABLENAME +
+ " where " + COLUMN.SYNCDATAID.name + " = %s ";
+
+ public enum COLUMN {
+ API_SEQNUMBER(0, "APISEQNUMBER"),
+ SYNCDATAID(1, "SyncDataID"),
+ EVENTTIME(2, "EventTime"),
+ APITYPE(3, "APIType"),
+ TOOLTIP(4, "Tooltip"),
+ ERRORNO(5, DBConstants.DBCOLUMN_ERROR_NUMBER),
+ SYNCVALUE(6, "SyncValue");
+
+ public final int index;
+ public final String name;
+
+ COLUMN(int index, String name) {
+ this.index = index;
+ this.name = name;
+ }
+ }
+
+ @Override
+ public String getTableName() {
+ return TABLENAME;
+ }
+
+ public SyncEventDBTable() {
+ addColumn(new DBColumn(COLUMN.API_SEQNUMBER.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+ addColumn(new DBColumn(COLUMN.SYNCDATAID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.EVENTTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+ addColumn(new DBColumn(COLUMN.APITYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
+ addColumn(new DBColumn(COLUMN.TOOLTIP.name, DBConstants.EMPTY,
+ DBConstants.VARCHAR, DALimit.TOOLTIP_LENGTH));
+ addColumn(new DBColumn(COLUMN.ERRORNO.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+ addColumn(new DBColumn(COLUMN.SYNCVALUE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+ setIndexColumn(COLUMN.SYNCDATAID.index);
+ }
+
+ public List<List<Object>> getSyncEventFromDB() {
+ return selectAllColumnData(null);
+ }
+
+ @Override
+ public boolean prepare(PreparedStatement prep, List<Object> rowData) {
+ boolean isPrepared = true;
+
+ int columnsize = getColumnSize();
+ if (columnsize != rowData.size()) {
+ isPrepared = false;
+ } else {
+ try {
+ prep.setLong(COLUMN.API_SEQNUMBER.index + 1, (Long) (rowData.get(COLUMN.API_SEQNUMBER.index)));
+ prep.setInt(COLUMN.SYNCDATAID.index + 1, (Integer) (rowData.get(COLUMN.SYNCDATAID.index)));
+ prep.setLong(COLUMN.EVENTTIME.index + 1, (Long) (rowData.get(COLUMN.EVENTTIME.index)));
+ prep.setByte(COLUMN.APITYPE.index + 1, (Byte) (rowData.get(COLUMN.APITYPE.index)));
+ String tooltipStr = clipString((String) (rowData.get(COLUMN.TOOLTIP.index)),
+ DALimit.TOOLTIP_LENGTH, rowData.get(COLUMN.EVENTTIME.index).toString());
+ prep.setString(COLUMN.TOOLTIP.index + 1, tooltipStr);
+ prep.setLong(COLUMN.ERRORNO.index + 1, (Long) (rowData.get(COLUMN.ERRORNO.index)));
+ prep.setLong(COLUMN.SYNCVALUE.index + 1, (Long) (rowData.get(COLUMN.SYNCVALUE.index)));
+ } catch (SQLException e) {
+ e.printStackTrace();
+ isPrepared = false;
+ }
+ }
+
+ return isPrepared;
+ }
+
+ @Override
+ public List<Object> extractDataFromResultSet(ResultSet rs) {
+ List<Object> row = new ArrayList<Object>();
+ try {
+ row.add(Long.valueOf(rs.getLong(COLUMN.API_SEQNUMBER.index + 1)));
+ row.add(Integer.valueOf(rs.getInt(COLUMN.SYNCDATAID.index + 1)));
+ row.add(Long.valueOf(rs.getLong(COLUMN.EVENTTIME.index + 1)));
+ row.add(Byte.valueOf(rs.getByte(COLUMN.APITYPE.index + 1)));
+ row.add(rs.getString(COLUMN.TOOLTIP.index + 1));
+ row.add(Long.valueOf(rs.getLong(COLUMN.ERRORNO.index + 1)));
+ row.add(Long.valueOf(rs.getLong(COLUMN.SYNCVALUE.index + 1)));
+ } catch (SQLException e) {
+ e.printStackTrace();
+ return null;
+ }
+
+ return row;
+ }
+}
--- /dev/null
+/*\r
+ * Dynamic Analyzer\r
+ *\r
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: \r
+ * WooJin Jung <woojin2.jung@samsung.com>\r
+ * Juyoung Kim <j0.kim@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * Contributors:\r
+ * - S-Core Co., Ltd\r
+ * \r
+ */\r
+\r
+package org.tizen.dynamicanalyzer.ui.thread.data;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.concurrent.LinkedBlockingQueue;\r
+\r
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;\r
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;\r
+import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager;\r
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataEvent;\r
+//TODO: use DBInserter\r
+public class SyncEventInserter implements Runnable {\r
+ private static LinkedBlockingQueue<ThreadPageSyncDataEvent> syncEventQueue = new LinkedBlockingQueue<ThreadPageSyncDataEvent>();\r
+\r
+ private static volatile Thread inserterThread = null;\r
+\r
+ public static void startThread() {\r
+ if (inserterThread == null || !inserterThread.isAlive()) {\r
+ synchronized (SyncEventInserter.class) {\r
+ if (inserterThread == null || !inserterThread.isAlive()) {\r
+ inserterThread = new Thread(null,\r
+ new SyncEventInserter());\r
+ inserterThread.start();\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ public static void stopThread() {\r
+ if (inserterThread != null && inserterThread.isAlive()) {\r
+ try {\r
+ sendNotify();\r
+ inserterThread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME);\r
+ } catch (InterruptedException e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ }\r
+\r
+ public static void pushSyncEvent(ThreadPageSyncDataEvent syncEvent) {\r
+ syncEventQueue.offer(syncEvent);\r
+ }\r
+\r
+ public static void clear() {\r
+ stopThread();\r
+ }\r
+\r
+ @Override\r
+ public void run() {\r
+ while (!AnalyzerManager.isExit()) {\r
+ ThreadPageSyncDataEvent syncEvent = syncEventQueue.poll();\r
+\r
+ if (syncEvent != null) {\r
+ ArrayList<List<Object>> insertData = new ArrayList<List<Object>>(); \r
+ List<Object> insertRowData = new ArrayList<Object>();\r
+ try {\r
+ insertRowData.add(new Long(syncEvent.getContents().getSeq()));\r
+ insertRowData.add(new Integer(syncEvent.getSyncDataID()));\r
+ insertRowData.add(new Long(syncEvent.getTime()));\r
+ Integer apiType = new Integer(syncEvent.getApiType());\r
+ insertRowData.add(new Byte(apiType.byteValue()));\r
+ insertRowData.add(new String(syncEvent.getTooltipContent()));\r
+ insertRowData.add(new Long(syncEvent.getErrorNum()));\r
+ insertRowData.add(new Long(syncEvent.getSyncVal()));\r
+ } catch (ArrayIndexOutOfBoundsException e) {\r
+ e.printStackTrace();\r
+ }\r
+ insertData.add(insertRowData);\r
+ if (insertData.size() > 0) {\r
+ ThreadChartManager.getInstance().getSyncEventDBTable().insertData(insertData);\r
+ }\r
+ }\r
+ } \r
+ }\r
+\r
+ public static void sendNotify() {\r
+// syncEventQueue.wake();\r
+ }\r
+}\r
* Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
* WooJin Jung <woojin2.jung@samsung.com>
* Juyoung Kim <j0.kim@samsung.com>
*
*
*/
-package org.tizen.dynamicanalyzer.ui.thread.db;
+package org.tizen.dynamicanalyzer.ui.thread.data;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import org.tizen.dynamicanalyzer.common.DALimit;
-import org.tizen.dynamicanalyzer.communicator.DACommunicator;
import org.tizen.dynamicanalyzer.constant.CommonConstants;
import org.tizen.dynamicanalyzer.database.DBColumn;
import org.tizen.dynamicanalyzer.database.DBConstants;
-import org.tizen.dynamicanalyzer.database.DBInsertManager;
-import org.tizen.dynamicanalyzer.database.DBInserter;
import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.swap.model.data.ThreadData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadDataEvent;
-
-public class ThreadAPIDBTable extends DBTable {
- public static final String TABLENAME = "THREADAPI";
- private DBInserter dbInserter = null;
- private static final String SELECT_COLUMN = COLUMN.SEQ.name + CommonConstants.COMMA
- + COLUMN.APICALLTIME.name + CommonConstants.COMMA + COLUMN.APIID.name
- + CommonConstants.COMMA + COLUMN.PID.name + CommonConstants.COMMA + COLUMN.TID.name
- + CommonConstants.COMMA + COLUMN.ARGUMENT.name + CommonConstants.COMMA
- + COLUMN.RETURN.name + CommonConstants.COMMA + COLUMN.ERRORNO.name;
- public static final String SELECT_QUERY = "select " + SELECT_COLUMN + " from " + TABLENAME
- + " where " + COLUMN.THREADDATAID.name + " = %s";
+import org.tizen.dynamicanalyzer.database.IResultSet;
+public class ThreadAPIDBTable extends DBTable implements IResultSet {
+ public static final String TABLENAME="ThreadAPI";
+
+ private static final String SELECT_COLUMN =
+ COLUMN.SEQ.name + CommonConstants.COMMA +
+ COLUMN.APICALLTIME.name + CommonConstants.COMMA +
+ COLUMN.APIID.name + CommonConstants.COMMA +
+ COLUMN.PID.name + CommonConstants.COMMA +
+ COLUMN.TID.name + CommonConstants.COMMA +
+ COLUMN.ARGUMENT.name + CommonConstants.COMMA +
+ COLUMN.RETURN.name + CommonConstants.COMMA +
+ COLUMN.ERRORNO.name;
+ public static final String SELECT_QUERY =
+ "select " + SELECT_COLUMN + " from " + TABLENAME +
+ " where " + COLUMN.THREADDATAID.name + " = %s";
+
public enum COLUMN {
- SEQ(0, "SEQNUMBER"), THREADDATAID(1, "ThreadDataID"), APICALLTIME(2, "APICallTime"), APIID(
- 3, "APIID"), PID(4, "PID"), TID(5, "TID"), ARGUMENT(6,
- DBConstants.DBCOLUMN_ARGUMENT), RETURN(7, DBConstants.DBCOLUMN_RETURN_VALUE), ERRORNO(
- 8, DBConstants.DBCOLUMN_ERROR_NUMBER);
-
+ SEQ(0, "SEQNUMBER"),
+ THREADDATAID(1, "ThreadDataID"),
+ APICALLTIME(2, "APICallTime"),
+ APIID(3, "APIID"),
+ PID(4, "PID"),
+ TID(5, "TID"),
+ ARGUMENT(6, DBConstants.DBCOLUMN_ARGUMENT),
+ RETURN(7, DBConstants.DBCOLUMN_RETURN_VALUE),
+ ERRORNO(8, DBConstants.DBCOLUMN_ERROR_NUMBER);
+
public final int index;
public final String name;
-
+
COLUMN(int index, String name) {
this.index = index;
this.name = name;
}
}
-
+
@Override
public String getTableName() {
return TABLENAME;
}
-
+
public ThreadAPIDBTable() {
addColumn(new DBColumn(COLUMN.SEQ.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.THREADDATAID.name, DBConstants.NOT_NULL,
- DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.APICALLTIME.name, DBConstants.NOT_NULL,
- DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.APIID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.THREADDATAID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.APICALLTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+ addColumn(new DBColumn(COLUMN.APIID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.ARGUMENT.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR,
- DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH));
- addColumn(new DBColumn(COLUMN.RETURN.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR,
- DALimit.FUNCTION_RETURN_VALUE_LENGTH));
+ addColumn(new DBColumn(COLUMN.ARGUMENT.name, DBConstants.EMPTY,
+ DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH));
+ addColumn(new DBColumn(COLUMN.RETURN.name, DBConstants.EMPTY,
+ DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_RETURN_VALUE_LENGTH));
addColumn(new DBColumn(COLUMN.ERRORNO.name, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
setIndexColumn(COLUMN.THREADDATAID.index);
- dbInserter = DBInsertManager.makeInserter(this);
}
public List<List<Object>> getThreadAPIFromDB() {
return selectAllColumnData(null);
}
-
- public void insertThreadAPIData(List<ThreadPageThreadDataEvent> insertThreadEventList) {
- ArrayList<List<Object>> apiData = new ArrayList<List<Object>>();
- for (ThreadPageThreadDataEvent threadEvent : insertThreadEventList) {
- if (threadEvent.getEventType() != ThreadPageThreadDataEvent.TYPE_API) {
- continue;
- }
- List<Object> apiRowData = new ArrayList<Object>();
- ThreadData tData = (ThreadData) threadEvent.getContents();
- try {
- apiRowData.add(new Long(tData.getSeq()));
- apiRowData.add(new Integer(threadEvent.getThreadDataID()));
- apiRowData.add(new Long(tData.getTime()));
- apiRowData.add(new Integer(tData.getApiId()));
- apiRowData.add(new Integer(tData.getPid()));
- apiRowData.add(new Integer(tData.getTid()));
- apiRowData.add(new String(tData.getArgs()));
- apiRowData.add(new String(tData.getReturn()));
- apiRowData.add(new Long(tData.getErrno()));
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- }
- apiData.add(apiRowData);
- }
- if (apiData.size() == 0) {
- return;
- }
- if (DACommunicator.isRunning()) {
- dbInserter.pushData(apiData);
- } else {
- insertData(apiData);
- }
- }
-
+
@Override
public boolean prepare(PreparedStatement prep, List<Object> rowData) {
boolean isPrepared = true;
+
int columnsize = getColumnSize();
if (columnsize != rowData.size()) {
isPrepared = false;
} else {
try {
prep.setLong(COLUMN.SEQ.index + 1, (Long) (rowData.get(COLUMN.SEQ.index)));
- prep.setInt(COLUMN.THREADDATAID.index + 1,
- (Integer) (rowData.get(COLUMN.THREADDATAID.index)));
- prep.setLong(COLUMN.APICALLTIME.index + 1,
- (Long) (rowData.get(COLUMN.APICALLTIME.index)));
+ prep.setInt(COLUMN.THREADDATAID.index + 1, (Integer) (rowData.get(COLUMN.THREADDATAID.index)));
+ prep.setLong(COLUMN.APICALLTIME.index + 1, (Long) (rowData.get(COLUMN.APICALLTIME.index)));
prep.setInt(COLUMN.APIID.index + 1, (Integer) (rowData.get(COLUMN.APIID.index)));
prep.setInt(COLUMN.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index)));
prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));
String argumentStr = clipString((String) (rowData.get(COLUMN.ARGUMENT.index)),
- DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index)
- .toString());
+ DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index).toString());
prep.setString(COLUMN.ARGUMENT.index + 1, argumentStr);
String retStr = clipString((String) (rowData.get(COLUMN.RETURN.index)),
- DALimit.FUNCTION_RETURN_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index)
- .toString());
+ DALimit.FUNCTION_RETURN_VALUE_LENGTH, rowData.get(COLUMN.SEQ.index).toString());
prep.setString(COLUMN.RETURN.index + 1, retStr);
prep.setLong(COLUMN.ERRORNO.index + 1, (Long) (rowData.get(COLUMN.ERRORNO.index)));
-
+
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
}
}
+
return isPrepared;
}
-
+
@Override
public List<Object> extractDataFromResultSet(ResultSet rs) {
List<Object> row = new ArrayList<Object>();
e.printStackTrace();
return null;
}
-
+
return row;
}
}
* Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
* WooJin Jung <woojin2.jung@samsung.com>
* Juyoung Kim <j0.kim@samsung.com>
*
*
*/
-package org.tizen.dynamicanalyzer.ui.thread.db;
+package org.tizen.dynamicanalyzer.ui.thread.data;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.tizen.dynamicanalyzer.database.DBColumn;
import org.tizen.dynamicanalyzer.database.DBConstants;
import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadThreadDataMaker;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
-
-public class ThreadDataDBTable extends DBTable {
- public static final String TABLENAME = "THREADDATA";
+import org.tizen.dynamicanalyzer.database.IResultSet;
+public class ThreadDataDBTable extends DBTable implements IResultSet {
+ public static final String TABLENAME="ThreadData";
+
public enum COLUMN {
- THREADDATAID(0, "ThreadDataID"), PID(1, "PID"), TID(2, "TID"), THREADTYPE(3, "ThreadType"), ATTRIBUTETYPE(
- 4, "AttributeType"), STARTTIME(5, "StartTime"), ENDTIME(6, "EndTime"), FUNCTIONID(
- 7, "FunctionId"), CLASSNAME(8, "ClassName");
-
+ THREADDATAID(0, "ThreadDataID"),
+ PID(1, "PID"),
+ TID(2, "TID"),
+ THREADTYPE(3, "ThreadType"),
+ ATTRIBUTETYPE(4, "AttributeType"),
+ STARTTIME(5, "StartTime"),
+ ENDTIME(6, "EndTime"),
+ FUNCTIONID(7, "FunctionId"),
+ CLASSNAME(8, "ClassName");
+
public final int index;
public final String name;
-
+
COLUMN(int index, String name) {
this.index = index;
this.name = name;
}
}
-
+
@Override
public String getTableName() {
return TABLENAME;
}
-
+
public ThreadDataDBTable() {
- addColumn(new DBColumn(COLUMN.THREADDATAID.name, DBConstants.PRIMARY_KEY,
- DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.THREADDATAID.name, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_INT4));
addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.THREADTYPE.name, DBConstants.NOT_NULL,
- DBConstants.DBTYPE_INT1));
- addColumn(new DBColumn(COLUMN.ATTRIBUTETYPE.name, DBConstants.NOT_NULL,
- DBConstants.DBTYPE_INT1));
- addColumn(new DBColumn(COLUMN.STARTTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+ addColumn(new DBColumn(COLUMN.THREADTYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
+ addColumn(new DBColumn(COLUMN.ATTRIBUTETYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
+ addColumn(new DBColumn(COLUMN.STARTTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
addColumn(new DBColumn(COLUMN.ENDTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
addColumn(new DBColumn(COLUMN.FUNCTIONID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.CLASSNAME.name, DBConstants.EMPTY, DBConstants.VARCHAR,
- DALimit.CLASS_NAME_LENGTH));
+ addColumn(new DBColumn(COLUMN.CLASSNAME.name, DBConstants.EMPTY,
+ DBConstants.VARCHAR, DALimit.CLASS_NAME_LENGTH));
}
public List<List<Object>> getThreadDataFromDB() {
return selectAllColumnData(null);
}
-
- public void inserthreadPageThreadData(List<ThreadPageThreadData> remainedThreadData) {
- List<List<Object>> insertData = new ArrayList<List<Object>>();
- for (ThreadPageThreadData threadPageData : remainedThreadData) {
- if (threadPageData instanceof ThreadPageThreadData == false) {
- continue;
- }
- List<Object> insertRowData = new ArrayList<Object>();
- ThreadPageThreadData threadData = (ThreadPageThreadData) threadPageData;
- try {
- insertRowData.add(new Integer(threadData.getThreadDataID()));
- insertRowData.add(new Integer(threadData.getPid()));
- insertRowData.add(new Integer(threadData.getTid()));
- Integer type = new Integer(threadData.getType());
- byte threadType = type.byteValue();
- insertRowData.add(new Byte(threadType));
- String attrTypeStr = threadData.getAttrType();
- byte attrType = -1;
- if (attrTypeStr.equals(ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE)) {
- attrType = ThreadThreadDataMaker.PTHREAD_CREATE_JOINABLE;
- } else if (attrTypeStr.equals(ThreadPageLabels.THREAD_ATTR_TYPE_DETACHED)) {
- attrType = ThreadThreadDataMaker.PTHREAD_CREATE_DETACHED;
- } else { // main thread has no attribute
- attrType = -1;
- }
- insertRowData.add(new Byte(attrType));
- insertRowData.add(new Long(threadData.getStartTime()));
- insertRowData.add(new Long(threadData.getEndTime()));
- insertRowData.add(new Integer(threadData.getThreadFuncID()));
- insertRowData.add(new String(threadData.getThreadClassName()));
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- }
- insertData.add(insertRowData);
- }
- if (insertData.size() > 0) {
- insertData(insertData);
- }
- }
-
+
@Override
public boolean prepare(PreparedStatement prep, List<Object> rowData) {
boolean isPrepared = true;
-
+
int columnsize = getColumnSize();
if (columnsize != rowData.size()) {
isPrepared = false;
} else {
try {
- prep.setInt(COLUMN.THREADDATAID.index + 1,
- (Integer) (rowData.get(COLUMN.THREADDATAID.index)));
+ prep.setInt(COLUMN.THREADDATAID.index + 1, (Integer) (rowData.get(COLUMN.THREADDATAID.index)));
prep.setInt(COLUMN.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index)));
- prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));
- prep.setByte(COLUMN.THREADTYPE.index + 1,
- (Byte) (rowData.get(COLUMN.THREADTYPE.index)));
- prep.setByte(COLUMN.ATTRIBUTETYPE.index + 1,
- (Byte) (rowData.get(COLUMN.ATTRIBUTETYPE.index)));
- prep.setLong(COLUMN.STARTTIME.index + 1,
- (Long) (rowData.get(COLUMN.STARTTIME.index)));
+ prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));
+ prep.setByte(COLUMN.THREADTYPE.index + 1, (Byte) (rowData.get(COLUMN.THREADTYPE.index)));
+ prep.setByte(COLUMN.ATTRIBUTETYPE.index + 1, (Byte) (rowData.get(COLUMN.ATTRIBUTETYPE.index)));
+ prep.setLong(COLUMN.STARTTIME.index + 1, (Long) (rowData.get(COLUMN.STARTTIME.index)));
prep.setLong(COLUMN.ENDTIME.index + 1, (Long) (rowData.get(COLUMN.ENDTIME.index)));
- prep.setInt(COLUMN.FUNCTIONID.index + 1,
- (Integer) (rowData.get(COLUMN.FUNCTIONID.index)));
+ prep.setInt(COLUMN.FUNCTIONID.index + 1, (Integer) (rowData.get(COLUMN.FUNCTIONID.index)));
String classNameStr = clipString((String) (rowData.get(COLUMN.CLASSNAME.index)),
- DALimit.CLASS_NAME_LENGTH, rowData.get(COLUMN.THREADDATAID.index)
- .toString());
- prep.setString(COLUMN.CLASSNAME.index + 1, classNameStr);
-
+ DALimit.CLASS_NAME_LENGTH, rowData.get(COLUMN.THREADDATAID.index).toString());
+ prep.setString(COLUMN.CLASSNAME.index + 1, classNameStr);
+
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
}
}
-
+
return isPrepared;
}
-
+
@Override
public List<Object> extractDataFromResultSet(ResultSet rs) {
List<Object> row = new ArrayList<Object>();
row.add(Integer.valueOf(rs.getInt(COLUMN.PID.index + 1)));
row.add(Integer.valueOf(rs.getInt(COLUMN.TID.index + 1)));
row.add(Byte.valueOf(rs.getByte(COLUMN.THREADTYPE.index + 1)));
- row.add(Byte.valueOf(rs.getByte(COLUMN.ATTRIBUTETYPE.index + 1)));
+ row.add(Byte.valueOf(rs.getByte(COLUMN.ATTRIBUTETYPE.index + 1)));
row.add(Long.valueOf(rs.getLong(COLUMN.STARTTIME.index + 1)));
row.add(Long.valueOf(rs.getLong(COLUMN.ENDTIME.index + 1)));
row.add(Integer.valueOf(rs.getInt(COLUMN.FUNCTIONID.index + 1)));
e.printStackTrace();
return null;
}
-
+
return row;
}
}
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com>
- * yeongtaik byeon <yeongtaik.byeon@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.data;
-
-import java.util.List;
-import java.util.Map;
-
-import org.tizen.dynamicanalyzer.common.DALimit;
-import org.tizen.dynamicanalyzer.swap.channel.data.DataChannelConstants;
-import org.tizen.dynamicanalyzer.swap.logparser.LogPackage;
-import org.tizen.dynamicanalyzer.swap.logparser.Logs;
-import org.tizen.dynamicanalyzer.swap.logparser.PageDataManager;
-import org.tizen.dynamicanalyzer.swap.model.data.LogData;
-import org.tizen.dynamicanalyzer.ui.thread.db.SyncAPIDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.db.SyncDataDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.db.SyncEventDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.db.ThreadAPIDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.db.ThreadDataDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.db.ThreadEventDBTable;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
-
-public class ThreadDataManager extends PageDataManager {
- private static ThreadDataManager instance = null;
- public final static double THREAD_DATA_MEMORY_KB = 0.3;
- public final static double SYNC_DATA_MEMORY_KB = 0.3;
- public final static double CHART_TYPE_HEAP_MEMORY_KB = 4.6 * 5;
- public final static double MAX_THREAD_HEAP_MEMORY_KB = 10000; // possible to
- // make
- // approximately
- // 400 chart
-
- private ThreadDataDBTable threadDataTable = null;
- private ThreadEventDBTable threadEventTable = null;
- private ThreadAPIDBTable threadAPITable = null;
-
- private SyncDataDBTable syncDataTable = null;
- private SyncEventDBTable syncEventTable = null;
- private SyncAPIDBTable syncAPITable = null;
-
- private ThreadLoadDataMaker loadManager;
- private ThreadThreadDataMaker tManager;
- private ThreadSyncDataMaker sManager;
-
- private ThreadDataManager() {
- threadDataTable = new ThreadDataDBTable();
- threadEventTable = new ThreadEventDBTable();
- threadAPITable = new ThreadAPIDBTable();
-
- syncDataTable = new SyncDataDBTable();
- syncEventTable = new SyncEventDBTable();
- syncAPITable = new SyncAPIDBTable();
-
- loadManager = new ThreadLoadDataMaker();
- tManager = new ThreadThreadDataMaker();
- sManager = new ThreadSyncDataMaker();
- }
-
- public static ThreadDataManager getInstance() {
- if (null == instance) {
- instance = new ThreadDataManager();
- }
- return instance;
- }
-
- public ThreadLoadDataMaker getThreadLoadDataMamker() {
- return loadManager;
- }
-
- public ThreadThreadDataMaker getThreadDataMaker() {
- return tManager;
- }
-
- public ThreadSyncDataMaker getSyncDataMaker() {
- return sManager;
- }
-
- public ThreadEventDBTable getThreadEventDBTable() {
- return threadEventTable;
- }
-
- public ThreadAPIDBTable getThreadAPIDBTable() {
- return threadAPITable;
- }
-
- public SyncDataDBTable getSyncDataDBTable() {
- return syncDataTable;
- }
-
- public SyncEventDBTable getSyncEventDBTable() {
- return syncEventTable;
- }
-
- public SyncAPIDBTable getSyncAPIDBTable() {
- return syncAPITable;
- }
-
- public void clear() {
- tManager.clear();
- sManager.clear();
- }
-
- public void saveData(Map<String, String> dataMap) {
- threadDataTable.inserthreadPageThreadData(tManager.getChartRowData());
- sManager.insertNoBlockEndTimeSyncEvent();
- sManager.getNotInsertSyncEventList().clear();
- }
-
- public void openData(Map<String, String> dataMap) {
- selectThreadDataWhenOpen();
- selectSyncDataWhenOpen();
- }
-
- @Override
- protected void onThreadStop() {
- tManager.insertRemainingCallEvent();
- }
-
- private void checkHeapMemory() {
- double useHeapMemory = 0;
- useHeapMemory += tManager.getChartRowData().size() * THREAD_DATA_MEMORY_KB;
- useHeapMemory += sManager.getChartRowData().size() * SYNC_DATA_MEMORY_KB;
- int chartItemCount = tManager.getChartRowData().size() + sManager.getChartRowData().size();
- useHeapMemory += CHART_TYPE_HEAP_MEMORY_KB * chartItemCount;
- if ((MAX_THREAD_HEAP_MEMORY_KB < useHeapMemory)) {
- DALimit.stopTraceAndOpenWarningDialog();
- }
- }
-
- private void selectThreadDataWhenOpen() {
- List<List<Object>> threadDatas = threadDataTable.getThreadDataFromDB();
- int size = threadDatas.size();
- for (int i = 0; i < size; i++) {
- List<Object> rowData = threadDatas.get(i);
- int id = (Integer) rowData.get(ThreadDataDBTable.COLUMN.THREADDATAID.index);
- int pid = (Integer) rowData.get(ThreadDataDBTable.COLUMN.PID.index);
- int tid = (Integer) rowData.get(ThreadDataDBTable.COLUMN.TID.index);
- byte threadType = (Byte) rowData.get(ThreadDataDBTable.COLUMN.THREADTYPE.index);
- byte attrType = (Byte) rowData.get(ThreadDataDBTable.COLUMN.ATTRIBUTETYPE.index);
- String attributeType = ThreadThreadDataMaker.getAttrTypeByTypeInt(attrType);
- long startTime = (Long) rowData.get(ThreadDataDBTable.COLUMN.STARTTIME.index);
- long endTime = (Long) rowData.get(ThreadDataDBTable.COLUMN.ENDTIME.index);
- int functionID = (Integer) rowData.get(ThreadDataDBTable.COLUMN.FUNCTIONID.index);
- String className = (String) rowData.get(ThreadDataDBTable.COLUMN.CLASSNAME.index);
-
- ThreadPageThreadData threadData = new ThreadPageThreadData(id, pid, tid, threadType,
- attributeType, startTime, endTime, functionID, className);
- tManager.setChartRowData(threadData);
- }
- }
-
- private void selectSyncDataWhenOpen() {
- List<List<Object>> syncDatas = syncDataTable.getSyncDataFromDB();
- int syncSize = syncDatas.size();
- for (int i = 0; i < syncSize; i++) {
- ThreadPageSyncData syncData = makeSyncData(syncDatas.get(i));
- sManager.setChartRowData(syncData);
- }
- }
-
- private ThreadPageSyncData makeSyncData(List<Object> rowData) {
- ThreadPageSyncData syncData = null;
- int id = (Integer) rowData.get(SyncDataDBTable.COLUMN.SYNCDATAID.index);
- int pid = (Integer) rowData.get(SyncDataDBTable.COLUMN.PID.index);
- int tid = (Integer) rowData.get(SyncDataDBTable.COLUMN.TID.index);
- byte syncType = (Byte) rowData.get(SyncDataDBTable.COLUMN.SYNCTYPE.index);
- long syncValue = (Long) rowData.get(SyncDataDBTable.COLUMN.SYNCVALUE.index);
- byte attrType = (Byte) rowData.get(SyncDataDBTable.COLUMN.ATTRIBUTETYPE.index);
- String attributeType = ThreadSyncDataMaker.getAttrTypeByTypeInt(attrType);
- byte syncDataType = (Byte) rowData.get(SyncDataDBTable.COLUMN.SYNCDATATYPE.index);
- int parentID = (Integer) rowData.get(SyncDataDBTable.COLUMN.PARENTID.index);
- syncData = new ThreadPageSyncData(id, pid, tid, syncType, syncValue, attributeType,
- syncDataType, parentID);
- return syncData;
- }
-
- @Override
- protected void makeData(LogPackage pack) {
- List<LogData> loadInputs = getLogsFromLogPackage(pack, DataChannelConstants.MSG_DATA_SYSTEM);
- if (null != loadInputs) {
- loadManager.makeLoadData(loadInputs);
- }
- List<LogData> threadInputs = getLogsFromLogPackage(pack,
- DataChannelConstants.MSG_PROBE_THREAD);
- if (null != threadInputs) {
- tManager.makeThreadData(threadInputs);
- checkHeapMemory();
- }
- List<LogData> syncInputs = getLogsFromLogPackage(pack, DataChannelConstants.MSG_PROBE_SYNC);
- if (null != syncInputs) {
- sManager.makeSyncData(syncInputs);
- checkHeapMemory();
- }
- }
-
- private List<LogData> getLogsFromLogPackage(LogPackage logPack, int logCenterConstants) {
- Logs logs = logPack.getLogs(logCenterConstants);
- if (null == logs || logs.getRawLogs().size() == 0) {
- return null;
- }
- List<LogData> ret = logs.getLogs();
- return ret;
- }
-}
\ No newline at end of file
* Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
* WooJin Jung <woojin2.jung@samsung.com>
* Juyoung Kim <j0.kim@samsung.com>
*
*
*/
-package org.tizen.dynamicanalyzer.ui.thread.db;
+package org.tizen.dynamicanalyzer.ui.thread.data;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import org.tizen.dynamicanalyzer.common.DALimit;
-import org.tizen.dynamicanalyzer.communicator.DACommunicator;
import org.tizen.dynamicanalyzer.constant.CommonConstants;
import org.tizen.dynamicanalyzer.database.DBColumn;
import org.tizen.dynamicanalyzer.database.DBConstants;
-import org.tizen.dynamicanalyzer.database.DBInsertManager;
-import org.tizen.dynamicanalyzer.database.DBInserter;
import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadDataEvent;
-
-public class ThreadEventDBTable extends DBTable {
- public static final String TABLENAME = "THREADEVENT";
- private DBInserter dbInserter = null;
-
- private static final String SELECT_COLUMN = COLUMN.THREADDATAID.name + CommonConstants.COMMA
- + COLUMN.EVENTTIME.name + CommonConstants.COMMA + COLUMN.TID.name
- + CommonConstants.COMMA + COLUMN.APITYPE.name + CommonConstants.COMMA
- + COLUMN.TOOLTIP.name + CommonConstants.COMMA + COLUMN.ERRORNO.name
- + CommonConstants.COMMA + COLUMN.EVENTTYPE.name + CommonConstants.COMMA
- + COLUMN.THREADTYPE.name + CommonConstants.COMMA + COLUMN.CALLERID.name;
-
- public static final String SELECT_QUERY = "select " + SELECT_COLUMN + " from " + TABLENAME
- + " where " + COLUMN.EVENTTIME.name + " BETWEEN %s and %s";
-
+import org.tizen.dynamicanalyzer.database.IResultSet;
+
+public class ThreadEventDBTable extends DBTable implements IResultSet {
+ public static final String TABLENAME="ThreadEvent";
+
+ private static final String SELECT_COLUMN =
+ COLUMN.EVENTTIME.name + CommonConstants.COMMA +
+ COLUMN.TID.name + CommonConstants.COMMA +
+ COLUMN.APITYPE.name + CommonConstants.COMMA +
+ COLUMN.TOOLTIP.name + CommonConstants.COMMA +
+ COLUMN.ERRORNO.name + CommonConstants.COMMA +
+ COLUMN.EVENTTYPE.name + CommonConstants.COMMA +
+ COLUMN.THREADTYPE.name + CommonConstants.COMMA +
+ COLUMN.CALLERID.name;
+ public static final String SELECT_QUERY =
+ "select " + SELECT_COLUMN + " from " + TABLENAME +
+ " where " + COLUMN.THREADDATAID.name + " = %s ";
+
public enum COLUMN {
- THREADDATAID(0, "ThreadDataID"), EVENTTIME(1, "EventTime"), TID(2, "TID"), APITYPE(3,
- "APIType"), TOOLTIP(4, "Tooltip"), ERRORNO(5, DBConstants.DBCOLUMN_ERROR_NUMBER), EVENTTYPE(
- 6, "EventType"), THREADTYPE(7, "ThreadType"), CALLERID(8, "CallerID");
-
+ THREADDATAID(0, "ThreadDataID"),
+ EVENTTIME(1, "EventTime"),
+ TID(2, "TID"),
+ APITYPE(3, "APIType"),
+ TOOLTIP(4, "Tooltip"),
+ ERRORNO(5, DBConstants.DBCOLUMN_ERROR_NUMBER),
+ EVENTTYPE(6, "EventType"),
+ THREADTYPE(7, "ThreadType"),
+ CALLERID(8, "CallerID");
+
public final int index;
public final String name;
-
+
COLUMN(int index, String name) {
this.index = index;
this.name = name;
}
}
-
+
@Override
public String getTableName() {
return TABLENAME;
}
-
+
public ThreadEventDBTable() {
- addColumn(new DBColumn(COLUMN.THREADDATAID.name, DBConstants.NOT_NULL,
- DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.THREADDATAID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
addColumn(new DBColumn(COLUMN.EVENTTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
addColumn(new DBColumn(COLUMN.APITYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
- addColumn(new DBColumn(COLUMN.TOOLTIP.name, DBConstants.EMPTY, DBConstants.VARCHAR,
- DALimit.TOOLTIP_LENGTH));
+ addColumn(new DBColumn(COLUMN.TOOLTIP.name, DBConstants.EMPTY,
+ DBConstants.VARCHAR, DALimit.TOOLTIP_LENGTH));
addColumn(new DBColumn(COLUMN.ERRORNO.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
addColumn(new DBColumn(COLUMN.EVENTTYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
- addColumn(new DBColumn(COLUMN.THREADTYPE.name, DBConstants.NOT_NULL,
- DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.CALLERID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.THREADTYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.CALLERID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
setIndexColumn(COLUMN.THREADDATAID.index);
- dbInserter = DBInsertManager.makeInserter(this);
}
public List<List<Object>> getThreadEventFromDB() {
return selectAllColumnData(null);
}
-
- public void insertThreadEventData(List<ThreadPageThreadDataEvent> insertThreadEventList) {
- ArrayList<List<Object>> insertData = new ArrayList<List<Object>>();
- for (ThreadPageThreadDataEvent threadEvent : insertThreadEventList) {
- List<Object> insertRowData = new ArrayList<Object>();
- try {
- insertRowData.add(new Integer(threadEvent.getThreadDataID()));
- insertRowData.add(new Long(threadEvent.getTime()));
- insertRowData.add(new Integer(threadEvent.getTid()));
- Integer apiType = new Integer(threadEvent.getApiType());
- insertRowData.add(new Byte(apiType.byteValue()));
- insertRowData.add(new String(threadEvent.getTooltipContent()));
- insertRowData.add(new Long(threadEvent.getErrorNum()));
- Integer eventType = new Integer(threadEvent.getEventType());
- insertRowData.add(new Byte(eventType.byteValue()));
- insertRowData.add(new Integer(threadEvent.getThreadType()));
- insertRowData.add(new Integer(threadEvent.getCallerTid()));
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- }
- insertData.add(insertRowData);
- }
- if (insertData.size() == 0) {
- return;
- }
- if (DACommunicator.isRunning()) {
- dbInserter.pushData(insertData);
- } else {
- insertData(insertData);
- }
- }
-
+
@Override
public boolean prepare(PreparedStatement prep, List<Object> rowData) {
boolean isPrepared = true;
+
int columnsize = getColumnSize();
if (columnsize != rowData.size()) {
isPrepared = false;
} else {
try {
- prep.setInt(COLUMN.THREADDATAID.index + 1,
- (Integer) (rowData.get(COLUMN.THREADDATAID.index)));
- prep.setLong(COLUMN.EVENTTIME.index + 1,
- (Long) (rowData.get(COLUMN.EVENTTIME.index)));
+ prep.setInt(COLUMN.THREADDATAID.index + 1, (Integer) (rowData.get(COLUMN.THREADDATAID.index)));
+ prep.setLong(COLUMN.EVENTTIME.index + 1, (Long) (rowData.get(COLUMN.EVENTTIME.index)));
prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));
prep.setByte(COLUMN.APITYPE.index + 1, (Byte) (rowData.get(COLUMN.APITYPE.index)));
String tooltipStr = clipString((String) (rowData.get(COLUMN.TOOLTIP.index)),
DALimit.TOOLTIP_LENGTH, rowData.get(COLUMN.EVENTTIME.index).toString());
- prep.setString(COLUMN.TOOLTIP.index + 1, tooltipStr);
+ prep.setString(COLUMN.TOOLTIP.index + 1, tooltipStr);
prep.setLong(COLUMN.ERRORNO.index + 1, (Long) (rowData.get(COLUMN.ERRORNO.index)));
- prep.setByte(COLUMN.EVENTTYPE.index + 1,
- (Byte) (rowData.get(COLUMN.EVENTTYPE.index)));
- prep.setInt(COLUMN.THREADTYPE.index + 1,
- (Integer) (rowData.get(COLUMN.THREADTYPE.index)));
- prep.setInt(COLUMN.CALLERID.index + 1,
- (Integer) (rowData.get(COLUMN.CALLERID.index)));
+ prep.setByte(COLUMN.EVENTTYPE.index + 1, (Byte) (rowData.get(COLUMN.EVENTTYPE.index)));
+ prep.setInt(COLUMN.THREADTYPE.index + 1, (Integer) (rowData.get(COLUMN.THREADTYPE.index)));
+ prep.setInt(COLUMN.CALLERID.index + 1, (Integer) (rowData.get(COLUMN.CALLERID.index)));
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
}
}
+
return isPrepared;
}
-
+
public List<Object> extractDataFromResultSet(ResultSet rs) {
List<Object> row = new ArrayList<Object>();
try {
e.printStackTrace();
return null;
}
-
+
return row;
}
}
--- /dev/null
+/*\r
+ * Dynamic Analyzer\r
+ *\r
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: \r
+ * WooJin Jung <woojin2.jung@samsung.com>\r
+ * Juyoung Kim <j0.kim@samsung.com>\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * \r
+ * Contributors:\r
+ * - S-Core Co., Ltd\r
+ * \r
+ */\r
+\r
+package org.tizen.dynamicanalyzer.ui.thread.data;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.concurrent.LinkedBlockingQueue;\r
+\r
+import org.tizen.dynamicanalyzer.common.AnalyzerConstants;\r
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;\r
+import org.tizen.dynamicanalyzer.swap.model.data.ThreadData;\r
+import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager;\r
+import org.tizen.dynamicanalyzer.ui.thread.thread.ThreadPageThreadDataEvent;\r
+// TODO: use DBInserter\r
+public class ThreadEventInserter implements Runnable {\r
+ private static LinkedBlockingQueue<ThreadPageThreadDataEvent> threadEventQueue = new LinkedBlockingQueue<ThreadPageThreadDataEvent>();\r
+\r
+ private static volatile Thread inserterThread = null;\r
+\r
+ public static void startThread() {\r
+ if (inserterThread == null || !inserterThread.isAlive()) {\r
+ synchronized (ThreadEventInserter.class) {\r
+ if (inserterThread == null || !inserterThread.isAlive()) {\r
+ inserterThread = new Thread(null,\r
+ new ThreadEventInserter());\r
+ inserterThread.start();\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ public static void stopThread() {\r
+ if (inserterThread != null && inserterThread.isAlive()) {\r
+ try {\r
+ sendNotify();\r
+ inserterThread.join(AnalyzerConstants.THREAD_JOIN_WAIT_TIME);\r
+ } catch (InterruptedException e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ }\r
+\r
+ public static void pushThreadEvent(ThreadPageThreadDataEvent threadEvent) {\r
+ threadEventQueue.offer(threadEvent);\r
+ }\r
+\r
+ public static void clear() {\r
+ stopThread();\r
+ }\r
+\r
+ @Override\r
+ public void run() {\r
+ while (!AnalyzerManager.isExit()) {\r
+ ThreadPageThreadDataEvent threadEvent = threadEventQueue.poll();\r
+\r
+ if (threadEvent != null) {\r
+ ArrayList<List<Object>> insertData = new ArrayList<List<Object>>(); \r
+ List<Object> insertRowData = new ArrayList<Object>();\r
+ try {\r
+ insertRowData.add(new Integer(threadEvent.getThreadDataID()));\r
+ insertRowData.add(new Long(threadEvent.getTime()));\r
+ insertRowData.add(new Integer(threadEvent.getTid()));\r
+ Integer apiType = new Integer(threadEvent.getApiType());\r
+ insertRowData.add(new Byte(apiType.byteValue()));\r
+ insertRowData.add(new String(threadEvent.getTooltipContent()));\r
+ insertRowData.add(new Long(threadEvent.getErrorNum()));\r
+ Integer eventType = new Integer(threadEvent.getEventType());\r
+ insertRowData.add(new Byte(eventType.byteValue()));\r
+ insertRowData.add(new Integer(threadEvent.getThreadType()));\r
+ Integer callerTid = -1;\r
+ if (threadEvent.getCallerTid() != null) {\r
+ callerTid = new Integer(threadEvent.getCallerTid()); \r
+ }\r
+ insertRowData.add(callerTid);\r
+ } catch (ArrayIndexOutOfBoundsException e) {\r
+ e.printStackTrace();\r
+ }\r
+ insertData.add(insertRowData);\r
+ if (insertData.size() > 0) {\r
+ ThreadChartManager.getInstance().getThreadEventDBTable().insertData(insertData);\r
+ }\r
+ // save ThreadAPI\r
+ if (threadEvent.getEventType() == ThreadPageThreadDataEvent.TYPE_API) {\r
+ ArrayList<List<Object>> apiData = new ArrayList<List<Object>>(); \r
+ List<Object> apiRowData = new ArrayList<Object>();\r
+ ThreadData tData = (ThreadData) threadEvent.getContents();\r
+ try {\r
+ apiRowData.add(new Long(tData.getSeq()));\r
+ apiRowData.add(new Integer(threadEvent.getThreadDataID()));\r
+ apiRowData.add(new Long(tData.getTime()));\r
+ apiRowData.add(new Integer(tData.getApiId()));\r
+ apiRowData.add(new Integer(tData.getPid()));\r
+ apiRowData.add(new Integer(tData.getTid()));\r
+ apiRowData.add(new String(tData.getArgs()));\r
+ apiRowData.add(new String(tData.getReturn()));\r
+ apiRowData.add(new Long(tData.getErrno()));\r
+ } catch (ArrayIndexOutOfBoundsException e) {\r
+ e.printStackTrace();\r
+ }\r
+ apiData.add(apiRowData);\r
+ if (apiData.size() > 0) {\r
+ ThreadChartManager.getInstance().getThreadAPIDBTable().insertData(apiData);\r
+ } \r
+ }\r
+ }\r
+ } \r
+ }\r
+\r
+ public static void sendNotify() {\r
+// threadEventQueue.wake();\r
+ }\r
+}\r
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com>
- * yeongtaik byeon <yeongtaik.byeon@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.data;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.swap.model.data.LogData;
-import org.tizen.dynamicanalyzer.swap.model.data.ProcessProfileData;
-import org.tizen.dynamicanalyzer.swap.model.data.SystemData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadDataEvent;
-import org.tizen.dynamicanalyzer.util.Logger;
-
-public class ThreadLoadDataMaker {
-
- public void makeLoadData(List<LogData> loadInputs) {
- int logSize = loadInputs.size();
- for (int i = 0; i < logSize; i++) {
- parseLoad(loadInputs.get(i));
- }
- }
-
- public void parseLoad(LogData input) {
- if (null == input) {
- return;
- }
-
- if (!(input instanceof SystemData)) {
- return;
- }
-
- ProcessProfileData[] processDataList = ((SystemData) input).getProcessProfileDataList();
- List<ThreadPageThreadDataEvent> insertThreadEventList = new ArrayList<ThreadPageThreadDataEvent>();
- for (int i = 0; i < processDataList.length; i++) {
- String loads = processDataList[i].getThreadLoad();
- String[] temp = loads.split(",");
- String tid;
- for (int j = 0; j + 1 < temp.length; j += 2) {
- try {
- tid = temp[j];
- } catch (NumberFormatException nfe) {
- Logger.error("parseLoad - tid parsing");
- break;
- }
- int load = (int) (Double.parseDouble(temp[j + 1]));
- long time = input.getTime();
- ThreadPageThreadDataEvent event = new ThreadPageThreadDataEvent(
- ThreadPageThreadDataEvent.TYPE_LOAD, load, -1, time, Integer.parseInt(tid),
- String.valueOf(load) + ThreadPageLabels.THREAD_CHART_ITEM_PERCENT, -1, null);
- event.setThreadDataID(ThreadDataManager.getInstance().getThreadDataMaker()
- .getThreadDataID(event.getTid()));
- insertThreadEventList.add(event);
- }
- }
- ThreadDataManager.getInstance().getThreadEventDBTable()
- .insertThreadEventData(insertThreadEventList);
- }
-}
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com>
- * yeongtaik byeon <yeongtaik.byeon@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.data;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.swap.model.data.LogData;
-import org.tizen.dynamicanalyzer.swap.model.data.SyncData;
-import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncDataEvent;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
-import org.tizen.dynamicanalyzer.util.Logger;
-
-public class ThreadSyncDataMaker {
- private List<ThreadPageSyncData> chartRowData = new ArrayList<ThreadPageSyncData>();
- private List<ThreadPageSyncDataEvent> noBlockEndTimeSyncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
- private List<ThreadPageSyncDataEvent> syncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
- private List<ThreadPageSyncDataEvent> syncEventQueueOfThread = new ArrayList<ThreadPageSyncDataEvent>();
- private HashMap<String, Integer> syncAttrMap = new HashMap<String, Integer>();
-
- public static final int PTHREAD_MUTEX_NORMAL = 0;
- public static final int PTHREAD_MUTEX_RECURSIVE = 1;
- public static final int PTHREAD_MUTEX_ERRORCHECK = 2;
- public static final int PTHREAD_MUTEX_DEFAULT = 3;
-
- public ThreadSyncDataMaker() {
- }
-
- public void makeSyncData(List<LogData> syncInputs) {
- int logSize = syncInputs.size();
- for (int i = 0; i < logSize; i++) {
- parseSync(syncInputs.get(i));
- }
- insertSyncData();
- }
-
- public void parseSync(LogData input) {
- if (null == input || !(input instanceof SyncData)) {
- return;
- }
- SyncData syncData = (SyncData) input;
- long time = syncData.getTime();
- int tID = syncData.getTid();
- int type = syncData.getSyncType();
- int apiType = syncData.getApiType();
- String apiName = syncData.getApiName();
- String name = Long.toString(syncData.getSyncValue());
- long errorNum = syncData.getErrno();
- if (errorNum != 0) {
- SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(syncData);
- }
- ThreadPageSyncDataEvent event;
- switch (type) {
- case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
- case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
- case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
- event = new ThreadPageSyncDataEvent(name, type, apiType, time, tID, apiName, errorNum,
- input);
- syncEventQueue.add(event);
- syncEventQueueOfThread.add(event);
- break;
- case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
- case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
- if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_INIT)) {
- syncAttrMap.put(syncData.getArgs(), PTHREAD_MUTEX_NORMAL);
- } else if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_SETTYPE)) {
- checkMutexAttrType(syncData.getArgs());
- } else {
- if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEX_INIT)) {
- checkMutexType(syncData.getArgs());
- }
- event = new ThreadPageSyncDataEvent(name, type, apiType, time, tID, apiName,
- errorNum, input);
- syncEventQueue.add(event);
- syncEventQueueOfThread.add(event);
- }
- break;
- case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
- case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
- case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
- event = new ThreadPageSyncDataEvent(name, type, apiType, time, tID, apiName, errorNum,
- input);
- syncEventQueue.add(event);
- syncEventQueueOfThread.add(event);
- Logger.error("sync parse - type = " + type);
- break;
- default:
- Logger.error("sync parse unknown - type = " + type);
- }
- }
-
- public void insertSyncData() {
- makeSyncDataOfThread();
- makeSyncData();
- }
-
- private void makeSyncData() {
- int size = syncEventQueue.size();
- if (size == 0) {
- return;
- }
- List<ThreadPageSyncDataEvent> insertSyncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
- List<ThreadPageSyncData> insertSyncDataQueue = new ArrayList<ThreadPageSyncData>();
- ThreadPageSyncData parent;
- ThreadPageSyncData data;
- ThreadPageSyncDataEvent event;
- for (int i = 0; i < size; i++) {
- event = syncEventQueue.get(0);
- String syncVal = event.getSyncVal();
- String pid = Integer.toString(event.getContents().getPid());
- parent = findParentData(syncVal);
- if (null == parent) {
- Integer syncAttrTypeInt = syncAttrMap.get(syncVal);
- String syncAttrType;
-
- if (null != syncAttrTypeInt) {
- syncAttrType = getAttrTypeByTypeInt(syncAttrTypeInt);
- } else {
- syncAttrType = getAttrTypeString(event);
- }
- parent = new ThreadPageSyncData(event.getType(), syncVal, pid, event.getTid(),
- syncAttrType, ThreadPageSyncData.SYNC_PARENT);
- chartRowData.add(parent);
- insertSyncDataQueue.add(parent);
- }
- event.setSyncDataID(parent.getSyncDataID());
- data = parent.findChildData(event.getTid());
- insertSyncEventQueue.add(event);
- if (null == data) {
- String attrType = parent.getAttrType();
- data = new ThreadPageSyncData(event.getType(), syncVal, pid, event.getTid(),
- attrType, ThreadPageSyncData.SYNC_CHILD);
- data.setParentID(parent.getSyncDataID());
- parent.pushSync(data);
- chartRowData.add(data);
- insertSyncDataQueue.add(data);
- }
- try {
- ThreadPageSyncDataEvent cloneEvent = (ThreadPageSyncDataEvent) event.clone();
- cloneEvent.setSyncDataID(data.getSyncDataID());
- insertSyncEventQueue.add(cloneEvent);
- } catch (CloneNotSupportedException e) {
- e.printStackTrace();
- continue;
- } finally {
- syncEventQueue.remove(0);
- }
- }
- insertSyncEvent(insertSyncEventQueue);
- ThreadDataManager.getInstance().getSyncDataDBTable().insertSyncData(insertSyncDataQueue);
- }
-
- public void makeSyncDataOfThread() {
- int size = syncEventQueueOfThread.size();
- if (size == 0) {
- return;
- }
- List<ThreadPageSyncDataEvent> insertSyncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
- List<ThreadPageSyncData> insertSyncDataQueue = new ArrayList<ThreadPageSyncData>();
- List<SyncData> insertSyncAPIQueue = new ArrayList<SyncData>();
- ThreadPageThreadData data;
- ThreadPageSyncDataEvent event;
- ThreadPageSyncData sync;
- for (int i = 0; i < size; i++) {
- event = syncEventQueueOfThread.get(0);
- String pid = Integer.toString(event.getContents().getPid());
- data = ThreadDataManager.getInstance().getThreadDataMaker()
- .findParentDataOfThread(event.getTid());
- if (null != data) {
- String syncVal = event.getSyncVal();
- sync = data.findSyncData(syncVal);
- if (null == sync) {
- Integer syncAttrTypeInt = syncAttrMap.get(syncVal);
- String syncAttrType;
- if (null != syncAttrTypeInt) {
- syncAttrType = ThreadSyncDataMaker.getAttrTypeByTypeInt(syncAttrTypeInt);
- } else {
- syncAttrType = ThreadSyncDataMaker.getAttrTypeString(event);
- }
- sync = new ThreadPageSyncData(event.getType(), syncVal, pid, event.getTid(),
- syncAttrType, ThreadPageSyncData.THREAD_CHILD);
- sync.setParentID(data.getThreadDataID());
- chartRowData.add(sync);
- data.pushSync(sync);
- insertSyncDataQueue.add(sync);
- }
- event.setSyncDataID(sync.getSyncDataID());
- insertSyncEventQueue.add(event);
- if (ThreadPageSyncData.isSyncApi(event.getApiType())) {
- insertSyncAPIQueue.add((SyncData) event.getContents());
- }
- }
- syncEventQueueOfThread.remove(0);
- }
- insertSyncEvent(insertSyncEventQueue);
- ThreadDataManager.getInstance().getSyncDataDBTable().insertSyncData(insertSyncDataQueue);
- ThreadDataManager.getInstance().getSyncAPIDBTable().insertSyncAPIData(insertSyncAPIQueue);
- }
-
- private ThreadPageSyncData findParentData(String name) {
- int size = chartRowData.size();
- ThreadPageSyncData ret;
- for (int i = 0; i < size; i++) {
- ret = chartRowData.get(i);
- if (ret.getKey().equals(name)
- && ret.getSyncDataType() == ThreadPageSyncData.SYNC_PARENT) {
- return ret;
- }
- }
- return null;
- }
-
- public static String getAttrTypeByTypeInt(int typeInt) {
- if (typeInt == PTHREAD_MUTEX_NORMAL) {
- return ThreadPageLabels.SYNC_ATTR_TYPE_NORMAL;
- } else if (typeInt == PTHREAD_MUTEX_RECURSIVE) {
- return ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE;
- } else if (typeInt == PTHREAD_MUTEX_ERRORCHECK) {
- return ThreadPageLabels.SYNC_ATTR_TYPE_ERRORCHECK;
- } else if (typeInt == PTHREAD_MUTEX_DEFAULT) { // for open trace
- return ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT;
- } else {
- return CommonConstants.EMPTY;
- }
- }
-
- public static String getAttrTypeString(ThreadPageSyncDataEvent event) {
- int type = event.getType();
- if (type == LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX) {
- return ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE;
- } else if (type == LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX) {
- return ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT;
- }
- return CommonConstants.EMPTY;
- }
-
- private void checkMutexAttrType(String input) {
- String[] temp = input.split(",");
- if (temp.length != 2) {
- return;
- }
- String obj = temp[0];
- String type = temp[1].trim();
- if (null != syncAttrMap.get(obj)) {
- syncAttrMap.put(obj, Integer.valueOf(type));
- }
- }
-
- private void checkMutexType(String input) {
- String[] temp = input.split(",");
- if (temp.length != 2) {
- return;
- }
- String obj = temp[0];
- String attrObj = temp[1].trim();
- Integer attrType = syncAttrMap.get(attrObj);
- if (attrType != null) {
- syncAttrMap.put(obj, attrType);
- }
- }
-
- public void insertNoBlockEndTimeSyncEvent() {
- ThreadDataManager.getInstance().getSyncEventDBTable()
- .insertSyncEventData(noBlockEndTimeSyncEventQueue);
- }
-
- private void insertSyncEvent(List<ThreadPageSyncDataEvent> insertSyncEventQueue) {
- makeBlockEndTime(insertSyncEventQueue);
- ThreadDataManager.getInstance().getSyncEventDBTable()
- .insertSyncEventData(insertSyncEventQueue);
- }
-
- private void makeBlockEndTime(List<ThreadPageSyncDataEvent> insertSyncEventQueue) {
- setBlockEndTimeOfInsertList(insertSyncEventQueue);
- updateNoBlockEndTimeList(insertSyncEventQueue);
- addInsertListFromNoBlockEndTimeList(insertSyncEventQueue);
- }
-
- private void setBlockEndTimeOfInsertList(List<ThreadPageSyncDataEvent> list) {
- setBlockEndTime(list, list);
- setBlockEndTime(noBlockEndTimeSyncEventQueue, list);
- }
-
- private void setBlockEndTimeOfNoBlockEndTimeList(List<ThreadPageSyncDataEvent> insertSyncEventQueue) {
- for (ThreadPageSyncDataEvent event : insertSyncEventQueue) {
- updateBlockEndTimeOfNotReleaseSyncEventQueue(event);
- }
- }
-
- private void setBlockEndTime(List<ThreadPageSyncDataEvent> targetList,
- List<ThreadPageSyncDataEvent> refList) {
- sortListByTime(targetList);
- for (ThreadPageSyncDataEvent targerEvent : targetList) {
- setBlockEndTime(targerEvent, refList);
- }
- }
-
- private void updateBlockEndTimeOfNotReleaseSyncEventQueue(ThreadPageSyncDataEvent event) {
- setBlockEndTime(event, noBlockEndTimeSyncEventQueue);
- }
-
- private void setBlockEndTime(ThreadPageSyncDataEvent targetEvent,
- List<ThreadPageSyncDataEvent> refList) {
- for (ThreadPageSyncDataEvent refEvent : refList) {
- if (targetEvent.equals(refEvent)
- || targetEvent.getSyncDataID() != refEvent.getSyncDataID()
- || targetEvent.getBlockEndTime() != -1
- || targetEvent.getTime() >= refEvent.getTime()
- || !isMappingBlockTimeLog(targetEvent.getApiType(), refEvent.getApiType())
- || targetEvent.getErrorNum() != 0) {
- continue;
- }
- targetEvent.setBlockEndTime(refEvent.getTime());
- return;
- }
- }
-
- private void sortListByTime(List<ThreadPageSyncDataEvent> list) {
- Comparator<ThreadPageSyncDataEvent> comparator = new Comparator<ThreadPageSyncDataEvent>() {
- @Override
- public int compare(ThreadPageSyncDataEvent arg0, ThreadPageSyncDataEvent arg1) {
- if (arg0.getTime() > arg1.getTime()) {
- return 1;
- } else if (arg0.getTime() < arg1.getTime()) {
- return -1;
- } else {
- return 0;
- }
- }
- };
- Collections.sort(list, comparator);
- }
-
- private void updateNoBlockEndTimeList(List<ThreadPageSyncDataEvent> insertSyncEventQueue) {
- List<ThreadPageSyncDataEvent> removeEveneList = new ArrayList<ThreadPageSyncDataEvent>();
- int size = insertSyncEventQueue.size();
- for (int i = 0; i < size; i++) {
- ThreadPageSyncDataEvent event = insertSyncEventQueue.get(i);
- if (event.getBlockEndTime() == -1) {
- try {
- removeEveneList.add(event);
- noBlockEndTimeSyncEventQueue.add(event.clone());
- } catch (CloneNotSupportedException e) {
- e.printStackTrace();
- }
- }
- }
- insertSyncEventQueue.removeAll(removeEveneList);
- setBlockEndTimeOfNoBlockEndTimeList(insertSyncEventQueue);
- }
-
- private void addInsertListFromNoBlockEndTimeList(
- List<ThreadPageSyncDataEvent> insertSyncEventQueue) {
- List<ThreadPageSyncDataEvent> removeEveneList = new ArrayList<ThreadPageSyncDataEvent>();
- int size = noBlockEndTimeSyncEventQueue.size();
- for (int i = 0; i < size; i++) {
- ThreadPageSyncDataEvent event = noBlockEndTimeSyncEventQueue.get(i);
- if (event.getBlockEndTime() != -1 || isRequireOnlyEventTimeLog(event.getApiType())) {
- try {
- removeEveneList.add(event);
- insertSyncEventQueue.add(event.clone());
- } catch (CloneNotSupportedException e) {
- e.printStackTrace();
- }
- }
- }
- noBlockEndTimeSyncEventQueue.removeAll(removeEveneList);
- }
-
- private boolean isRequireOnlyEventTimeLog(int apiType) {
- if (apiType == LogCenterConstants.SYNC_API_TYPE_NEW
- || apiType == LogCenterConstants.SYNC_API_TYPE_NOTIFY
- || apiType == LogCenterConstants.SYNC_API_TYPE_NOTIFY_ALL
- || apiType == LogCenterConstants.SYNC_API_TYPE_OTHER) {
- return true;
- } else {
- return false;
- }
- }
-
- private boolean isMappingBlockTimeLog(int targetType, int refAPIType) {
- if (targetType == LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START
- && refAPIType == LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_END) {
- return true;
- }
- if (targetType == LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_END
- && refAPIType == LogCenterConstants.SYNC_API_TYPE_RELEASE) {
- return true;
- }
- if (targetType == LogCenterConstants.SYNC_API_TYPE_RELEASE
- && refAPIType == LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START) {
- return true;
- }
- if (targetType == LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START
- && refAPIType == LogCenterConstants.SYNC_API_TYPE_COND_WAIT_END) {
- return true;
- }
- if (targetType == LogCenterConstants.SYNC_API_TYPE_COND_WAIT_END
- && refAPIType == LogCenterConstants.SYNC_API_TYPE_RELEASE) {
- return true;
- }
- if (targetType == LogCenterConstants.SYNC_API_TYPE_RELEASE
- && refAPIType == LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START) {
- return true;
- }
- if (targetType == LogCenterConstants.SYNC_API_TYPE_TRY_ACQUIRE
- && refAPIType == LogCenterConstants.SYNC_API_TYPE_RELEASE) {
- return true;
- }
- return false;
- }
-
- public void setChartRowData(ThreadPageSyncData data) {
- chartRowData.add(data);
- }
-
- public List<ThreadPageSyncData> getChartRowData() {
- List<ThreadPageSyncData> returnList = new ArrayList<ThreadPageSyncData>();
- for(ThreadPageSyncData data : chartRowData){
- returnList.add(data);
- }
- return returnList;
- }
-
- public List<ThreadPageSyncDataEvent> getNotInsertSyncEventList() {
- return noBlockEndTimeSyncEventQueue;
- }
-
- public void clear() {
- noBlockEndTimeSyncEventQueue.clear();
- chartRowData.clear();
- syncEventQueue.clear();
- syncEventQueueOfThread.clear();
- syncAttrMap.clear();
- ThreadPageSyncData.clear(); // reset internal seq number
- }
-
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com>
- * yeongtaik byeon <yeongtaik.byeon@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.data;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.common.Global;
-import org.tizen.dynamicanalyzer.common.SymbolManager;
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.swap.model.data.LogData;
-import org.tizen.dynamicanalyzer.swap.model.data.ThreadData;
-import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager;
-import org.tizen.dynamicanalyzer.ui.summary.warning.WarningCase;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadData;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageThreadDataEvent;
-import org.tizen.dynamicanalyzer.util.Logger;
-
-public class ThreadThreadDataMaker {
- private List<ThreadPageThreadDataEvent> eventQueue = new ArrayList<ThreadPageThreadDataEvent>();
- private HashMap<String, Integer> joinableThreadMap = new HashMap<String, Integer>();
- private List<ThreadPageThreadData> chartRowData = new ArrayList<ThreadPageThreadData>();
- private HashMap<String, Long> threadFuncMap = new HashMap<String, Long>();
- private HashMap<String, Integer> threadAttrMap = new HashMap<String, Integer>();
- private List<ThreadPageThreadDataEvent> callEventQueue = new ArrayList<ThreadPageThreadDataEvent>();
-
- public static final int PTHREAD_CREATE_JOINABLE = 0;
- public static final int PTHREAD_CREATE_DETACHED = 1;
-
- public void makeThreadData(List<LogData> threadInputs) {
- int logSize = threadInputs.size();
- for (int i = 0; i < logSize; i++) {
- parseAPI(threadInputs.get(i));
- }
- int size = eventQueue.size();
- if (size == 0) {
- return;
- }
-
- List<ThreadPageThreadDataEvent> insertThreadEvent = new ArrayList<ThreadPageThreadDataEvent>();
- for (ThreadPageThreadDataEvent event : eventQueue) {
- if (true == checkPairEvent(event)) {
- event.setThreadDataID(getThreadDataID(event.getTid()));
- insertThreadEvent.add(event);
- }
- }
-
- eventQueue.removeAll(insertThreadEvent);
- ThreadDataManager.getInstance().getThreadEventDBTable()
- .insertThreadEventData(insertThreadEvent);
- ThreadDataManager.getInstance().getThreadAPIDBTable()
- .insertThreadAPIData(insertThreadEvent);
- }
-
- public void parseAPI(LogData input) {
- if (null == input) {
- return;
- }
- if (!(input instanceof ThreadData)) {
- return;
- }
- ThreadData log = (ThreadData) input;
- int threadType = log.getThreadType();
- switch (threadType) {
- case LogCenterConstants.THREAD_TYPE_PTHREAD:
- parsePthread(log);
- break;
- case LogCenterConstants.THREAD_TYPE_TIZEN:
- // parseOSP(log);
- break;
- default:
- Logger.error("thread page err: unknown thread type");
- }
- }
-
- private void parsePthread(ThreadData input) {
- long time = input.getTime();
- String pid = Integer.toString(input.getPid());
- int apiType = input.getApiType();
- String apiName = input.getApiName();
- long errorNum = input.getErrno();
- ThreadPageThreadDataEvent event;
- int tID = input.getTid();
- String pthreadId = Long.toString(input.getPThreadId());
- if (errorNum != 0) {
- SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(input);
- }
- switch (apiType) {
- case LogCenterConstants.THREAD_API_TYPE_NEW:
- case LogCenterConstants.THREAD_API_TYPE_STOP:
- case LogCenterConstants.THREAD_API_TYPE_EXIT:
- case LogCenterConstants.THREAD_API_TYPE_WAIT_START:
- case LogCenterConstants.THREAD_API_TYPE_OTHER:
- if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_ATTR_INIT)) {
- threadAttrMap.put(input.getArgs(), PTHREAD_CREATE_JOINABLE);
- } else if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_ATTR_SETDETACHSTATE)) {
- checkThreadAttrType(input.getArgs());
- }
- event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
- LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tID, apiName, errorNum,
- input);
- eventQueue.add(event);
- break;
- case LogCenterConstants.THREAD_API_TYPE_START:
- if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_CREATE)) {
- checkThreadType(input.getArgs(), pthreadId);
- checkThreadFunc(input.getArgs(), pthreadId);
- }
- event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
- LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tID, apiName, errorNum,
- input);
- event.setCallID(pthreadId);
- callEventQueue.add(event);
- break;
- case LogCenterConstants.THREAD_API_TYPE_WAIT_END: {
- event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
- LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tID, apiName, errorNum,
- input);
- eventQueue.add(event);
- Integer joninTID = joinableThreadMap.get(pthreadId);
- if (null != joninTID
- && input.getApiName().equals(ThreadPageLabels.THREAD_API_PTHREAD_JOIN)) {
- SummaryDataManager
- .getInstance()
- .getWarningDataMaker()
- .removeData(event.getContents(),
- ThreadPageLabels.THREAD_CHART_NAME_TID + findCallerTid(pthreadId),
- WarningCase.JOINABLE_LEAK.getType());
- joinableThreadMap.remove(pthreadId);
- }
- }
- break;
- case LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP: {
- threadAttrMap.remove(pthreadId);
- event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
- LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tID,
- ThreadPageLabels.THREAD_CHART_ITEM_EXITED, errorNum, input);
- event.setCallID(pthreadId);
- Integer joninTID = joinableThreadMap.get(pthreadId);
- if (null != joninTID && joninTID == tID) {
- SummaryDataManager
- .getInstance()
- .getWarningDataMaker()
- .add(input, ThreadPageLabels.THREAD_CHART_NAME_TID + tID,
- WarningCase.JOINABLE_LEAK.getType());
- }
- callEventQueue.add(event);
- setEndTime(tID, time);
- }
- break;
- case LogCenterConstants.THREAD_API_TYPE_INTERNAL_START:
- Integer threadAttrTypeInt = threadAttrMap.get(pthreadId);
- String threadAttrType;
- int funcID;
- if (null != threadAttrTypeInt) {
- threadAttrType = getAttrTypeByTypeInt(threadAttrTypeInt);
- } else {
- threadAttrType = ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE;
- }
- if (threadAttrType == ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE) {
- joinableThreadMap.put(pthreadId, tID);
- }
-
- funcID = SymbolManager.getFuncId(null, threadFuncMap.get(pthreadId), input.getPid(),
- input.getTime());
- ThreadPageThreadData data = new ThreadPageThreadData(ThreadPageThreadData.TYPE_PTHREAD,
- pid, tID, threadAttrType, funcID);
- data.setStartTime(time);
- chartRowData.add(data);
- event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
- LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tID,
- ThreadPageLabels.THREAD_CHART_ITEM_CREATED, errorNum, input);
- eventQueue.add(event);
-
- List<ThreadPageThreadDataEvent> insertThreadEvent = new ArrayList<ThreadPageThreadDataEvent>();
- for (int i = 0; i < callEventQueue.size(); i++) {
- ThreadPageThreadDataEvent callEvent = callEventQueue.get(i);
- if (callEvent.getCallID().equals(pthreadId)
- && callEvent.getApiType() == LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
- callEvent.setThreadDataID(getThreadDataID(callEvent.getTid()));
- insertThreadEvent.add(callEvent);
- }
- }
- callEventQueue.removeAll(insertThreadEvent);
- ThreadDataManager.getInstance().getThreadEventDBTable()
- .insertThreadEventData(insertThreadEvent);
- ThreadDataManager.getInstance().getThreadAPIDBTable()
- .insertThreadAPIData(insertThreadEvent);
-
- break;
- default:
- Logger.error("thread page err: unknown thread api type");
- }
- }
-
- public void insertRemainingCallEvent() {
- List<ThreadPageThreadDataEvent> insertThreadEvent = new ArrayList<ThreadPageThreadDataEvent>();
- for (int i = 0; i < callEventQueue.size(); i++) {
- ThreadPageThreadDataEvent callEvent = callEventQueue.get(i);
- callEvent.setThreadDataID(getThreadDataID(callEvent.getTid()));
- insertThreadEvent.add(callEvent);
- }
- ThreadDataManager.getInstance().getThreadEventDBTable()
- .insertThreadEventData(insertThreadEvent);
- ThreadDataManager.getInstance().getThreadAPIDBTable()
- .insertThreadAPIData(insertThreadEvent);
- callEventQueue.clear();
- }
-
- private boolean checkPairEvent(ThreadPageThreadDataEvent event) {
- if (event.getEventType() != ThreadPageThreadDataEvent.TYPE_EVENT) {
- return true;
- }
-
- int apiType = event.getApiType();
- int threadType = event.getThreadType();
- ThreadData tData = (ThreadData) event.getContents();
- if (LogCenterConstants.THREAD_API_TYPE_INTERNAL_START == apiType) {
- int callEventQueueSize = callEventQueue.size();
- ThreadPageThreadDataEvent callEvent;
- for (int i = 0; i < callEventQueueSize; i++) {
- callEvent = callEventQueue.get(i);
- if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_START) {
- continue;
- } else if (callEvent.getThreadType() != threadType) {
- continue;
- } else {
- if (threadType == LogCenterConstants.THREAD_TYPE_TIZEN) {
- String callerTizenID = callEvent.getCallID();
- String eventTizenID = Long.toString(tData.getOspThreadId());
- if (eventTizenID.equals(callerTizenID)) {
- event.setCallerTid(callEvent.getTid());
- callEventQueue.remove(i);
- return true;
- }
- } else {
- String callerPthreadID = callEvent.getCallID();
- String eventPthreadID = Long.toString(tData.getPThreadId());
- if (eventPthreadID.equals(callerPthreadID)) {
- event.setCallerTid(callEvent.getTid());
- callEventQueue.remove(i);
-
- callEvent.setThreadDataID(getThreadDataID(callEvent.getTid()));
-
- List<ThreadPageThreadDataEvent> insertThreadEvent = new ArrayList<ThreadPageThreadDataEvent>();
- insertThreadEvent.add(callEvent);
- ThreadDataManager.getInstance().getThreadEventDBTable()
- .insertThreadEventData(insertThreadEvent);
- ThreadDataManager.getInstance().getThreadAPIDBTable()
- .insertThreadAPIData(insertThreadEvent);
-
- return true;
- }
- }
- }
- }
- return false;
- } else if (LogCenterConstants.THREAD_API_TYPE_WAIT_END == apiType) {
- if (!event.isJoinAPI()) {
- return true;
- }
-
- int callEventQueueSize = callEventQueue.size();
- ThreadPageThreadDataEvent callEvent;
- for (int i = 0; i < callEventQueueSize; i++) {
- callEvent = callEventQueue.get(i);
- if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
- continue;
- } else if (callEvent.getThreadType() != threadType) {
- continue;
- } else {
- if (threadType == LogCenterConstants.THREAD_TYPE_TIZEN) {
- String callerTizenID = callEvent.getCallID();
- String eventTizenID = Long.toString(tData.getOspThreadId());
- if (eventTizenID.equals(callerTizenID)) {
- event.setCallerTid(callEvent.getTid());
- callEvent.setCallerTid(event.getTid());
- // join, delete warning
- SummaryDataManager
- .getInstance()
- .getWarningDataMaker()
- .removeData(
- event.getContents(),
- ThreadPageLabels.THREAD_CHART_NAME_TID
- + callEvent.getTid(),
- WarningCase.JOINABLE_LEAK.getType());
- callEventQueue.remove(i);
- return true;
- }
- } else {
- String callerPthreadID = callEvent.getCallID();
- String eventPthreadID = Long.toString(tData.getPThreadId());
- if (eventPthreadID.equals(callerPthreadID)) {
- event.setCallerTid(callEvent.getTid());
- callEvent.setCallerTid(event.getTid());
- callEventQueue.remove(i);
- callEvent.setThreadDataID(getThreadDataID(callEvent.getTid()));
-
- List<ThreadPageThreadDataEvent> insertThreadEvent = new ArrayList<ThreadPageThreadDataEvent>();
- insertThreadEvent.add(callEvent);
- ThreadDataManager.getInstance().getThreadEventDBTable()
- .insertThreadEventData(insertThreadEvent);
- ThreadDataManager.getInstance().getThreadAPIDBTable()
- .insertThreadAPIData(insertThreadEvent);
- return true;
- }
- }
- }
- }
- return false;
- } else {
- return true;
- }
- }
-
- private int findCallerTid(String id) {
- int callEventQueueSize = callEventQueue.size();
- ThreadPageThreadDataEvent callEvent;
- for (int i = 0; i < callEventQueueSize; i++) {
- callEvent = callEventQueue.get(i);
- if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
- continue;
- }
- String callerTID = callEvent.getCallID();
-
- if (callerTID != null && callerTID.equals(id)) {
- return callEvent.getTid();
- }
- }
- return -1;
- }
-
- public void setChartRowData(ThreadPageThreadData data) {
- chartRowData.add(data);
- }
-
- public List<ThreadPageThreadData> getChartRowData() {
- List<ThreadPageThreadData> returnList = new ArrayList<ThreadPageThreadData>();
- for (ThreadPageThreadData data : chartRowData) {
- returnList.add(data);
- }
- return returnList;
- }
-
- private void setEndTime(int tID, long endTime) {
- for (ThreadPageThreadData threadData : chartRowData) {
- if (threadData.getTid() == tID) {
- threadData.setEndTime(endTime);
- }
- }
- }
-
- public int getThreadDataID(int tID) {
- for (ThreadPageThreadData threadData : chartRowData) {
- if (threadData.getTid() == tID) {
- return threadData.getThreadDataID();
- }
- }
- return 0;
- }
-
- public void createMainThreadItem(int tid) {
- int funcID = Global.getFunctionID("main");
- ThreadPageThreadData mainData = new ThreadPageThreadData(ThreadPageThreadData.TYPE_MAIN,
- Integer.toString(tid), tid, CommonConstants.EMPTY, funcID);
- chartRowData.add(mainData);
- }
-
- public static String getAttrTypeByTypeInt(int typeInt) {
- if (typeInt == PTHREAD_CREATE_JOINABLE) {
- return ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE;
- } else if (typeInt == PTHREAD_CREATE_DETACHED) {
- return ThreadPageLabels.THREAD_ATTR_TYPE_DETACHED;
- } else {
- return CommonConstants.EMPTY;
- }
- }
-
- private void checkThreadAttrType(String input) {
- String[] temp = input.split(",");
- if (temp.length != 2) {
- return;
- }
- String obj = temp[0];
- String type = temp[1].trim();
- if (null != threadAttrMap.get(obj)) {
- threadAttrMap.put(obj, Integer.valueOf(type));
- }
- }
-
- private void checkThreadType(String args, String pthreadId) {
- String[] temp = args.split(",");
- if (temp.length != 4) {
- return;
- }
- String attrObj = temp[1].trim();
-
- Integer attrType = threadAttrMap.get(attrObj);
- if (attrType != null) {
- threadAttrMap.put(pthreadId, attrType);
- }
- }
-
- private void checkThreadFunc(String args, String pthreadId) {
- String[] temp = args.split(",");
- if (temp.length != 4) {
- return;
- }
- // 3rd argument is function address
- String strFuncAddr = temp[2].trim();
- Long funcAddr = Long.decode(strFuncAddr);
- threadFuncMap.put(pthreadId, funcAddr);
- }
-
- public ThreadPageThreadData findParentDataOfThread(int tID) {
- for (ThreadPageThreadData threadData : chartRowData) {
- if (threadData.getTid() == tID) {
- return threadData;
- }
- }
- return null;
- }
-
- public void clear() {
- callEventQueue.clear();
- eventQueue.clear();
- joinableThreadMap.clear();
- chartRowData.clear();
- threadFuncMap.clear();
- threadAttrMap.clear();
- ThreadPageThreadData.clear(); // reset internal seq number
- }
-
- /*
- * private void parseOSP(ThreadData input) { long time = input.getTime();
- * String pid = Integer.toString(input.getPid()); int tID = input.getTid();
- * String tid = Integer.toString(input.getTid()); int apiType =
- * input.getApiType(); String apiName = input.getApiName(); String callID =
- * Long.toString(input.getOspThreadId()); String className = null;
- * ThreadPageThreadData data; ThreadPageThreadDataEvent event; long errorNum
- * = input.getErrno();
- *
- * if (errorNum != 0) {
- * SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(input);
- * }
- *
- * switch (apiType) { case LogCenterConstants.THREAD_API_TYPE_NEW: case
- * LogCenterConstants.THREAD_API_TYPE_STOP: case
- * LogCenterConstants.THREAD_API_TYPE_EXIT: case
- * LogCenterConstants.THREAD_API_TYPE_WAIT_START: case
- * LogCenterConstants.THREAD_API_TYPE_OTHER: event = new
- * ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
- * LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tID, apiName,
- * errorNum, input); pushEvent(event); break; case
- * LogCenterConstants.THREAD_API_TYPE_START: event = new
- * ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
- * LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tID, apiName,
- * errorNum, input);
- *
- * event.setCallID(callID); data = findCallQueue(callID); if (null != data)
- * { data.setThreadClassName(input.getClassName()); chartRowData.add(data);
- * } pushEvent(event); pushCallEvent(event); break; case
- * LogCenterConstants.THREAD_API_TYPE_WAIT_END: if
- * (input.getApiName().equals(ThreadPageLabels.THREAD_API_TIZEN_JOIN)) {
- * event = new
- * ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
- * LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tID, apiName,
- * errorNum, input); pushEvent(event); // join, delete warning //
- * AnalyzerManager.getWarningChecker().removeData( //
- * ThreadPageLabels.THREAD_CHART_NAME_TID // +
- * findCallerTid(Long.toString(input // .getOspThreadId())), //
- * WarningCase.JOINABLE_LEAK.getType()); SummaryDataManager .getInstance()
- * .getWarningDataMaker() .removeData(event.getContents(),
- * ThreadPageLabels.THREAD_CHART_NAME_TID + findCallerTid(callID),
- * WarningCase.JOINABLE_LEAK.getType()); } // FIXME : do not shows sleep's
- * wait end
- *
- * break; case LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP: event = new
- * ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
- * LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tID,
- * ThreadPageLabels.THREAD_CHART_ITEM_EXITED, errorNum, input);
- * event.setCallID(Long.toString(input.getOspThreadId())); pushEvent(event);
- * pushCallEvent(event); String joinableThread = joinableThreadMap.get(tID);
- * if (null != joinableThread &&
- * joinableThread.equals(ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE)) { //
- * warningData // WarningData wData = new WarningData( //
- * WarningCase.JOINABLE_LEAK.getType(), // event.getContents(), //
- * ThreadPageLabels.THREAD_CHART_NAME_TID + tid); //
- * AnalyzerManager.getWarningChecker().getWarningData().add(wData);
- * SummaryDataManager .getInstance() .getWarningDataMaker()
- * .add(event.getContents(), ThreadPageLabels.THREAD_CHART_NAME_TID + tid,
- * WarningCase.JOINABLE_LEAK.getType()); } break; case
- * LogCenterConstants.THREAD_API_TYPE_INTERNAL_START: Integer
- * threadAttrTypeInt = threadAttrMap.get(tID); String threadAttrType; if
- * (null != threadAttrTypeInt) { threadAttrType =
- * getAttrTypeByTypeInt(threadAttrTypeInt); } else { threadAttrType =
- * ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE; } joinableThreadMap.put(tID,
- * threadAttrType);
- *
- * data = new ThreadPageThreadData(ThreadPageThreadData.TYPE_TIZEN, pid,
- * tID, ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE, -1); // TIZEN thread
- * includes the internal thread if ((className = checkCalledThread(callID))
- * != null) { data.setThreadClassName(className); } chartRowData.add(data);
- * event = new
- * ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
- * LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tID,
- * ThreadPageLabels.THREAD_CHART_ITEM_CREATED, errorNum, input);
- * pushEvent(event); break; default:
- * Logger.error("thread page err: unknown thread api type"); } }
- *
- * private ThreadPageThreadData findCallQueue(String callID) { int tid =
- * findCallerTid(callID); int size; size = chartRowData.size();
- * ThreadPageThreadData ret; for (int i = 0; i < size; i++) { ret =
- * chartRowData.get(i); if (ret.getTid() == tid) { chartRowData.remove(i);
- * return ret; } } return null; }
- *
- * private String checkCalledThread(String callId) { if (null == callId) {
- * return null; } int callEventQueueSize = callEventQueue.size();
- * ThreadPageThreadDataEvent callEvent; for (int i = 0; i <
- * callEventQueueSize; i++) { callEvent = callEventQueue.get(i); if
- * (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_START) {
- * continue; } if (callId.equals(callEvent.getCallID())) { ThreadData
- * threadData = (ThreadData) callEvent.getContents(); return
- * threadData.getClassName(); } } return null; }
- */
-}
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.db;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.database.DBColumn;
-import org.tizen.dynamicanalyzer.database.DBConstants;
-import org.tizen.dynamicanalyzer.database.DBInsertManager;
-import org.tizen.dynamicanalyzer.database.DBInserter;
-import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.ui.thread.data.ThreadSyncDataMaker;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncData;
-
-public class SyncDataDBTable extends DBTable {
- public static final String TABLENAME = "SYNCDATA";
-
- public static final String QUERY_OPTION = "order by " + COLUMN.SYNCDATAID.name;
-
- private DBInserter dbInserter = null;
-
- private static final String SELECT_COLUMN = COLUMN.SYNCDATAID.name + CommonConstants.COMMA
- + COLUMN.PID.name + CommonConstants.COMMA + COLUMN.TID.name + CommonConstants.COMMA
- + COLUMN.SYNCTYPE.name + CommonConstants.COMMA + COLUMN.SYNCVALUE.name
- + CommonConstants.COMMA + COLUMN.ATTRIBUTETYPE.name + CommonConstants.COMMA
- + COLUMN.SYNCDATATYPE.name + CommonConstants.COMMA + COLUMN.PARENTID.name;
- public static final String SELECT_QUERY = "select " + SELECT_COLUMN + " from " + TABLENAME
- + " order by " + COLUMN.SYNCDATAID.name;
-
- public enum COLUMN {
- SYNCDATAID(0, "SyncDataID"), PID(1, "PID"), TID(2, "TID"), SYNCTYPE(3, "SyncType"), SYNCVALUE(
- 4, "SyncValue"), ATTRIBUTETYPE(5, "AttributeType"), SYNCDATATYPE(6, "SyncDataType"), PARENTID(
- 7, "ParentId");
-
- public final int index;
- public final String name;
-
- COLUMN(int index, String name) {
- this.index = index;
- this.name = name;
- }
- }
-
- @Override
- public String getTableName() {
- return TABLENAME;
- }
-
- public SyncDataDBTable() {
- addColumn(new DBColumn(COLUMN.SYNCDATAID.name, DBConstants.PRIMARY_KEY,
- DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.PID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.TID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.SYNCTYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
- addColumn(new DBColumn(COLUMN.SYNCVALUE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.ATTRIBUTETYPE.name, DBConstants.NOT_NULL,
- DBConstants.DBTYPE_INT1));
- addColumn(new DBColumn(COLUMN.SYNCDATATYPE.name, DBConstants.NOT_NULL,
- DBConstants.DBTYPE_INT1));
- addColumn(new DBColumn(COLUMN.PARENTID.name, DBConstants.EMPTY, DBConstants.DBTYPE_INT4));
- dbInserter = DBInsertManager.makeInserter(this);
- }
-
- public List<List<Object>> getSyncDataFromDB() {
- return selectAllColumnData(QUERY_OPTION);
- }
-
- public void insertSyncData(List<ThreadPageSyncData> insertSyncDataQueue) {
- if (insertSyncDataQueue.size() == 0) {
- return;
- }
- ArrayList<List<Object>> insertData = new ArrayList<List<Object>>();
- for (ThreadPageSyncData syncData : insertSyncDataQueue) {
- List<Object> insertRowData = new ArrayList<Object>();
- try {
- insertRowData.add(new Integer(syncData.getSyncDataID()));
- insertRowData.add(new Integer(syncData.getPid()));
- insertRowData.add(new Integer(syncData.getTid()));
- Integer type = new Integer(syncData.getType());
- byte syncType = type.byteValue();
- insertRowData.add(new Byte(syncType));
- insertRowData.add(new Long(syncData.getKey()));
- String attrTypeStr = syncData.getAttrType();
- byte attrType = -1;
- if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_NORMAL)) {
- attrType = ThreadSyncDataMaker.PTHREAD_MUTEX_NORMAL;
- } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE)) {
- attrType = ThreadSyncDataMaker.PTHREAD_MUTEX_RECURSIVE;
- } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_ERRORCHECK)) {
- attrType = ThreadSyncDataMaker.PTHREAD_MUTEX_ERRORCHECK;
- } else if (attrTypeStr.equals(ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT)) {
- attrType = ThreadSyncDataMaker.PTHREAD_MUTEX_DEFAULT;
- } else {
- attrType = -1;
- }
- insertRowData.add(new Byte(attrType));
- insertRowData.add(new Byte(syncData.getSyncDataType()));
- insertRowData.add(new Integer(syncData.getParentID()));
- insertData.add(insertRowData);
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- }
- }
- if (insertData.size() > 0) {
- dbInserter.pushData(insertData);
- }
- }
-
- @Override
- public boolean prepare(PreparedStatement prep, List<Object> rowData) {
- boolean isPrepared = true;
- int columnsize = getColumnSize();
- if (columnsize != rowData.size()) {
- isPrepared = false;
- } else {
- try {
- prep.setInt(COLUMN.SYNCDATAID.index + 1,
- (Integer) (rowData.get(COLUMN.SYNCDATAID.index)));
- prep.setInt(COLUMN.PID.index + 1, (Integer) (rowData.get(COLUMN.PID.index)));
- prep.setInt(COLUMN.TID.index + 1, (Integer) (rowData.get(COLUMN.TID.index)));
- prep.setByte(COLUMN.SYNCTYPE.index + 1, (Byte) (rowData.get(COLUMN.SYNCTYPE.index)));
- prep.setLong(COLUMN.SYNCVALUE.index + 1,
- (Long) (rowData.get(COLUMN.SYNCVALUE.index)));
- prep.setByte(COLUMN.ATTRIBUTETYPE.index + 1,
- (Byte) (rowData.get(COLUMN.ATTRIBUTETYPE.index)));
- prep.setByte(COLUMN.SYNCDATATYPE.index + 1,
- (Byte) (rowData.get(COLUMN.SYNCDATATYPE.index)));
- prep.setInt(COLUMN.PARENTID.index + 1,
- (Integer) (rowData.get(COLUMN.PARENTID.index)));
-
- } catch (SQLException e) {
- e.printStackTrace();
- isPrepared = false;
- }
- }
- return isPrepared;
- }
-
- @Override
- public List<Object> extractDataFromResultSet(ResultSet rs) {
- List<Object> row = new ArrayList<Object>();
- try {
- row.add(Integer.valueOf(rs.getInt(COLUMN.SYNCDATAID.index + 1)));
- row.add(Integer.valueOf(rs.getInt(COLUMN.PID.index + 1)));
- row.add(Integer.valueOf(rs.getInt(COLUMN.TID.index + 1)));
- row.add(Byte.valueOf(rs.getByte(COLUMN.SYNCTYPE.index + 1)));
- row.add(Long.valueOf(rs.getLong(COLUMN.SYNCVALUE.index + 1)));
- row.add(Byte.valueOf(rs.getByte(COLUMN.ATTRIBUTETYPE.index + 1)));
- row.add(Byte.valueOf(rs.getByte(COLUMN.SYNCDATATYPE.index + 1)));
- row.add(Integer.valueOf(rs.getInt(COLUMN.PARENTID.index + 1)));
- } catch (SQLException e) {
- e.printStackTrace();
- return null;
- }
-
- return row;
- }
-}
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.db;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.common.DALimit;
-import org.tizen.dynamicanalyzer.communicator.DACommunicator;
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.database.DBColumn;
-import org.tizen.dynamicanalyzer.database.DBConstants;
-import org.tizen.dynamicanalyzer.database.DBInsertManager;
-import org.tizen.dynamicanalyzer.database.DBInserter;
-import org.tizen.dynamicanalyzer.database.DBTable;
-import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
-import org.tizen.dynamicanalyzer.ui.thread.type.ThreadPageSyncDataEvent;
-
-public class SyncEventDBTable extends DBTable {
- public static final String TABLENAME = "SYNCEVENT";
- private DBInserter dbInserter = null;
-
- private static final String SELECT_COLUMN = COLUMN.API_SEQNUMBER.name + CommonConstants.COMMA
- + COLUMN.SYNCDATAID.name + CommonConstants.COMMA + COLUMN.EVENTTIME.name
- + CommonConstants.COMMA + COLUMN.APITYPE.name + CommonConstants.COMMA
- + COLUMN.TOOLTIP.name + CommonConstants.COMMA + COLUMN.ERRORNO.name
- + CommonConstants.COMMA + COLUMN.SYNCVALUE.name + CommonConstants.COMMA
- + COLUMN.RELEASETIME.name;
-
- public static final String SELECT_QUERY = "select " + SELECT_COLUMN +
- " from " + TABLENAME
- + " where ((" + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_NEW
- + " OR " + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_NOTIFY
- + " OR " + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_NOTIFY_ALL
- + " OR " + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_OTHER
- + " ) and " + COLUMN.EVENTTIME.name + " between %s and %s)" +
- " OR " + " (("
- + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START + " OR "
- + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_END + " OR "
- + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_RELEASE + " OR "
- + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_TRY_ACQUIRE + " OR "
- + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START + " OR "
- + COLUMN.APITYPE.name + " = " + LogCenterConstants.SYNC_API_TYPE_COND_WAIT_END + ") AND ("
- + COLUMN.EVENTTIME.name + " >= %s AND " + COLUMN.EVENTTIME.name + " <= %s))";
-
- public enum COLUMN {
- API_SEQNUMBER(0, "APISEQNUMBER"), SYNCDATAID(1, "SyncDataID"), EVENTTIME(2, "EventTime"), APITYPE(
- 3, "APIType"), TOOLTIP(4, "Tooltip"), ERRORNO(5, DBConstants.DBCOLUMN_ERROR_NUMBER), SYNCVALUE(
- 6, "SyncValue"), RELEASETIME(7, "ReleaseTime");
-
- public final int index;
- public final String name;
-
- COLUMN(int index, String name) {
- this.index = index;
- this.name = name;
- }
- }
-
- @Override
- public String getTableName() {
- return TABLENAME;
- }
-
- public SyncEventDBTable() {
- addColumn(new DBColumn(COLUMN.API_SEQNUMBER.name, DBConstants.NOT_NULL,
- DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.SYNCDATAID.name, DBConstants.NOT_NULL,
- DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(COLUMN.EVENTTIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.APITYPE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT1));
- addColumn(new DBColumn(COLUMN.TOOLTIP.name, DBConstants.EMPTY, DBConstants.VARCHAR,
- DALimit.TOOLTIP_LENGTH));
- addColumn(new DBColumn(COLUMN.ERRORNO.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.SYNCVALUE.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(COLUMN.RELEASETIME.name, DBConstants.NOT_NULL,
- DBConstants.DBTYPE_LONG));
- setIndexColumn(COLUMN.SYNCDATAID.index);
-
- dbInserter = DBInsertManager.makeInserter(this);
- }
-
- public List<List<Object>> getSyncEventFromDB() {
- return selectAllColumnData(null);
- }
-
- public List<List<Object>> getInsertDBData(ThreadPageSyncDataEvent syncEvent) {
- List<List<Object>> insertData = new ArrayList<List<Object>>();
- List<Object> insertRowData = new ArrayList<Object>();
- try {
- insertRowData.add(new Long(syncEvent.getContents().getSeq()));
- insertRowData.add(new Integer(syncEvent.getSyncDataID()));
- insertRowData.add(new Long(syncEvent.getTime()));
- Integer apiType = new Integer(syncEvent.getApiType());
- insertRowData.add(new Byte(apiType.byteValue()));
- insertRowData.add(new String(syncEvent.getTooltipContent()));
- insertRowData.add(new Long(syncEvent.getErrorNum()));
- insertRowData.add(new Long(syncEvent.getSyncVal()));
- insertRowData.add(new Long(syncEvent.getBlockEndTime()));
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- }
- return insertData;
- }
-
- public void insertSyncEventData(List<ThreadPageSyncDataEvent> syncEventQueue) {
- if (syncEventQueue.size() == 0) {
- return;
- }
- List<List<Object>> insertData = new ArrayList<List<Object>>();
- for (ThreadPageSyncDataEvent syncEvent : syncEventQueue) {
- List<Object> insertRowData = new ArrayList<Object>();
- try {
- insertRowData.add(new Long(syncEvent.getContents().getSeq()));
- insertRowData.add(new Integer(syncEvent.getSyncDataID()));
- insertRowData.add(new Long(syncEvent.getTime()));
- Integer apiType = new Integer(syncEvent.getApiType());
- insertRowData.add(new Byte(apiType.byteValue()));
- insertRowData.add(new String(syncEvent.getTooltipContent()));
- insertRowData.add(new Long(syncEvent.getErrorNum()));
- insertRowData.add(new Long(syncEvent.getSyncVal()));
- insertRowData.add(new Long(syncEvent.getBlockEndTime()));
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- }
- insertData.add(insertRowData);
- }
- if (DACommunicator.isRunning()) {
- dbInserter.pushData(insertData);
- } else {
- insertData(insertData);
- }
- }
-
- @Override
- public boolean prepare(PreparedStatement prep, List<Object> rowData) {
- boolean isPrepared = true;
-
- int columnsize = getColumnSize();
- if (columnsize != rowData.size()) {
- isPrepared = false;
- } else {
- try {
- prep.setLong(COLUMN.API_SEQNUMBER.index + 1,
- (Long) (rowData.get(COLUMN.API_SEQNUMBER.index)));
- prep.setInt(COLUMN.SYNCDATAID.index + 1,
- (Integer) (rowData.get(COLUMN.SYNCDATAID.index)));
- prep.setLong(COLUMN.EVENTTIME.index + 1,
- (Long) (rowData.get(COLUMN.EVENTTIME.index)));
- prep.setByte(COLUMN.APITYPE.index + 1, (Byte) (rowData.get(COLUMN.APITYPE.index)));
- String tooltipStr = clipString((String) (rowData.get(COLUMN.TOOLTIP.index)),
- DALimit.TOOLTIP_LENGTH, rowData.get(COLUMN.EVENTTIME.index).toString());
- prep.setString(COLUMN.TOOLTIP.index + 1, tooltipStr);
- prep.setLong(COLUMN.ERRORNO.index + 1, (Long) (rowData.get(COLUMN.ERRORNO.index)));
- prep.setLong(COLUMN.SYNCVALUE.index + 1,
- (Long) (rowData.get(COLUMN.SYNCVALUE.index)));
- prep.setLong(COLUMN.RELEASETIME.index + 1,
- (Long) (rowData.get(COLUMN.RELEASETIME.index)));
- } catch (SQLException e) {
- e.printStackTrace();
- isPrepared = false;
- }
- }
-
- return isPrepared;
- }
-
- @Override
- public List<Object> extractDataFromResultSet(ResultSet rs) {
- List<Object> row = new ArrayList<Object>();
- try {
- row.add(Long.valueOf(rs.getLong(COLUMN.API_SEQNUMBER.index + 1)));
- row.add(Integer.valueOf(rs.getInt(COLUMN.SYNCDATAID.index + 1)));
- row.add(Long.valueOf(rs.getLong(COLUMN.EVENTTIME.index + 1)));
- row.add(Byte.valueOf(rs.getByte(COLUMN.APITYPE.index + 1)));
- row.add(rs.getString(COLUMN.TOOLTIP.index + 1));
- row.add(Long.valueOf(rs.getLong(COLUMN.ERRORNO.index + 1)));
- row.add(Long.valueOf(rs.getLong(COLUMN.SYNCVALUE.index + 1)));
- row.add(Long.valueOf(rs.getLong(COLUMN.RELEASETIME.index + 1)));
- } catch (SQLException e) {
- e.printStackTrace();
- return null;
- }
-
- return row;
- }
-}
--- /dev/null
+/*
+ * Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.ui.thread.sync;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageData;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageDataEvent;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
+
+public class ThreadPageSyncData extends ThreadPageData {
+ private List<ThreadPageSyncData> children = new ArrayList<ThreadPageSyncData>();
+ private DAChartSeries apiSeries;
+ private DAChartSeries stateSeries;
+
+ public static final byte SYNC_PARENT = 0;
+ public static final byte SYNC_CHILD = 1;
+ public static final byte THREAD_CHILD = 2;
+
+ private static int internalSeq = 0;
+ private int syncDataID = -1;
+ private byte syncDataType = -1;
+ private int parentID = -1;
+
+ public ThreadPageSyncData(int type, String name, String pid, String tid,
+ String attrType, byte syncDataType) {
+ super(type, name, pid, tid, attrType);
+ this.syncDataType = syncDataType;
+ syncDataID = internalSeq++;
+ }
+
+ // using open trace
+ public ThreadPageSyncData(int id, int pid, int tid, int type, long syncValue,
+ String attrType, byte syncDataType, int parentID) {
+ super(type, String.valueOf(syncValue), String.valueOf(pid), String.valueOf(tid), attrType);
+ this.syncDataID = id;
+ this.syncDataType = syncDataType;
+ this.parentID = parentID;
+ }
+
+ protected void pushSync(ThreadPageSyncData sync) {
+ children.add(sync);
+ hasUpdate = true;
+ }
+
+ protected ThreadPageSyncData findChildData(String tId) {
+ int size = children.size();
+ ThreadPageSyncData ret;
+ for (int i = 0; i < size; i++) {
+ ret = children.get(i);
+ if (ret.getTid().equals(tId)) {
+ return ret;
+ }
+ }
+ return null;
+ }
+
+ public List<ThreadPageSyncData> getChildren() {
+ return children;
+ }
+
+ public void setItem(DAChartBoardItem item) {
+ this.item = item;
+ setChart(item.getChart());
+ stateSeries = chart
+ .getSeries(ThreadPageLabels.THREAD_SYNC_CHART_SERIES_STATE);
+ apiSeries = chart.getSeries(ThreadPageLabels.THREAD_CHART_SERIES_API);
+ }
+
+ public static boolean isSyncApi(int apiType) {
+ if (apiType == LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START) {
+ return false;
+ }
+ if (apiType == LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START) {
+ return false;
+ }
+ return true;
+ }
+
+ public void checkUpdate() {
+ if (false == hasUpdate) {
+ return;
+ } else {
+ hasUpdate = false;
+ }
+ int size = contentsQueue.size();
+ if (size > 0) {
+ ThreadPageDataEvent event;
+ for (int i = 0; i < size; i++) {
+ event = contentsQueue.get(0);
+ if (true == (isSyncApi(createChartItem(event)))) {
+ contents.add(event);
+ }
+
+ contentsQueue.remove(0);
+ }
+ chart.redraw();
+ }
+
+ size = children.size();
+ if (size > 0) {
+ ThreadPageSyncData sync;
+ for (int i = 0; i < size; i++) {
+ sync = children.get(i);
+ sync.checkUpdate();
+ }
+ }
+ }
+
+ protected int createChartItem(ThreadPageDataEvent event) {
+ DAChartSeriesItem stateItem = null;
+ DAChartSeriesItem apiItem = null;
+ if (!(event instanceof ThreadPageSyncDataEvent)) {
+ Logger.error("createChartItem");
+ return -1;
+ }
+ ThreadPageSyncDataEvent syncEvent = (ThreadPageSyncDataEvent) event;
+
+ int apiType = syncEvent.getApiType();
+ long errorNum = syncEvent.getErrorNum();
+ switch (apiType) {
+ case LogCenterConstants.SYNC_API_TYPE_NEW:
+ case LogCenterConstants.SYNC_API_TYPE_NOTIFY:
+ case LogCenterConstants.SYNC_API_TYPE_NOTIFY_ALL:
+ case LogCenterConstants.SYNC_API_TYPE_OTHER:
+ if(((DAChartBoardItem)item).getChartBoard() != null){
+ stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_STATE_CONNECTION,
+ ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+ "");
+ } else {
+ stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_STATE_CONNECTION,
+ ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+ ThreadPageLabels.SYNC_CHART_ITEM_UNUSED);
+ }
+ apiItem = createApiItem(syncEvent, errorNum);
+ stateSeries.addSeriesItem(stateItem);
+ apiSeries.addSeriesItem(apiItem);
+ break;
+ case LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START:
+ case LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START:
+ if(((DAChartBoardItem)item).getChartBoard() != null){
+ stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_STATE_CONNECTION,
+ ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+ "");
+ } else{
+ stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_STATE_CONTINUE,
+ ColorResources.THREAD_GRAPH_LOCK_WAIT_COLOR,
+ ThreadPageLabels.SYNC_CHART_ITEM_WAITED);
+ }
+ apiItem = createApiItem(syncEvent, errorNum);
+ stateSeries.addSeriesItem(stateItem);
+ apiSeries.addSeriesItem(apiItem);
+ break;
+ case LogCenterConstants.SYNC_API_TYPE_RELEASE:
+ if(((DAChartBoardItem)item).getChartBoard() != null){
+ stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_STATE_CONNECTION,
+ ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+ "");
+ } else{
+ stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_STATE_CONNECTION,
+ ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+ ThreadPageLabels.SYNC_CHART_ITEM_UNUSED);
+ }
+ apiItem = createApiItem(syncEvent, errorNum);
+ stateSeries.addSeriesItem(stateItem);
+ apiSeries.addSeriesItem(apiItem);
+ break;
+ case LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_END:
+ case LogCenterConstants.SYNC_API_TYPE_COND_WAIT_END:
+ if(((DAChartBoardItem)item).getChartBoard() != null){
+ stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_STATE_CONNECTION,
+ ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+ "");
+ } else{
+ stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_STATE_CONTINUE,
+ ColorResources.THREAD_GRAPH_LOCK_ACQUIRE_COLOR,
+ ThreadPageLabels.SYNC_CHART_ITEM_USED);
+ }
+ stateSeries.addSeriesItem(stateItem);
+ break;
+ case LogCenterConstants.SYNC_API_TYPE_TRY_ACQUIRE:
+ if(((DAChartBoardItem)item).getChartBoard() != null){
+ stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_STATE_CONNECTION,
+ ColorResources.THREAD_GRAPH_LOCK_RELEASE_COLOR,
+ "");
+ } else{
+ stateItem = new DAChartSeriesItem(syncEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_STATE_CONTINUE,
+ ColorResources.THREAD_GRAPH_LOCK_ACQUIRE_COLOR,
+ ThreadPageLabels.SYNC_CHART_ITEM_USED);
+ }
+ apiItem = createApiItem(syncEvent, errorNum);
+ stateSeries.addSeriesItem(stateItem);
+ apiSeries.addSeriesItem(apiItem);
+ break;
+ default:
+ return -1;
+ }
+
+ return apiType;
+ }
+
+ public String getTypeString() {
+ switch (getType()) {
+ case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
+ return ThreadPageLabels.SYNC_TYPE_TIZEN_MUTEX;
+ case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
+ return ThreadPageLabels.SYNC_TYPE_TIZEN_MONITOR;
+ case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
+ return ThreadPageLabels.SYNC_TYPE_TIZEN_SEMAPHORE;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
+ return ThreadPageLabels.SYNC_TYPE_PTHREAD_MUTEX;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
+ return ThreadPageLabels.SYNC_TYPE_PTHREAD_COND_VARIABLE;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
+ return ThreadPageLabels.SYNC_TYPE_PTHREAD_RWLOCK;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
+ return ThreadPageLabels.SYNC_TYPE_PTHREAD_SPINLOCK;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
+ return ThreadPageLabels.SYNC_TYPE_PTHREAD_BARRIER;
+ default:
+ Logger.error("unknown sync type!!");
+ return CommonConstants.EMPTY;
+ }
+ }
+
+ public int getSyncDataID() {
+ return syncDataID;
+ }
+
+ public byte getSyncDataType() {
+ return syncDataType;
+ }
+
+ public int getParentID() {
+ return parentID;
+ }
+
+ public void setParentID(int parentID) {
+ this.parentID = parentID;
+ }
+
+ public static void clear() {
+ internalSeq = 0;
+ }
+}
\ No newline at end of file
* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
* WooJin Jung <woojin2.jung@samsung.com>
* yeongtaik byeon <yeongtaik.byeon@samsung.com>
* Juyoung Kim <j0.kim@samsung.com>
* - S-Core Co., Ltd
*
*/
-package org.tizen.dynamicanalyzer.ui.thread.type;
+package org.tizen.dynamicanalyzer.ui.thread.sync;
import org.tizen.dynamicanalyzer.swap.model.data.LogData;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageDataEvent;
public class ThreadPageSyncDataEvent extends ThreadPageDataEvent {
private String syncVal;
private int type = -1;
private int syncDataID = -1;
- private long blockEndTime = -1;
- public ThreadPageSyncDataEvent(String syncVal, int type, int apiType, long time, int tid,
- String tooltip, long errorNum, LogData contents) {
+ public ThreadPageSyncDataEvent(String syncVal, int type, int apiType,
+ long time, String tid, String tooltip, long errorNum,
+ LogData contents) {
super(time, tid, apiType, tooltip, errorNum, contents);
this.syncVal = syncVal;
this.type = type;
}
-
- public ThreadPageSyncDataEvent(long time, int apiType, String tooltip, long errorNum,
- String syncVal) {
- super(time, -1, apiType, tooltip, errorNum, null);
+
+ // using open trace
+ public ThreadPageSyncDataEvent(long time, int apiType, String tooltip,
+ long errorNum, String syncVal) {
+ super(time, null, apiType, tooltip, errorNum, null);
this.syncVal = syncVal;
}
-
+
public ThreadPageSyncDataEvent clone() throws CloneNotSupportedException {
ThreadPageSyncDataEvent syncDataEvent = (ThreadPageSyncDataEvent) super.clone();
syncDataEvent.setSyncVal(syncVal);
syncDataEvent.setType(type);
syncDataEvent.setSyncDataID(syncDataID);
+
return syncDataEvent;
}
public String getSyncVal() {
return syncVal;
}
-
+
public void setSyncVal(String syncVal) {
this.syncVal = syncVal;
}
public int getType() {
return type;
}
-
+
public void setType(int type) {
this.type = type;
}
-
+
public int getSyncDataID() {
return syncDataID;
}
-
+
public void setSyncDataID(int syncDataID) {
this.syncDataID = syncDataID;
}
-
- public long getBlockEndTime() {
- return blockEndTime;
- }
-
- public void setBlockEndTime(long blockEndTime) {
- this.blockEndTime = blockEndTime;
- }
}
\ No newline at end of file
--- /dev/null
+/*
+ * Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.ui.thread.sync;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Comparator;
+
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+import org.tizen.dynamicanalyzer.nl.TimelineChartLabels;
+import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.resources.FontResources;
+import org.tizen.dynamicanalyzer.resources.ImageResources;
+import org.tizen.dynamicanalyzer.swap.channel.data.DataChannelConstants;
+import org.tizen.dynamicanalyzer.swap.logparser.LogPackage;
+import org.tizen.dynamicanalyzer.swap.logparser.Logs;
+import org.tizen.dynamicanalyzer.swap.model.data.LogData;
+import org.tizen.dynamicanalyzer.swap.model.data.SyncData;
+import org.tizen.dynamicanalyzer.ui.common.PopupAnalysisMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupClearMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupEndMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupFromSelectionMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupStartMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener;
+import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter;
+import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageData;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncDataInserter;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncEventInserter;
+import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
+import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu;
+import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem;
+
+public class ThreadPageSyncDataManager {
+ private DAChartBoard board;
+ private List<ThreadPageSyncData> rows = new ArrayList<ThreadPageSyncData>();
+ private List<ThreadPageSyncData> rowsQueue = new ArrayList<ThreadPageSyncData>();
+ private List<ThreadPageSyncDataEvent> syncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
+ private HashMap<String, Integer> syncAttrMap = new HashMap<String, Integer>();
+ public static final int PTHREAD_MUTEX_NORMAL = 0;
+ public static final int PTHREAD_MUTEX_RECURSIVE = 1;
+ public static final int PTHREAD_MUTEX_ERRORCHECK = 2;
+ public static final int PTHREAD_MUTEX_DEFAULT = 3;
+ private int preSelectionPid = -1;
+
+ public ThreadPageSyncDataManager(DAChartBoard board) {
+ this.setBoard(board);
+ }
+
+ protected DAChartBoard getBoard() {
+ return board;
+ }
+
+ public void setBoard(DAChartBoard board) {
+ this.board = board;
+ }
+
+ public void pushRow(ThreadPageSyncData data) {
+ rowsQueue.add(data);
+ }
+
+ private void pushEvent(ThreadPageSyncDataEvent event) {
+ syncEventQueue.add(event);
+ }
+
+ private ThreadPageSyncData findParentData(String name) {
+ int size = rows.size();
+ ThreadPageSyncData ret;
+ for (int i = 0; i < size; i++) {
+ ret = rows.get(i);
+ if (ret.getKey().equals(name)) {
+ return ret;
+ }
+ }
+ return null;
+ }
+
+ public static String getAttrTypeByTypeInt(int typeInt) {
+ if (typeInt == PTHREAD_MUTEX_NORMAL) {
+ return ThreadPageLabels.SYNC_ATTR_TYPE_NORMAL;
+ } else if (typeInt == PTHREAD_MUTEX_RECURSIVE) {
+ return ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE;
+ } else if (typeInt == PTHREAD_MUTEX_ERRORCHECK) {
+ return ThreadPageLabels.SYNC_ATTR_TYPE_ERRORCHECK;
+ } else if (typeInt == PTHREAD_MUTEX_DEFAULT) { // for open trace
+ return ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT;
+ } else {
+ return CommonConstants.EMPTY;
+ }
+ }
+
+ public static String getAttrTypeString(ThreadPageSyncDataEvent event) {
+ int type = event.getType();
+
+ if (type == LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX) {
+ return ThreadPageLabels.SYNC_ATTR_TYPE_RECURSIVE;
+ } else if (type == LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX) {
+ return ThreadPageLabels.SYNC_ATTR_TYPE_DEFAULT;
+ }
+ return CommonConstants.EMPTY;
+ }
+
+ public void parseSync(LogData input) {
+
+ if (null == input || !(input instanceof SyncData)) {
+ return;
+ }
+ SyncData syncData = (SyncData) input;
+ // System.out.println("input : " + input);
+ long time = syncData.getTime();
+ String tid = Integer.toString(syncData.getTid());
+
+ int type = syncData.getSyncType();
+ int apiType = syncData.getApiType();
+ String apiName = syncData.getApiName();
+
+ String name = Long.toString(syncData.getSyncValue());
+
+ long errorNum = syncData.getErrno();
+ if (errorNum != 0) {
+ SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(syncData);
+ }
+
+ ThreadPageSyncDataEvent event;
+ switch (type) {
+ case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
+ case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
+ case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
+ event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid,
+ apiName, errorNum, input);
+ pushEvent(event);
+ // parseTIZENSync(input, type);
+ break;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
+ if (apiName
+ .equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_INIT)) {
+ syncAttrMap.put(syncData.getArgs(), PTHREAD_MUTEX_NORMAL);
+ } else if (apiName
+ .equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_SETTYPE)) {
+ checkMutexAttrType(syncData.getArgs());
+ } else {
+ if (apiName
+ .equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEX_INIT)) {
+ checkMutexType(syncData.getArgs());
+ }
+ event = new ThreadPageSyncDataEvent(name, type, apiType, time,
+ tid, apiName, errorNum, input);
+ pushEvent(event);
+ }
+ break;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
+ event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid,
+ apiName, errorNum, input);
+ pushEvent(event);
+ Logger.error("sync parse - type = " + type);
+ break;
+ default:
+ Logger.error("sync parse unknown - type = " + type);
+
+ }
+ }
+
+ private void parseSyncs(List<LogData> inputs) {
+ if (null == inputs || inputs.isEmpty()) {
+ return;
+ }
+
+ int size = inputs.size();
+ SyncData input;
+
+ for (int i = 0; i < size; i++) {
+ input = (SyncData) inputs.get(i);
+ // System.out.println("input : " + input);
+ long time = input.getTime();
+ String tid = Integer.toString(input.getTid());
+
+ int type = input.getSyncType();
+ int apiType = input.getApiType();
+ String apiName = input.getApiName();
+
+ String name = Long.toString(input.getSyncValue());
+
+ long errorNum = input.getErrno();
+
+ ThreadPageSyncDataEvent event;
+ switch (type) {
+ case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
+ case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
+ case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
+ event = new ThreadPageSyncDataEvent(name, type, apiType, time,
+ tid, apiName, errorNum, input);
+ pushEvent(event);
+ // parseTIZENSync(input, type);
+ break;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
+ if (apiName
+ .equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_INIT)) {
+ syncAttrMap.put(input.getArgs(), PTHREAD_MUTEX_NORMAL);
+ } else if (apiName
+ .equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_SETTYPE)) {
+ checkMutexAttrType(input.getArgs());
+ } else {
+ if (apiName
+ .equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEX_INIT)) {
+ checkMutexType(input.getArgs());
+ }
+ event = new ThreadPageSyncDataEvent(name, type, apiType,
+ time, tid, apiName, errorNum, input);
+ pushEvent(event);
+ }
+ break;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
+ event = new ThreadPageSyncDataEvent(name, type, apiType, time,
+ tid, apiName, errorNum, input);
+ pushEvent(event);
+ Logger.error("sync parse - type = " + type);
+ break;
+ default:
+ Logger.error("sync parse unknown - type = "
+ + type);
+ }
+ }
+ }
+
+ private void checkMutexAttrType(String input) {
+ String[] temp = input.split(",");
+ if (temp.length != 2) {
+ return;
+ }
+ String obj = temp[0];
+ String type = temp[1].trim();
+
+ if (null != syncAttrMap.get(obj)) {
+ syncAttrMap.put(obj, Integer.valueOf(type));
+ }
+ }
+
+ private void checkMutexType(String input) {
+ String[] temp = input.split(",");
+ if (temp.length != 2) {
+ return;
+ }
+ String obj = temp[0];
+ String attrObj = temp[1].trim();
+
+ Integer attrType = syncAttrMap.get(attrObj);
+ if (attrType != null) {
+ syncAttrMap.put(obj, attrType);
+ }
+ }
+
+ public List<LogData> getLogsFromLogPackage(LogPackage logPack,
+ int logCenterConstants) {
+ Logs logs = logPack.getLogs(logCenterConstants);
+ if (null == logs || null == logs.getRawLogs() || logs.getRawLogs().isEmpty()) {
+ return null;
+ }
+ List<LogData> ret = logs.getRawLogs();
+ return ret;
+ }
+
+ public void parsePageData(LogPackage logPack) {
+ List<LogData> inputs = getLogsFromLogPackage(logPack,
+ DataChannelConstants.MSG_PROBE_SYNC);
+ parseSyncs(inputs);
+ }
+
+ private void initSyncChart(DAChart chart, boolean isParent) {
+ if (null == chart) {
+ return;
+ }
+
+ DAChartSeries apiSeries = new DAChartSeries(
+ ThreadPageLabels.THREAD_CHART_SERIES_API,
+ DAChartSeries.SERIES_STYLE_EVENT, ColorResources.YELLOW);
+
+ DAChartSeries stateSeries = new DAChartSeries(
+ ThreadPageLabels.THREAD_SYNC_CHART_SERIES_STATE,
+ DAChartSeries.SERIES_STYLE_STATE, ColorResources.WHITE,
+ isParent);
+
+ apiSeries.setSummarizeTooltipText(ThreadPageLabels.THREAD_TOOLTIP_APIS);
+
+ chart.addSeries(stateSeries);
+ chart.addSeries(apiSeries);
+
+ DAChartPlot plot = chart.getPlot();
+ if (null == plot) {
+ return;
+ }
+ if (true == isParent) {
+ plot.setBackgroundImage(ImageResources.BG_GRADIENT);
+ } else {
+ plot.setBackgroundImage(ImageResources.BG_CHILD_GRADIENT);
+ }
+ plot.setAutoHeightRange(AutoRangeType.MANUAL);
+ plot.setAxisFont(FontResources.CHART_AXIS_FONT);
+ plot.setAxisRangeY(0, 101);
+ plot.setAxisRangeX(board.getVisibleStartTime(),
+ board.getVisibleEndTime());
+ DAChartPlotTooltip tooltip = new DAChartPlotTooltip(-1);
+ tooltip.setFont(FontResources.CHART_TOOLTIP_FONT);
+ plot.setTooltip(tooltip);
+
+ DAPopupMenu popupMenu = new DAPopupMenu(chart);
+ popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT);
+ DAPopupMenuItem startItem = new DAPopupMenuItem(popupMenu);
+ startItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_START);
+ startItem.addListener(new PopupStartMenuItemClickListener(startItem,
+ board));
+
+ DAPopupMenuItem endItem = new DAPopupMenuItem(popupMenu);
+ endItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_END);
+ endItem.addListener(new PopupEndMenuItemClickListener(endItem, board));
+
+ DAPopupMenuItem fromSelectionItem = new DAPopupMenuItem(popupMenu);
+ fromSelectionItem
+ .setText(TimelineChartLabels.RANGE_CONTEXT_SET_FROM_SELECTION);
+ fromSelectionItem
+ .addListener(new PopupFromSelectionMenuItemClickListener(
+ fromSelectionItem, board));
+
+ DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu);
+ analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS);
+ analysisItem.addListener(new PopupAnalysisMenuItemClickListener());
+
+ DAPopupMenuItem clearItem = new DAPopupMenuItem(popupMenu);
+ clearItem.setText(TimelineChartLabels.RANGE_CONTEXT_CLEAR);
+ clearItem.addListener(new PopupClearMenuItemClickListener());
+
+ TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener(
+ popupMenu, board.getTimeline());
+ chart.addMouseListener(timelineChartMouseEventListener);
+ chart.addMouseMoveListener(timelineChartMouseEventListener);
+ chart.addMouseTrackListener(new TimelineChartMouseTrackAdapter(board
+ .getTimeline()));
+ plot.setMarkers(board.getMarkers());
+ }
+
+ private boolean createSyncBoardItem(ThreadPageSyncData parent,
+ ThreadPageSyncData sync) {
+ DAChartBoardItem item;
+ DAChart chart;
+
+ if (null == parent) {
+ item = new DAChartBoardItem(board, sync.getTypeString()
+ + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
+ + ThreadPageLabels.THREAD_CHART_NAME_OBJ + AnalyzerUtil.toHexdecimal(sync.getKey())
+ + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
+ item.useExpand(true);
+ chart = item.getChart();
+ initSyncChart(chart, true);
+ } else {
+ DAChartBoardItem parentItem = parent.getItem();
+ item = new DAChartBoardItem(parentItem,
+ ThreadPageLabels.THREAD_CHART_NAME_TID + sync.getTid());
+ item.useExpand(true);
+ chart = item.getChart();
+ initSyncChart(chart, false);
+ }
+
+ sync.setItem(item);
+ item.setData(sync);
+ chart.setData(sync);
+ chart.redraw();
+ return true;
+ }
+ // for sorting of child item of sync chart
+ private boolean createSyncBoardItem(ThreadPageSyncData parent,
+ ThreadPageSyncData sync, Comparator<DAChartBoardItem> c) {
+ DAChartBoardItem item;
+ DAChart chart;
+ Integer tid = Integer.valueOf(sync.getTid());
+
+ if (null == parent) {
+ item = new DAChartBoardItem(board, sync.getTypeString()
+ + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
+ + ThreadPageLabels.THREAD_CHART_NAME_OBJ + sync.getKey()
+ + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
+ item.useExpand(true);
+ chart = item.getChart();
+ initSyncChart(chart, true);
+ } else {
+ DAChartBoardItem parentItem = parent.getItem();
+ item = new DAChartBoardItem(parentItem,
+ ThreadPageLabels.THREAD_CHART_NAME_TID
+ + sync.getTid(), tid, c);
+ item.useExpand(true);
+ chart = item.getChart();
+ initSyncChart(chart, false);
+ }
+
+ sync.setItem(item);
+ item.setData(sync);
+ chart.setData(sync);
+ chart.redraw();
+ return true;
+ }
+
+ private void chartFilteringByPid() {
+ if(null == board || null == board.getItemList()){
+ return;
+ }
+ int selectedPid = ToolbarArea.getInstance().getSelectedPid();
+ boolean isCheck = false;
+
+ if (syncEventQueue.size() > 0) {
+ isCheck = true;
+ }
+
+ if (preSelectionPid != -1 && preSelectionPid != selectedPid) {
+ isCheck = true;
+ }
+
+ if (isCheck) {
+ int parentSize = board.getItemList().getItemSize();
+ for (int i = 0; i < parentSize; i++) {
+ DAChartBoardItem parentItem = board.getItemList().get(i);
+/*
+ int childSize = parentItem.getChildItemList().getItemSize();
+ int hidedCount = 0;
+ for (int j = 0; j < childSize; j++) {
+ DAChartBoardItem childItem = parentItem.getChildItemList()
+ .get(j);
+ int itemPid = getItemPid(childItem);
+ if (itemPid == selectedPid) {
+ parentItem.getChildItemList().showItem(j);
+ board.showItem(i);
+ } else if (selectedPid == 0) {
+ parentItem.getChildItemList().showItem(j);
+ board.showItem(i);
+ } else if (itemPid == -1) {
+ board.showItem(i);
+ } else {
+ parentItem.getChildItemList().hideItem(j);
+ hidedCount++;
+ }
+ }
+ if (childSize == 0) {
+ int itemPid = getItemPid(parentItem);
+ if (itemPid == selectedPid) {
+ board.showItem(i);
+ } else if (selectedPid == 0) {
+ board.showItem(i);
+ } else if (itemPid == -1) {
+ board.showItem(i);
+ } else {
+ board.hideItem(i);
+ hidedCount++;
+ }
+ } else {
+ if (childSize == hidedCount) {
+ board.hideItem(i);
+ }
+ }
+*/
+ int itemPid = getItemPid(parentItem);
+ if (itemPid == selectedPid) {
+ board.showItem(i);
+// for(int j = 0; j < parentItem.getChildItemList().getItemSize(); j++) {
+// parentItem.getChildItemList().showItem(j);
+// }
+ } else if (selectedPid == 0) {
+ board.showItem(i);
+ } else if (itemPid == -1) {
+ board.showItem(i);
+ } else {
+ board.hideItem(i);
+ }
+ }
+ }
+ preSelectionPid = selectedPid;
+ }
+
+ private int getItemPid(DAChartBoardItem item) {
+ int pid = -1;
+ if (item.getData() instanceof ThreadPageData) {
+ ThreadPageData threadPageData = (ThreadPageData) item.getData();
+ pid = Integer.parseInt(threadPageData.getPid());
+ }
+ return pid;
+ }
+
+ private int getSortObject(DAChartBoardItem item) {
+ Object sortObj = item.getSortObject();
+ if (sortObj instanceof Integer) {
+ return (Integer) sortObj;
+ } else { // should never go here
+ return -1;
+ }
+ }
+
+ public void checkUpdate() {
+ chartFilteringByPid();
+
+ /* load ThreadPgeSyncData when open trace */
+ int size = rowsQueue.size();
+ if (size > 0) {
+ ThreadPageSyncData sync;
+ ThreadPageSyncData parent;
+ for (int i = 0; i < size; i++) {
+ sync = rowsQueue.get(0);
+ if (sync.getSyncDataType() == ThreadPageSyncData.SYNC_PARENT) {
+ rows.add(sync);
+ createSyncBoardItem(null, sync);
+ } else if (sync.getSyncDataType() == ThreadPageSyncData.SYNC_CHILD) {
+ parent = findParentData(sync.getKey());
+ if (null != parent) {
+ parent.pushSync(sync);
+ createSyncBoardItem(parent, sync,
+ new Comparator<DAChartBoardItem>() {
+ public int compare(DAChartBoardItem item1,
+ DAChartBoardItem item2) {
+ return getSortObject(item1) - getSortObject(item2);
+ }
+ });
+ } else {
+ Logger.error("cannot find parent sync data");
+ }
+ } else {
+ Logger.error("unknown sync data type");
+ }
+ rowsQueue.remove(0);
+ }
+ }
+
+ size = syncEventQueue.size();
+ if (size > 0) {
+ ThreadPageSyncData parent;
+ ThreadPageSyncData data;
+ ThreadPageSyncDataEvent event;
+ for (int i = 0; i < size; i++) {
+ event = syncEventQueue.get(0);
+ String syncVal = event.getSyncVal();
+ String pid = Integer.toString(event.getContents().getPid());
+ parent = findParentData(syncVal);
+ // parent
+ if (null == parent) {
+ Integer syncAttrTypeInt = syncAttrMap.get(syncVal);
+ String syncAttrType;
+
+ if (null != syncAttrTypeInt) {
+ syncAttrType = getAttrTypeByTypeInt(syncAttrTypeInt);
+ } else {
+ syncAttrType = getAttrTypeString(event);
+ }
+
+ parent = new ThreadPageSyncData(event.getType(), syncVal, pid,
+ event.getTid(), syncAttrType, ThreadPageSyncData.SYNC_PARENT);
+ // save to DB
+ SyncDataInserter.pushSyncData(parent);
+ SyncDataInserter.startThread();
+ rows.add(parent);
+ createSyncBoardItem(null, parent);
+ }
+ parent.pushEvent(event);
+ event.setSyncDataID(parent.getSyncDataID());
+ // save to DB
+ SyncEventInserter.pushSyncEvent(event);
+ SyncEventInserter.startThread();
+ // child
+ data = parent.findChildData(event.getTid());
+
+ if (null == data) {
+ String attrType = parent.getAttrType();
+ data = new ThreadPageSyncData(event.getType(), syncVal, pid,
+ event.getTid(), attrType, ThreadPageSyncData.SYNC_CHILD);
+ data.setParentID(parent.getSyncDataID());
+ // save to DB
+ SyncDataInserter.pushSyncData(data);
+ SyncDataInserter.startThread();
+ parent.pushSync(data);
+ createSyncBoardItem(parent, data,
+ new Comparator<DAChartBoardItem>() {
+ public int compare(DAChartBoardItem item1,
+ DAChartBoardItem item2) {
+ return getSortObject(item1) - getSortObject(item2);
+ }
+ });
+ }
+ data.pushEvent(event);
+ try {
+ ThreadPageSyncDataEvent cloneEvent = (ThreadPageSyncDataEvent) event.clone();
+ cloneEvent.setSyncDataID(data.getSyncDataID());
+ // save to DB
+ SyncEventInserter.pushSyncEvent(cloneEvent);
+ } catch (CloneNotSupportedException e) {
+ e.printStackTrace();
+ continue;
+ } finally {
+ syncEventQueue.remove(0);
+ }
+ }
+ }
+ size = rows.size();
+ if (size > 0) {
+ ThreadPageSyncData data;
+ for (int i = 0; i < size; i++) {
+ data = rows.get(i);
+ data.checkUpdate();
+ }
+ }
+ }
+
+ public void clear() {
+ rows.clear(); // FIXME : clear chart
+ syncEventQueue.clear();
+ syncAttrMap.clear();
+ ThreadPageSyncData.clear(); // reset internal seq number
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.ui.thread.thread;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+import org.tizen.dynamicanalyzer.common.Global;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageData;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageDataEvent;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.dynamicanalyzer.utils.Formatter;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
+
+public class ThreadPageThreadData extends ThreadPageData {
+ private List<ThreadPageSyncData> syncs = new ArrayList<ThreadPageSyncData>();
+ private long StartTime = -1;
+ private long EndTime = -1;
+ private int threadFuncID;
+ private String threadClassName = CommonConstants.EMPTY;
+ private DAChartSeries loadSeries;
+ private DAChartSeries eventSeries;
+ private DAChartSeries apiSeries;
+
+ public static final byte TYPE_MAIN = 0;
+ public static final byte TYPE_PTHREAD = 1;
+ public static final byte TYPE_TIZEN = 2;
+
+ private static int internalSeq = 0;
+ private int threadDataID = -1;
+
+ public ThreadPageThreadData(int type, String pid, String tid,
+ String attrType, int funcID) {
+ super(type, String.valueOf(tid), pid, tid, attrType);
+ this.threadFuncID = funcID;
+ threadDataID = internalSeq++;
+ }
+
+ // using open trace
+ public ThreadPageThreadData(int id, int pid, int tid, int threadType,
+ String attrType, long startTime, long endTime, int functionID,
+ String className) {
+ super(threadType, String.valueOf(tid), String.valueOf(pid), String
+ .valueOf(tid), attrType);
+ this.threadDataID = id;
+ this.threadFuncID = functionID;
+ this.StartTime = startTime;
+ this.EndTime = endTime;
+ this.threadClassName = className;
+ }
+
+ public void addDataEvent(ThreadPageThreadDataEvent dataEvent) {
+ contentsQueue.add(dataEvent);
+ }
+
+ public int getThreadFuncID() {
+ return threadFuncID;
+ }
+
+ public String getThreadFuncName() {
+ if (threadFuncID == -1) {
+ return CommonConstants.EMPTY;
+ } else {
+ return Global.getFunctionName(threadFuncID);
+ }
+ }
+
+ public String getThreadClassName() {
+ return threadClassName;
+ }
+
+ public void setThreadClassName(String className) {
+ threadClassName = className;
+ }
+
+ public void setItem(DAChartBoardItem item) {
+ this.item = item;
+ chart = item.getChart();
+ loadSeries = chart.getSeries(ThreadPageLabels.THREAD_CHART_SERIES_LOAD);
+ eventSeries = chart
+ .getSeries(ThreadPageLabels.THREAD_CHART_SERIES_EVENT);
+ apiSeries = chart.getSeries(ThreadPageLabels.THREAD_CHART_SERIES_API);
+ }
+
+ protected int createChartItem(ThreadPageDataEvent event) {
+ int ret = -1;
+ if (!(event instanceof ThreadPageThreadDataEvent)) {
+ Logger.error("createChartItem");
+ return ret;
+ }
+
+ ThreadPageThreadDataEvent threadEvent = (ThreadPageThreadDataEvent) event;
+ DAChartSeriesItem seriesItem;
+
+ switch (threadEvent.getEventType()) {
+ case ThreadPageThreadDataEvent.TYPE_LOAD:
+ ret = ThreadPageThreadDataEvent.TYPE_LOAD;
+ if (null == loadSeries) {
+ return ret;
+ }
+
+ seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
+ (double) (threadEvent.getThreadType() * 2.55),
+ threadEvent.getTooltipContent());
+
+ loadSeries.addSeriesItem(seriesItem);
+ break;
+ case ThreadPageThreadDataEvent.TYPE_EVENT:
+ ret = ThreadPageThreadDataEvent.TYPE_EVENT;
+ if (null == eventSeries) {
+ return ret;
+ }
+
+ int eventApiType = threadEvent.getApiType();
+ if (eventApiType == LogCenterConstants.THREAD_API_TYPE_INTERNAL_START) {
+ seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_ARROW_LEFT,
+ threadEvent.getTooltipContent());
+ seriesItem.setBarWidth(Double.parseDouble(threadEvent
+ .getCallerTid()));
+ setStartTime(threadEvent.getTime());
+ } else if (eventApiType == LogCenterConstants.THREAD_API_TYPE_WAIT_END) {
+ if (threadEvent.isJoinAPI()) {
+ seriesItem = new DAChartSeriesItem(
+ threadEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_ARROW_LEFT,
+ ThreadPageLabels.THREAD_CHART_ITEM_JOINED);
+ seriesItem.setBarWidth(Double.parseDouble(threadEvent
+ .getCallerTid()));
+ } else {
+ seriesItem = new DAChartSeriesItem(
+ threadEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_ARROW_NONE,
+ threadEvent.getTooltipContent());
+ }
+ } else if (eventApiType == LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
+ if (null != threadEvent.getCallerTid()) {
+ seriesItem = new DAChartSeriesItem(
+ threadEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_ARROW_LEFT,
+ threadEvent.getTooltipContent());
+ seriesItem.setBarWidth(Double.parseDouble(threadEvent
+ .getCallerTid()));
+ } else {
+ seriesItem = new DAChartSeriesItem(
+ threadEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_ARROW_NONE,
+ threadEvent.getTooltipContent());
+ }
+ setEndTime(threadEvent.getTime());
+ // save ThreadData when endtime is set
+ if (AnalyzerManager.isRunning()) {
+ ThreadChartManager.getInstance().saveThreadPageThreadData(
+ this);
+ }
+ } else {
+ seriesItem = new DAChartSeriesItem(threadEvent.getDoubleTime(),
+ DAChartSeriesItem.SERIES_ARROW_NONE,
+ threadEvent.getTooltipContent());
+ }
+
+ eventSeries.addSeriesItem(seriesItem);
+ break;
+ case ThreadPageThreadDataEvent.TYPE_API:
+ ret = ThreadPageThreadDataEvent.TYPE_API;
+ if (null == apiSeries) {
+ return ret;
+ }
+
+ long errorNum = threadEvent.getErrorNum();
+ seriesItem = createApiItem(threadEvent, errorNum);
+
+ apiSeries.addSeriesItem(seriesItem);
+ break;
+ default:
+ return ret;
+ }
+ threadEvent.setChartItem(seriesItem);
+ return ret;
+ }
+
+ protected void checkUpdate() {
+ if (false == hasUpdate) {
+ return;
+ } else {
+ hasUpdate = false;
+ }
+
+ int size = contentsQueue.size();
+ if (size > 0) {
+ ThreadPageDataEvent temp;
+ ThreadPageThreadDataEvent event;
+ for (int i = 0; i < size; i++) {
+ temp = contentsQueue.get(0);
+ if ((temp instanceof ThreadPageThreadDataEvent)) {
+ event = (ThreadPageThreadDataEvent) temp;
+ if (ThreadPageThreadDataEvent.TYPE_API == createChartItem(event)) {
+ contents.add(event);
+ }
+ }
+ contentsQueue.remove(0);
+ }
+ chart.redraw();
+ }
+
+ size = syncs.size();
+ if (size > 0) {
+ ThreadPageSyncData sync;
+ for (int i = 0; i < size; i++) {
+ sync = syncs.get(i);
+ sync.checkUpdate();
+ }
+ }
+ }
+
+ public void pushSync(ThreadPageSyncData sync) {
+ syncs.add(sync);
+ hasUpdate = true;
+ }
+
+ protected ThreadPageSyncData findSyncData(String syncVal) {
+ int size = syncs.size();
+ ThreadPageSyncData sync;
+ for (int i = 0; i < size; i++) {
+ sync = syncs.get(i);
+ if (sync.getKey().equals(syncVal)) {
+ return sync;
+ }
+ }
+ return null;
+ }
+
+ public String getTypeString() {
+ switch (getType()) {
+ case TYPE_MAIN:
+ return ThreadPageLabels.THREAD_ITEM_TYPE_MAIN;
+ case TYPE_PTHREAD:
+ return ThreadPageLabels.THREAD_ITEM_TYPE_PTHREAD;
+ case TYPE_TIZEN:
+ return ThreadPageLabels.THREAD_ITEM_TYPE_TIZEN;
+ default:
+ Logger.error("unknown thread type!!");
+ return CommonConstants.EMPTY;
+ }
+ }
+
+ public long getStartTime() {
+ return StartTime;
+ }
+
+ public void setStartTime(long startTime) {
+ StartTime = startTime;
+ }
+
+ public String getStartTimeString() { // to show in details view
+ if (StartTime == -1) {
+ return null;
+ } else {
+ double startTime = Formatter.longTimeToDoubleTime(StartTime);
+ return String.valueOf(startTime);
+ }
+ }
+
+ public long getEndTime() {
+ return EndTime;
+ }
+
+ public void setEndTime(long endTime) {
+ EndTime = endTime;
+ }
+
+ public String getEndTimeString() { // to show in details view
+ if (EndTime == -1) {
+ return null;
+ } else {
+ double endTime = Formatter.longTimeToDoubleTime(EndTime);
+ return String.valueOf(endTime);
+ }
+ }
+
+ public int getThreadDataID() {
+ return threadDataID;
+ }
+
+ public static void clear() {
+ internalSeq = 0;
+ }
+}
\ No newline at end of file
* Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
* WooJin Jung <woojin2.jung@samsung.com>
* yeongtaik byeon <yeongtaik.byeon@samsung.com>
* Juyoung Kim <j0.kim@samsung.com>
* - S-Core Co., Ltd
*
*/
-package org.tizen.dynamicanalyzer.ui.thread.type;
+package org.tizen.dynamicanalyzer.ui.thread.thread;
import java.util.ArrayList;
import java.util.Arrays;
import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
import org.tizen.dynamicanalyzer.swap.model.data.LogData;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageDataEvent;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
public class ThreadPageThreadDataEvent extends ThreadPageDataEvent {
public static final int TYPE_API = 0;
public static final int TYPE_LOAD = 2;
private int eventType = -1;
private int threadType = -1;
+ private DAChartSeriesItem chartItem;
private String callID = null;
- private int callerTid = -1;
+ private String callerTid = null;
private int threadDataID = -1;
ArrayList<String> joinAPIs = new ArrayList<String>(Arrays.asList(
ThreadPageLabels.THREAD_API_TIZEN_JOIN));
public ThreadPageThreadDataEvent(int eventType, int threadType,
- int apiType, long time, int tid, String tooltip, long errorNum,
+ int apiType, long time, String tid, String tooltip, long errorNum,
LogData contents) {
super(time, tid, apiType, tooltip, errorNum, contents);
setEventType(eventType);
this.eventType = eventType;
}
+ public DAChartSeriesItem getChartItem() {
+ return chartItem;
+ }
+
+ public void setChartItem(DAChartSeriesItem chartItem) {
+ this.chartItem = chartItem;
+ }
+
public int getThreadType() {
return threadType;
}
this.callID = callID;
}
- public int getCallerTid() {
+ public String getCallerTid() {
return callerTid;
}
- public void setCallerTid(int callerTid) {
+ public void setCallerTid(String callerTid) {
this.callerTid = callerTid;
}
--- /dev/null
+/*
+ * Dynamic Analyzer
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * WooJin Jung <woojin2.jung@samsung.com>
+ * yeongtaik byeon <yeongtaik.byeon@samsung.com>
+ * Juyoung Kim <j0.kim@samsung.com>
+ *
+ * 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.ui.thread.thread;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+
+import org.tizen.dynamicanalyzer.common.Global;
+import org.tizen.dynamicanalyzer.common.SymbolManager;
+import org.tizen.dynamicanalyzer.constant.CommonConstants;
+import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
+import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
+import org.tizen.dynamicanalyzer.nl.TimelineChartLabels;
+import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.resources.FontResources;
+import org.tizen.dynamicanalyzer.resources.ImageResources;
+import org.tizen.dynamicanalyzer.swap.channel.data.DataChannelConstants;
+import org.tizen.dynamicanalyzer.swap.logparser.LogPackage;
+import org.tizen.dynamicanalyzer.swap.logparser.Logs;
+import org.tizen.dynamicanalyzer.swap.model.data.LogData;
+import org.tizen.dynamicanalyzer.swap.model.data.ProcessProfileData;
+import org.tizen.dynamicanalyzer.swap.model.data.SyncData;
+import org.tizen.dynamicanalyzer.swap.model.data.SystemData;
+import org.tizen.dynamicanalyzer.swap.model.data.ThreadData;
+import org.tizen.dynamicanalyzer.ui.common.PopupAnalysisMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupClearMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupEndMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupFromSelectionMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.PopupStartMenuItemClickListener;
+import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener;
+import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter;
+import org.tizen.dynamicanalyzer.ui.summary.SummaryDataManager;
+import org.tizen.dynamicanalyzer.ui.summary.warning.WarningCase;
+import org.tizen.dynamicanalyzer.ui.thread.ThreadPageData;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncAPIInserter;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncDataInserter;
+import org.tizen.dynamicanalyzer.ui.thread.data.SyncEventInserter;
+import org.tizen.dynamicanalyzer.ui.thread.data.ThreadEventInserter;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncData;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataEvent;
+import org.tizen.dynamicanalyzer.ui.thread.sync.ThreadPageSyncDataManager;
+import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
+import org.tizen.dynamicanalyzer.util.Logger;
+import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeriesItem;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
+import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu;
+import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem;
+
+public class ThreadPageThreadDataManager {
+ private DAChartBoard board;
+ // ThreadChartView view;
+ private boolean hasUpdate = false;
+ private List<ThreadPageThreadData> rows = new ArrayList<ThreadPageThreadData>();
+ private List<ThreadPageThreadData> rowsQueue = new ArrayList<ThreadPageThreadData>();
+ private List<ThreadPageThreadData> callRowsQueue = new ArrayList<ThreadPageThreadData>();
+ private List<ThreadPageSyncDataEvent> syncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
+ private List<ThreadPageThreadDataEvent> eventQueue = new ArrayList<ThreadPageThreadDataEvent>();
+ private List<ThreadPageThreadDataEvent> callEventQueue = new ArrayList<ThreadPageThreadDataEvent>();
+ // load from database
+ private List<ThreadPageSyncData> syncQueue = new ArrayList<ThreadPageSyncData>();
+
+ private HashMap<String, Integer> threadAttrMap = new HashMap<String, Integer>();
+ private HashMap<String, Integer> syncAttrMap = new HashMap<String, Integer>();
+ // threadFuncMap : (pthreadId, function address)
+ private HashMap<String, Long> threadFuncMap = new HashMap<String, Long>();
+ private int preSelectionPid = -1;
+
+ public static final int PTHREAD_CREATE_JOINABLE = 0;
+ public static final int PTHREAD_CREATE_DETACHED = 1;
+
+ public ThreadPageThreadDataManager(DAChartBoard board) {
+ this.setBoard(board);
+ }
+
+ public List<ThreadPageThreadData> getRows() {
+ return rows;
+ }
+
+ public void pushRow(ThreadPageThreadData data) {
+ rowsQueue.add(data);
+ hasUpdate = true;
+ }
+
+ private void pushCallRow(ThreadPageThreadData data) { // FIXME
+ callRowsQueue.add(data);
+ }
+
+ private void pushEvent(ThreadPageThreadDataEvent event) {
+ eventQueue.add(event);
+ hasUpdate = true;
+ }
+
+ private void pushCallEvent(ThreadPageThreadDataEvent event) {
+ callEventQueue.add(event);
+ }
+
+ private void pushSyncEvent(ThreadPageSyncDataEvent syncEvent) {
+ syncEventQueue.add(syncEvent);
+ hasUpdate = true;
+ }
+
+ public void pushSyncData(ThreadPageSyncData syncData) {
+ syncQueue.add(syncData);
+ }
+
+ private void createBoardItem(ThreadPageThreadData data) {
+ // DACustomChartBoardItem item = new DACustomChartBoardItem(board,
+ // data.getName());
+
+ DAChartBoardItem item = new DAChartBoardItem(board, data.getTypeString()
+ + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
+ + ThreadPageLabels.THREAD_CHART_NAME_PID + data.getPid()
+ + ThreadPageLabels.THREAD_CHART_NAME_COMMA + ThreadPageLabels.THREAD_CHART_NAME_TID
+ + data.getKey() + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
+
+ item.useExpand(true);
+ DAChart chart = item.getChart();
+ setChartSeries(chart);
+
+ setChartStyle(chart);
+
+ data.setItem(item);
+ item.setData(data);
+ chart.setData(data);
+ chart.redraw();
+ }
+
+ // for sorting of thread chart item
+ private void createBoardItem(ThreadPageThreadData data, Comparator<DAChartBoardItem> c) {
+ // DACustomChartBoardItem item = new DACustomChartBoardItem(board,
+ // data.getName());
+ Integer tid = Integer.valueOf(data.getTid());
+
+ DAChartBoardItem item = new DAChartBoardItem(board, data.getTypeString()
+ + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
+ + ThreadPageLabels.THREAD_CHART_NAME_PID + data.getPid()
+ + ThreadPageLabels.THREAD_CHART_NAME_COMMA + ThreadPageLabels.THREAD_CHART_NAME_TID
+ + data.getKey() + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX, tid, c);
+
+ item.useExpand(true);
+ DAChart chart = item.getChart();
+ setChartSeries(chart);
+
+ setChartStyle(chart);
+
+ data.setItem(item);
+ item.setData(data);
+ chart.setData(data);
+ chart.redraw();
+ }
+
+ private void initSyncChart(DAChart chart) {
+ if (null == chart) {
+ return;
+ }
+
+ DAChartSeries apiSeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_API,
+ DAChartSeries.SERIES_STYLE_STATE, ColorResources.YELLOW);
+ DAChartSeries stateSeries = new DAChartSeries(
+ ThreadPageLabels.THREAD_SYNC_CHART_SERIES_STATE, DAChartSeries.SERIES_STYLE_STATE,
+ ColorResources.WHITE);
+
+ chart.addSeries(stateSeries);
+ chart.addSeries(apiSeries);
+
+ DAChartPlot plot = chart.getPlot();
+ if (null == plot) {
+ return;
+ }
+ plot.setBackgroundImage(ImageResources.BG_CHILD_GRADIENT);
+ plot.setAutoHeightRange(AutoRangeType.MANUAL);
+ plot.setAxisFont(FontResources.CHART_AXIS_FONT);
+ plot.setAxisRangeY(0, 101);
+ plot.setAxisRangeX(board.getVisibleStartTime(), board.getVisibleEndTime());
+ DAChartPlotTooltip tooltip = new DAChartPlotTooltip(-1);
+ tooltip.setFont(FontResources.CHART_TOOLTIP_FONT);
+ plot.setTooltip(tooltip);
+
+ DAPopupMenu popupMenu = new DAPopupMenu(chart);
+ popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT);
+ DAPopupMenuItem startItem = new DAPopupMenuItem(popupMenu);
+ startItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_START);
+ startItem.addListener(new PopupStartMenuItemClickListener(startItem, board));
+
+ DAPopupMenuItem endItem = new DAPopupMenuItem(popupMenu);
+ endItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_END);
+ endItem.addListener(new PopupEndMenuItemClickListener(endItem, board));
+
+ DAPopupMenuItem fromSelectionItem = new DAPopupMenuItem(popupMenu);
+ fromSelectionItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_FROM_SELECTION);
+ fromSelectionItem.addListener(new PopupFromSelectionMenuItemClickListener(
+ fromSelectionItem, board));
+
+ DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu);
+ analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS);
+ analysisItem.addListener(new PopupAnalysisMenuItemClickListener());
+
+ DAPopupMenuItem clearItem = new DAPopupMenuItem(popupMenu);
+ clearItem.setText(TimelineChartLabels.RANGE_CONTEXT_CLEAR);
+ clearItem.addListener(new PopupClearMenuItemClickListener());
+
+ TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener(
+ popupMenu, board.getTimeline());
+ chart.addMouseListener(timelineChartMouseEventListener);
+ chart.addMouseMoveListener(timelineChartMouseEventListener);
+ chart.addMouseTrackListener(new TimelineChartMouseTrackAdapter(board.getTimeline()));
+
+ plot.setMarkers(board.getMarkers());
+ }
+
+ private boolean createSyncBoardItem(ThreadPageThreadData data, ThreadPageSyncData sync) {
+ DAChartBoardItem parent = data.getItem();
+ if (null == parent) {
+ return false;
+ }
+
+ DAChartBoardItem item = new DAChartBoardItem(parent, sync.getTypeString()
+ + ThreadPageLabels.THREAD_CHART_NAME_PREFIX
+ + ThreadPageLabels.THREAD_CHART_NAME_OBJ + AnalyzerUtil.toHexdecimal(sync.getKey())
+ + ThreadPageLabels.THREAD_CHART_NAME_POSTFIX);
+
+ item.useExpand(true);
+ DAChart chart = item.getChart();
+ initSyncChart(chart);
+
+ sync.setItem(item);
+ item.setData(sync);
+ chart.setData(sync);
+ chart.redraw();
+ return true;
+ }
+
+ protected void setChartStyle(DAChart chart) {
+ if (null == chart) {
+ return;
+ }
+
+ DAChartPlot plot = chart.getPlot();
+ if (null == plot) {
+ return;
+ }
+ plot.setBackgroundImage(ImageResources.BG_GRADIENT);
+ plot.setAutoHeightRange(AutoRangeType.MANUAL);
+ DAChartPlotTooltip tooltip = new DAChartPlotTooltip(-1);
+ tooltip.setFont(FontResources.CHART_TOOLTIP_FONT);
+ plot.setTooltip(tooltip);
+ plot.setAxisFont(FontResources.CHART_AXIS_FONT);
+ plot.setAxisRangeY(0, 101);
+ plot.setAxisRangeX(board.getVisibleStartTime(), board.getVisibleEndTime());
+
+ DAPopupMenu popupMenu = new DAPopupMenu(chart);
+
+ popupMenu.setFont(FontResources.CONTEXT_MENU_ITEM_FONT);
+ DAPopupMenuItem startItem = new DAPopupMenuItem(popupMenu);
+ startItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_START);
+ startItem.addListener(new PopupStartMenuItemClickListener(startItem, board));
+
+ DAPopupMenuItem endItem = new DAPopupMenuItem(popupMenu);
+ endItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_END);
+ endItem.addListener(new PopupEndMenuItemClickListener(endItem, board));
+
+ DAPopupMenuItem fromSelectionItem = new DAPopupMenuItem(popupMenu);
+ fromSelectionItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_FROM_SELECTION);
+ fromSelectionItem.addListener(new PopupFromSelectionMenuItemClickListener(
+ fromSelectionItem, board));
+
+ DAPopupMenuItem analysisItem = new DAPopupMenuItem(popupMenu);
+ analysisItem.setText(TimelineChartLabels.RANGE_CONTEXT_ANALYSIS);
+ analysisItem.addListener(new PopupAnalysisMenuItemClickListener());
+
+ DAPopupMenuItem clearItem = new DAPopupMenuItem(popupMenu);
+ clearItem.setText(TimelineChartLabels.RANGE_CONTEXT_CLEAR);
+ clearItem.addListener(new PopupClearMenuItemClickListener());
+
+ TimelineChartMouseEventListener timelineChartMouseEventListener = new TimelineChartMouseEventListener(
+ popupMenu, board.getTimeline());
+ chart.addMouseListener(timelineChartMouseEventListener);
+ chart.addMouseMoveListener(timelineChartMouseEventListener);
+ chart.addMouseTrackListener(new TimelineChartMouseTrackAdapter(board.getTimeline()));
+ plot.setMarkers(board.getMarkers());
+ }
+
+ private void setChartSeries(DAChart chart) {
+ DAChartSeries loadSeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_LOAD,
+ DAChartSeries.SERIES_STYLE_LOAD, ColorResources.THREAD_GRAPH_MIN_CPU_LOAD_COLOR,
+ ColorResources.THREAD_GRAPH_MAX_CPU_LOAD_COLOR);
+ loadSeries.setBarWidth(1);
+
+ DAChartSeries apiSeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_API,
+ DAChartSeries.SERIES_STYLE_EVENT, ColorResources.YELLOW);
+
+ DAChartSeries eventSeries = new DAChartSeries(ThreadPageLabels.THREAD_CHART_SERIES_EVENT,
+ DAChartSeries.SERIES_STYLE_ARROW, ColorResources.THREAD_GRAPH_CALLEE_COLOR);
+
+ apiSeries.setSummarizeTooltipText(ThreadPageLabels.THREAD_TOOLTIP_APIS);
+ eventSeries.setFont(FontResources.CHART_ARROW_TID_FONT);
+
+ chart.addSeries(loadSeries);
+ chart.addSeries(apiSeries);
+ chart.addSeries(eventSeries);
+
+ chart.redraw();
+ }
+
+ public void createMainThreadItem(int tid) {
+ int funcID = Global.getFunctionID("main");
+ ThreadPageThreadData mainData = new ThreadPageThreadData(ThreadPageThreadData.TYPE_MAIN,
+ String.valueOf(tid), String.valueOf(tid), CommonConstants.EMPTY, funcID);
+ pushRow(mainData);
+ }
+
+ public static String getAttrTypeByTypeInt(int typeInt) {
+ if (typeInt == PTHREAD_CREATE_JOINABLE) {
+ return ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE;
+ } else if (typeInt == PTHREAD_CREATE_DETACHED) {
+ return ThreadPageLabels.THREAD_ATTR_TYPE_DETACHED;
+ } else {
+ return CommonConstants.EMPTY;
+ }
+ }
+
+ public List<LogData> getLogsFromLogPackage(LogPackage logPack, int logCenterConstants) {
+ Logs logs = logPack.getLogs(logCenterConstants);
+ if (null == logs || logs.getRawLogs().size() == 0) {
+ return null;
+ }
+ List<LogData> ret = logs.getRawLogs();
+ return ret;
+ }
+
+ public void parseLoad(LogData input) {
+ if (null == input) {
+ return;
+ }
+
+ if (!(input instanceof SystemData)) {
+ return;
+ }
+ SystemData sysLog = (SystemData) input;
+
+ String loads;
+ String tid;
+ int load;
+
+ ProcessProfileData[] processDataList = sysLog.getProcessProfileDataList();
+
+ for (int i = 0; i < processDataList.length; i++) {
+ loads = processDataList[i].getThreadLoad();
+ String[] temp = loads.split(",");
+ int tempSize = temp.length;
+ long time;
+ for (int j = 0; j + 1 < tempSize; j += 2) {
+ try {
+ tid = temp[j];
+ } catch (NumberFormatException nfe) {
+ Logger.error("parseLoad - tid parsing");
+ break;
+ }
+ // if (null == findParentData(tid)) {
+ // continue;
+ // }
+ load = (int) (Double.parseDouble(temp[j + 1]));
+ time = input.getTime();
+ ThreadPageThreadDataEvent event = new ThreadPageThreadDataEvent(
+ ThreadPageThreadDataEvent.TYPE_LOAD, load, -1, time, tid,
+ String.valueOf(load) + ThreadPageLabels.THREAD_CHART_ITEM_PERCENT, -1, null);
+ pushEvent(event);
+
+ }
+ }
+ hasUpdate = true;
+ // loads = sysLog.getThreadLoad(); // TODO SystemData interface changed.
+ // // loads = input.get(LogCenterConstants.DEVICE_THREAD_LOAD_INDEX);
+ // String[] temp = loads.split(",");
+ // int tempSize = temp.length;
+ // double time;
+ // for (int j = 0; j + 1 < tempSize; j += 2) {
+ // try {
+ // tid = temp[j];
+ // } catch (NumberFormatException nfe) {
+ // Logger.error("parseLoad - tid parsing");
+ // break;
+ // }
+ // // if (null == findParentData(tid)) {
+ // // continue;
+ // // }
+ // load = (int) (Double.parseDouble(temp[j + 1]));
+ // time = Double.parseDouble(Long.toString(input.getTime()))
+ // / TimelineConstants.MEGA_DOUBLE;
+ // ThreadPageThreadDataEvent event = new ThreadPageThreadDataEvent(
+ // ThreadPageThreadDataEvent.TYPE_LOAD, load, -1, time, tid,
+ // String.valueOf(load)
+ // + ThreadPageLabels.THREAD_CHART_ITEM_PERCENT, -1,
+ // null);
+ // pushEvent(event);
+ //
+ // }
+ // hasUpdate = true;
+ }
+
+ private void parseLoad(LogPackage logPack) {
+ List<LogData> inputs = getLogsFromLogPackage(logPack, DataChannelConstants.MSG_DATA_SYSTEM);
+ int size;
+ if (null == inputs || 0 == (size = inputs.size())) {
+ return;
+ }
+ SystemData input;
+
+ String loads;
+ String tid;
+ int load;
+ for (int i = 0; i < size; i++) {
+ input = (SystemData) inputs.get(i);
+ ProcessProfileData[] processDataList = input.getProcessProfileDataList();
+
+ for (int j = 0; j < processDataList.length; j++) {
+ loads = processDataList[j].getThreadLoad();
+ String[] temp = loads.split(",");
+ int tempSize = temp.length;
+ long time;
+ for (int k = 0; k + 1 < tempSize; k += 2) {
+ try {
+ tid = temp[k];
+ } catch (NumberFormatException nfe) {
+ Logger.error("parseLoad - tid parsing");
+ break;
+ }
+ // if (null == findParentData(tid)) {
+ // continue;
+ // }
+ load = (int) (Double.parseDouble(temp[k + 1]));
+ time = input.getTime();
+ ThreadPageThreadDataEvent event = new ThreadPageThreadDataEvent(
+ ThreadPageThreadDataEvent.TYPE_LOAD, load, -1, time, tid,
+ String.valueOf(load) + ThreadPageLabels.THREAD_CHART_ITEM_PERCENT, -1,
+ null);
+ pushEvent(event);
+
+ }
+ }
+ // loads = input.getThreadLoad(); // TODO SystemData interface
+ // changed.
+ // String[] temp = loads.split(",");
+ // int tempSize = temp.length;
+ // double time;
+ // for (int j = 0; j + 1 < tempSize; j += 2) {
+ // try {
+ // tid = temp[j];
+ // } catch (NumberFormatException nfe) {
+ // Logger.error("parseLoad - tid parsing");
+ // break;
+ // }
+ // // if (null == findParentData(tid)) {
+ // // continue;
+ // // }
+ //
+ // load = (int) (Double.parseDouble(temp[j + 1]));
+ // time = Double.parseDouble(Long.toString(input.getTime()))
+ // / TimelineConstants.MEGA_DOUBLE;
+ // ThreadPageThreadDataEvent event = new ThreadPageThreadDataEvent(
+ // ThreadPageThreadDataEvent.TYPE_LOAD, load, -1, time,
+ // tid, String.valueOf(load)
+ // + ThreadPageLabels.THREAD_CHART_ITEM_PERCENT,
+ // -1, null);
+ // pushEvent(event);
+ // }
+ }
+ }
+
+ private void parsePthread(ThreadData input) {
+ long time = input.getTime();
+ String pid = Integer.toString(input.getPid());
+ String tid = Integer.toString(input.getTid());
+ int apiType = input.getApiType();
+ String apiName = input.getApiName();
+ long errorNum = input.getErrno();
+ ThreadPageThreadDataEvent event;
+ String pthreadId = Long.toString(input.getPThreadId());
+
+ if (errorNum != 0) {
+ SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(input);
+ }
+
+ switch (apiType) {
+ case LogCenterConstants.THREAD_API_TYPE_NEW:
+ case LogCenterConstants.THREAD_API_TYPE_STOP:
+ case LogCenterConstants.THREAD_API_TYPE_EXIT:
+ case LogCenterConstants.THREAD_API_TYPE_WAIT_START:
+ case LogCenterConstants.THREAD_API_TYPE_OTHER:
+ if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_ATTR_INIT)) {
+ threadAttrMap.put(input.getArgs(), PTHREAD_CREATE_JOINABLE);
+ } else if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_ATTR_SETDETACHSTATE)) {
+ checkThreadAttrType(input.getArgs());
+ }
+
+ event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
+ LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid, apiName, errorNum,
+ input);
+ pushEvent(event);
+ break;
+ case LogCenterConstants.THREAD_API_TYPE_START:
+ if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_CREATE)) {
+ checkThreadType(input.getArgs(), pthreadId);
+ checkThreadFunc(input.getArgs(), pthreadId);
+ }
+ event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
+ LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid, apiName, errorNum,
+ input);
+ event.setCallID(pthreadId);
+
+ pushEvent(event);
+ pushCallEvent(event);
+ break;
+ case LogCenterConstants.THREAD_API_TYPE_WAIT_END:
+ event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
+ LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid, apiName, errorNum,
+ input);
+ pushEvent(event);
+ if (input.getApiName().equals(ThreadPageLabels.THREAD_API_PTHREAD_JOIN)) {
+ // join, delete warning
+ SummaryDataManager.getInstance().getWarningDataMaker()
+ .removeData(event.getContents(),
+ ThreadPageLabels.THREAD_CHART_NAME_TID + findCallerTid(pthreadId),
+ WarningCase.JOINABLE_LEAK.getType());
+ // AnalyzerManager.getWarningChecker().removeData(
+ // ThreadPageLabels.THREAD_CHART_NAME_TID
+ // + (Long.toString(input
+ // .getOspThreadId())),
+ // WarningCase.JOINABLE_LEAK.getType());
+ }
+ break;
+ case LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP:
+ event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
+ LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid,
+ ThreadPageLabels.THREAD_CHART_ITEM_EXITED, errorNum, input);
+ event.setCallID(pthreadId);
+ pushEvent(event);
+ pushCallEvent(event);
+
+ if (true == isJoinableThread(tid)) {
+ // warningData
+ // WarningData wData = new WarningData(
+ // WarningCase.JOINABLE_LEAK.getType(), input,
+ // ThreadPageLabels.THREAD_CHART_NAME_TID + tid);
+ // AnalyzerManager.getWarningChecker().getWarningData().add(wData);
+ SummaryDataManager
+ .getInstance()
+ .getWarningDataMaker()
+ .add(input, ThreadPageLabels.THREAD_CHART_NAME_TID + tid,
+ WarningCase.JOINABLE_LEAK.getType());
+ }
+ // FIXME add code for remove waning case
+ break;
+ case LogCenterConstants.THREAD_API_TYPE_INTERNAL_START:
+ Integer threadAttrTypeInt = threadAttrMap.get(pthreadId);
+ String threadAttrType;
+ int funcID;
+
+ if (null != threadAttrTypeInt) {
+ threadAttrType = getAttrTypeByTypeInt(threadAttrTypeInt);
+ } else {
+ threadAttrType = ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE;
+ }
+ // get thread function id for this pthread
+ funcID = SymbolManager.getFuncId(null, threadFuncMap.get(pthreadId), input.getPid(),
+ input.getTime());
+
+ ThreadPageThreadData data = new ThreadPageThreadData(ThreadPageThreadData.TYPE_PTHREAD,
+ pid, tid, threadAttrType, funcID);
+ pushRow(data);
+ event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
+ LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid,
+ ThreadPageLabels.THREAD_CHART_ITEM_CREATED, errorNum, input);
+ pushEvent(event);
+ break;
+ default:
+ Logger.error("thread page err: unknown thread api type");
+ }
+ }
+
+ private void parseTIZEN(ThreadData input) {
+ long time = input.getTime();
+ String pid = Integer.toString(input.getPid());
+ String tid = Integer.toString(input.getTid());
+ int apiType = input.getApiType();
+ String apiName = input.getApiName();
+ String callID = Long.toString(input.getOspThreadId());
+ String className = null;
+ ThreadPageThreadData data;
+ ThreadPageThreadDataEvent event;
+ long errorNum = input.getErrno();
+
+ if (errorNum != 0) {
+ SummaryDataManager.getInstance().getFailedApiDataMaker().makeData(input);
+ }
+
+ switch (apiType) {
+ case LogCenterConstants.THREAD_API_TYPE_NEW:
+ case LogCenterConstants.THREAD_API_TYPE_STOP:
+ case LogCenterConstants.THREAD_API_TYPE_EXIT:
+ case LogCenterConstants.THREAD_API_TYPE_WAIT_START:
+ case LogCenterConstants.THREAD_API_TYPE_OTHER:
+ event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
+ LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tid, apiName, errorNum,
+ input);
+ pushEvent(event);
+ break;
+ case LogCenterConstants.THREAD_API_TYPE_START:
+ event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_API,
+ LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tid, apiName, errorNum,
+ input);
+
+ event.setCallID(callID);
+ data = findCallQueue(callID);
+ if (null != data) {
+ data.setThreadClassName(input.getClassName());
+ pushRow(data);
+ }
+ pushEvent(event);
+ pushCallEvent(event);
+ break;
+ case LogCenterConstants.THREAD_API_TYPE_WAIT_END:
+ if (input.getApiName().equals(ThreadPageLabels.THREAD_API_TIZEN_JOIN)) {
+ event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
+ LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tid, apiName,
+ errorNum, input);
+ pushEvent(event);
+ // join, delete warning
+ // AnalyzerManager.getWarningChecker().removeData(
+ // ThreadPageLabels.THREAD_CHART_NAME_TID
+ // + findCallerTid(Long.toString(input
+ // .getOspThreadId())),
+ // WarningCase.JOINABLE_LEAK.getType());
+ SummaryDataManager
+ .getInstance()
+ .getWarningDataMaker()
+ .removeData(event.getContents(),
+ ThreadPageLabels.THREAD_CHART_NAME_TID + findCallerTid(callID),
+ WarningCase.JOINABLE_LEAK.getType());
+ } // FIXME : do not shows sleep's wait end
+
+ break;
+ case LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP:
+ event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
+ LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tid,
+ ThreadPageLabels.THREAD_CHART_ITEM_EXITED, errorNum, input);
+ event.setCallID(Long.toString(input.getOspThreadId()));
+ pushEvent(event);
+ pushCallEvent(event);
+ if (true == isJoinableThread(tid)) {
+ // warningData
+ // WarningData wData = new WarningData(
+ // WarningCase.JOINABLE_LEAK.getType(),
+ // event.getContents(),
+ // ThreadPageLabels.THREAD_CHART_NAME_TID + tid);
+ // AnalyzerManager.getWarningChecker().getWarningData().add(wData);
+ SummaryDataManager
+ .getInstance()
+ .getWarningDataMaker()
+ .add(event.getContents(), ThreadPageLabels.THREAD_CHART_NAME_TID + tid,
+ WarningCase.JOINABLE_LEAK.getType());
+ }
+ break;
+ case LogCenterConstants.THREAD_API_TYPE_INTERNAL_START:
+ data = new ThreadPageThreadData(ThreadPageThreadData.TYPE_TIZEN, pid, tid,
+ ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE, -1);
+ // TIZEN thread includes the internal thread
+ if ((className = checkCalledThread(callID)) != null) {
+ data.setThreadClassName(className);
+ pushRow(data);
+ } else {
+ pushCallRow(data);
+ }
+ event = new ThreadPageThreadDataEvent(ThreadPageThreadDataEvent.TYPE_EVENT,
+ LogCenterConstants.THREAD_TYPE_TIZEN, apiType, time, tid,
+ ThreadPageLabels.THREAD_CHART_ITEM_CREATED, errorNum, input);
+ pushEvent(event);
+ break;
+ default:
+ Logger.error("thread page err: unknown thread api type");
+ }
+ }
+
+ public void parseAPI(LogData input) {
+ if (null == input) {
+ return;
+ }
+
+ if (!(input instanceof ThreadData)) {
+ return;
+ }
+ ThreadData log = (ThreadData) input;
+ // System.out.println("input : " + input);
+ int threadType = log.getThreadType();
+
+ switch (threadType) {
+ case LogCenterConstants.THREAD_TYPE_PTHREAD:
+ parsePthread(log);
+ break;
+ case LogCenterConstants.THREAD_TYPE_TIZEN:
+ parseTIZEN(log);
+ break;
+ default:
+ Logger.error("thread page err: unknown thread type");
+
+ }
+ hasUpdate = true;
+ }
+
+ private void parseAPI(LogPackage logPack) {
+ List<LogData> inputs = getLogsFromLogPackage(logPack, DataChannelConstants.MSG_PROBE_THREAD);
+ int size;
+ if (null == inputs || 0 == (size = inputs.size())) {
+ return;
+ }
+ ThreadData input;
+ for (int i = 0; i < size; i++) {
+ input = (ThreadData) inputs.get(i);
+ // System.out.println("input : " + input);
+ int threadType = input.getThreadType();
+
+ switch (threadType) {
+ case LogCenterConstants.THREAD_TYPE_PTHREAD:
+ parsePthread(input);
+ break;
+ case LogCenterConstants.THREAD_TYPE_TIZEN:
+ parseTIZEN(input);
+ break;
+ default:
+ Logger.error("thread page err: unknown thread type");
+ }
+ }
+ }
+
+ public void parseSync(LogData input) {
+ if (null == input || !(input instanceof SyncData)) {
+ return;
+ }
+ SyncData syncData = (SyncData) input;
+ long time = input.getTime();
+ String tid = Integer.toString(syncData.getTid());
+
+ // FIXME
+ int type = syncData.getSyncType();
+ int apiType = syncData.getApiType();
+ String apiName = syncData.getApiName();
+
+ String name = Long.toString(syncData.getSyncValue());
+ long errorNum = syncData.getErrno();
+ ThreadPageSyncDataEvent event;
+ switch (type) {
+ case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
+ case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
+ case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
+ event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid, apiName, errorNum,
+ input);
+ pushSyncEvent(event);
+ // parseTIZENSync(input, type);
+ break;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
+ if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_INIT)) {
+ syncAttrMap.put(syncData.getArgs(), ThreadPageSyncDataManager.PTHREAD_MUTEX_NORMAL);
+ } else if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_SETTYPE)) {
+ checkMutexAttrType(syncData.getArgs());
+ } else {
+ if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEX_INIT)) {
+ checkMutexType(syncData.getArgs());
+ }
+ event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid, apiName,
+ errorNum, input);
+ pushSyncEvent(event);
+ }
+ break;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
+ event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid, apiName, errorNum,
+ input);
+ pushSyncEvent(event);
+ Logger.error("error : sync parse - type = " + type);
+ break;
+ default:
+ Logger.error("error : sync parse unknown - type = " + type);
+ }
+ hasUpdate = true;
+ }
+
+ private void parseSync(LogPackage logPack) {
+ List<LogData> inputs = getLogsFromLogPackage(logPack, DataChannelConstants.MSG_PROBE_SYNC);
+ int size;
+ if (null == inputs || 0 == (size = inputs.size())) {
+ return;
+ }
+ SyncData input;
+ for (int i = 0; i < size; i++) {
+ input = (SyncData) inputs.get(i);
+ long time = input.getTime();
+ String tid = Integer.toString(input.getTid());
+
+ // FIXME
+ int type = input.getSyncType();
+ int apiType = input.getApiType();
+ String apiName = input.getApiName();
+
+ String name = Long.toString(input.getSyncValue());
+ long errorNum = input.getErrno();
+ ThreadPageSyncDataEvent event;
+ switch (type) {
+ case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
+ case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
+ case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
+ event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid, apiName,
+ errorNum, input);
+ pushSyncEvent(event);
+ // parseTIZENSync(input, type);
+ break;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
+ if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_INIT)) {
+ syncAttrMap
+ .put(input.getArgs(), ThreadPageSyncDataManager.PTHREAD_MUTEX_NORMAL);
+ } else if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_SETTYPE)) {
+ checkMutexAttrType(input.getArgs());
+ } else {
+ if (apiName.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEX_INIT)) {
+ checkMutexType(input.getArgs());
+ }
+ event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid, apiName,
+ errorNum, input);
+ pushSyncEvent(event);
+ }
+ break;
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
+ case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
+ event = new ThreadPageSyncDataEvent(name, type, apiType, time, tid, apiName,
+ errorNum, input);
+ pushSyncEvent(event);
+ Logger.debug("sync parse - type = " + type);
+ break;
+ default:
+ Logger.error("sync parse unknown - type = " + type);
+ }
+ }
+ }
+
+ public void parsePageData(LogPackage logPack) {
+ parseLoad(logPack);
+ parseAPI(logPack);
+ parseSync(logPack);
+ hasUpdate = true;
+ }
+
+ // when INTERNAL_START log comes after START log,
+ // this method finds matching START log (for TIZEN thread only)
+ // return class name from the START log
+ private String checkCalledThread(String callId) {
+ if (null == callId) {
+ return null;
+ }
+ int callEventQueueSize = callEventQueue.size();
+ ThreadPageThreadDataEvent callEvent;
+ for (int i = 0; i < callEventQueueSize; i++) {
+ callEvent = callEventQueue.get(i);
+ if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_START) {
+ continue;
+ }
+ if (callId.equals(callEvent.getCallID())) {
+ ThreadData threadData = (ThreadData) callEvent.getContents();
+ return threadData.getClassName();
+ }
+ }
+ return null;
+ }
+
+ private String getCallEventID(String callID) {
+ if (null == callID) {
+ return null;
+ }
+ int eventQueueSize = eventQueue.size();
+ ThreadPageThreadDataEvent event;
+ for (int i = 0; i < eventQueueSize; i++) {
+ event = eventQueue.get(i);
+ if (event.getApiType() != LogCenterConstants.THREAD_API_TYPE_INTERNAL_START) {
+ continue;
+ }
+ if (callID.equals(event.getCallID())) {
+ return event.getTid();
+ }
+ }
+ return null;
+ }
+
+ private ThreadPageThreadData findCallQueue(String callID) {
+ String tid = getCallEventID(callID);
+
+ int size;
+ size = callRowsQueue.size();
+ ThreadPageThreadData ret;
+ for (int i = 0; i < size; i++) {
+ ret = callRowsQueue.get(i);
+
+ if (ret.getTid().equals(tid)) {
+ callRowsQueue.remove(i);
+ return ret;
+ }
+ }
+ return null;
+ }
+
+ private boolean isJoinableThreadFromQueue(List<ThreadPageThreadData> queue, String tid) {
+ int size;
+ size = queue.size();
+ for (int i = 0; i < size; i++) {
+ if (true == queue.get(i).getTid().equals(tid)) {
+ if (true == queue.get(i).getAttrType()
+ .equals(ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean isJoinableThread(String tid) {
+ boolean ret;
+
+ ret = isJoinableThreadFromQueue(rows, tid);
+ if (ret == false) {
+ ret = isJoinableThreadFromQueue(rowsQueue, tid);
+ }
+ return ret;
+ }
+
+ private void checkThreadAttrType(String input) {
+ String[] temp = input.split(",");
+ if (temp.length != 2) {
+ return;
+ }
+ String obj = temp[0];
+ String type = temp[1].trim();
+
+ if (null != threadAttrMap.get(obj)) {
+ threadAttrMap.put(obj, Integer.valueOf(type));
+ }
+ }
+
+ private void checkThreadType(String args, String pthreadId) {
+ String[] temp = args.split(",");
+ if (temp.length != 4) {
+ return;
+ }
+ String attrObj = temp[1].trim();
+
+ Integer attrType = threadAttrMap.get(attrObj);
+ if (attrType != null) {
+ threadAttrMap.put(pthreadId, attrType);
+ }
+ }
+
+ // extract function address from arguments of thread create function,
+ // (e.g. int pthread_create(pthread_t *, const pthread_attr_t *, void
+ // *(*)(void *), void *); )
+ // put (pthreadId, function address) in the map
+ private void checkThreadFunc(String args, String pthreadId) {
+ String[] temp = args.split(",");
+ if (temp.length != 4) {
+ return;
+ }
+ // 3rd argument is function address
+ String strFuncAddr = temp[2].trim();
+ Long funcAddr = Long.decode(strFuncAddr);
+
+ threadFuncMap.put(pthreadId, funcAddr);
+ }
+
+ private void checkMutexAttrType(String input) {
+ String[] temp = input.split(",");
+ if (temp.length != 2) {
+ return;
+ }
+ String obj = temp[0];
+ String type = temp[1].trim();
+
+ if (null != syncAttrMap.get(obj)) {
+ syncAttrMap.put(obj, Integer.valueOf(type));
+ }
+ }
+
+ private void checkMutexType(String input) {
+ String[] temp = input.split(",");
+ if (temp.length != 2) {
+ return;
+ }
+ String obj = temp[0];
+ String attrObj = temp[1].trim();
+
+ Integer attrType = syncAttrMap.get(attrObj);
+ if (attrType != null) {
+ syncAttrMap.put(obj, attrType);
+ }
+ }
+
+ protected DAChartBoard getBoard() {
+ return board;
+ }
+
+ public void setBoard(DAChartBoard board) {
+ this.board = board;
+ }
+
+ private String findCallerTid(String id) {
+ int callEventQueueSize = callEventQueue.size();
+ ThreadPageThreadDataEvent callEvent;
+ for (int i = 0; i < callEventQueueSize; i++) {
+ callEvent = callEventQueue.get(i);
+ if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
+ continue;
+ }
+ String callerTID = callEvent.getCallID();
+
+ if (callerTID != null && callerTID.equals(id)) {
+ return callEvent.getTid();
+ }
+ }
+ return null;
+ }
+
+ private boolean checkPairEvent(ThreadPageThreadDataEvent event) {
+ if (event.getEventType() != ThreadPageThreadDataEvent.TYPE_EVENT) {
+ return true;
+ }
+ int apiType = event.getApiType();
+ int threadType = event.getThreadType();
+ ThreadData tData = (ThreadData) event.getContents();
+ if (LogCenterConstants.THREAD_API_TYPE_INTERNAL_START == apiType) {
+ int callEventQueueSize = callEventQueue.size();
+ ThreadPageThreadDataEvent callEvent;
+ for (int i = 0; i < callEventQueueSize; i++) {
+ callEvent = callEventQueue.get(i);
+ if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_START) {
+ continue;
+ } else if (callEvent.getThreadType() != threadType) {
+ continue;
+ } else {
+ if (threadType == LogCenterConstants.THREAD_TYPE_TIZEN) {
+ String callerTizenID = callEvent.getCallID();
+ String eventTizenID = Long.toString(tData.getOspThreadId());
+ if (eventTizenID.equals(callerTizenID)) {
+ event.setCallerTid(callEvent.getTid());
+ callEventQueue.remove(i);
+ return true;
+ }
+ } else {
+ String callerPthreadID = callEvent.getCallID();
+ String eventPthreadID = Long.toString(tData.getPThreadId());
+ if (eventPthreadID.equals(callerPthreadID)) {
+ event.setCallerTid(callEvent.getTid());
+ callEventQueue.remove(i);
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ } else if (LogCenterConstants.THREAD_API_TYPE_WAIT_END == apiType) {
+ if (!event.isJoinAPI()) {
+ return true;
+ }
+
+ int callEventQueueSize = callEventQueue.size();
+ ThreadPageThreadDataEvent callEvent;
+ for (int i = 0; i < callEventQueueSize; i++) {
+ callEvent = callEventQueue.get(i);
+ if (callEvent.getApiType() != LogCenterConstants.THREAD_API_TYPE_INTERNAL_STOP) {
+ continue;
+ } else if (callEvent.getThreadType() != threadType) {
+ continue;
+ } else {
+ if (threadType == LogCenterConstants.THREAD_TYPE_TIZEN) {
+ String callerTizenID = callEvent.getCallID();
+ String eventTizenID = Long.toString(tData.getOspThreadId());
+ if (eventTizenID.equals(callerTizenID)) {
+ event.setCallerTid(callEvent.getTid());
+ if (null == callEvent.getChartItem()) {
+ callEvent.setCallerTid(event.getTid());
+ } else {
+ // join, delete warning
+ SummaryDataManager
+ .getInstance()
+ .getWarningDataMaker()
+ .removeData(
+ event.getContents(),
+ ThreadPageLabels.THREAD_CHART_NAME_TID
+ + callEvent.getTid(),
+ WarningCase.JOINABLE_LEAK.getType());
+ // AnalyzerManager.getWarningChecker().removeData(
+ // ThreadPageLabels.THREAD_CHART_NAME_TID
+ // + callEvent.getTid(),
+ // WarningCase.JOINABLE_LEAK.getType());
+ callEvent.getChartItem().setY(DAChartSeriesItem.SERIES_ARROW_RIGHT);
+ callEvent.getChartItem().setBarWidth(
+ Double.parseDouble(event.getTid()));
+ }
+ callEventQueue.remove(i);
+ return true;
+ }
+ } else {
+ String callerPthreadID = callEvent.getCallID();
+ String eventPthreadID = Long.toString(tData.getPThreadId());
+ if (eventPthreadID.equals(callerPthreadID)) {
+ event.setCallerTid(callEvent.getTid());
+ if (null == callEvent.getChartItem()) {
+ callEvent.setCallerTid(event.getTid());
+ } else {
+ callEvent.getChartItem().setY(DAChartSeriesItem.SERIES_ARROW_RIGHT);
+ callEvent.getChartItem().setBarWidth(
+ Double.parseDouble(event.getTid()));
+ }
+ callEventQueue.remove(i);
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ private ThreadPageThreadData findParentData(String tid) {
+ int size = rows.size();
+ ThreadPageThreadData ret;
+ for (int i = 0; i < size; i++) {
+ ret = rows.get(i);
+ if (ret.getTid().equals(tid)) {
+ return ret;
+ }
+ }
+ return null;
+ }
+
+ private void chartFilteringByPid() {
+ if (null == board || null == board.getItemList()) {
+ return;
+ }
+ int selectedPid = ToolbarArea.getInstance().getSelectedPid();
+ boolean isCheck = false;
+
+ if (eventQueue.size() > 0) {
+ isCheck = true;
+ }
+
+ if (preSelectionPid != -1 && preSelectionPid != selectedPid) {
+ isCheck = true;
+ }
+
+ if (isCheck) {
+ int parentSize = board.getItemList().getItemSize();
+ for (int i = 0; i < parentSize; i++) {
+ DAChartBoardItem parentItem = board.getItemList().get(i);
+ /*
+ * int childSize = parentItem.getChildItemList().getItemSize(); int hidedCount = 0;
+ * for (int j = 0; j < childSize; j++) { DAChartBoardItem childItem =
+ * parentItem.getChildItemList() .get(j); int itemPid = getItemPid(childItem); if
+ * (itemPid == selectedPid) { parentItem.getChildItemList().showItem(j);
+ * board.showItem(i); } else if (selectedPid == 0) {
+ * parentItem.getChildItemList().showItem(j); board.showItem(i); } else if (itemPid
+ * == -1) { board.showItem(i); } else { parentItem.getChildItemList().hideItem(j);
+ * hidedCount++; } } if (childSize == 0) { int itemPid = getItemPid(parentItem); if
+ * (itemPid == selectedPid) { board.showItem(i); } else if (selectedPid == 0) {
+ * board.showItem(i); } else if (itemPid == -1) { board.showItem(i); } else {
+ * board.hideItem(i); hidedCount++; } } else { if (childSize == hidedCount) {
+ * board.hideItem(i); } }
+ */
+ int itemPid = getItemPid(parentItem);
+ if (itemPid == selectedPid) {
+ board.showItem(i);
+ } else if (selectedPid == 0) {
+ board.showItem(i);
+ } else if (itemPid == -1) {
+ board.showItem(i);
+ } else {
+ board.hideItem(i);
+ }
+ }
+ }
+ preSelectionPid = selectedPid;
+ }
+
+ private int getItemPid(DAChartBoardItem item) {
+ int pid = -1;
+ if (item.getData() instanceof ThreadPageData) {
+ ThreadPageData threadPageData = (ThreadPageData) item.getData();
+ pid = Integer.parseInt(threadPageData.getPid());
+ }
+ return pid;
+ }
+
+ // TODO: syncDataManager has same method : move this method to proper class
+ private int getSortObject(DAChartBoardItem item) {
+ Object sortObj = item.getSortObject();
+ if (sortObj instanceof Integer) {
+ return (Integer) sortObj;
+ } else { // should never go here
+ return -1;
+ }
+ }
+
+ public void checkUpdate() {
+ if (false == hasUpdate && preSelectionPid == ToolbarArea.getInstance().getSelectedPid()) {
+ return;
+ } else {
+ hasUpdate = false;
+ }
+
+ int size = rowsQueue.size();
+ if (size > 0) {
+ ThreadPageThreadData data;
+ for (int i = 0; i < size; i++) {
+ data = rowsQueue.get(0);
+ // sort chart items at each insertion
+ createBoardItem(data, new Comparator<DAChartBoardItem>() {
+ public int compare(DAChartBoardItem item1, DAChartBoardItem item2) {
+ return getSortObject(item1) - getSortObject(item2);
+ }
+ });
+ rows.add(data);
+ rowsQueue.remove(0);
+ }
+ }
+
+ chartFilteringByPid();
+
+ size = eventQueue.size();
+ if (size > 0) {
+ ThreadPageThreadData data;
+ ThreadPageThreadDataEvent event;
+ int remainCalleeEventCount = 0;
+ for (int i = 0; i < size; i++) {
+ event = eventQueue.get(remainCalleeEventCount);
+ if (false == checkPairEvent(event)) {
+ remainCalleeEventCount++;
+ } else {
+ data = findParentData(event.getTid());
+ if (null != data) {
+ data.pushEvent(event);
+ event.setThreadDataID(data.getThreadDataID());
+ // save to DB
+ ThreadEventInserter.pushThreadEvent(event);
+ ThreadEventInserter.startThread();
+ eventQueue.remove(remainCalleeEventCount);
+ } else {
+ remainCalleeEventCount++;
+ }
+ }
+ }
+ }
+
+ /* load ThreadPageSyncData when open trace */
+ size = syncQueue.size();
+ if (size > 0) {
+ ThreadPageThreadData data;
+ ThreadPageSyncData sync;
+ for (int i = 0; i < size; i++) {
+ sync = syncQueue.get(0);
+ data = findParentData(sync.getTid());
+ if (null != data) {
+ createSyncBoardItem(data, sync);
+ data.pushSync(sync);
+ data.setHasUpdate();
+ }
+ syncQueue.remove(0);
+ }
+ }
+
+ size = syncEventQueue.size();
+ if (size > 0) {
+ ThreadPageThreadData data;
+ ThreadPageSyncDataEvent event;
+ ThreadPageSyncData sync;
+ for (int i = 0; i < size; i++) {
+ event = syncEventQueue.get(0);
+ String pid = Integer.toString(event.getContents().getPid());
+ data = findParentData(event.getTid());
+ if (null != data) {
+ String syncVal = event.getSyncVal();
+ sync = data.findSyncData(syncVal);
+ if (null == sync) {
+ Integer syncAttrTypeInt = syncAttrMap.get(syncVal);
+ String syncAttrType;
+ if (null != syncAttrTypeInt) {
+ syncAttrType = ThreadPageSyncDataManager
+ .getAttrTypeByTypeInt(syncAttrTypeInt);
+ } else {
+ syncAttrType = ThreadPageSyncDataManager.getAttrTypeString(event);
+ }
+
+ sync = new ThreadPageSyncData(event.getType(), syncVal, pid,
+ event.getTid(), syncAttrType, ThreadPageSyncData.THREAD_CHILD);
+ sync.setParentID(data.getThreadDataID());
+ // save to DB
+ SyncDataInserter.pushSyncData(sync);
+ SyncDataInserter.startThread();
+ createSyncBoardItem(data, sync);
+ data.pushSync(sync);
+ }
+ sync.pushEvent(event);
+ event.setSyncDataID(sync.getSyncDataID());
+ // save to DB
+ SyncEventInserter.pushSyncEvent(event);
+ SyncEventInserter.startThread();
+ // save syncAPI to DB
+ if (ThreadPageSyncData.isSyncApi(event.getApiType())) {
+ SyncAPIInserter.pushSyncEvent((SyncData) event.getContents());
+ SyncAPIInserter.startThread();
+ }
+ data.setHasUpdate();
+ }
+ syncEventQueue.remove(0);
+ }
+ }
+
+ size = rows.size();
+ if (size > 0) {
+ ThreadPageThreadData data;
+ for (int i = 0; i < size; i++) {
+ data = rows.get(i);
+ data.checkUpdate();
+ }
+ }
+ }
+
+ public int getItemIndexByTid(String tid) {
+ int itemSize = rows.size();
+ for (int i = 0; i < itemSize; i++) {
+ if (rows.get(i).getTid().equals(tid)) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ public void clear() {
+ rows.clear(); // FIXME : clear chart
+ rowsQueue.clear();
+ eventQueue.clear();
+ callEventQueue.clear();
+ threadAttrMap.clear();
+ syncAttrMap.clear();
+ callRowsQueue.clear();
+ syncEventQueue.clear();
+ threadFuncMap.clear();
+ hasUpdate = false;
+ ThreadPageThreadData.clear(); // reset internal seq number
+ }
+}
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * WooJin Jung <woojin2.jung@samsung.com>
- * yeongtaik byeon <yeongtaik.byeon@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.type;
-
-public abstract class ThreadPageData {
- private String pid;
- private int tid;
- private int type;
- private String key;
- private String attrType;
-
- public ThreadPageData(int type, String name, String pid, int tid, String attrType) {
- setType(type);
- setKey(name);
- setPid(pid);
- setTid(tid);
- setAttrType(attrType);
- }
-
- public int getTid() {
- return tid;
- }
-
- public void setTid(int tid) {
- this.tid = tid;
- }
-
- public String getPid() {
- return pid;
- }
-
- public void setPid(String pid) {
- this.pid = pid;
- }
-
- public int getType() {
- return type;
- }
-
- public void setType(int type) {
- this.type = type;
- }
-
- public String getKey() {
- return key;
- }
-
- public void setKey(String name) {
- this.key = name;
- }
-
- public String getAttrType() {
- return attrType;
- }
-
- public void setAttrType(String attrType) {
- this.attrType = attrType;
- }
-
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com>
- * yeongtaik byeon <yeongtaik.byeon@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.type;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.util.Logger;
-
-public class ThreadPageSyncData extends ThreadPageData {
- private List<ThreadPageSyncData> children = new ArrayList<ThreadPageSyncData>();
-
- public static final byte SYNC_PARENT = 0;
- public static final byte SYNC_CHILD = 1;
- public static final byte THREAD_CHILD = 2;
-
- private static int internalSeq = 0;
- private int syncDataID = -1;
- private byte syncDataType = -1;
- private int parentID = -1;
-
- public ThreadPageSyncData(int type, String name, String pid, int tid, String attrType,
- byte syncDataType) {
- super(type, name, pid, tid, attrType);
- this.syncDataType = syncDataType;
- syncDataID = internalSeq++;
- }
-
- public ThreadPageSyncData(int id, int pid, int tid, int type, long syncValue, String attrType,
- byte syncDataType, int parentID) {
- super(type, String.valueOf(syncValue), String.valueOf(pid), tid, attrType);
- this.syncDataID = id;
- this.syncDataType = syncDataType;
- this.parentID = parentID;
- }
-
- public void pushSync(ThreadPageSyncData sync) {
- children.add(sync);
- }
-
- public ThreadPageSyncData findChildData(int tId) {
- int size = children.size();
- ThreadPageSyncData ret;
- for (int i = 0; i < size; i++) {
- ret = children.get(i);
- if (ret.getTid() == tId) {
- return ret;
- }
- }
- return null;
- }
-
- public List<ThreadPageSyncData> getChildren() {
- return children;
- }
-
- public static boolean isSyncApi(int apiType) {
- if (apiType == LogCenterConstants.SYNC_API_TYPE_ACQUIRE_WAIT_START) {
- return false;
- }
- if (apiType == LogCenterConstants.SYNC_API_TYPE_COND_WAIT_START) {
- return false;
- }
- return true;
- }
-
- public String getTypeString() {
- switch (getType()) {
- case LogCenterConstants.SYNC_TYPE_TIZEN_MUTEX:
- return ThreadPageLabels.SYNC_TYPE_TIZEN_MUTEX;
- case LogCenterConstants.SYNC_TYPE_TIZEN_MONITOR:
- return ThreadPageLabels.SYNC_TYPE_TIZEN_MONITOR;
- case LogCenterConstants.SYNC_TYPE_TIZEN_SEMAPHORE:
- return ThreadPageLabels.SYNC_TYPE_TIZEN_SEMAPHORE;
- case LogCenterConstants.SYNC_TYPE_PTHREAD_MUTEX:
- return ThreadPageLabels.SYNC_TYPE_PTHREAD_MUTEX;
- case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
- return ThreadPageLabels.SYNC_TYPE_PTHREAD_COND_VARIABLE;
- case LogCenterConstants.SYNC_TYPE_PTHREAD_RWLOCK:
- return ThreadPageLabels.SYNC_TYPE_PTHREAD_RWLOCK;
- case LogCenterConstants.SYNC_TYPE_PTHREAD_SPINLOCK:
- return ThreadPageLabels.SYNC_TYPE_PTHREAD_SPINLOCK;
- case LogCenterConstants.SYNC_TYPE_PTHREAD_BARRIER:
- return ThreadPageLabels.SYNC_TYPE_PTHREAD_BARRIER;
- default:
- Logger.error("unknown sync type!!");
- return CommonConstants.EMPTY;
- }
- }
-
- public int getSyncDataID() {
- return syncDataID;
- }
-
- public byte getSyncDataType() {
- return syncDataType;
- }
-
- public int getParentID() {
- return parentID;
- }
-
- public void setParentID(int parentID) {
- this.parentID = parentID;
- }
-
- public static void clear() {
- internalSeq = 0;
- }
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Dynamic Analyzer
- *
- * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact:
- * Hyunjong Park <phjwithyou.park@samsung.com>
- * WooJin Jung <woojin2.jung@samsung.com>
- * yeongtaik byeon <yeongtaik.byeon@samsung.com>
- * Juyoung Kim <j0.kim@samsung.com>
- *
- * 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.ui.thread.type;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.tizen.dynamicanalyzer.common.Global;
-import org.tizen.dynamicanalyzer.constant.CommonConstants;
-import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
-import org.tizen.dynamicanalyzer.util.Logger;
-import org.tizen.dynamicanalyzer.utils.Formatter;
-
-public class ThreadPageThreadData extends ThreadPageData {
- private List<ThreadPageSyncData> syncs = new ArrayList<ThreadPageSyncData>();
- private long StartTime = -1;
- private long EndTime = -1;
- private int threadFuncID;
- private String threadClassName = CommonConstants.EMPTY;
-
- public static final byte TYPE_MAIN = 0;
- public static final byte TYPE_PTHREAD = 1;
- public static final byte TYPE_TIZEN = 2;
-
- private static int internalSeq = 0;
- private int threadDataID = -1;
-
- public ThreadPageThreadData(int type, String pid, int tid, String attrType, int funcID) {
- super(type, String.valueOf(tid), pid, tid, attrType);
- this.threadFuncID = funcID;
- threadDataID = internalSeq++;
- }
-
- public ThreadPageThreadData(int id, int pid, int tid, int threadType, String attrType,
- long startTime, long endTime, int functionID, String className) {
- super(threadType, String.valueOf(tid), String.valueOf(pid), tid, attrType);
- this.threadDataID = id;
- this.threadFuncID = functionID;
- this.StartTime = startTime;
- this.EndTime = endTime;
- this.threadClassName = className;
- }
-
- public int getThreadFuncID() {
- return threadFuncID;
- }
-
- public String getThreadFuncName() {
- if (threadFuncID == -1) {
- return CommonConstants.EMPTY;
- } else {
- return Global.getFunctionName(threadFuncID);
- }
- }
-
- public String getThreadClassName() {
- return threadClassName;
- }
-
- public void setThreadClassName(String className) {
- threadClassName = className;
- }
-
- public void pushSync(ThreadPageSyncData sync) {
- syncs.add(sync);
- }
-
- public ThreadPageSyncData findSyncData(String syncVal) {
- int size = syncs.size();
- ThreadPageSyncData sync;
- for (int i = 0; i < size; i++) {
- sync = syncs.get(i);
- if (sync.getKey().equals(syncVal)) {
- return sync;
- }
- }
- return null;
- }
-
- public String getTypeString() {
- switch (getType()) {
- case TYPE_MAIN:
- return ThreadPageLabels.THREAD_ITEM_TYPE_MAIN;
- case TYPE_PTHREAD:
- return ThreadPageLabels.THREAD_ITEM_TYPE_PTHREAD;
- case TYPE_TIZEN:
- return ThreadPageLabels.THREAD_ITEM_TYPE_TIZEN;
- default:
- Logger.error("unknown thread type!!");
- return CommonConstants.EMPTY;
- }
- }
-
- public long getStartTime() {
- return StartTime;
- }
-
- public void setStartTime(long startTime) {
- StartTime = startTime;
- }
-
- public String getStartTimeString() {
- if (StartTime == -1) {
- return null;
- } else {
- double startTime = Formatter.longTimeToDoubleTime(StartTime);
- return String.valueOf(startTime);
- }
- }
-
- public long getEndTime() {
- return EndTime;
- }
-
- public void setEndTime(long endTime) {
- EndTime = endTime;
- }
-
- public String getEndTimeString() {
- if (EndTime == -1) {
- return null;
- } else {
- double endTime = Formatter.longTimeToDoubleTime(EndTime);
- return String.valueOf(endTime);
- }
- }
-
- public int getThreadDataID() {
- return threadDataID;
- }
-
- public static void clear() {
- internalSeq = 0;
- }
-}
\ No newline at end of file
public static final String SELECT_QUERY =
"select " + SELECT_COLUMN + " from " + TABLENAME +
" where " + COLUMN.STARTTIME.name + " >= %s and " + COLUMN.STARTTIME.name + " <= %s";
- // to make callstack for sample, probe
- public static final String USERCALLSTACK_QUERY =
- "select " + COLUMN.SEQ.name + " from " + TABLENAME +
- " where " + COLUMN.STARTTIME.name + " = (select max( " + COLUMN.STARTTIME.name +
- ") from " + TABLENAME + " where " + COLUMN.STARTTIME.name + " <= %s )";
public enum COLUMN {
SEQ(0, "SEQNUMBER"),
CommonConstants.COMMA + FunctionEntryDBTable.TABLENAME + " where " +
COLUMN.ENTRYSEQ.name + CommonConstants.EQUAL + FunctionEntryDBTable.COLUMN.SEQ.name +
" and " + COLUMN.ENDTIME.name + " >= %s and " + COLUMN.ENDTIME.name + " <= %s";
- // to make callstack for sample, probe
- public static final String USERCALLSTACK_QUERY =
- "select " + COLUMN.EXITSEQ.name + " from " + TABLENAME +
- " where " + COLUMN.ENDTIME.name + " = (select max( " + COLUMN.ENDTIME.name +
- ") from " + TABLENAME + " where " + COLUMN.ENDTIME.name + " <= %s )";
public enum COLUMN {
ENTRYSEQ(0, "EntrySEQNUMBER"),
import java.io.File;
import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.graphics.Image;
public static ScreenshotChart instance = null;
private DAChartSeries screenshotSeries;
- private Map<String, Image> imageMap = new ConcurrentHashMap<String, Image>();
-
+
public static ScreenshotChart getInstance() {
if (instance == null) {
instance = new ScreenshotChart();
public DAChart getChart() {
return chart;
}
-
+
@Override
public void inputChartSeries(List<Object> dataList) {
screenshotSeries.clear();
/ TimelineConstants.MEGA_DOUBLE;
String fileName = (String)row.get(ScreenShotDBTable.COLUMN.IMAGE_FILE_PATH.ordinal());
int orientation = (Integer)row.get(ScreenShotDBTable.COLUMN.IMAGE_ORIENTATION.ordinal());
- if (Global.getProject() == null) {
- return;
- }
- String imagePath = Global.getProject().getSavePath()
- + File.separator + AnalyzerConstants.IMAGE_FOLDER_NAME
- + File.separator
- + AnalyzerConstants.SMALL_IMAGE_FOLDER_NAME
- + File.separator
- + fileName;
- int yPosition;
- if (orientation == 0 || orientation == 180) { //$NON-NLS-1$ //$NON-NLS-2$
- yPosition = 10;
- } else {
- yPosition = 23;
- }
-
- /*
- * 1 image need 1 thread.
- */
- if (imageMap.containsKey(imagePath)) {
- Image image = imageMap.get(imagePath);
- screenshotSeries.addSeriesItem(new DAChartSeriesItem(time,
- yPosition, image));
- } else {
- Thread createImageThread = new Thread(null, new CreateImageThread(
- imagePath, time, yPosition), "small image getter thread");
- createImageThread.start();
- }
+ if (Global.getProject() == null) {
+ return;
+ }
+ String imagePath = Global.getProject().getSavePath()
+ + File.separator + AnalyzerConstants.IMAGE_FOLDER_NAME
+ + File.separator
+ + AnalyzerConstants.SMALL_IMAGE_FOLDER_NAME
+ + File.separator
+ + fileName;
+ int yPostion;
+ if (orientation == 0 || orientation == 180) { //$NON-NLS-1$ //$NON-NLS-2$
+ yPostion = 10;
+ } else {
+ yPostion = 23;
+ }
+
+ Thread createImageThread = new Thread(null, new CreateImageThread(
+ imagePath, time, yPostion), "small image getter thread");
+ createImageThread.start();
}
} catch (NumberFormatException ne) {
- ne.printStackTrace();
- }
- }
-
- @Override
- public void clear() {
- super.clear();
- imageMap.clear();
+ ne.printStackTrace();
+ }
}
private class CreateImageThread extends Thread {
public void run() {
Image image = null;
int count = 0;
+
while (true && count < 5) {
try {
image = new Image(Display.getDefault(), imagePath);
- imageMap.put(imagePath, image);
break;
} catch (SWTException se) {
count++;
screenshotSeries.addSeriesItem(new DAChartSeriesItem(time,
yPosition, image));
} else {
- imageMap.put(imagePath, ImageResources.NO_IMAGE_SMALL);
screenshotSeries.addSeriesItem(new DAChartSeriesItem(time,
yPosition, ImageResources.NO_IMAGE_SMALL));
}
private static UIEventChart instance = null;
private DAChartSeries touchEventSeries;
- /*
- * TODO code about Gesture is commented. it will be reopen when it implemented.
- */
-// private DAChartSeries gestureEventSeries;
+ private DAChartSeries gestureEventSeries;
private DAChartSeries orientationEventSeries;
private static final int TYPE_TOUCH = 2;
TimelineChartLabels.UI_EVENT_CHART_SERIES_NAME_TOUCH,
DAChartSeries.SERIES_STYLE_MULTI_CHECK_BAR,
ColorResources.SERIES_COLOR_UI_EVENT_TOUCH);
-// gestureEventSeries = new DAChartSeries(
-// TimelineChartLabels.UI_EVENT_CHART_SERIES_NAME_GESTURE,
-// DAChartSeries.SERIES_STYLE_MULTI_CHECK_BAR,
-// ColorResources.SERIES_COLOR_UI_EVENT_GESTURE);
+ gestureEventSeries = new DAChartSeries(
+ TimelineChartLabels.UI_EVENT_CHART_SERIES_NAME_GESTURE,
+ DAChartSeries.SERIES_STYLE_MULTI_CHECK_BAR,
+ ColorResources.SERIES_COLOR_UI_EVENT_GESTURE);
orientationEventSeries = new DAChartSeries(
TimelineChartLabels.UI_EVENT_CHART_SERIES_NAME_ORIENTATION,
DAChartSeries.SERIES_STYLE_MULTI_CHECK_BAR,
ColorResources.SERIES_COLOR_UI_EVENT_ORIENTATION);
touchEventSeries.setFont(FontResources.TIMELINE_UIEVENT_FONT);
-// gestureEventSeries.setFont(FontResources.TIMELINE_UIEVENT_FONT);
+ gestureEventSeries.setFont(FontResources.TIMELINE_UIEVENT_FONT);
orientationEventSeries.setFont(FontResources.TIMELINE_UIEVENT_FONT);
}
item.useExpand(false);
chart.addSeries(touchEventSeries);
-// chart.addSeries(gestureEventSeries);
+ chart.addSeries(gestureEventSeries);
chart.addSeries(orientationEventSeries);
setChartStyle();
@Override
public void inputChartSeries(List<Object> dataList) {
touchEventSeries.clear();
-// gestureEventSeries.clear();
+ gestureEventSeries.clear();
orientationEventSeries.clear();
@SuppressWarnings("unchecked")
touchEventSeries.addSeriesItem(new DAChartSeriesItem(time, 0,
info));
break;
-// case TYPE_GESTURE:
-// gestureEventSeries.addSeriesItem(new DAChartSeriesItem(time, 0,
-// getGestureInfo(detailType, pointX, pointY, info1, info2)));
-// break;
+ case TYPE_GESTURE:
+ gestureEventSeries.addSeriesItem(new DAChartSeriesItem(time, 0,
+ getGestureInfo(detailType, pointX, pointY, info1, info2)));
+ break;
case TYPE_ORIENTATION:
orientationEventSeries.addSeriesItem(new DAChartSeriesItem(
time, 0, TimelineChartLabels.UIEVENT_ORIENTATION
import org.tizen.dynamicanalyzer.resources.FontResources;
import org.tizen.dynamicanalyzer.resources.ImageResources;
import org.tizen.dynamicanalyzer.shortcut.ShortCutManager;
-import org.tizen.dynamicanalyzer.ui.common.explorer.DeviceExplorerDialog;
import org.tizen.dynamicanalyzer.ui.page.BaseView;
import org.tizen.dynamicanalyzer.ui.timeline.TimelinePage;
import org.tizen.dynamicanalyzer.ui.toolbar.opentrace.OpenTraceDialog;
import org.tizen.dynamicanalyzer.widgets.da.base.DADialog;
import org.tizen.dynamicanalyzer.widgets.timer.TimerClock;
import org.tizen.sdblib.IDevice;
-import org.tizen.sdblib.service.FileEntry;
public class ToolbarArea {
public static final int START_BUTTON = 0;
private static final int TIMER_WIDTH = 122;
+ public static boolean bThreadPageWork = false; // FIXME
+ public static boolean bUIPageWork = false; // FIXME
+
public static final int TOOLBAR_STATE_RECORDING = 0;
public static final int TOOLBAR_STATE_READY = 1;
@Override
public void selectionEvent(DACustomCombo combo) {
- final String appName = combo.getText();
+ String appName = combo.getText();
if (null != appName && !appName.isEmpty()) {
boolean enablestart = true;
enablestart = false;
}
} else if (appName.equals(AnalyzerConstants.COMMON_EXECUTABLE_LABEL)) {
- Shell shell = WorkbenchUtil.getWorkbenchWindow().getShell();
- DeviceExplorerDialog dialog = new DeviceExplorerDialog(shell, false);
- dialog.setPermissionFilter("111");
- Object result = dialog.open();
- if (result != null) {
- @SuppressWarnings("unchecked")
- List<FileEntry> files = (List<FileEntry>) result;
- if (files.size() > 0) {
- String execpath = files.get(0).getFullPath();
- selectedPkg.getMainApp().setInfo(AppInfo.PROPERTY.EXEC.index,
- execpath);
- } else {
- enablestart = false;
- }
- } else {
- enablestart = false;
- }
+ // TODO : implement to select common executable
}
Global.setCurrentApplication(selectedPkg);
}
if (enablestart && null != Global.getCurrentDeviceInfo()) {
+ // AnalyzerUtil
+ // .setRecordState(RecordStateSourceProvider.RECORD_READY);
AnalyzerManager.setRunningState(false);
+ // startButton.setButtonEnabled(true);
setStartButtonState(true);
setRepalyButtonEnable(true);
}
import org.tizen.dynamicanalyzer.swap.platform.ui.InputRow;
import org.tizen.dynamicanalyzer.swap.platform.ui.LoadSettingDialog;
import org.tizen.dynamicanalyzer.swap.platform.ui.SaveSettingDialog;
-import org.tizen.dynamicanalyzer.ui.common.explorer.DeviceExplorerDialog;
-import org.tizen.dynamicanalyzer.ui.common.explorer.FileExplorerDialog;
+import org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer.DeviceExplorerDilaog;
+import org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer.FileExplorerDialog;
import org.tizen.dynamicanalyzer.ui.toolbar.ConfigureManager;
import org.tizen.dynamicanalyzer.util.CommonUtil;
import org.tizen.dynamicanalyzer.util.Logger;
@Override
public void handleClickEvent(DACustomButton button) {
- DeviceExplorerDialog dialog = new DeviceExplorerDialog(getShell(), true);
+ DeviceExplorerDilaog dialog = new DeviceExplorerDilaog(getShell());
// dialog.setFilter(".so");
Object result = dialog.open();
if (result != null) {
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
-import org.tizen.dynamicanalyzer.common.Global;
import org.tizen.dynamicanalyzer.communicator.DACommunicator;
import org.tizen.dynamicanalyzer.nl.AnalyzerLabels;
import org.tizen.dynamicanalyzer.nl.ConfigureLabels;
shell.open();
return true;
}
-
- private void createBinarySettingPage() {
- DABaseComposite binarySettings = new SettingDialogBinarySettingsPage(
- tabView.getContentComposite(), SWT.NONE);
- tabView.addView(binarySettings, false);
-
-
- // binarySettings tab is selected, the close button will be shown.
- // ok and cancel button is hidden
- binarySettings.addListener(SWT.Show, new Listener() {
-
- @Override
- public void handleEvent(Event event) {
- Logger.debug("binary settings show");
- cancelButton.setText(WidgetLabels.CLOSE);
- FormData data = (FormData) okButton.getLayoutData();
- data.width = 0;
-
- buttonContentsComp.layout();
- }
- });
-
- binarySettings.addListener(SWT.Hide, new Listener() {
-
- @Override
- public void handleEvent(Event event) {
- Logger.debug("binary settings hide");
- cancelButton.setText(WidgetLabels.CANCEL);
- FormData data = (FormData) okButton.getLayoutData();
- data.width = 100;
-
- buttonContentsComp.layout();
- }
- });
- }
private ShellListener shellListener = new ShellListener() {
import org.tizen.dynamicanalyzer.swap.platform.ui.InputRow;
import org.tizen.dynamicanalyzer.swap.platform.ui.LoadSettingDialog;
import org.tizen.dynamicanalyzer.swap.platform.ui.SaveSettingDialog;
-import org.tizen.dynamicanalyzer.ui.common.explorer.DeviceExplorerDialog;
-import org.tizen.dynamicanalyzer.ui.common.explorer.FileExplorerDialog;
+import org.tizen.dynamicanalyzer.swap.platform.ui.DeviceExplorer.DeviceExplorerDilaog;
+import org.tizen.dynamicanalyzer.swap.platform.ui.FileExplorer.FileExplorerDialog;
import org.tizen.dynamicanalyzer.util.CommonUtil;
import org.tizen.dynamicanalyzer.util.Logger;
import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
@Override
public void handleClickEvent(DACustomButton button) {
- DeviceExplorerDialog dialog = new DeviceExplorerDialog(getShell(), true);
+ DeviceExplorerDilaog dialog = new DeviceExplorerDilaog(getShell());
// dialog.setFilter(".so");
Object result = dialog.open();
if (result != null) {
return num;
}
+ public static void printHexdecimal(long value) {
+ String output = String.format("%x", value);
+ System.out.print(output);
+ }
+
public static String toHexdecimal(Object value) {
String retStr = null;
if (value instanceof Long) {
* 2.1.58
-- Optimize the thread analysis
-- Optimize the function profiling
-- Optimize the file analysis
-- Update the UX of setting dialog
-- Fix Bug : Some apps are not launched
-== JuYoung Kim <j0.kim@samsung.com> 2014-11-03
-* 2.1.58
- Fix Bug : screenshot periodically in Setting Dialog
== Heeyoung Hwang <heeyoung1008.hwang@samsung.com> 2014-10-28
* 2.1.57
Source:dynamic-analyzer
-Version:2.1.59
+Version:2.1.58
Maintainer:Jaewon Lim <jaewon81.lim@samsung.com>, Juyoung Kim <j0.kim@samsung.com>
Package:dynamic-analyzer-product