[Title] Chart drawing performance enhancement
authorjungwook.ryu <jungwook.ryu@samsung.com>
Thu, 6 Mar 2014 08:06:10 +0000 (17:06 +0900)
committerjungwook.ryu <jungwook.ryu@samsung.com>
Thu, 6 Mar 2014 08:06:10 +0000 (17:06 +0900)
[Desc.] drawing whole series(line, lineArea) at one time.
[Issue]

org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DAChartRenderer.java

index e3f4ce0..e3c8c6d 100644 (file)
@@ -896,22 +896,29 @@ public class DAChartRenderer {
 
                int newPixcelX = plot.getXPixcelFromX(currentX, r);
                int newPixcelY = plot.getYPixcelFromY(maxY, seriesItem.getY(), r);
-
+               
+               /*
+                * collect pixcels to draw and then draw them at once.
+                */
+               List<Integer> points = new ArrayList<Integer>();
+               points.add(newPixcelX);
+               points.add(newPixcelY);
                for (int i = index; i < seriesItemSize; i++) {
-                       seriesItem = seriesItems.get(i);
+                       seriesItem = seriesItems.get(i);
                        currentX = seriesItem.getX();
 
-                       oldPixcelX = newPixcelX;
-                       oldPixcelY = newPixcelY;
-
                        newPixcelX = plot.getXPixcelFromX(currentX, r);
                        newPixcelY = plot.getYPixcelFromY(maxY, seriesItem.getY(), r);
-
-                       gc.drawLine(oldPixcelX, oldPixcelY, newPixcelX, newPixcelY);
+                       
+                       points.add(newPixcelX);
+                       points.add(newPixcelY);
+                       
                        if (currentX > plot.getVisibleEndX()) {
-                               return;
+                               break;
                        }
                }
+               gc.drawPolyline(convertArray(points));
+               
                // // draw endVal
                if (true == bEndVal) {
                        int endX = plot.getXPixcelFromX(plot.getValidEndX(), r);
@@ -967,27 +974,38 @@ public class DAChartRenderer {
 
                int newPixcelX = plot.getXPixcelFromX(currentX, r);
                int newPixcelY = plot.getYPixcelFromY(maxY, seriesItem.getY(), r);
-
+               
+               /*
+                * collect pixcels to draw and then draw them at once.
+                */
+               List<Integer> points = new ArrayList<Integer>();
+               points.add(newPixcelX);
+               points.add(baseY);
+               points.add(newPixcelX);
+               points.add(newPixcelY);
                for (int i = index; i < seriesItemSize; i++) {
-                       seriesItem = seriesItems.get(i);
+                       seriesItem = seriesItems.get(i);
                        currentX = seriesItem.getX();
 
-                       oldPixcelX = newPixcelX;
-                       oldPixcelY = newPixcelY;
-
                        newPixcelX = plot.getXPixcelFromX(currentX, r);
                        newPixcelY = plot.getYPixcelFromY(maxY, seriesItem.getY(), r);
-                       int[] polygon = { oldPixcelX, baseY, oldPixcelX, oldPixcelY,
-                                       newPixcelX, newPixcelY, newPixcelX, baseY };
-                       gc.setAlpha((int) (255 * 0.8));
-                       gc.fillPolygon(polygon);
-                       gc.setAlpha((int) (255 * 0.2));
-                       gc.drawPolygon(polygon);
+                       points.add(newPixcelX);
+                       points.add(newPixcelY);
+                       
+                       if (i == seriesItemSize - 1 || currentX > plot.getVisibleEndX()) {
+                               points.add(newPixcelX);
+                               points.add(baseY);
+                       }
                        if (currentX > plot.getVisibleEndX()) {
-                               gc.setAlpha(255);
-                               return;
+                               break;
                        }
                }
+               int[] pointArray = convertArray(points);
+               gc.setAlpha((int) (255 * 0.8));
+               gc.fillPolygon(pointArray);
+               gc.setAlpha((int) (255 * 0.2));
+               gc.drawPolygon(pointArray);
+               
                // // draw endVal
                if (true == bEndVal) {
                        int endX = plot.getXPixcelFromX(plot.getValidEndX(), r);
@@ -1578,4 +1596,12 @@ public class DAChartRenderer {
 
                return true;
        }
+       
+       private int[] convertArray(List<Integer> list) {
+               int[] array = new int[list.size()];
+               for (int i = 0; i < list.size(); i++) {
+                       array[i] = list.get(i).intValue();
+               }
+               return array;
+       }
 }