From: greatim Date: Tue, 7 Jan 2014 11:09:54 +0000 (+0900) Subject: [Title] enhance DATimelineRenderer and Callflow Chart X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f6fef0320ef2aaf38bce8f4ba02d6f7f6fbb0a2a;p=sdk%2Ftools%2Fdynamic-analyzer.git [Title] enhance DATimelineRenderer and Callflow Chart [Desc.] [Issue] --- diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/timeline/DATimelineTimeRenderer.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/timeline/DATimelineTimeRenderer.java index 59171e6..b5023d0 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/timeline/DATimelineTimeRenderer.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/timeline/DATimelineTimeRenderer.java @@ -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(); diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/timeline/DATimelineTinyTimeRenderer.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/timeline/DATimelineTinyTimeRenderer.java index 2a1659c..7f393dc 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/timeline/DATimelineTinyTimeRenderer.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/timeline/DATimelineTinyTimeRenderer.java @@ -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); + } } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChart.java index 2202873..dad5c26 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/kernel/CallFlowChart.java @@ -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 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> 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(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> 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(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();