import org.tizen.dynamicanalyzer.widgets.helper.Formatter;
public class DATimelineTinyTimeRenderer extends DATimelineTimeRenderer {
- private static final int STRING_GAP = 100;
+ private static final int MAX_STRING_GAP = 200;
+ private static final int MIN_STRING_GAP = 40;
@Override
public void draw(GC gc, DATimeline timeline) {
double oneSecondInterval = scale * DEFAULT_INTERVAL;
double startTime = timeline.getStartTime();
+ int STRING_GAP = (int) oneSecondInterval;
+ boolean half = true;
+ if (STRING_GAP > MAX_STRING_GAP) {
+ int newgap = 0;
+ do {
+ if (newgap != 0)
+ STRING_GAP = newgap;
+
+ if (half) {
+ newgap = STRING_GAP / 2;
+ half = false;
+ } else {
+ newgap = STRING_GAP / 5;
+ half = true;
+ }
+ } while (newgap > MIN_STRING_GAP);
+ } else if (STRING_GAP < MIN_STRING_GAP) {
+ do {
+ if (half) {
+ STRING_GAP = STRING_GAP * 2;
+ half = false;
+ } else {
+ STRING_GAP = STRING_GAP * 5;
+ half = true;
+ }
+ } while (STRING_GAP < MIN_STRING_GAP);
+ }
+
BigDecimal timeInterval = new BigDecimal(String.valueOf(STRING_GAP
/ oneSecondInterval));
gc.drawText(timeString, pixcelX - p.x / 2, 1, true);
gc.setForeground(ColorResources.TIMELINE_TICK_COLOR);
}
+
+ drawRangeMarkers(gc, timeline);
+
+ if (timeline.getDrawDetailedTime()) {
+ gc.drawImage(balloon, 0, 0, balloon.getBounds().width,
+ balloon.getBounds().height,
+ timeline.getDetailedTimePosition() - balloonHalfWidth, 0,
+ balloon.getBounds().width, timeline.getBounds().height - 1);
+
+ String time = Formatter.toTimeFormat((long) (timeline
+ .getDetailedTime() * 1000000));
+ gc.setForeground(ColorResources.BLACK);
+ gc.setFont(timeBalloonFont);
+ gc.drawString(time,
+ timeline.getDetailedTimePosition()
+ - gc.stringExtent(time).x / 2, balloonHalfHeight
+ - gc.stringExtent(time).y / 2 - 4, true);
+ }
}
}
import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardItemList;
import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenu;
import org.tizen.dynamicanalyzer.widgets.popupMenu.DAPopupMenuItem;
-import org.tizen.dynamicanalyzer.widgets.timeline.DATimeline;
-import org.tizen.dynamicanalyzer.widgets.timeline.DATimelineMarker;
public class CallFlowChart extends DAChartBoard {
private KernelDataPerThread selectedData = null;
+ private boolean dirty = false;
private final KernelDataMaker dataMaker = KernelDataMaker.getInstance();
private HashMap<String, DAChartSeries> seriesMap = null;
updateChart();
super.callBackSizeChanged();
}
-
+
public void itemListClear() {
DAChartBoardItemList itemList = getItemList();
- DATimeline timeline = getTimeline();
-
itemList.clear();
itemList.setSize(0, 0);
- setTotalEndTime(0);
- timeline.setStartTime(0);
+
if (null != selectItem) {
selectItem = null;
}
- DATimelineMarker marker = timeline.getStartRangeMarker();
- if (null != marker) {
- timeline.getStartRangeMarker().setTime(-1);
- }
- marker = timeline.getEndRangeMarker();
- if (null != marker) {
- timeline.getEndRangeMarker().setTime(-1);
- }
- timeline.redraw();
-
}
public void setSelectedData(KernelDataPerThread data) {
selectedData = data;
+ dirty = true;
}
public void updateChart() {
// remove all previous items
- itemListClear();
- if (seriesMap != null) {
- seriesMap.clear();
- seriesMap = null;
+ if(dirty) {
+ itemListClear();
+ if (seriesMap != null) {
+ seriesMap.clear();
+ seriesMap = null;
+ }
}
if (selectedData == null) {
+ redraw();
+ update();
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);
+
+ if(dirty) {
+ // 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);
+ }
+
+ dirty = false;
}
drawChart();