LEAK_VIEW_NAME=API
LEAK_VIEW_PID=PID
LEAK_VIEW_RETURN=Return
-LEAK_VIEW_TIME=Time
+LEAK_VIEW_TIME=Alloc Time
LEAK_VIEW_TYPE=Category
SUMMARY_PAGE_CALLSTACK_TITLE=Callstack
for (int i = 0; i < size; i++) {
List<Object> iLeakData = leakDataList.get(i);
- int seqNum = (Integer) iLeakData.get(LeakDataDBTable.COLUMN_INDEX_SEQUENCE_NUMBER);
- long allocValue = (Long) iLeakData.get(LeakDataDBTable.COLUMN_INDEX_ALLOCATED_VALUE);
- int pid = (Integer) iLeakData.get(LeakDataDBTable.COLUMN_INDEX_PROCESS_ID);
+ int seqNum = (Integer) iLeakData.get(LeakDataDBTable.COLUMN.SEQUENCE_NUMBER.index);
+ long allocValue = (Long) iLeakData.get(LeakDataDBTable.COLUMN.ALLOCATED_VALUE.index);
+ int pid = (Integer) iLeakData.get(LeakDataDBTable.COLUMN.PROCESS_ID.index);
CurrentLeakData newLeakData = new CurrentLeakData(seqNum, allocValue, pid);
leakDetector.addCurrentLeakData(newLeakData);
}
public class FreeDataDBTable extends DBTable {
private static final String TABLENAME = "FreeData";
- public static final String SEQUENCE_NUMBER = DBConstants.DBCOLUMN_SEQUENCE_NUMBER;
- public static final String PROCESS_ID = DBConstants.DBCOLUMN_PROCESS_ID;
- public static final String MESSAGE_ID = "MESSAGE_ID";
- public static final String FREE_TIME = "FREE_TIME";
- public static final String ALLOCATED_ADDRESS = "ALLOCATED_ADDRESS";
-
- public final static int COLUMN_INDEX_SEQUENCE_NUMBER = 0;
- public final static int COLUMN_INDEX_PROCESS_ID = 1;
- public final static int COLUMN_INDEX_FREE_TIME = 2;
- public final static int COLUMN_INDEX_MESSAGE_ID = 3;
- public final static int COLUMN_INDEX_ALLOCATED_ADDRESS = 4;
+ public enum COLUMN {
+ SEQUENCE_NUMBER(0, DBConstants.DBCOLUMN_SEQUENCE_NUMBER),
+ PROCESS_ID(1, DBConstants.DBCOLUMN_PROCESS_ID),
+ MESSAGE_ID(2, "MESSAGE_ID"),
+ FREE_TIME(3, "FREE_TIME"),
+ ALLOCATED_ADDRESS(4, "ALLOCATED_ADDRESS");
+
+ public final int index;
+ public final String name;
+
+ COLUMN(int index, String name) {
+ this.index = index;
+ this.name = name;
+ }
+ }
@Override
public String getTableName() {
}
public FreeDataDBTable() {
- addColumn(new DBColumn(SEQUENCE_NUMBER, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(PROCESS_ID, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(MESSAGE_ID, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(FREE_TIME, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); // default:0
- addColumn(new DBColumn(ALLOCATED_ADDRESS, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
+ addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.PRIMARY_KEY,
+ DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.PROCESS_ID.name, DBConstants.NOT_NULL,
+ DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.MESSAGE_ID.name, DBConstants.NOT_NULL,
+ DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.FREE_TIME.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); // default:0
+ addColumn(new DBColumn(COLUMN.ALLOCATED_ADDRESS.name, DBConstants.NOT_NULL,
+ DBConstants.DBTYPE_LONG));
+ setIndexColumn(COLUMN.PROCESS_ID.index);
+ setIndexColumn(COLUMN.FREE_TIME.index);
}
@Override
isPrepared = false;
} else {
try {
- prep.setInt(1, (Integer) (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.setLong(5, (Long) (rowData.get(4)));
+ prep.setInt(1, (Integer) (rowData.get(COLUMN.SEQUENCE_NUMBER.index)));
+ prep.setInt(2, (Integer) (rowData.get(COLUMN.PROCESS_ID.index)));
+ prep.setInt(3, (Integer) (rowData.get(COLUMN.MESSAGE_ID.index)));
+ prep.setLong(4, (Long) (rowData.get(COLUMN.FREE_TIME.index)));
+ prep.setLong(5, (Long) (rowData.get(COLUMN.ALLOCATED_ADDRESS.index)));
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
public class LeakDataDBTable extends DBTable {
private static final String TABLENAME = "LeakData";
- public static final String SEQUENCE_NUMBER = DBConstants.DBCOLUMN_SEQUENCE_NUMBER;
- public static final String ALLOCATED_VALUE = "ALLOCATED_VALUE";
- public static final String PROCESS_ID = DBConstants.DBCOLUMN_PROCESS_ID;
-
- public final static int COLUMN_INDEX_SEQUENCE_NUMBER = 0;
- public final static int COLUMN_INDEX_ALLOCATED_VALUE = 0;
- public final static int COLUMN_INDEX_PROCESS_ID = 0;
+ public enum COLUMN {
+ SEQUENCE_NUMBER(0, DBConstants.DBCOLUMN_SEQUENCE_NUMBER),
+ ALLOCATED_VALUE(1, "ALLOCATED_VALUE"),
+ PROCESS_ID(2, DBConstants.DBCOLUMN_PROCESS_ID);
+
+ public final int index;
+ public final String name;
+
+ COLUMN(int index, String name) {
+ this.index = index;
+ this.name = name;
+ }
+ }
public LeakDataDBTable() {
- addColumn(new DBColumn(SEQUENCE_NUMBER, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(ALLOCATED_VALUE, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(PROCESS_ID, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.PRIMARY_KEY,
+ DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.ALLOCATED_VALUE.name, DBConstants.NOT_NULL,
+ DBConstants.DBTYPE_LONG));
+ addColumn(new DBColumn(COLUMN.PROCESS_ID.name, DBConstants.NOT_NULL,
+ DBConstants.DBTYPE_INT4));
}
@Override
isPrepared = false;
} else {
try {
- prep.setInt(1, (Integer) (rowData.get(0)));
- prep.setLong(2, (Long) (rowData.get(1)));
- prep.setInt(3, (Integer) (rowData.get(2)));
+ prep.setInt(1, (Integer) (rowData.get(COLUMN.SEQUENCE_NUMBER.index)));
+ prep.setLong(2, (Long) (rowData.get(COLUMN.ALLOCATED_VALUE.index)));
+ prep.setInt(3, (Integer) (rowData.get(COLUMN.PROCESS_ID.index)));
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;
public class LeakDataMaker {
private static final String query_withSeq = "where %s = %s";
private static final String query_withSeqList = "where %s in (";
- private static final String query_addOrderby = " order by %s";
private static final String query_withTimeAndPid = "where %s = %s and %s >= %s and %s <= %s order by %s";
private ArrayList<List<Object>> memoryAllocDataList;
}
public List<List<Object>> getAllocationDataFromDB(int seq) {
- String where = String.format(query_withSeq, MemoryAllocationDataDBTable.SEQUENCE_NUMBER,
- seq);
+ String where = String.format(query_withSeq,
+ MemoryAllocationDataDBTable.COLUMN.SEQUENCE_NUMBER.name, seq);
DBTable table = SummaryDataManager.getInstance().getMemoryAllocationDataDBTable();
List<String> columns = new ArrayList<String>();
- columns.add(MemoryAllocationDataDBTable.SEQUENCE_NUMBER);
- columns.add(MemoryAllocationDataDBTable.PROCESS_ID);
- columns.add(MemoryAllocationDataDBTable.API_ID);
- columns.add(MemoryAllocationDataDBTable.API_TYPE);
- columns.add(MemoryAllocationDataDBTable.ALLOCATED_ADDRESS);
- columns.add(MemoryAllocationDataDBTable.ALLOCATED_TIME);
- columns.add(MemoryAllocationDataDBTable.CALLER_PC_ADDRESS);
- columns.add(MemoryAllocationDataDBTable.ARGUMENT);
- columns.add(MemoryAllocationDataDBTable.RETURN_VALUE);
- columns.add(MemoryAllocationDataDBTable.CALLER_LIBRARY_NAME);
- columns.add(MemoryAllocationDataDBTable.MESSAGE_ID);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.SEQUENCE_NUMBER.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.PROCESS_ID.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.API_ID.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.API_TYPE.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.ALLOCATED_ADDRESS.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.ALLOCATED_TIME.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.CALLER_PC_ADDRESS.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.ARGUMENT.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.RETURN_VALUE.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.CALLER_LIBRARY_NAME.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.MESSAGE_ID.name);
return table.selectData(columns, where);
}
public List<List<Object>> getLeakDataFromDB() {
DBTable table = SummaryDataManager.getInstance().getLeakDataDBTable();
List<String> columns = new ArrayList<String>();
- columns.add(LeakDataDBTable.SEQUENCE_NUMBER);
- columns.add(LeakDataDBTable.ALLOCATED_VALUE);
- columns.add(LeakDataDBTable.PROCESS_ID);
+ columns.add(LeakDataDBTable.COLUMN.SEQUENCE_NUMBER.name);
+ columns.add(LeakDataDBTable.COLUMN.ALLOCATED_VALUE.name);
+ columns.add(LeakDataDBTable.COLUMN.PROCESS_ID.name);
return table.selectData(columns, null);
}
public List<List<Object>> getLeakDataWithSeq(List<Integer> leakSequenceNumbers) {
String where = String
- .format(query_withSeqList, MemoryAllocationDataDBTable.SEQUENCE_NUMBER);
- String orderby = String
- .format(query_addOrderby, MemoryAllocationDataDBTable.ALLOCATED_TIME);
+ .format(query_withSeqList, MemoryAllocationDataDBTable.COLUMN.SEQUENCE_NUMBER.name);
int size = leakSequenceNumbers.size();
for (int i = 0; i < size - 1; i++) {
where += String.valueOf(leakSequenceNumbers.get(i)) + ", ";
}
where += String.valueOf(leakSequenceNumbers.get(size - 1)) + ")";
- where += orderby;
DBTable table = SummaryDataManager.getInstance().getMemoryAllocationDataDBTable();
List<String> columns = new ArrayList<String>();
- columns.add(MemoryAllocationDataDBTable.SEQUENCE_NUMBER);
- columns.add(MemoryAllocationDataDBTable.PROCESS_ID);
- columns.add(MemoryAllocationDataDBTable.API_ID);
- columns.add(MemoryAllocationDataDBTable.API_TYPE);
- columns.add(MemoryAllocationDataDBTable.ALLOCATED_ADDRESS);
- columns.add(MemoryAllocationDataDBTable.ALLOCATED_TIME);
- columns.add(MemoryAllocationDataDBTable.CALLER_PC_ADDRESS);
- columns.add(MemoryAllocationDataDBTable.ARGUMENT);
- columns.add(MemoryAllocationDataDBTable.RETURN_VALUE);
- columns.add(MemoryAllocationDataDBTable.CALLER_LIBRARY_NAME);
- columns.add(MemoryAllocationDataDBTable.MESSAGE_ID);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.SEQUENCE_NUMBER.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.PROCESS_ID.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.API_ID.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.API_TYPE.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.ALLOCATED_ADDRESS.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.ALLOCATED_TIME.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.CALLER_PC_ADDRESS.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.ARGUMENT.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.RETURN_VALUE.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.CALLER_LIBRARY_NAME.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.MESSAGE_ID.name);
return table.selectData(columns, where);
}
for (int j = 0; j < allocDataSize; j++) {
List<Object> iAllocData = allocData.get(j);
long allocatedTime = (Long) iAllocData
- .get(MemoryAllocationDataDBTable.COLUMN_INDEX_ALLOCATED_TIME);
+ .get(MemoryAllocationDataDBTable.COLUMN.ALLOCATED_TIME.index);
if (allocatedTime <= freeTime) {
if (address == (Long) iAllocData
- .get(MemoryAllocationDataDBTable.COLUMN_INDEX_ALLOCATED_ADDRESS)) {
+ .get(MemoryAllocationDataDBTable.COLUMN.ALLOCATED_ADDRESS.index)) {
allocData.remove(j);
break;
}
private List<List<Object>> getAllocationDataWithPidFromDBForRange(Long startTime, Long endTime,
int pid) {
- String where = String.format(query_withTimeAndPid, MemoryAllocationDataDBTable.PROCESS_ID,
- Integer.valueOf(pid).toString(), MemoryAllocationDataDBTable.ALLOCATED_TIME,
- startTime.toString(), MemoryAllocationDataDBTable.ALLOCATED_TIME,
- endTime.toString(), MemoryAllocationDataDBTable.ALLOCATED_TIME);
+ String where = String.format(query_withTimeAndPid,
+ MemoryAllocationDataDBTable.COLUMN.PROCESS_ID.name,
+ Integer.valueOf(pid).toString(),
+ MemoryAllocationDataDBTable.COLUMN.ALLOCATED_TIME.name, startTime.toString(),
+ MemoryAllocationDataDBTable.COLUMN.ALLOCATED_TIME.name, endTime.toString(),
+ MemoryAllocationDataDBTable.COLUMN.ALLOCATED_TIME.name);
DBTable table = SummaryDataManager.getInstance().getMemoryAllocationDataDBTable();
List<String> columns = new ArrayList<String>();
- columns.add(MemoryAllocationDataDBTable.SEQUENCE_NUMBER);
- columns.add(MemoryAllocationDataDBTable.PROCESS_ID);
- columns.add(MemoryAllocationDataDBTable.API_ID);
- columns.add(MemoryAllocationDataDBTable.API_TYPE);
- columns.add(MemoryAllocationDataDBTable.ALLOCATED_ADDRESS);
- columns.add(MemoryAllocationDataDBTable.ALLOCATED_TIME);
- columns.add(MemoryAllocationDataDBTable.CALLER_PC_ADDRESS);
- columns.add(MemoryAllocationDataDBTable.ARGUMENT);
- columns.add(MemoryAllocationDataDBTable.RETURN_VALUE);
- columns.add(MemoryAllocationDataDBTable.CALLER_LIBRARY_NAME);
- columns.add(MemoryAllocationDataDBTable.MESSAGE_ID);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.SEQUENCE_NUMBER.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.PROCESS_ID.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.API_ID.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.API_TYPE.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.ALLOCATED_ADDRESS.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.ALLOCATED_TIME.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.CALLER_PC_ADDRESS.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.ARGUMENT.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.RETURN_VALUE.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.CALLER_LIBRARY_NAME.name);
+ columns.add(MemoryAllocationDataDBTable.COLUMN.MESSAGE_ID.name);
return table.selectData(columns, where);
}
private List<List<Object>> getFreeDataWithPidFromDBForRange(Long startTime, Long endTime,
int pid) {
- String where = String.format(query_withTimeAndPid, FreeDataDBTable.PROCESS_ID, Integer
- .valueOf(pid).toString(), FreeDataDBTable.FREE_TIME, startTime.toString(),
- FreeDataDBTable.FREE_TIME, endTime.toString(), FreeDataDBTable.FREE_TIME);
+ String where = String.format(query_withTimeAndPid, FreeDataDBTable.COLUMN.PROCESS_ID.name,
+ Integer.valueOf(pid).toString(), FreeDataDBTable.COLUMN.FREE_TIME.name,
+ startTime.toString(), FreeDataDBTable.COLUMN.FREE_TIME.name, endTime.toString(),
+ FreeDataDBTable.COLUMN.FREE_TIME.name);
DBTable table = SummaryDataManager.getInstance().getFreeDataDBTable();
List<String> columns = new ArrayList<String>();
- columns.add(FreeDataDBTable.PROCESS_ID);
- columns.add(FreeDataDBTable.FREE_TIME);
- columns.add(FreeDataDBTable.ALLOCATED_ADDRESS);
+ columns.add(FreeDataDBTable.COLUMN.PROCESS_ID.name);
+ columns.add(FreeDataDBTable.COLUMN.FREE_TIME.name);
+ columns.add(FreeDataDBTable.COLUMN.ALLOCATED_ADDRESS.name);
return table.selectData(columns, where);
}
int size = leakDataList.size();
for (int i = 0; i < size; i++) {
List<Object> iLeakData = leakDataList.get(i);
- int pid = (Integer) iLeakData.get(MemoryAllocationDataDBTable.COLUMN_INDEX_PROCESS_ID);
+ int pid = (Integer) iLeakData.get(MemoryAllocationDataDBTable.COLUMN.PROCESS_ID.index);
if (selectedPid != 0) {
if (selectedPid != pid) {
continue;
Logger.error("very strange case !!");
return null;
}
- // 2 : sequence number
- int seq = (Integer) leakData.get(MemoryAllocationDataDBTable.COLUMN_INDEX_SEQUENCE_NUMBER);
+ // 0 : sequence number - hidden column for sorting
+ int seq = (Integer) leakData.get(MemoryAllocationDataDBTable.COLUMN.SEQUENCE_NUMBER.index);
text.add(Integer.toString(seq));
data.add(seq);
-
- // 0 : column empty value for tree
- int apiId = (Integer) leakData.get(MemoryAllocationDataDBTable.COLUMN_INDEX_API_ID);
+ // 1 : column empty value for tree
+ int apiId = (Integer) leakData.get(MemoryAllocationDataDBTable.COLUMN.API_ID.index);
String apiName = FunctionNameManager.getFunctionName(apiId);
text.add(apiName);
data.add(apiName);
- // 1 : pid
- int pid = (Integer) leakData.get(MemoryAllocationDataDBTable.COLUMN_INDEX_PROCESS_ID);
+ // 2 : pid
+ int pid = (Integer) leakData.get(MemoryAllocationDataDBTable.COLUMN.PROCESS_ID.index);
text.add(Integer.toString(pid));
data.add(pid);
-
// 3 : message id
- int id = (Integer) leakData.get(MemoryAllocationDataDBTable.COLUMN_INDEX_MESSAGE_ID);
+ int id = (Integer) leakData.get(MemoryAllocationDataDBTable.COLUMN.MESSAGE_ID.index);
String type = LogDataFactory.getLogFormatById(id).getName();
text.add(type);
data.add(type);
// 4 : allocated time
- long time = (Long) leakData.get(MemoryAllocationDataDBTable.COLUMN_INDEX_ALLOCATED_TIME);
+ long time = (Long) leakData.get(MemoryAllocationDataDBTable.COLUMN.ALLOCATED_TIME.index);
data.add(Long.valueOf(time));
try {
text.add(Formatter.toTimeFormat(time));
tableData.setObject(apiName);
// 5 : arguments
- String args = (String) leakData.get(MemoryAllocationDataDBTable.COLUMN_INDEX_ARGUMENT);
+ String args = (String) leakData.get(MemoryAllocationDataDBTable.COLUMN.ARGUMENT.index);
text.add(args);
data.add(args);
// 6 : return value
String retValue = (String) leakData
- .get(MemoryAllocationDataDBTable.COLUMN_INDEX_RETURN_VALUE);
+ .get(MemoryAllocationDataDBTable.COLUMN.RETURN_VALUE.index);
text.add(retValue);
data.add(retValue);
// 7 : library name
String libName = (String) leakData
- .get(MemoryAllocationDataDBTable.COLUMN_INDEX_CALLER_LIBRARY_NAME);
+ .get(MemoryAllocationDataDBTable.COLUMN.CALLER_LIBRARY_NAME.index);
if (libName == null || libName.isEmpty()) {
// TODO : replace another one ??
libName = "unknown";
text.add(libName);
data.add(libName);
// 8 : for ToolTip Listener
- data.add((Long) leakData.get(MemoryAllocationDataDBTable.COLUMN_INDEX_ALLOCATED_ADDRESS));
+ data.add((Long) leakData.get(MemoryAllocationDataDBTable.COLUMN.ALLOCATED_ADDRESS.index));
// 9 : caller pc address
long callerPcAddr = (Long) leakData
- .get(MemoryAllocationDataDBTable.COLUMN_INDEX_CALLER_PC_ADDRESS);
+ .get(MemoryAllocationDataDBTable.COLUMN.CALLER_PC_ADDRESS.index);
data.add(callerPcAddr);
tableData.getData().addAll(data);
}
List<Object> idata = leakData.get(0);
// 0 : column empty value for tree
- int apiId = (Integer) idata.get(MemoryAllocationDataDBTable.COLUMN_INDEX_API_ID);
+ int apiId = (Integer) idata.get(MemoryAllocationDataDBTable.COLUMN.API_ID.index);
String apiName = FunctionNameManager.getFunctionName(apiId);
text.add(apiName);
data.add(apiName);
// 1 : pid
- int pid = (Integer) idata.get(MemoryAllocationDataDBTable.COLUMN_INDEX_PROCESS_ID);
+ int pid = (Integer) idata.get(MemoryAllocationDataDBTable.COLUMN.PROCESS_ID.index);
text.add(Integer.toString(pid));
data.add(pid);
// 2 : sequence number
text.add(Integer.toString(seq));
data.add(seq);
// 3 : message id
- int id = (Integer) idata.get(MemoryAllocationDataDBTable.COLUMN_INDEX_MESSAGE_ID);
+ int id = (Integer) idata.get(MemoryAllocationDataDBTable.COLUMN.MESSAGE_ID.index);
String type = LogDataFactory.getLogFormatById(id).getName();
text.add(type);
data.add(type);
// 4 : allocated time
- long time = (Long) idata.get(MemoryAllocationDataDBTable.COLUMN_INDEX_ALLOCATED_TIME);
+ long time = (Long) idata.get(MemoryAllocationDataDBTable.COLUMN.ALLOCATED_TIME.index);
data.add(Long.valueOf(time));
try {
text.add(Formatter.toTimeFormat(time));
tableData.setObject(apiName);
// 5 : arguments
- String args = (String) idata.get(MemoryAllocationDataDBTable.COLUMN_INDEX_ARGUMENT);
+ String args = (String) idata.get(MemoryAllocationDataDBTable.COLUMN.ARGUMENT.index);
text.add(args);
data.add(args);
// 6 : return value
- String retValue = (String) idata.get(MemoryAllocationDataDBTable.COLUMN_INDEX_RETURN_VALUE);
+ String retValue = (String) idata.get(MemoryAllocationDataDBTable.COLUMN.RETURN_VALUE.index);
text.add(retValue);
data.add(retValue);
// 7 : library name
String libName = (String) idata
- .get(MemoryAllocationDataDBTable.COLUMN_INDEX_CALLER_LIBRARY_NAME);
+ .get(MemoryAllocationDataDBTable.COLUMN.CALLER_LIBRARY_NAME.index);
if (libName == null || libName.isEmpty()) {
// TODO : replace another one ??
libName = "unknown";
text.add(libName);
data.add(libName);
// 8 : for ToolTip Listener
- data.add((Long) idata.get(MemoryAllocationDataDBTable.COLUMN_INDEX_ALLOCATED_ADDRESS));
+ data.add((Long) idata.get(MemoryAllocationDataDBTable.COLUMN.ALLOCATED_ADDRESS.index));
// 9 : caller pc address
long callerPcAddr = (Long) idata
- .get(MemoryAllocationDataDBTable.COLUMN_INDEX_CALLER_PC_ADDRESS);
+ .get(MemoryAllocationDataDBTable.COLUMN.CALLER_PC_ADDRESS.index);
data.add(callerPcAddr);
tableData.getData().addAll(data);
SummaryLabels.LEAK_VIEW_TYPE, SummaryLabels.LEAK_VIEW_TIME,
SummaryLabels.LEAK_VIEW_FILE_PARAMETER,
SummaryLabels.LEAK_VIEW_RETURN, AnalyzerLabels.TABLE_COLUMN_LIBNAME };
- protected int[] columnSizes = { 25, 150, 45, 60, 60, 100, 70, 200 };
+ protected int[] columnSizes = { 25, 150, 45, 65, 70, 100, 70, 200 };
protected boolean[] columnVisibility = { false, true, true, true, true,
true, true, true };
protected int[] sortTypes = { AnalyzerConstants.SORT_TYPE_NUM,
public class MemoryAllocationDataDBTable extends DBTable {
private static final String TABLENAME = "MemoryAllocationData";
- public static final String SEQUENCE_NUMBER = DBConstants.DBCOLUMN_SEQUENCE_NUMBER;
- public static final String PROCESS_ID = DBConstants.DBCOLUMN_PROCESS_ID;
- public static final String API_ID = "API_ID";
- public static final String API_TYPE = "API_TYPE";
- public static final String ALLOCATED_ADDRESS = "ALLOCATED_ADDRESS";
- public static final String ALLOCATED_TIME = "ALLOCATED_TIME";
- public static final String CALLER_PC_ADDRESS = DBConstants.DBCOLUMN_CALLER_PC_ADDRESS;
- public static final String ARGUMENT = DBConstants.DBCOLUMN_ARGUMENT;
- public static final String RETURN_VALUE = DBConstants.DBCOLUMN_RETURN_VALUE;
- public static final String CALLER_LIBRARY_NAME = DBConstants.DBCOLUMN_CALLER_LIBRARY_NAME;
- public static final String MESSAGE_ID = "MESSAGE_ID";
- public static final String THREAD_ID = DBConstants.DBCOLUMN_THREAD_ID;
- public static final String ALLOCATED_MEMORY_SIZE = "ALLOCATED_MEMORY_SIZE";
-// public static final String MEMORY_ALLOCATION_KEY = "Key";
-// public static final String MEMORY_ALLOCATION_PARENT_KEY = "parentKey";
-
- public final static int COLUMN_INDEX_SEQUENCE_NUMBER = 0;
- public final static int COLUMN_INDEX_PROCESS_ID = 1;
- public final static int COLUMN_INDEX_API_ID = 2;
- public final static int COLUMN_INDEX_API_TYPE = 3;
- public final static int COLUMN_INDEX_ALLOCATED_ADDRESS = 4;
- public final static int COLUMN_INDEX_ALLOCATED_TIME = 5;
- public final static int COLUMN_INDEX_CALLER_PC_ADDRESS = 6;
- public final static int COLUMN_INDEX_ARGUMENT = 7;
- public final static int COLUMN_INDEX_RETURN_VALUE = 8;
- public final static int COLUMN_INDEX_CALLER_LIBRARY_NAME = 9;
- public final static int COLUMN_INDEX_MESSAGE_ID = 10;
- public final static int COLUMN_INDEX_THREAD_ID = 11;
- public final static int COLUMN_INDEX_ALLOCATED_MEMORY_SIZE = 12;
-// public final static int COLUMN_INDEX_MEMORY_ALLOCATION_KEY = 13;
-// public final static int COLUMN_INDEX_MEMORY_ALLOCATION_PARENT_KEY = 14;
+ public enum COLUMN {
+ SEQUENCE_NUMBER(0, DBConstants.DBCOLUMN_SEQUENCE_NUMBER),
+ PROCESS_ID(1, DBConstants.DBCOLUMN_PROCESS_ID),
+ API_ID(2, "API_ID"),
+ API_TYPE(3, "API_TYPE"),
+ ALLOCATED_ADDRESS(4, "ALLOCATED_ADDRESS"),
+ ALLOCATED_TIME(5, "ALLOCATED_TIME"),
+ CALLER_PC_ADDRESS(6, DBConstants.DBCOLUMN_CALLER_PC_ADDRESS),
+ ARGUMENT(7, DBConstants.DBCOLUMN_ARGUMENT),
+ RETURN_VALUE(8, DBConstants.DBCOLUMN_RETURN_VALUE),
+ CALLER_LIBRARY_NAME(9, DBConstants.DBCOLUMN_CALLER_LIBRARY_NAME),
+ MESSAGE_ID(10, "MESSAGE_ID"),
+ THREAD_ID(11, DBConstants.DBCOLUMN_THREAD_ID),
+ ALLOCATED_MEMORY_SIZE(12, "ALLOCATED_MEMORY_SIZE");
+ // MEMORY_ALLOCATION_KEY(13, "MEMORY_ALLOCATION_KEY"),
+ // MEMORY_ALLOCATION_PARENT_KEY(14, "MEMORY_ALLOCATION_PARENT_KEY");
+
+ public final int index;
+ public final String name;
+
+ COLUMN(int index, String name) {
+ this.index = index;
+ this.name = name;
+ }
+ }
@Override
public String getTableName() {
}
public MemoryAllocationDataDBTable() {
- addColumn(new DBColumn(SEQUENCE_NUMBER, DBConstants.PRIMARY_KEY, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(PROCESS_ID, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(API_ID, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(API_TYPE, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(ALLOCATED_ADDRESS, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG)); // default:-1
- addColumn(new DBColumn(ALLOCATED_TIME, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(CALLER_PC_ADDRESS, DBConstants.EMPTY, DBConstants.DBTYPE_LONG));
- addColumn(new DBColumn(ARGUMENT, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR,
+ addColumn(new DBColumn(COLUMN.SEQUENCE_NUMBER.name, DBConstants.PRIMARY_KEY,
+ DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.PROCESS_ID.name, DBConstants.NOT_NULL,
+ DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.API_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.ALLOCATED_ADDRESS.name, DBConstants.NOT_NULL,
+ DBConstants.DBTYPE_LONG)); // default:-1
+ addColumn(new DBColumn(COLUMN.ALLOCATED_TIME.name, DBConstants.NOT_NULL,
+ DBConstants.DBTYPE_LONG));
+ addColumn(new DBColumn(COLUMN.CALLER_PC_ADDRESS.name, DBConstants.EMPTY,
+ DBConstants.DBTYPE_LONG));
+ addColumn(new DBColumn(COLUMN.ARGUMENT.name, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR,
DALimit.FUNCTION_ARGUMENTS_VALUE_LENGTH));
- addColumn(new DBColumn(RETURN_VALUE, DBConstants.EMPTY, DBConstants.DBTYPE_VARCHAR,
- DALimit.FUNCTION_ARGUMENTS_FORMAT_LENGTH));
- addColumn(new DBColumn(CALLER_LIBRARY_NAME, DBConstants.NOT_NULL,
+ addColumn(new DBColumn(COLUMN.RETURN_VALUE.name, DBConstants.EMPTY,
+ DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_ARGUMENTS_FORMAT_LENGTH));
+ addColumn(new DBColumn(COLUMN.CALLER_LIBRARY_NAME.name, DBConstants.NOT_NULL,
DBConstants.DBTYPE_VARCHAR, DALimit.FUNCTION_NAME_LENGTH));
- addColumn(new DBColumn(MESSAGE_ID, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(THREAD_ID, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
- addColumn(new DBColumn(ALLOCATED_MEMORY_SIZE, DBConstants.NOT_NULL, DBConstants.DBTYPE_LONG));
-// addColumn(new DBColumn(MEMORY_ALLOCATION_KEY, DBConstants.NOT_NULL, DBConstants.INTEGER));
-// addColumn(new DBColumn(MEMORY_ALLOCATION_PARENT_KEY, DBConstants.NOT_NULL, DBConstants.INTEGER));
+ addColumn(new DBColumn(COLUMN.MESSAGE_ID.name, DBConstants.NOT_NULL,
+ DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.THREAD_ID.name, DBConstants.NOT_NULL, DBConstants.DBTYPE_INT4));
+ addColumn(new DBColumn(COLUMN.ALLOCATED_MEMORY_SIZE.name, DBConstants.NOT_NULL,
+ DBConstants.DBTYPE_LONG));
+ // addColumn(new DBColumn(COLUMN.MEMORY_ALLOCATION_KEY.name,
+ // DBConstants.NOT_NULL, DBConstants.INTEGER));
+ // addColumn(new DBColumn(COLUMN.MEMORY_ALLOCATION_PARENT_KEY.name,
+ // DBConstants.NOT_NULL, DBConstants.INTEGER));
+ setIndexColumn(COLUMN.PROCESS_ID.index);
+ setIndexColumn(COLUMN.ALLOCATED_ADDRESS.index);
}
@Override
isPrepared = false;
} else {
try {
- prep.setInt(1, (Integer) (rowData.get(0)));
- prep.setInt(2, (Integer) (rowData.get(1)));
- prep.setInt(3, (Integer) (rowData.get(2)));
- prep.setInt(4, (Integer) (rowData.get(3)));
- prep.setLong(5, (Long) (rowData.get(4)));
- prep.setLong(6, (Long) (rowData.get(5)));
- prep.setLong(7, (Long) (rowData.get(6)));
- prep.setString(8, (String) (rowData.get(7)));
- prep.setString(9, (String) (rowData.get(8)));
- prep.setString(10, (String) (rowData.get(9)));
- prep.setInt(11, (Integer) (rowData.get(10)));
- prep.setInt(12, (Integer) (rowData.get(11)));
- prep.setLong(13, (Long) (rowData.get(12)));
-// prep.setInt(13, (Integer) (rowData.get(13)));
-// prep.setInt(14, (Integer) (rowData.get(14)));
+ prep.setInt(1, (Integer) (rowData.get(COLUMN.SEQUENCE_NUMBER.index)));
+ prep.setInt(2, (Integer) (rowData.get(COLUMN.PROCESS_ID.index)));
+ prep.setInt(3, (Integer) (rowData.get(COLUMN.API_ID.index)));
+ prep.setInt(4, (Integer) (rowData.get(COLUMN.API_TYPE.index)));
+ prep.setLong(5, (Long) (rowData.get(COLUMN.ALLOCATED_ADDRESS.index)));
+ prep.setLong(6, (Long) (rowData.get(COLUMN.ALLOCATED_TIME.index)));
+ prep.setLong(7, (Long) (rowData.get(COLUMN.CALLER_PC_ADDRESS.index)));
+ prep.setString(8, (String) (rowData.get(COLUMN.ARGUMENT.index)));
+ prep.setString(9, (String) (rowData.get(COLUMN.RETURN_VALUE.index)));
+ prep.setString(10, (String) (rowData.get(COLUMN.CALLER_LIBRARY_NAME.index)));
+ prep.setInt(11, (Integer) (rowData.get(COLUMN.MESSAGE_ID.index)));
+ prep.setInt(12, (Integer) (rowData.get(COLUMN.THREAD_ID.index)));
+ prep.setLong(13, (Long) (rowData.get(COLUMN.ALLOCATED_MEMORY_SIZE.index)));
+// prep.setInt(13, (Integer) (rowData.get(COLUMN.MEMORY_ALLOCATION_KEY.index)));
+// prep.setInt(14, (Integer) (rowData.get(COLUMN.MEMORY_ALLOCATION_PARENT_KEY.index)));
} catch (SQLException e) {
e.printStackTrace();
isPrepared = false;