[Title] enhance DATimelineRenderer and Callflow Chart
authorgreatim <jaewon81.lim@samsung.com>
Tue, 7 Jan 2014 11:09:54 +0000 (20:09 +0900)
committergreatim <jaewon81.lim@samsung.com>
Tue, 7 Jan 2014 11:09:54 +0000 (20:09 +0900)
[Desc.]
[Issue]

org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/timeline/DATimelineTimeRenderer.java
org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/timeline/DATimelineTinyTimeRenderer.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChart.java

index 59171e6..b5023d0 100644 (file)
@@ -47,7 +47,7 @@ public class DATimelineTimeRenderer extends DATimelineRenderer {
        protected int startTime;
        protected int scale;
 
-       private void drawRangeMarkers(GC gc, DATimeline timeline) {
+       protected void drawRangeMarkers(GC gc, DATimeline timeline) {
                DATimelineMarker startMarker = timeline.getStartRangeMarker();
                DATimelineMarker endMarker = timeline.getEndRangeMarker();
 
index 2a1659c..7f393dc 100644 (file)
@@ -10,7 +10,8 @@ import org.tizen.dynamicanalyzer.widgets.helper.ColorResources;
 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) {
@@ -28,6 +29,34 @@ public class DATimelineTinyTimeRenderer extends DATimelineTimeRenderer {
                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));
 
@@ -68,5 +97,23 @@ public class DATimelineTinyTimeRenderer extends DATimelineTimeRenderer {
                        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);
+               }
        }
 }
index 2202873..dad5c26 100644 (file)
@@ -55,11 +55,10 @@ import org.tizen.dynamicanalyzer.widgets.chartBoard.DAChartBoardHeightChangeable
 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;
 
@@ -93,66 +92,62 @@ public class CallFlowChart extends DAChartBoard {
                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();