From 6d309225dc5a7808565a689c1d250099362d62a4 Mon Sep 17 00:00:00 2001 From: "jungwook.ryu" Date: Thu, 6 Mar 2014 17:06:10 +0900 Subject: [PATCH] [Title] Chart drawing performance enhancement [Desc.] drawing whole series(line, lineArea) at one time. [Issue] --- .../widgets/chart/DAChartRenderer.java | 68 +++++++++++++++------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DAChartRenderer.java b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DAChartRenderer.java index e3f4ce0..e3c8c6d 100644 --- a/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DAChartRenderer.java +++ b/org.tizen.dynamicanalyzer.widgets/src/org/tizen/dynamicanalyzer/widgets/chart/DAChartRenderer.java @@ -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 points = new ArrayList(); + 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 points = new ArrayList(); + 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 list) { + int[] array = new int[list.size()]; + for (int i = 0; i < list.size(); i++) { + array[i] = list.get(i).intValue(); + } + return array; + } } -- 2.7.4