public static final int SERIES_BAR_ALIGN_CENTER = 1;
public static final int SERIES_BAR_ALIGN_RIGHT = 2;
+ private Object data;
private String name;
private int style = SERIES_STYLE_NONE;
private List<DAChartSeriesItem> seriesItems = new ArrayList<DAChartSeriesItem>();
public void setBarAlign(int barAlign) {
this.barAlign = barAlign;
}
+
+ public Object getData() {
+ return data;
+ }
+
+ public void setData(Object data) {
+ this.data = data;
+ }
}
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.ScrollBar;
import org.tizen.dynamicanalyzer.widgets.button.DACustomButton;
import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonClickEventListener;
private final static int DEFAULT_CHARTBOARD_MINIMIZE_BUTTON_WIDTH = 21;
private final static int DEFAULT_CHARTBOARD_FOOTER_HEIGHT = 20;
private final static int DEFAULT_CHARTBOARD_SCALE_WIDTH = 99;
-
+
public static final double ITEM_HEIGHT_RATIO_SHORT = 0.5;
public static final double ITEM_HEIGHT_RATIO_NORMAL = 1;
protected static final double ITEM_HEIGHT_RATIO_TALL = 2;
timeline = new DATimeline(this, false);
timeline.setRenderer(new DATimelineTinyTimeRenderer());
}
+
+ this.addListener(SWT.Resize, resizeListener);
scale = new DAScale(this, 4, SWT.NONE);
scale.addSelectionListener(scaleSelectionListener);
}
};
+ private Listener resizeListener = new Listener() {
+ @Override
+ public void handleEvent(Event event) {
+ callBackSizeChanged();
+ }
+ };
+
private void setChartAxis() {
itemList.setChartAxis(getVisibleStartTime(), getVisibleEndTime());
}
protected void registerItem(DAChartBoardItem item) {
itemList.registerItem(item);
-
+
int listHeight = itemList.getListHeight();
itemList.setSize(itemListScrollComp.getClientArea().width, listHeight);
}
if (0 == itemSize || parentIndex >= itemSize) {
return;
}
-
+
DAChartBoardItem item = itemList.get(parentIndex);
if (null == item) {
return;
return;
}
item.getItemCell().setFoldButtonTrue();
-
+
DAChartBoardItem childItem = childItemList.get(childIndex);
selectRow(childItem);
int selection = itemList.getItemYPos(parentIndex)
public void reArrangeItem(Integer a[]) {
itemList.reArrangeItem(a);
+ itemList.layout(true, true);
}
public Composite getListComposite() {
public ScrollBar getHScrollBar() {
return hScroll;
}
-
+
protected void callBackScaleChanged() {
}
-
+
protected void callBackScrollChanged() {
}
+
+ protected void callBackSizeChanged() {
+ }
}
public class KernelPageLabels extends NLS {
private static final String BUNDLE_NAME = "org.tizen.dynamicanalyzer.nl.KernelPageLabels";
-
+
public static String CONTEXT_SWITCH_CHART_TITLE;
- public static String CALLFLOW_CHART_TITLE;
- public static String KERNEL_STATISTIC_TITLE;
+ public static String CONTEXT_SWITCH_BOARD_NAME_PID;
+ public static String CONTEXT_SWITCH_BOARD_NAME_TID;
+ public static String CONTEXT_SWITCH_BOARD_NAME_FUNC_CHILD;
+ public static String CONTEXT_SWITCH_SERIES_NAME;
+ public static String CONTEXT_SWITCH_SERIES_NAME_CHILD;
+ public static String CONTEXT_SWITCH_SERIES_ITEM_NAME;
- public static String KERNEL_CHART_SERIES_LOAD;
- public static String KERNEL_CHART_SERIES_CORE;
- public static String KERNEL_CHART_SERIES_FUNCTION;
- public static String KERNEL_CHART_SERIES_THREAD;
+ public static String CALL_FLOW_CHART_TITLE;
+ public static String CALL_FLOW_BOARD_NAME_TID;
public static String UNKNOWN_FUNCTION_NAME;
public static String CORE_NAME_PREFIX;
public static String KERNEL_CHART_ITEM_END;
public static String KERNEL_CHART_ITEM_SWITCHED;
+ public static String KERNEL_LIST_VIEW_NAME;
+ public static String KERNEL_LIST_VIEW_TITLE_CORE;
+ public static String KERNEL_LIST_VIEW_TITLE_FUNCTION;
public static String KERNEL_LIST_VIEW_INDEX;
+ public static String KERNEL_LIST_VIEW_PID;
+ public static String KERNEL_LIST_VIEW_TID;
public static String KERNEL_LIST_VIEW_START_TIME;
public static String KERNEL_LIST_VIEW_END_TIME;
public static String KERNEL_LIST_VIEW_EXECUTION_TIME;
public static String KERNEL_LIST_VIEW_END_PC;
public static String KERNEL_LIST_VIEW_ENTRY;
public static String KERNEL_LIST_VIEW_EXIT;
+ public static String KERNEL_LIST_VIEW_CORE;
+ public static String KERNEL_LIST_VIEW_FUNCTION;
- public static String THREAD_LIST_VIEW_THREAD_TITLE;
- public static String THREAD_LIST_VIEW_CORE_TITLE;
- public static String THREAD_LIST_VIEW_FUNCTION_TITLE;
- public static String THREAD_LIST_VIEW_INDEX;
- public static String THREAD_LIST_VIEW_CORE;
- public static String THREAD_LIST_VIEW_FUNCTION;
-
- public static String CORE_LIST_VIEW_CORE_TITLE;
- public static String CORE_LIST_VIEW_THREAD_TITLE;
- public static String CORE_LIST_VIEW_FUNCTION_TITLE;
- public static String CORE_LIST_VIEW_INDEX;
- public static String CORE_LIST_VIEW_PID;
- public static String CORE_LIST_VIEW_TID;
- public static String CORE_LIST_VIEW_FUNCTION;
-
+ public static String KERNEL_STATISTIC_TITLE;
public static String KERNEL_STATISTIC_CS_COUNT;
public static String KERNEL_STATISTIC_CS_AVGTIME;
public static String KERNEL_STATISTIC_CS_OVERHEAD;
-CONTEXT_SWITCH_CHART_TITLE=Context-switch
-CALLFLOW_CHART_TITLE=Call-flow
-KERNEL_STATISTIC_TITLE=Kernel Statistics
+CONTEXT_SWITCH_CHART_TITLE=Context Switch
+CONTEXT_SWITCH_BOARD_NAME_PID=PID :
+CONTEXT_SWITCH_BOARD_NAME_TID=TID :
+CONTEXT_SWITCH_BOARD_NAME_FUNC_CHILD=Functions
+CONTEXT_SWITCH_SERIES_NAME=core number
+CONTEXT_SWITCH_SERIES_NAME_CHILD=function name
+CONTEXT_SWITCH_SERIES_ITEM_NAME=Core
-KERNEL_CHART_SERIES_LOAD=Load
-KERNEL_CHART_SERIES_CORE=Core
-KERNEL_CHART_SERIES_FUNCTION=Function
-KERNEL_CHART_SERIES_THREAD=Thread
+CALL_FLOW_CHART_TITLE=Call Flow
+CALL_FLOW_BOARD_NAME_TID=TID :
UNKNOWN_FUNCTION_NAME=unknown
CORE_NAME_PREFIX=core<
KERNEL_CHART_ITEM_END=End
KERNEL_CHART_ITEM_SWITCHED=Switched
+KERNEL_LIST_VIEW_NAME=Contexts
+KERNEL_LIST_VIEW_TITLE_CORE=Context List for Thread
+KERNEL_LIST_VIEW_TITLE_FUNCTION=Function Fragment List for Thread
KERNEL_LIST_VIEW_INDEX=#
+KERNEL_LIST_VIEW_PID=PID
+KERNEL_LIST_VIEW_TID=TID
KERNEL_LIST_VIEW_START_TIME=Start time
KERNEL_LIST_VIEW_END_TIME=End time
KERNEL_LIST_VIEW_EXECUTION_TIME=Execution time
KERNEL_LIST_VIEW_END_PC=End pc addr
KERNEL_LIST_VIEW_ENTRY=Entry of func.
KERNEL_LIST_VIEW_EXIT=Exit of func.
+KERNEL_LIST_VIEW_CORE=Core number
+KERNEL_LIST_VIEW_FUNCTION=Function name
-THREAD_LIST_VIEW_THREAD_TITLE=Context Switch List for Thread
-THREAD_LIST_VIEW_CORE_TITLE=Core Usage List for Thread
-THREAD_LIST_VIEW_FUNCTION_TITLE=Function Call List for Thread
-THREAD_LIST_VIEW_INDEX=#
-THREAD_LIST_VIEW_CORE=Core num
-THREAD_LIST_VIEW_FUNCTION=Function name
-
-CORE_LIST_VIEW_CORE_TITLE=Context Switch List for Core
-CORE_LIST_VIEW_THREAD_TITLE=Thread List fir Core
-CORE_LIST_VIEW_FUNCTION_TITLE=Function Call List for Core
-CORE_LIST_VIEW_INDEX=#
-CORE_LIST_VIEW_PID=pid
-CORE_LIST_VIEW_TID=tid
-CORE_LIST_VIEW_FUNCTION=Function name
-
+KERNEL_STATISTIC_TITLE=Kernel Statistics
KERNEL_STATISTIC_CS_COUNT=Number of context switch :
KERNEL_STATISTIC_CS_AVGTIME=Average execution time of contexts :
KERNEL_STATISTIC_CS_OVERHEAD=Overhead time of context switch :
--- /dev/null
+package org.tizen.dynamicanalyzer.ui.kernel;
+
+import java.util.HashMap;
+import java.util.List;
+
+import org.eclipse.swt.widgets.Composite;
+import org.tizen.dynamicanalyzer.nl.KernelPageLabels;
+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.kernel.data.KernelDataMaker;
+import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataPerThread;
+import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardHeightChangeableItem;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItemList;
+import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu;
+import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem;
+
+public class CallFlowChart extends DAChartBoard {
+ private KernelDataPerThread selectedData = null;
+ private final KernelDataMaker dataMaker = KernelDataMaker.getInstance();
+ private HashMap<String, DAChartSeries> seriesMap = null;
+
+ public CallFlowChart(Composite parent, String title) {
+ super(parent, title);
+ }
+
+ public CallFlowChart(Composite parent, String title, int[] scaleValues) {
+ super(parent, title, scaleValues);
+ }
+
+ public CallFlowChart(Composite parent, String title, int boardStyle) {
+ super(parent, title, boardStyle);
+ }
+
+ @Override
+ protected void callBackScaleChanged() {
+ updateChart();
+ super.callBackScaleChanged();
+ }
+
+ @Override
+ protected void callBackScrollChanged() {
+ updateChart();
+ super.callBackScrollChanged();
+ }
+
+ @Override
+ protected void callBackSizeChanged() {
+ layout(true, true);
+ updateChart();
+ super.callBackSizeChanged();
+ }
+
+ public void setSelectedData(KernelDataPerThread data) {
+ selectedData = data;
+ }
+
+ public void updateChart() {
+ // remove all previous items
+ DAChartBoardItemList itemList = getItemList();
+ itemList.clear();
+ clear();
+ if (seriesMap != null) {
+ seriesMap.clear();
+ seriesMap = null;
+ }
+
+ if (selectedData == null) {
+ return;
+ }
+
+ // get data from db
+ List<List<String>> funcnames = dataMaker.getFuncnameFromDB(selectedData
+ .getTid());
+ int fsize = funcnames.size();
+
+ // create board item for these functions
+ DAChartBoardHeightChangeableItem funcItem = new DAChartBoardHeightChangeableItem(
+ this, KernelPageLabels.CALL_FLOW_BOARD_NAME_TID + " "
+ + selectedData.getTid());
+ initCallflowChart(funcItem, fsize);
+
+ seriesMap = new HashMap<String, DAChartSeries>(fsize * 2);
+ DAChart funcChart = funcItem.getChart();
+ for (int i = 0; i < fsize; i++) {
+ String funcname = funcnames.get(i).get(0);
+ DAChartSeries funcseries = new DAChartSeries(funcname, -1,
+ ColorResources.RED, true);
+ funcChart.addSeries(funcseries);
+ funcseries.setData(new Integer(i));
+ seriesMap.put(funcname, funcseries);
+ }
+
+ drawChart();
+ }
+
+ private void drawChart() {
+ if (selectedData == null) {
+ return;
+ }
+
+ // get data from database and add new item to series
+ long starttime = (long) (getVisibleStartTime() * TimelineConstants.MEGA_DOUBLE);
+ long endtime = (long) (getVisibleEndTime() * TimelineConstants.MEGA_DOUBLE);
+
+ List<List<String>> functionData = dataMaker.getFunctionDataFromDB(
+ starttime, endtime, selectedData.getTid());
+ if (functionData == null || functionData.isEmpty()) {
+ return;
+ }
+
+ int fsize = functionData.size();
+ ContextSwitchingChartSeriesItem prevItem = null;
+ int prevSeriesNum = -1;
+
+ for (int i = 0; i < fsize; i++) {
+ List<String> idata = functionData.get(i);
+ String funcname = idata
+ .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_FUNCNAME);
+ double funcStart = (double) (Long.parseLong(idata
+ .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_STARTTIME)))
+ / TimelineConstants.MEGA_DOUBLE;
+ double funcEnd = (double) (Long.parseLong(idata
+ .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_ENDTIME)))
+ / TimelineConstants.MEGA_DOUBLE;
+
+ DAChartSeries funcSeries = seriesMap.get(funcname);
+ if (funcSeries != null) {
+ int curSeriesNum = ((Integer) funcSeries.getData()).intValue();
+ ContextSwitchingChartSeriesItem curItem = new ContextSwitchingChartSeriesItem(
+ null, funcStart, funcEnd, ColorResources.RED);
+
+ // for previous function segment
+ if (prevItem != null && prevSeriesNum != curSeriesNum) {
+ prevItem.setArrow(curSeriesNum - prevSeriesNum);
+ }
+ funcSeries.addSeriesItem(curItem);
+
+ prevItem = curItem;
+ prevSeriesNum = curSeriesNum;
+ } else {
+ System.out
+ .println("[ERR] Function series is not exist in call flow chart");
+ }
+ }
+
+ // redraw
+ redraw();
+ update();
+ }
+
+ private void initCallflowChart(DAChartBoardHeightChangeableItem chartItem,
+ int itemsize) {
+ DAChart chart = chartItem.getChart();
+ if (null == chart) {
+ return;
+ }
+
+ DAChartPlot plot = chart.getPlot();
+ if (null == plot) {
+ return;
+ }
+
+ chartItem.useExpand(false);
+ chartItem.setHeightRatio(itemsize * 0.3);
+ chart.getPlot().setAutoHeightRange(AutoRangeType.MANUAL);
+ chart.getPlot().setShowAxis(false);
+ chart.setChartRenderer(new CallFlowChartRenderer());
+
+ plot.setBackgroundImage(ImageResources.BG_GRADIENT);
+
+ 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());
+ }
+
+}
package org.tizen.dynamicanalyzer.ui.kernel;
-import java.util.List;
-
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
-import org.eclipse.swt.graphics.Color;
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.CommonConstants;
import org.tizen.dynamicanalyzer.common.DASelectionData;
import org.tizen.dynamicanalyzer.model.DAView;
import org.tizen.dynamicanalyzer.nl.KernelPageLabels;
-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.SetRangeMarkerMouseMoveListener;
-import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener;
-import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter;
import org.tizen.dynamicanalyzer.ui.common.UICommonConstants;
-import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataMaker;
import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataPerThread;
-import org.tizen.dynamicanalyzer.ui.network.NetworkChartData;
-import org.tizen.dynamicanalyzer.ui.network.NetworkChartManager;
import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
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.ui.widgets.TitleComboPopupRenderer;
import org.tizen.dynamicanalyzer.ui.widgets.TitleComboRenderer;
import org.tizen.dynamicanalyzer.ui.widgets.ViewContainer;
import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonRenderer;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot;
import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType;
import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardHeightChangeableItem;
import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardSelectionListener;
import org.tizen.dynamicanalyzer.widgets.combo.DACustomCombo;
-import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu;
-import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem;
import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline;
-public class CallFlowView extends DAView {
- public static final String ID = CallFlowView.class.getName();
+public class CallFlowChartView extends DAView {
+ public static final String ID = CallFlowChartView.class.getName();
private final Composite contents;
- private DAChartBoard callflowChart;
+ private CallFlowChart callflowChart;
private DACustomCombo callflowCombo;
private final StackLayout stackLayout;
- private KernelDataPerThread selectedData = null;
-
private final RangeDataManager rangeDataManager = RangeDataManager
.getInstance();
- public CallFlowView(Composite parent, int style) {
+ public CallFlowChartView(Composite parent, int style) {
super(parent, style);
+ name = KernelPageLabels.CALL_FLOW_CHART_TITLE;
this.setLayout(new FillLayout());
ViewContainer viewContainer = new ViewContainer(this, false);
- viewContainer.setTitleText(KernelPageLabels.CALLFLOW_CHART_TITLE);
+ viewContainer.setTitleText(KernelPageLabels.CALL_FLOW_CHART_TITLE);
contents = viewContainer.getContentArea();
contents.setBackground(ColorResources.WINDOW_BG_COLOR);
stackLayout = new StackLayout();
contents.setLayout(stackLayout);
- callflowChart = new DAChartBoard(contents,
- KernelPageLabels.CALLFLOW_CHART_TITLE);
+ callflowChart = new CallFlowChart(contents,
+ KernelPageLabels.CALL_FLOW_CHART_TITLE,
+ ContextSwitchingChartView.kernelScaleValue);
callflowChart.setNameFont(FontResources.CHART_NAME_FONT);
callflowChart.addSelectionListener(new DAChartBoardSelectionListener() {
@Override
.getCurrentPage()
.updatePage(
new DASelectionData(
- CallFlowView.ID,
+ CallFlowChartView.ID,
(long) (((DAChartPlotIntervalMarker) callflowChart
.getMarkers()
.get(UICommonConstants.SELECTION_MARKER_INDEX))
ImageResources.TIMELINE_DROPDOWN_HOVER,
ImageResources.TIMELINE_DROPDOWN_PUSH,
ImageResources.TIMELINE_DROPDOWN_NORMAL);
- callflowCombo.add(KernelPageLabels.CALLFLOW_CHART_TITLE);
+ callflowCombo.add(KernelPageLabels.CALL_FLOW_CHART_TITLE);
callflowCombo.setTextAlign(DACustomCombo.TEXT_ALIGN_CENTER);
callflowCombo.select(0);
callflowCombo.setEnabled(false);
timeline.addMouseMoveListener(new SetRangeMarkerMouseMoveListener(
rangeDataManager, callflowChart, timeline));
-
- clear();
}
@Override
public void updateView() {
- if (selectedData == null) {
- return;
+ callflowChart.updateChart();
+
+ // set chart end time
+ callflowChart.setTotalEndTime(ToolbarArea.getInstance().getTime());
+
+ // setting markers
+ callflowChart.setTimelineMarkerStartTime(RangeDataManager.getInstance()
+ .getMarkerStartTime() / TimelineConstants.MEGA_DOUBLE);
+ callflowChart.setTimelineMarkerEndTime(RangeDataManager.getInstance()
+ .getMarkerEndTime() / TimelineConstants.MEGA_DOUBLE);
+
+ RangeDataManager rangeDataManager = RangeDataManager.getInstance();
+ if (rangeDataManager.isBeingAnalyzed()) {
+ ((DAChartPlotIntervalMarker) callflowChart.getMarkers().get(
+ UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX))
+ .setInterval(rangeDataManager.getAnalysisStartTime()
+ / TimelineConstants.MEGA_DOUBLE,
+ rangeDataManager.getAnalysisEndTime()
+ / TimelineConstants.MEGA_DOUBLE);
+ } else {
+ ((DAChartPlotIntervalMarker) callflowChart.getMarkers().get(
+ UICommonConstants.RANGE_ANALYSIS_MARKER_INDEX))
+ .setInterval(-1, -1);
}
+
+ ((DAChartPlotIntervalMarker) callflowChart.getMarkers().get(
+ UICommonConstants.RANGE_MARKER_INDEX)).setInterval(
+ rangeDataManager.getMarkerStartTime()
+ / TimelineConstants.MEGA_DOUBLE,
+ rangeDataManager.getMarkerEndTime()
+ / TimelineConstants.MEGA_DOUBLE);
}
@Override
public void updateView(DASelectionData selData) {
- KernelDataPerThread sdata = (KernelDataPerThread) selData.getData();
+ Object odata = selData.getData();
long selectionStartTime, selectionEndTime;
- if (!(sdata instanceof KernelDataPerThread)) {
+ if (!(odata instanceof KernelDataPerThread)) {
selectionStartTime = selData.getStartTime();
selectionEndTime = selData.getEndTime();
+
+ double startTime = (double) selectionStartTime
+ / TimelineConstants.MEGA_DOUBLE;
+ double endTime = (double) selectionEndTime
+ / TimelineConstants.MEGA_DOUBLE;
+
+ DAChartBoard chartBoard = (DAChartBoard) stackLayout.topControl;
+
+ DAChartPlotIntervalMarker intervalMarker = (DAChartPlotIntervalMarker) chartBoard
+ .getMarkers().get(UICommonConstants.SELECTION_MARKER_INDEX);
+ intervalMarker.setInterval(startTime, endTime);
} else {
- selectedData = sdata;
+ KernelDataPerThread sdata = (KernelDataPerThread) odata;
+ callflowChart.setSelectedData(sdata);
+ callflowChart.updateChart();
}
-
- // tableComp.getTable().removeAll();
- // tableComp.updateTable();
- // tableComp.setSelectionByTime(selectionStartTime, selectionEndTime);
}
@Override
public void clear() {
callflowChart.clear();
+ initIntervalMarkers(callflowChart);
}
@Override
return callflowChart;
}
- private void updateChart() {
- callflowChart.clear();
- if (selectedData == null) {
- return;
- }
-
- // create board item for these functions
- DAChartBoardHeightChangeableItem funcItem = new DAChartBoardHeightChangeableItem(
- callflowChart, "tid : " + selectedData.getTid());
- initCallflowChart(funcItem);
-
- DAChart funcChart = funcItem.getChart();
-
- List<List<String>> funcnames = KernelDataMaker.getInstance()
- .getFuncnameFromDB(selectedData.getTid());
- int fsize = funcnames.size();
-
- for (int i = 0; i < fsize; i++) {
- String funcname = funcnames.get(i).get(0);
- funcChart.addSeries(new DAChartSeries(funcname + "()", -1,
- ColorResources.RED));
- }
-
- }
-
- private void initCallflowChart(DAChartBoardHeightChangeableItem chartItem) {
- DAChart chart = chartItem.getChart();
- if (null == chart) {
- return;
- }
-
- DAChartPlot plot = chart.getPlot();
- if (null == plot) {
- return;
- }
-
- chartItem.useExpand(false);
- chartItem.setHeightRatio(0.5);
- chart.getPlot().setAutoHeightRange(AutoRangeType.MANUAL);
- chart.getPlot().setShowAxis(false);
- chart.setChartRenderer(new CallFlowChartRenderer());
-
- plot.setBackgroundImage(ImageResources.BG_GRADIENT);
-
- 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,
- callflowChart));
-
- DAPopupMenuItem endItem = new DAPopupMenuItem(popupMenu,
- DAPopupMenuItem.NONE);
- endItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_END);
- endItem.addListener(new PopupEndMenuItemClickListener(endItem,
- callflowChart));
-
- DAPopupMenuItem fromSelectionItem = new DAPopupMenuItem(popupMenu,
- DAPopupMenuItem.NONE);
- fromSelectionItem
- .setText(TimelineChartLabels.RANGE_CONTEXT_SET_FROM_SELECTION);
- fromSelectionItem
- .addListener(new PopupFromSelectionMenuItemClickListener(
- fromSelectionItem, callflowChart));
-
- 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, callflowChart.getTimeline());
- chart.addMouseListener(timelineChartMouseEventListener);
- chart.addMouseMoveListener(timelineChartMouseEventListener);
- chart.addMouseTrackListener(new TimelineChartMouseTrackAdapter(
- callflowChart.getTimeline()));
- plot.setMarkers(callflowChart.getMarkers());
-
- }
-
private void initIntervalMarkers(DAChartBoard board) {
// selection marker
DAChartPlotIntervalMarker selectionMarker = new DAChartPlotIntervalMarker(
--- /dev/null
+package org.tizen.dynamicanalyzer.ui.kernel;
+
+import org.eclipse.swt.widgets.Composite;
+import org.tizen.dynamicanalyzer.ui.widgets.DATabComposite;
+
+public class CallFlowTabComposite extends DATabComposite {
+
+ public CallFlowTabComposite(Composite parent, int style) {
+ super(parent, style);
+ }
+
+}
--- /dev/null
+package org.tizen.dynamicanalyzer.ui.kernel;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.eclipse.swt.widgets.Composite;
+import org.tizen.dynamicanalyzer.nl.KernelPageLabels;
+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.kernel.data.KernelDataMaker;
+import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataPerThread;
+import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataPerThreadComparator;
+import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
+import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardHeightChangeableItem;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
+import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItemList;
+import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu;
+import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem;
+
+public class ContextSwitchingChart extends DAChartBoard {
+ private final KernelDataMaker dataMaker = KernelDataMaker.getInstance();
+
+ public ContextSwitchingChart(Composite parent, String title) {
+ super(parent, title);
+ }
+
+ public ContextSwitchingChart(Composite parent, String title,
+ int[] scaleValues) {
+ super(parent, title, scaleValues);
+ }
+
+ public ContextSwitchingChart(Composite parent, String title, int boardStyle) {
+ super(parent, title, boardStyle);
+ }
+
+ @Override
+ protected void callBackScaleChanged() {
+ updateChart(false);
+ super.callBackScaleChanged();
+ }
+
+ @Override
+ protected void callBackScrollChanged() {
+ updateChart(false);
+ super.callBackScrollChanged();
+ }
+
+ @Override
+ protected void callBackSizeChanged() {
+ layout(true, true);
+ updateChart(false);
+ super.callBackSizeChanged();
+ }
+
+ public void updateChart(boolean rearrange) {
+ List<KernelDataPerThread> threads = dataMaker.getThreadData();
+ int thread_size = threads.size();
+
+ for (int i = 0; i < thread_size; i++) {
+ KernelDataPerThread kdata = threads.get(i);
+ DAChartBoardItem bitem = kdata.getContextChart();
+ if (bitem == null) {
+ // create board item for this thread context
+ DAChartBoardHeightChangeableItem coreItem = new DAChartBoardHeightChangeableItem(
+ this, getChartName(kdata));
+ initContextSwitchChart(coreItem, true);
+
+ DAChart coreChart = coreItem.getChart();
+ DAChartSeries coreSeries = new DAChartSeries(
+ KernelPageLabels.CONTEXT_SWITCH_SERIES_NAME, -1,
+ ColorResources.BLUE);
+ coreChart.addSeries(coreSeries);
+
+ coreItem.setData(kdata);
+ kdata.setContextChart(coreItem);
+ } else {
+ // delete previous drawing items
+ bitem.getChart().getSeries(0).clear();
+ }
+
+ bitem = kdata.getFunctionChart();
+ if (kdata.getFunclog() != null && bitem == null) {
+ // create board item for function
+ DAChartBoardHeightChangeableItem functionItem = new DAChartBoardHeightChangeableItem(
+ kdata.getContextChart(),
+ KernelPageLabels.CONTEXT_SWITCH_BOARD_NAME_FUNC_CHILD);
+ initContextSwitchChart(functionItem, false);
+
+ DAChart functionChart = functionItem.getChart();
+ DAChartSeries functionSeries = new DAChartSeries(
+ KernelPageLabels.CONTEXT_SWITCH_SERIES_NAME_CHILD, -1,
+ ColorResources.RED);
+ functionChart.addSeries(functionSeries);
+
+ functionItem.setData(kdata);
+ kdata.setFunctionChart(functionItem);
+ } else if (bitem != null) {
+ // delete previous drawing items
+ bitem.getChart().getSeries(0).clear();
+ }
+ }
+
+ // rearrange items
+ if (rearrange) {
+ rearrangeChart();
+ }
+
+ // get data from database and add new item to series
+ long starttime = (long) (getVisibleStartTime() * TimelineConstants.MEGA_DOUBLE);
+ long endtime = (long) (getVisibleEndTime() * TimelineConstants.MEGA_DOUBLE);
+
+ List<List<String>> contextData = dataMaker.getContextDataFromDB(
+ starttime, endtime);
+ List<List<String>> functionData = dataMaker.getFunctionDataFromDB(
+ starttime, endtime, -1);
+ if (contextData != null) {
+ int csize = contextData.size();
+ for (int i = 0; i < csize; i++) {
+ List<String> idata = contextData.get(i);
+ int tid = Integer.parseInt(idata
+ .get(KernelDataMaker.CONTEXT_DATA_COLUMN_INDEX_TID));
+ int cpunum = Integer.parseInt(idata
+ .get(KernelDataMaker.CONTEXT_DATA_COLUMN_INDEX_CPU));
+ double contextStart = (double) (Long
+ .parseLong(idata
+ .get(KernelDataMaker.CONTEXT_DATA_COLUMN_INDEX_STARTTIME)))
+ / TimelineConstants.MEGA_DOUBLE;
+ double contextEnd = (double) (Long
+ .parseLong(idata
+ .get(KernelDataMaker.CONTEXT_DATA_COLUMN_INDEX_ENDTIME)))
+ / TimelineConstants.MEGA_DOUBLE;
+
+ DAChartBoardItem coreItem = findCoreBoardItem(threads, tid);
+ assert (coreItem != null);
+ DAChartSeries coreSeries = coreItem.getChart().getSeries(0);
+
+ coreSeries.addSeriesItem(new ContextSwitchingChartSeriesItem(
+ KernelPageLabels.CONTEXT_SWITCH_SERIES_ITEM_NAME + " "
+ + Integer.toString(cpunum), contextStart,
+ contextEnd));
+ // System.out.println("context(" + tid + ")(" + contextStart +
+ // ","
+ // + contextEnd + ")");
+ }
+ }
+
+ if (functionData != null) {
+ int fsize = functionData.size();
+ for (int i = 0; i < fsize; i++) {
+ List<String> idata = functionData.get(i);
+ int tid = Integer.parseInt(idata
+ .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_TID));
+ String funcname = idata
+ .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_FUNCNAME);
+ double funcStart = (double) (Long
+ .parseLong(idata
+ .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_STARTTIME)))
+ / TimelineConstants.MEGA_DOUBLE;
+ double funcEnd = (double) (Long
+ .parseLong(idata
+ .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_ENDTIME)))
+ / TimelineConstants.MEGA_DOUBLE;
+ int type = Integer
+ .parseInt(idata
+ .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_STARTTYPE))
+ + Integer
+ .parseInt(idata
+ .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_ENDTYPE));
+
+ DAChartBoardItem functionItem = findFunctionBoardItem(threads,
+ tid);
+ assert (functionItem != null);
+ DAChartSeries funcSeries = functionItem.getChart().getSeries(0);
+
+ int style;
+ switch (type) {
+ case 21:
+ case 31:
+ style = ContextSwitchingChartSeriesItem.STYLE_OCTAGON_LEFT_ONLY;
+ break;
+ case 12:
+ case 13:
+ style = ContextSwitchingChartSeriesItem.STYLE_OCTAGON_RIGHT_ONLY;
+ break;
+ case 22:
+ case 32:
+ case 23:
+ case 33:
+ style = ContextSwitchingChartSeriesItem.STYLE_OCTAGON;
+ break;
+ case 11:
+ default:
+ style = ContextSwitchingChartSeriesItem.STYLE_SQUARE;
+ break;
+ }
+
+ funcSeries.addSeriesItem(new ContextSwitchingChartSeriesItem(
+ funcname, funcStart, funcEnd, style));
+ }
+ }
+
+ // redraw chart
+ redraw();
+ update();
+ }
+
+ private String getChartName(KernelDataPerThread data) {
+ String name = KernelPageLabels.CONTEXT_SWITCH_BOARD_NAME_PID + " "
+ + data.getPid() + "\n"
+ + KernelPageLabels.CONTEXT_SWITCH_BOARD_NAME_TID + " "
+ + data.getTid();
+ return name;
+ }
+
+ private DAChartBoardItem findCoreBoardItem(
+ List<KernelDataPerThread> threads, int tid) {
+ int size = threads.size();
+ for (int i = 0; i < size; i++) {
+ if (threads.get(i).getTid() == tid)
+ return threads.get(i).getContextChart();
+ }
+
+ return null;
+ }
+
+ private DAChartBoardItem findFunctionBoardItem(
+ List<KernelDataPerThread> threads, int tid) {
+ int size = threads.size();
+ for (int i = 0; i < size; i++) {
+ if (threads.get(i).getTid() == tid)
+ return threads.get(i).getFunctionChart();
+ }
+
+ return null;
+ }
+
+ private void rearrangeChart() {
+ DAChartBoardItemList itemList = getItemList();
+ int listsize = itemList.getItemSize();
+
+ TreeMap<KernelDataPerThread, Integer> sortedmap = new TreeMap<KernelDataPerThread, Integer>(
+ new KernelDataPerThreadComparator());
+
+ for (int i = 0; i < listsize; i++) {
+ DAChartBoardItem item = itemList.get(i);
+ KernelDataPerThread gdata = (KernelDataPerThread) item.getData();
+ sortedmap.put(gdata, i);
+ }
+
+ Map.Entry<KernelDataPerThread, Integer> entry;
+ ArrayList<Integer> arranged = new ArrayList<Integer>();
+ while ((entry = sortedmap.pollFirstEntry()) != null) {
+ arranged.add(entry.getValue());
+ }
+
+ reArrangeItem(arranged.toArray(new Integer[listsize]));
+ }
+
+ private void initContextSwitchChart(
+ DAChartBoardHeightChangeableItem chartItem, boolean isParent) {
+ DAChart chart = chartItem.getChart();
+ if (null == chart) {
+ return;
+ }
+
+ DAChartPlot plot = chart.getPlot();
+ if (null == plot) {
+ return;
+ }
+
+ chartItem.useExpand(false);
+ chartItem.setHeightRatio(1);
+ chart.getPlot().setAutoHeightRange(AutoRangeType.MANUAL);
+ chart.getPlot().setShowAxis(false);
+ chart.setChartRenderer(new ContextSwitchingChartRenderer());
+
+ if (isParent) {
+ plot.setBackgroundImage(ImageResources.BG_GRADIENT);
+ } else {
+ plot.setBackgroundImage(ImageResources.BG_CHILD_GRADIENT);
+ }
+
+ 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 static final int STYLE_OCTAGON = 1;
public static final int STYLE_OCTAGON_LEFT_ONLY = 2;
public static final int STYLE_OCTAGON_RIGHT_ONLY = 3;
-
+
private String name = null;
private int style = STYLE_SQUARE;
private double endX = -1;
public ContextSwitchingChartSeriesItem(String name, double x) {
super(x, 0);
this.name = name;
+ setTooltipText(name);
}
public ContextSwitchingChartSeriesItem(String name, double x,
Color borderColor) {
this(name, x);
this.borderColor = borderColor;
+ setTooltipText(name);
}
- public ContextSwitchingChartSeriesItem(String name, double x,
- int arrow, Color borderColor) {
+ public ContextSwitchingChartSeriesItem(String name, double x, int arrow,
+ Color borderColor) {
this(name, x, borderColor);
this.arrow = arrow;
+ setTooltipText(name);
}
- public ContextSwitchingChartSeriesItem(String name, double x,
- Color color, Color borderColor) {
+ public ContextSwitchingChartSeriesItem(String name, double x, Color color,
+ Color borderColor) {
this(name, x, borderColor);
this.color = color;
+ setTooltipText(name);
}
- public ContextSwitchingChartSeriesItem(String name, double x,
- int style) {
+ public ContextSwitchingChartSeriesItem(String name, double x, int style) {
this(name, x);
this.style = style;
+ setTooltipText(name);
}
public ContextSwitchingChartSeriesItem(String name, double x, double endX) {
super(x, 0);
this.endX = endX;
this.name = name;
+ setTooltipText(name);
}
public ContextSwitchingChartSeriesItem(String name, double x, double endX,
Color borderColor) {
this(name, x, endX);
this.borderColor = borderColor;
+ setTooltipText(name);
}
public ContextSwitchingChartSeriesItem(String name, double x, double endX,
int arrow, Color borderColor) {
this(name, x, endX, borderColor);
this.arrow = arrow;
+ setTooltipText(name);
}
public ContextSwitchingChartSeriesItem(String name, double x, double endX,
Color color, Color borderColor) {
this(name, x, endX, borderColor);
this.color = color;
+ setTooltipText(name);
}
public ContextSwitchingChartSeriesItem(String name, double x, double endX,
int style) {
this(name, x, endX);
this.style = style;
+ setTooltipText(name);
}
public String getName() {
public double getEndX() {
return endX;
}
-
+
public void setEndX(double endX) {
this.endX = endX;
}
-
+
public void setStyle(int style) {
this.style = style;
}
+ public void setArrow(int arr) {
+ this.arrow = arr;
+ }
+
public int getArrow() {
return arrow;
}
-
+
public Color getBorderColor() {
return borderColor;
}
package org.tizen.dynamicanalyzer.ui.kernel;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.layout.FillLayout;
import org.tizen.dynamicanalyzer.common.DASelectionData;
import org.tizen.dynamicanalyzer.model.DAView;
import org.tizen.dynamicanalyzer.nl.KernelPageLabels;
-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.SetRangeMarkerMouseMoveListener;
-import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseEventListener;
-import org.tizen.dynamicanalyzer.ui.common.TimelineChartMouseTrackAdapter;
import org.tizen.dynamicanalyzer.ui.common.UICommonConstants;
-import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataMaker;
-import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataPerThread;
-import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataPerThreadComparator;
import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineConstants;
import org.tizen.dynamicanalyzer.ui.timeline.logparser.LifecycleLogParser;
import org.tizen.dynamicanalyzer.ui.widgets.TitleComboRenderer;
import org.tizen.dynamicanalyzer.ui.widgets.ViewContainer;
import org.tizen.dynamicanalyzer.widgets.button.DACustomButtonRenderer;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChart;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot;
import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotIntervalMarker;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlotTooltip;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartSeries;
-import org.tizen.dynamicanalyzer.widgets.chart.DAChartPlot.AutoRangeType;
import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoard;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardHeightChangeableItem;
import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItem;
-import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItemList;
import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardSelectionListener;
import org.tizen.dynamicanalyzer.widgets.combo.DACustomCombo;
-import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu;
-import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem;
import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline;
public class ContextSwitchingChartView extends DAView {
public final static int KERNEL_COMBO_ITEM_HEIGHT = 24;
private final Composite contents;
- private DAChartBoard contextChart;
+ private ContextSwitchingChart contextChart;
private DACustomCombo contextCombo;
private final StackLayout stackLayout;
- private KernelDataMaker dataMaker;
+ public static final int[] kernelScaleValue = new int[] { 100, 200, 400,
+ 800, 1600 };
public ContextSwitchingChartView(Composite parent, int style) {
super(parent, style);
stackLayout = new StackLayout();
contents.setLayout(stackLayout);
- int[] scaleval = new int[] { 100, 200, 400, 800, 1600 };
- contextChart = new DAChartBoard(contents,
- KernelPageLabels.CONTEXT_SWITCH_CHART_TITLE, scaleval);
+ contextChart = new ContextSwitchingChart(contents,
+ KernelPageLabels.CONTEXT_SWITCH_CHART_TITLE, kernelScaleValue);
contextChart.setNameFont(FontResources.CHART_NAME_FONT);
contextChart.addSelectionListener(new DAChartBoardSelectionListener() {
contextCombo.add(KernelPageLabels.CONTEXT_SWITCH_CHART_TITLE);
contextCombo.select(0);
contextCombo.setTextAlign(DACustomCombo.TEXT_ALIGN_CENTER);
- contextCombo.setEnabled(true);
+ contextCombo.setEnabled(false);
contextCombo.setComboRender(new TitleComboRenderer());
contextCombo.setComboPopupRender(new TitleComboPopupRenderer());
contextCombo.setButtonRenderer(new DACustomButtonRenderer());
.addMouseMoveListener(new SetRangeMarkerMouseMoveListener(
RangeDataManager.getInstance(), contextChart,
threadTimeline));
-
- dataMaker = KernelDataMaker.getInstance();
-
- clear();
}
private void handleSelection(DAChartBoardItem selectItem) {
@Override
public void updateView() {
- List<KernelDataPerThread> threads = dataMaker.getThreadData();
- int thread_size = threads.size();
-
- for (int i = 0; i < thread_size; i++) {
- KernelDataPerThread kdata = threads.get(i);
- DAChartBoardItem bitem = kdata.getContextChart();
- if (bitem == null) {
- // create board item for this thread context
- DAChartBoardHeightChangeableItem coreItem = new DAChartBoardHeightChangeableItem(
- contextChart, getChartName(kdata));
- initContextSwitchChart(coreItem, true);
-
- DAChart coreChart = coreItem.getChart();
- DAChartSeries coreSeries = new DAChartSeries("core", -1,
- ColorResources.BLUE);
- coreChart.addSeries(coreSeries);
-
- coreItem.setData(kdata);
- kdata.setContextChart(coreItem);
- } else {
- // delete previous drawing items
- bitem.getChart().getSeries(0).clear();
- }
-
- bitem = kdata.getFunctionChart();
- if (kdata.getFunclog() != null && bitem == null) {
- // create board item for function
- DAChartBoardHeightChangeableItem functionItem = new DAChartBoardHeightChangeableItem(
- kdata.getContextChart(), "functions");
- initContextSwitchChart(functionItem, false);
-
- DAChart functionChart = functionItem.getChart();
- DAChartSeries functionSeries = new DAChartSeries("function",
- -1, ColorResources.RED);
- functionChart.addSeries(functionSeries);
-
- functionItem.setData(kdata);
- kdata.setFunctionChart(functionItem);
- } else if (bitem != null) {
- // delete previous drawing items
- bitem.getChart().getSeries(0).clear();
- }
- }
-
- // rearrange items
- rearrangeChart();
-
- // get data from database and add new item to series
- long starttime = (long) (contextChart.getVisibleStartTime() * TimelineConstants.MEGA_DOUBLE);
- long endtime = (long) (contextChart.getVisibleEndTime() * TimelineConstants.MEGA_DOUBLE);
-
- List<List<String>> contextData = dataMaker.getContextDataFromDB(
- starttime, endtime);
- List<List<String>> functionData = dataMaker.getFunctionDataFromDB(
- starttime, endtime);
- int csize = contextData.size();
- int fsize = functionData.size();
-
- for (int i = 0; i < csize; i++) {
- List<String> idata = contextData.get(i);
- int tid = Integer.parseInt(idata
- .get(KernelDataMaker.CONTEXT_DATA_COLUMN_INDEX_TID));
- int cpunum = Integer.parseInt(idata
- .get(KernelDataMaker.CONTEXT_DATA_COLUMN_INDEX_CPU));
- double contextStart = (double) (Long.parseLong(idata
- .get(KernelDataMaker.CONTEXT_DATA_COLUMN_INDEX_STARTTIME)))
- / TimelineConstants.MEGA_DOUBLE;
- double contextEnd = (double) (Long.parseLong(idata
- .get(KernelDataMaker.CONTEXT_DATA_COLUMN_INDEX_ENDTIME)))
- / TimelineConstants.MEGA_DOUBLE;
-
- DAChartBoardItem coreItem = findCoreBoardItem(threads, tid);
- assert (coreItem != null);
- DAChartSeries coreSeries = coreItem.getChart().getSeries(0);
-
- coreSeries.addSeriesItem(new ContextSwitchingChartSeriesItem("core"
- + cpunum, contextStart, contextEnd));
- System.out.println("context(" + tid + ")(" + contextStart + ","
- + contextEnd + ")");
- }
-
- for (int i = 0; i < fsize; i++) {
- List<String> idata = functionData.get(i);
- int tid = Integer.parseInt(idata
- .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_TID));
- String funcname = idata
- .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_FUNCNAME);
- double funcStart = (double) (Long.parseLong(idata
- .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_STARTTIME)))
- / TimelineConstants.MEGA_DOUBLE;
- double funcEnd = (double) (Long.parseLong(idata
- .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_ENDTIME)))
- / TimelineConstants.MEGA_DOUBLE;
- int type = Integer.parseInt(idata
- .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_STARTTYPE))
- + Integer
- .parseInt(idata
- .get(KernelDataMaker.FUNCTION_DATA_COLUMN_INDEX_ENDTYPE));
-
- DAChartBoardItem functionItem = findFunctionBoardItem(threads, tid);
- assert (functionItem != null);
- DAChartSeries funcSeries = functionItem.getChart().getSeries(0);
-
- int style;
- switch (type) {
- case 21:
- case 31:
- style = ContextSwitchingChartSeriesItem.STYLE_OCTAGON_LEFT_ONLY;
- break;
- case 12:
- case 13:
- style = ContextSwitchingChartSeriesItem.STYLE_OCTAGON_RIGHT_ONLY;
- break;
- case 22:
- case 32:
- case 23:
- case 33:
- style = ContextSwitchingChartSeriesItem.STYLE_OCTAGON;
- break;
- case 11:
- default:
- style = ContextSwitchingChartSeriesItem.STYLE_SQUARE;
- break;
- }
-
- funcSeries.addSeriesItem(new ContextSwitchingChartSeriesItem(
- funcname, funcStart, funcEnd, style));
- }
-
- // redraw chart
- contextChart.redraw();
+ contextChart.updateChart(true);
// set chart end time
contextChart.setTotalEndTime(ToolbarArea.getInstance().getTime());
@Override
public void clear() {
contextChart.clear();
+ initIntervalMarkers(contextChart);
}
@Override
return contextChart;
}
- private DAChartBoardItem findCoreBoardItem(
- List<KernelDataPerThread> threads, int tid) {
- int size = threads.size();
- for (int i = 0; i < size; i++) {
- if (threads.get(i).getTid() == tid)
- return threads.get(i).getContextChart();
- }
-
- return null;
- }
-
- private DAChartBoardItem findFunctionBoardItem(
- List<KernelDataPerThread> threads, int tid) {
- int size = threads.size();
- for (int i = 0; i < size; i++) {
- if (threads.get(i).getTid() == tid)
- return threads.get(i).getFunctionChart();
- }
-
- return null;
- }
-
- private void initContextSwitchChart(
- DAChartBoardHeightChangeableItem chartItem, boolean isParent) {
- DAChart chart = chartItem.getChart();
- if (null == chart) {
- return;
- }
-
- DAChartPlot plot = chart.getPlot();
- if (null == plot) {
- return;
- }
-
- chartItem.useExpand(false);
- chartItem.setHeightRatio(0.5);
- chart.getPlot().setAutoHeightRange(AutoRangeType.MANUAL);
- chart.getPlot().setShowAxis(false);
- chart.setChartRenderer(new ContextSwitchingChartRenderer());
-
- if (isParent) {
- plot.setBackgroundImage(ImageResources.BG_GRADIENT);
- } else {
- plot.setBackgroundImage(ImageResources.BG_CHILD_GRADIENT);
- }
-
- 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,
- contextChart));
-
- DAPopupMenuItem endItem = new DAPopupMenuItem(popupMenu,
- DAPopupMenuItem.NONE);
- endItem.setText(TimelineChartLabels.RANGE_CONTEXT_SET_END);
- endItem.addListener(new PopupEndMenuItemClickListener(endItem,
- contextChart));
-
- DAPopupMenuItem fromSelectionItem = new DAPopupMenuItem(popupMenu,
- DAPopupMenuItem.NONE);
- fromSelectionItem
- .setText(TimelineChartLabels.RANGE_CONTEXT_SET_FROM_SELECTION);
- fromSelectionItem
- .addListener(new PopupFromSelectionMenuItemClickListener(
- fromSelectionItem, contextChart));
-
- 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, contextChart.getTimeline());
- chart.addMouseListener(timelineChartMouseEventListener);
- chart.addMouseMoveListener(timelineChartMouseEventListener);
- chart.addMouseTrackListener(new TimelineChartMouseTrackAdapter(
- contextChart.getTimeline()));
- plot.setMarkers(contextChart.getMarkers());
- }
-
- private String getChartName(KernelDataPerThread data) {
- String name = "Pid : " + data.getPid() + "\nTid : " + data.getTid();
- return name;
- }
-
- private void rearrangeChart() {
- DAChartBoardItemList itemList = contextChart.getItemList();
- int listsize = itemList.getItemSize();
-
- TreeMap<KernelDataPerThread, Integer> sortedmap = new TreeMap<KernelDataPerThread, Integer>(
- new KernelDataPerThreadComparator());
-
- for (int i = 0; i < listsize; i++) {
- DAChartBoardItem item = itemList.get(i);
- KernelDataPerThread gdata = (KernelDataPerThread) item.getData();
- sortedmap.put(gdata, i);
- }
-
- Map.Entry<KernelDataPerThread, Integer> entry;
- ArrayList<Integer> arranged = new ArrayList<Integer>();
- while ((entry = sortedmap.pollFirstEntry()) != null) {
- arranged.add(entry.getValue());
- }
-
- contextChart.reArrangeItem(arranged.toArray(new Integer[0]));
- }
-
private void initIntervalMarkers(DAChartBoard board) {
// selection marker
DAChartPlotIntervalMarker selectionMarker = new DAChartPlotIntervalMarker(
package org.tizen.dynamicanalyzer.ui.kernel;
+import java.awt.image.Kernel;
+
+import org.eclipse.nebula.widgets.grid.Grid;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
import org.tizen.dynamicanalyzer.common.AnalyzerConstants;
+import org.tizen.dynamicanalyzer.common.AnalyzerManager;
+import org.tizen.dynamicanalyzer.common.CommonConstants;
+import org.tizen.dynamicanalyzer.common.DASelectionData;
import org.tizen.dynamicanalyzer.model.DAView;
import org.tizen.dynamicanalyzer.nl.KernelPageLabels;
import org.tizen.dynamicanalyzer.resources.ColorResources;
+import org.tizen.dynamicanalyzer.swap.model.data.LogData;
+import org.tizen.dynamicanalyzer.ui.network.NetworkApiListView;
+import org.tizen.dynamicanalyzer.ui.network.NetworkChartData;
+import org.tizen.dynamicanalyzer.ui.network.NetworkChartManager;
+import org.tizen.dynamicanalyzer.ui.range.RangeDataManager;
+import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea;
import org.tizen.dynamicanalyzer.ui.widgets.ViewContainer;
import org.tizen.dynamicanalyzer.ui.widgets.table.TableColumnSizePackListener;
public class KernelListView extends DAView {
public static final String ID = KernelListView.class.getName();
-
+
+ private long analysisStartTime = 0;
+ private long analysisEndTime = 0;
+
int[] innerMaxWeight = { 0, 100 };
int[] outerMaxWeight = { 100, 0 };
-
-// private String[] columnNames = {
-// KernelPageLabels.NETWORK_API_LIST_VIEW_INDEX,
-// KernelPageLabels.NETWORK_API_LIST_VIEW_START_TIME,
-// KernelPageLabels.NETWORK_API_LIST_VIEW_END_TIME,
-// KernelPageLabels.NETWORK_API_LIST_VIEW_PID,
-// KernelPageLabels.NETWORK_API_LIST_VIEW_API,
-// KernelPageLabels.NETWORK_API_LIST_VIEW_OBJECT,
-// KernelPageLabels.NETWORK_API_LIST_VIEW_PARAMETER,
-// KernelPageLabels.NETWORK_API_LIST_VIEW_THREAD_ID,
-// KernelPageLabels.NETWORK_API_LIST_VIEW_RETURN,
-// KernelPageLabels.NETWORK_API_LIST_VIEW_BYTE_SIZE,
-// KernelPageLabels.NETWORK_API_LIST_VIEW_MESSAGE,
-// KernelPageLabels.NETWORK_API_LIST_VIEW_ERRNO };
-//
-// private int[] columnSizes = { 40, 70, 70, 70, 120, 90, 70, 70, 100, 70,
-// 100, 100 };
-// private int[] columnAlignment = { SWT.RIGHT, SWT.LEFT, SWT.LEFT, SWT.LEFT,
-// SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT,
-// SWT.LEFT, SWT.LEFT };
-//
-// int[] sortTypes = { AnalyzerConstants.SORT_TYPE_NUM,
-// 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_NUM,
-// AnalyzerConstants.SORT_TYPE_STRING,
-// AnalyzerConstants.SORT_TYPE_STRING,
-// AnalyzerConstants.SORT_TYPE_STRING,
-// AnalyzerConstants.SORT_TYPE_STRING };
-
+
+ private String[] columnNames = { KernelPageLabels.KERNEL_LIST_VIEW_INDEX,
+ KernelPageLabels.KERNEL_LIST_VIEW_PID,
+ KernelPageLabels.KERNEL_LIST_VIEW_TID,
+ KernelPageLabels.KERNEL_LIST_VIEW_CORE,
+ KernelPageLabels.KERNEL_LIST_VIEW_START_TIME,
+ KernelPageLabels.KERNEL_LIST_VIEW_END_TIME,
+ KernelPageLabels.KERNEL_LIST_VIEW_EXECUTION_TIME,
+ KernelPageLabels.KERNEL_LIST_VIEW_START_PC,
+ KernelPageLabels.KERNEL_LIST_VIEW_END_PC,
+ KernelPageLabels.KERNEL_LIST_VIEW_FUNCTION };
+
+ private int[] columnSizes = { 40, 40, 40, 40, 90, 90, 90, 120, 120, 250 };
+
+ private int[] columnAlignment = { SWT.RIGHT, SWT.LEFT, SWT.LEFT, SWT.LEFT,
+ SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT, SWT.LEFT };
+
+ int[] sortTypes = { AnalyzerConstants.SORT_TYPE_NUM,
+ AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM,
+ AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM,
+ AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM,
+ AnalyzerConstants.SORT_TYPE_NUM, AnalyzerConstants.SORT_TYPE_NUM,
+ AnalyzerConstants.SORT_TYPE_STRING };
+
KernelListTable tableComp = null;
public KernelListView(Composite parent, int style) {
super(parent, style);
+ name = KernelPageLabels.KERNEL_LIST_VIEW_NAME;
this.setLayout(new FillLayout());
ViewContainer viewContainer = new ViewContainer(this, true);
viewContainer
- .setTitleText(KernelPageLabels.THREAD_LIST_VIEW_THREAD_TITLE);
+ .setTitleText(KernelPageLabels.KERNEL_LIST_VIEW_TITLE_CORE);
setMaxWeight(innerMaxWeight, outerMaxWeight);
Composite contents = viewContainer.getContentArea();
contents.setLayout(new FillLayout());
tableComp = new KernelListTable(contents, SWT.NONE, SWT.MULTI
| SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
-// tableComp.setSortTypes(sortTypes);
-// tableComp.setFailedAPITableIndex(12);
-// tableComp.setColumnAlignment(columnAlignment);
-// tableComp.setColumns(columnNames);
-// tableComp.setColumnSize(columnSizes);
- tableComp.setTableName(KernelPageLabels.THREAD_LIST_VIEW_THREAD_TITLE);
-// contents.addControlListener(new TableColumnSizePackListener(tableComp,
-// columnSizes));
+ tableComp.setSortTypes(sortTypes);
+ tableComp.setColumnAlignment(columnAlignment);
+ tableComp.setColumns(columnNames);
+ tableComp.setColumnSize(columnSizes);
+ tableComp.setTableName(KernelPageLabels.KERNEL_LIST_VIEW_TITLE_CORE);
+ contents.addControlListener(new TableColumnSizePackListener(tableComp,
+ columnSizes));
+ }
+/*
+ @Override
+ public void updateView() {
+ if (null == data) {
+ return;
+ }
+
+ long newAnalysisStartTime = 0;
+ long newAnalysisEndTime = 0;
+
+ if (RangeDataManager.getInstance().isBeingAnalyzed()) {
+ newAnalysisStartTime = RangeDataManager.getInstance()
+ .getAnalysisStartTime();
+ newAnalysisEndTime = RangeDataManager.getInstance()
+ .getAnalysisEndTime();
+ } else {
+ newAnalysisStartTime = 0;
+ newAnalysisEndTime = 0;
+ }
+
+ if (newAnalysisStartTime != analysisStartTime
+ || newAnalysisEndTime != analysisEndTime) {
+ analysisStartTime = newAnalysisStartTime;
+ analysisEndTime = newAnalysisEndTime;
+ tableComp.updateTable();
+ return;
+ }
+
+ int selectedPid = ToolbarArea.getInstance().getSelectedPid();
+ if (preSelectionPId != -1 && preSelectionPId != selectedPid) {
+ tableComp.updateTable();
+ }
+ preSelectionPId = selectedPid;
+
+ if (tableComp.getTable().getItemCount() > 0
+ && data.getContents().size() != tableComp.getTable()
+ .getItemCount()) {
+ tableComp.updateTable();
+ }
+
+ }
+
+ @Override
+ public void updateView(DASelectionData data) {
+ NetworkChartManager.getInstance().setPacketMessage(
+ CommonConstants.EMPTY);
+ NetworkChartManager.getInstance().setSendAckTime(
+ CommonConstants.EMPTY);
+ NetworkChartData pageData = (NetworkChartData) data.getData();
+
+ if (!(pageData instanceof NetworkChartData)) {
+ selectionStartTime = data.getStartTime();
+ selectionEndTime = data.getEndTime();
+ } else {
+ this.data = pageData;
+ }
+ tableComp.getTable().removeAll();
+ tableComp.updateTable();
+ tableComp.setSelectionByTime(selectionStartTime, selectionEndTime);
+
+ }
+
+ @Override
+ public void setSelection(LogData data) {
+ if (null == data) {
+ return;
+ }
+ int seq = data.getSeq();
+ tableComp.updateTable();
+ int nSize = tableComp.getTable().getItemCount();
+ for (int ii = 0; ii < nSize; ii++) {
+ if (tableComp.getTable().getItem(ii).getText(0)
+ .equals(Integer.toString(seq))) {
+ tableComp.getTable().setSelection(ii);
+ tableComp
+ .getTable()
+ .getVerticalBar()
+ .setSelection(
+ getScrollSelectionIndex(tableComp.getTable(),
+ ii));
+ tableComp.updateTable();
+ }
+ }
+ long selectedTime = data.getTime();
+ DASelectionData selData = new DASelectionData(NetworkApiListView.ID,
+ selectedTime, selectedTime,
+ tableComp.getTable().getSelection(), tableComp.getTable());
+ AnalyzerManager.getCurrentPage().updatePage(selData);
+ }
+
+ private int getScrollSelectionIndex(Grid table, int selection) {
+ int size = table.getVerticalBar().getThumb() / 2;
+ int output = selection - size;
+ output = (output < 0) ? 0 : output;
+ return output;
+ }
+
+ @Override
+ public Control getControl() {
+ return tableComp;
+ }
+
+ @Override
+ public void clear() {
+ tableComp.getTable().removeAll();
+ data = null;
+ }
+
+ public NetworkChartData getPageData() {
+ return data;
+ }
+
+ public long getRangeStartTime() {
+ return analysisStartTime;
}
+ public long getRangeEndTime() {
+ return analysisEndTime;
+ }
+*/
}
ContextSwitchingChartView kernelChartView = new ContextSwitchingChartView(leftForm,
SWT.NONE);
addView(kernelChartView);
- DATabComposite lefttabView = new DATabComposite(leftForm, SWT.NONE);
+ CallFlowTabComposite lefttabView = new CallFlowTabComposite(leftForm, SWT.NONE);
addView(lefttabView);
{
- CallFlowView callflowView = new CallFlowView(
+ CallFlowChartView callflowView = new CallFlowChartView(
lefttabView.getContentComposite(), SWT.NONE);
lefttabView.addView(callflowView, false);
int size = inputs.size();
for (int i = 0; i < size; i++) {
LogData input = (LogData) inputs.get(i);
-
+
switch (input.getId()) {
- case DataChannelConstants.MSG_CONTEXT_SWITCH_ENTRY: {
+ case DataChannelConstants.MSG_CONTEXT_SWITCH_EXIT: {
ContextSwitchData csdata = (ContextSwitchData) input;
int tid = csdata.getTid();
-
+
KernelDataPerThread kdata = findKernelData(tid);
if (kdata == null) { // thread id is not exist in thread id
kdata = new KernelDataPerThread(csdata.getPid(), tid,
}
break;
}
- case DataChannelConstants.MSG_CONTEXT_SWITCH_EXIT: {
+ case DataChannelConstants.MSG_CONTEXT_SWITCH_ENTRY: {
ContextSwitchData csdata = (ContextSwitchData) input;
ContextSwitchData precore;
int tid = csdata.getTid();
-
+
KernelDataPerThread kdata = findKernelData(tid);
if (kdata == null) { // thread id is not exist
// TODO : error
return queriedContextData;
}
- public List<List<String>> getFunctionDataFromDB(long start, long end) {
+ public List<List<String>> getFunctionDataFromDB(long start, long end,
+ int tid) {
DBTableManager dbManager = DBTableManager.getInstance();
DBTableInfo fnTable = dbManager
.getTableInfo(DBTableManager.TABLE_INDEX_FUNCTION_CALL_DATA);
SqlManager sql = SqlManager.getInstance();
- String where = "where " + DBTableManager.CUSTOM_COLUMN_START_TIME
- + " < " + end + " and " + DBTableManager.CUSTOM_COLUMN_END_TIME
- + " > " + start + " order by "
+ String where = "where ";
+ if (tid >= 0) {
+ where = where + DBTableManager.COMMON_COLUMN_TID + " = " + tid
+ + " and ";
+ }
+ where = where + DBTableManager.CUSTOM_COLUMN_START_TIME + " < " + end
+ + " and " + DBTableManager.CUSTOM_COLUMN_END_TIME + " > "
+ + start + " order by "
+ DBTableManager.CUSTOM_COLUMN_START_TIME;
String[] fnColumns = fnTable.getColumnNames();
private Thread updateLogThread = null;
private KernelBlockingQueue<LogPackage> logPackQueue = null;
private KernelDataMaker kdataMaker = null;
-
+
public KernelDataManager() {
logPackQueue = new KernelBlockingQueue<LogPackage>();
kdataMaker = KernelDataMaker.getInstance();
}
-
+
public synchronized static KernelDataManager getInstance() {
if (null == instance) {
instance = new KernelDataManager();
default:
break;
}
-
+
kernelLogs.add(top);
} while (true);
SWT.NONE);
tabView.addView(uiPage, false);
-// Composite kernelPage = new KernelPage(
-// tabView.getContentComposite(), SWT.NONE);
-// tabView.addView(kernelPage, false);
+ Composite kernelPage = new KernelPage(
+ tabView.getContentComposite(), SWT.NONE);
+ tabView.addView(kernelPage, false);
Composite summaryPage = new SummaryPage(
tabView.getContentComposite(), SWT.NONE);