import org.tizen.dynamicanalyzer.logparser.LogCenterConstants;
import org.tizen.dynamicanalyzer.nl.ThreadPageLabels;
import org.tizen.dynamicanalyzer.nl.TimelineChartLabels;
-import org.tizen.dynamicanalyzer.project.Project;
import org.tizen.dynamicanalyzer.resources.ColorResources;
import org.tizen.dynamicanalyzer.resources.FontResources;
import org.tizen.dynamicanalyzer.resources.ImageResources;
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.FileChartData;
import org.tizen.dynamicanalyzer.ui.summary.warning.WarningCase;
import org.tizen.dynamicanalyzer.ui.summary.warning.WarningData;
import org.tizen.dynamicanalyzer.ui.thread.ThreadPageData;
private List<ThreadPageSyncDataEvent> syncEventQueue = new ArrayList<ThreadPageSyncDataEvent>();
private List<ThreadPageThreadDataEvent> eventQueue = new ArrayList<ThreadPageThreadDataEvent>();
private List<ThreadPageThreadDataEvent> callEventQueue = new ArrayList<ThreadPageThreadDataEvent>();
+ private HashMap<String, Integer> threadAttrMap = new HashMap<String, Integer>();
private HashMap<String, Integer> syncAttrMap = new HashMap<String, Integer>();
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);
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);
String apiName = input.getApiName();
long errorNum = input.getErrno();
ThreadPageThreadDataEvent event;
+ String pthreadId = Long.toString(input.getPThreadId());
switch (apiType) {
case LogCenterConstants.THREAD_API_TYPE_NEW:
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,
pushEvent(event);
break;
case LogCenterConstants.THREAD_API_TYPE_START:
+ if (apiName.equals(ThreadPageLabels.THREAD_API_PTHREAD_CREATE)) {
+ checkThreadType(input.getArgs(), pthreadId);
+ }
event = new ThreadPageThreadDataEvent(
ThreadPageThreadDataEvent.TYPE_API,
LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid,
apiName, errorNum, input);
- event.setCallID(Long.toString(input.getPThreadId()));
+ event.setCallID(pthreadId);
pushEvent(event);
pushCallEvent(event);
ThreadPageThreadDataEvent.TYPE_EVENT,
LogCenterConstants.THREAD_TYPE_PTHREAD, apiType, time, tid,
ThreadPageLabels.THREAD_CHART_ITEM_EXITED, errorNum, input);
- event.setCallID(Long.toString(input.getPThreadId()));
+ event.setCallID(pthreadId);
pushEvent(event);
pushCallEvent(event);
if (true == isJoinableThread(tid)) {
}
break;
case LogCenterConstants.THREAD_API_TYPE_INTERNAL_START:
+ Integer threadAttrTypeInt = threadAttrMap.get(pthreadId);
+ String threadAttrType;
+
+ if (null != threadAttrTypeInt) {
+ threadAttrType = getAttrTypeByTypeInt(threadAttrTypeInt);
+ } else {
+ threadAttrType = ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE;
+ }
+
ThreadPageThreadData data = new ThreadPageThreadData(
ThreadPageLabels.THREAD_ITEM_TYPE_PTHREAD, pid, tid,
- ThreadPageLabels.THREAD_ATTR_TYPE_JOINABLE);
+ threadAttrType);
pushRow(data);
event = new ThreadPageThreadDataEvent(
ThreadPageThreadDataEvent.TYPE_EVENT,
case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
if (apiName
.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_INIT)) {
- syncAttrMap.put(syncData.getArgs(), -1);
+ syncAttrMap.put(syncData.getArgs(),
+ ThreadPageSyncDataManager.PTHREAD_MUTEX_NORMAL);
} else if (apiName
.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_SETTYPE)) {
checkMutexAttrType(syncData.getArgs());
case LogCenterConstants.SYNC_TYPE_PTHREAD_COND_VARIABLE:
if (apiName
.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_INIT)) {
- syncAttrMap.put(input.getArgs(), -1);
+ syncAttrMap.put(input.getArgs(),
+ ThreadPageSyncDataManager.PTHREAD_MUTEX_NORMAL);
} else if (apiName
.equals(ThreadPageLabels.SYNC_API_PTHREAD_MUTEXATTR_SETTYPE)) {
checkMutexAttrType(input.getArgs());
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);
+ }
+ }
+
private void checkMutexAttrType(String input) {
String[] temp = input.split(",");
if (temp.length != 2) {
return;
}
String obj = temp[0];
- String type = temp[1];
+ String type = temp[1].trim();
- if (syncAttrMap.get(obj) == -1) {
- syncAttrMap.put(obj, Integer.valueOf(type.trim()));
+ if (null != syncAttrMap.get(obj)) {
+ syncAttrMap.put(obj, Integer.valueOf(type));
}
}
return;
}
String obj = temp[0];
- String attrObj = temp[1];
+ String attrObj = temp[1].trim();
Integer attrType = syncAttrMap.get(attrObj);
if (attrType != null) {
syncAttrMap.put(obj, attrType);
- syncAttrMap.remove(attrObj);
}
}