// if new event is put from swap, update table
List<FileEvent> events = manager.getApiDB().selectAPITable(
selectedData.getFilePath(), selectedData.getPid(),
- selectedData.getTid(), selectedData.isParentChart());
+ selectedData.getTid(),
+ selectedData.isParentChart());
if(events != null) {
if (tableComp.getTable().getItemCount() > 0
&& events.size() != tableComp.getTable().getItemCount()) {
private long fd = -1;
private long fileSize = 0;
- private List<FileEvent> statusList = new ArrayList<FileEvent>(); // only open, close event
-
- private boolean isOpenedFile = false;
- private boolean isLockedFile = false;
+ private boolean isTarget = false;
- private double fileOpenedTime = 0;
+ private List<FileEvent> statusList = new ArrayList<FileEvent>(); // only open, close event
public FileChart(String filePath) {
this.filePath = filePath;
this.fd = fd;
}
- public FileChart( int pid, int tid, long fd, String filePath, long fileSize) {
+ public FileChart(int pid, int tid, long fd, String filePath, long fileSize,
+ boolean isTarget) {
this.filePath = filePath;
this.pid = pid;
this.tid = tid;
this.fd = fd;
this.fileSize = fileSize;
+ this.isTarget = isTarget;
}
public void setItem(DAChartBoardItem item) {
continue;
}
double time = event.getTime() / TimelineConstants.MEGA_DOUBLE;
- String apiName = event.getApiName();
+ int id = event.getFdApiType();
+ String apiName = null;
+ if (event.isTarget()) {
+ apiName = event.getApiName();
+ } else {
+ switch (id) {
+ case LogCenterConstants.FD_API_TYPE_OPEN:
+ apiName = "open";
+ break;
+ case LogCenterConstants.FD_API_TYPE_CLOSE:
+ apiName = "close";
+ break;
+ default:
+ break;
+ }
+ }
Color color = ColorResources.FILE_OTHER_OPERATION;
if (event.getErrno() != 0) {
color = ColorResources.FILE_API_FAILED;
} else {
- int id = event.getFdApiType();
if( id == LogCenterConstants.FD_API_TYPE_READ_START
|| id == LogCenterConstants.FD_API_TYPE_READ_END
|| id == LogCenterConstants.FD_API_TYPE_WRITE_START
DAChartSeriesItem seriesItem = new DAChartSeriesItem(time,
DAChartSeriesItem.SERIES_AREA_BAR, color, color, apiName);
accessSeries.addSeriesItem(seriesItem);
-
}
chart.redraw();
}
break;
}
}
+
chart.redraw();
}
case LogCenterConstants.FD_API_TYPE_OPEN:
if(openNum > 0){ // duplicated open
// the file has been already opened by other process or thread
+ openNum++;
statusSeries.addSeriesItem(new DAChartSeriesItem(
time, DAChartSeriesItem.SERIES_AREA_START,
ColorResources.FILE_DUPLICATE_OPENED,
}else{
// the file has been opened by only one process or thread
openNum++;
- setFileOpenedTime(time);
statusSeries.addSeriesItem(new DAChartSeriesItem(
time, DAChartSeriesItem.SERIES_AREA_START,
ColorResources.FILE_OPENED,
statusList.add(event);
}
- public boolean isOpenedFile() {
- return isOpenedFile;
- }
-
- public void setOpenedFile(boolean isOpenedFile) {
- this.isOpenedFile = isOpenedFile;
- }
-
- public boolean isLockedFile() {
- return isLockedFile;
- }
-
- public void setLockedFile(boolean isLockedFile) {
- this.isLockedFile = isLockedFile;
- }
-
public int getPid() {
return pid;
}
public void setTid(int tid) {
this.tid = tid;
}
-
- public void setFileOpenedTime(double time) {
- this.fileOpenedTime = time;
- }
-
- public double getFileOpenedTime() {
- return fileOpenedTime;
- }
public long getFileSize() {
return fileSize;
public void setFd(long fd) {
this.fd = fd;
}
+
+ public void setTarget(boolean isTarget) {
+ this.isTarget = isTarget;
+ }
+
+ public boolean isTarget() {
+ return isTarget;
+ }
}
\ No newline at end of file
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
private List<FileChart> chartList = new ArrayList<FileChart>();
private FileDataManager fileChartManager = FileDataManager.getInstance();
- private Map<String, String> fileAccessorMap = new HashMap<String, String>();
private FileDataMaker dataMaker;
private FileApiDB apiDB;
FileChart parent = null;
FileChart child = null;
String filePath = null;
- String key = null;
List<FileEvent> eventList = dataMaker.getFileEventList();
if (eventList == null) {
}
for (FileEvent event : eventList) {
- // TODO need to think about what value could be a key
- key = createKey(event.getPid(), event.getTid());
- if (event.getFdApiType() == LogCenterConstants.FD_API_TYPE_OPEN) {
- if (fileAccessorMap.get(key) == null) {
- fileAccessorMap.put(key, event.getFilePath());
- }
- }
- if(fileAccessorMap.get(key) != null) {
- filePath = fileAccessorMap.get(key);
- }else {
- // The file has not opened
- return;
- }
+ filePath = event.getFilePath();
parent = getParentChart(filePath);
if (parent == null) {
parent = new FileChart(filePath);
parent.setFilePath(event.getFilePath());
child = new FileChart(event.getPid(), event.getTid(),
- event.getFdValue(), event.getFilePath(), event.getFileSize());
+ event.getFdValue(), event.getFilePath(),
+ event.getFileSize(), event.isTarget());
parent.addChild(child);
createChartItem(null, parent);
createChartItem(parent, child);
} else {
child = parent.getChildChart(event);
if (child == null) {
- child = new FileChart(event.getPid(),
- event.getTid(), event.getFdValue(), event.getFilePath(),
- event.getFileSize());
+ child = new FileChart(event.getPid(), event.getTid(),
+ event.getFdValue(), event.getFilePath(),
+ event.getFileSize(), event.isTarget());
parent.addChild(child);
createChartItem(parent, child);
chartList.add(child);
if (parent != null) { // child chart row
DAChartBoardItem parentItem = parent.getItem();
- item = new DAChartBoardItem(parentItem, "0x"//$NON-NLS-1$
- + Long.toHexString(fileChart.getPid())
- + "(PID)"
- + CommonConstants.NEW_LINE
- + Long.toHexString(fileChart.getTid()) + "(TID)");
+ StringBuffer title = new StringBuffer();
+ if(fileChart.isTarget()) {
+ title.append("Target"+ CommonConstants.NEW_LINE);
+ } else {
+ title.append("Non-Target"+ CommonConstants.NEW_LINE);
+ }
+ title.append(fileChart.getPid() + "(PID)"
+ + CommonConstants.NEW_LINE + fileChart.getTid() + "(TID)");
+ item = new DAChartBoardItem(parentItem, title.toString());
chart = item.getChart();
- // TODO change dentry to origin file path
item.setData(new FileSelectedData(fileChart.getFilePath(), fileChart.getPid(),
fileChart.getTid(), fileChart.getFd(), false));
initFileChart(chart, false);
+ fileName.substring(maxLen, maxLen*2 - 1) + "...";
}
item = new DAChartBoardItem(this, title);
- item.setData(new FileSelectedData(fileChart.getPid(), fileChart.getTid(),
- fileChart.getFd(), true,
- fileChart.getFilePath(), fileChart.getFileSize()));
+ item.setData(new FileSelectedData(fileChart.getFilePath(),
+ fileChart.getPid(), fileChart.getTid(), fileChart.getFd(),
+ fileChart.getFileSize(), true));
chart = item.getChart();
initFileChart(chart, true);
}
return null;
}
- private String createKey(int pid, int tid) {
- StringBuffer key = new StringBuffer(pid);
- key.append(":");
- key.append(tid);
- return key.toString();
- }
-
private List<FileStatus> getVisibleStatusList() {
return dataMaker.getFileStatusList();
}
private List<FileAccess> getVisibleAccessList() {
List<FileAccess> data = new ArrayList<FileAccess>();
- for (FileAccess access : dataMaker.getFileAccessList()) {
+ for(FileAccess access : dataMaker.getFileAccessList()) {
double startTime = Formatter.toLongTimeForDoubleTime(access
.getStartTime());
double endTime = Formatter.toLongTimeForDoubleTime(access
return data;
}
- // TODO change dentry to origin file path
public int[] getChartIndex(FileEvent event) {
FileChart data = null;
for (int i = 0; i < chartList.size(); i++) {
private long writeSize = 0;
private long totalUseTime = 0;
private int apiCount = 0;
- private int failedApiCount = 0;
-
+ private int failedApiCount = 0;
+
private FileDataManager fileChartManager = FileDataManager.getInstance();
-
+
private void init() {
fileName = AnalyzerLabels.EMPTY_STRING;
filePath = AnalyzerLabels.EMPTY_STRING;
return;
}
List<FileEvent> events = null;
- events = fileChartManager.getApiDB()
- .selectAPITable(selectData.getFilePath(),
- selectData.getPid(), selectData.getTid(), selectData.isParentChart());
- if(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(0).getFileSize();
apiCount = events.size();
}
- events = fileChartManager.getApiDB()
- .selectFailedAPI(selectData.getFilePath(),
- selectData.getPid(), selectData.getTid(), selectData.isParentChart());
- if(events != null) {
+ events = fileChartManager.getApiDB().selectFailedAPI(
+ selectData.getFilePath(), selectData.getPid(),
+ selectData.getTid(), selectData.getFdValue(),
+ selectData.isParentChart());
+ if (events != null) {
failedApiCount = events.size();
}
// TODO define What totalUseTime
// totalUseTime = (long) selectData.getFileTotalUseTime();
// readSize = selectData.getReadSize();
// writeSize = selectData.getWriteSize();
-
+
canvas.redraw();
}
+ TABLE_NAME + " where %s <= "
+ COLUMN.EVENT_TIME.getName() + " and "
+ COLUMN.EVENT_TIME.getName()
- + " <= %s" + " and "
- + COLUMN.TARGET.getName() + " = true";
+ + " <= %s";
+ //+ " and "
+ //+ COLUMN.TARGET.getName() + " = true";
private static final String SELECT_APIS_FOR_CHILD = "select "
+ selectAllColumn
}
public List<FileEvent> selectFailedAPI(String filePath, int pid, int tid,
- boolean isParentChart) {
+ long fd, boolean isParentChart) {
String query = String.format(SELECT_FAILED_APIS_FOR_CHAILD, filePath, pid, tid);
if (isParentChart) {
query = String
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
private FailedChecker failedChecker = null;
private int timeLineFileChartFDCount = 0;
- private List<FileStatus> fileStatusList = new ArrayList<FileStatus>();
- private List<FileAccess> fileAccessList = new ArrayList<FileAccess>();
+ private List<FileStatus> fileStatusList = Collections.synchronizedList(new ArrayList<FileStatus>());
+ private List<FileAccess> fileAccessList = Collections.synchronizedList(new ArrayList<FileAccess>());
+ //private List<FileStatus> fileStatusList = new ArrayList<FileStatus>();
+ //private List<FileAccess> fileAccessList = new ArrayList<FileAccess>();
private Map<String, String> fileAccessorMap = new HashMap<String, String>();
private Map<Long, Boolean> isFileLocking = new HashMap<Long, Boolean>();
long fileSize = input.getFileSize();
String arg = input.getArgs();
String returnVal = input.getReturn();
-
+
// check error
if (errNo != 0) {
switch (input.getFdApiType()) {
// for creating read/write end event with MSG_FUNCTION_EXIT
if (entryEvent == LogCenterConstants.FD_API_TYPE_READ_START
&& entryEvent == eventType) {
- DA_LOG.debug("===> exit eventType:" + profileData.getProbeSubType()
- + ", return:" + profileData.getReturn());
+ /*DA_LOG.debug("===> exit eventType:" + profileData.getProbeSubType()
+ + ", return:" + profileData.getReturn());*/
event = new FileEvent(seq, pid, tid, fd, filePath,
LogCenterConstants.FD_API_TYPE_READ_END, time, false);
+ addFileEvent(eventList, event);
} else if (entryEvent == LogCenterConstants.FD_API_TYPE_WRITE_START
&& entryEvent == eventType) {
- DA_LOG.debug("===> exit eventType:" + profileData.getProbeSubType()
- + ", return:" + profileData.getReturn());
+ /*DA_LOG.debug("===> exit eventType:" + profileData.getProbeSubType()
+ + ", return:" + profileData.getReturn());*/
event = new FileEvent(seq, pid, tid, fd, filePath,
LogCenterConstants.FD_API_TYPE_WRITE_END, time, false);
+ addFileEvent(eventList, event);
} // else, // no need end event for other event(open, close)
- addFileEvent(eventList, event);
}
}
}
String key = createKey(pid, tid, fd);
if(filePath == null || filePath.equals("")) {
filePath = getFilePath(key);
+ event.setFilePath(filePath);
}
+
+ DA_LOG.debug("==> entry eventType:" + apiType + ", fd:" + fd + ", filePath:" + filePath);
switch (apiType) {
case LogCenterConstants.FD_API_TYPE_OPEN:
addStatusData(new FileStatus(pid, tid, fd, filePath,
apiType, eventTime, errNo));
+ removeFileAccessor(key);
break;
case LogCenterConstants.FD_API_TYPE_READ_START:
FileAccess readAccess = new FileAccess(filePath, pid,
}// else, already exist
}
+ private void removeFileAccessor(String key) {
+ if(fileAccessorMap.get(key) != null) {
+ fileAccessorMap.remove(key);
+ }// else, already not exist
+ }
+
private String getFilePath(String key) {
String filePath = null;
if(fileAccessorMap.get(key) != null) {
this.isParentChart = isParentChart;
}
- public FileSelectedData(int pid, int tid, long fd,
- boolean isParentChart, String filePath, long fileSize) {
+ public FileSelectedData(String filePath, int pid, int tid, long fd,
+ long fileSize, boolean isParentChart) {
this.pid = pid;
this.tid = tid;
this.fdValue = fd;