TimeSiries is killing my CPU

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
yma
Posts: 1
Joined: Sun May 16, 2010 12:09 am
antibot: No, of course not.

TimeSiries is killing my CPU

Post by yma » Sun May 16, 2010 12:23 am

Hi,

I am really to this library and i am facing an issue were the cpu will become 100% after updating my data.
i have 5 subplots each has 4 dataset and all will be updated at the same time.
i have a XYLineAndShapeRenderer for each subplot also i tried SamplingXYLineRenderer and StandardXYItemRenderer none helped.

i am also limiting my data to 1 hour i am refreshing every 1sec. and i am calling chart.setNotify(false); and chart.setNotify(true); before and after i update my data set.

Please help!

Code: Select all

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CombinedDomainXYPlot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.SamplingXYLineRenderer;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;


public class RealWindow extends javax.swing.JFrame implements ActionListener {

    /** The number of subplots. */
    public static final int SUBPLOT_COUNT = 5;
    public static final int PORT_NUM = 4;

    /** The datasets. */
    private TimeSeriesCollection[] datasets;
    double [][] arrayValue = new double [SUBPLOT_COUNT][PORT_NUM];
  

    JFreeChart chart;

    //SamplingXYLineRenderer myNewRenderer;

   
   

 
    public RealWindow() {

   
      XYLineAndShapeRenderer[] myNewRenderer = new XYLineAndShapeRenderer [SUBPLOT_COUNT];
        final CombinedDomainXYPlot plot = new CombinedDomainXYPlot(new DateAxis("Time"));
        this.datasets = new TimeSeriesCollection[SUBPLOT_COUNT];
        XYPlot[] myPlot = new XYPlot [SUBPLOT_COUNT];
        

        String[] title= {"E","D","C","B","A"};
       
        for (int i = 0; i < SUBPLOT_COUNT; i++) {
            myRenderer[i] = new StandardXYItemRenderer ();
            myNewRenderer[i]=new XYLineAndShapeRenderer(true,false);
            myNewRenderer[i].setSeriesPaint(0, Color.RED);
            myNewRenderer[i].setSeriesPaint(1, Color.GREEN);
            myNewRenderer[i].setSeriesPaint(2, Color.BLUE);
            myNewRenderer[i].setSeriesPaint(3, Color.ORANGE);


            this.datasets[i] = createDataset ("port");
            final NumberAxis rangeAxis = new NumberAxis(title[i]);
            rangeAxis.setAutoRangeIncludesZero(true);

            myPlot[i] = new XYPlot(
            this.datasets[i], null, rangeAxis,myNewRenderer[i]);
           

           

               
            
            myPlot[i].setBackgroundPaint(Color.lightGray);
            myPlot[i].setDomainGridlinePaint(Color.white);
            myPlot[i].setRangeGridlinePaint(Color.white);
            plot.add(myPlot[i]);
        
        }

         for (int i = 0;i<SUBPLOT_COUNT;i++)
              {
               for (int j =0;j<datasets[i].getSeriesCount();j++)
               {
                   this.arrayValue[i][j]=0;
                 
                   this.datasets[i].getSeries(j).setMaximumItemCount (1000);
               }
              }

        chart = new JFreeChart("Real Time Data", plot);

        chart.setBorderPaint(Color.black);
        chart.setBorderVisible(true);
        chart.setBackgroundPaint(Color.white);
        chart.removeLegend();
        chart.addLegend(new LegendTitle(myPlot[0]));
       
        plot.setBackgroundPaint(Color.lightGray);
        plot.setDomainGridlinePaint(Color.white);
        plot.setRangeGridlinePaint(Color.white);

        final ValueAxis axis = plot.getDomainAxis();
        axis.setAutoRange(true);
        axis.setFixedAutoRange(300000.0);  // 60000.060 seconds3000000.0

        final JPanel content = new JPanel(new BorderLayout());

        final ChartPanel chartPanel = new ChartPanel(chart);

        final JButton button = new JButton("Clear Data");
        button.setActionCommand("Clear");       
        button.addActionListener(this);
        content.add(button, BorderLayout.SOUTH);
        content.add(chartPanel);

       
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 470));
        chartPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        setContentPane(content);
        pack();

    }


    public void actionPerformed(final ActionEvent e) {
        if (e.getActionCommand().equals("Clear")) {
                        for (int i = 0;i<SUBPLOT_COUNT;i++)
              {
               for (int j =0;j<datasets[i].getSeriesCount();j++)
               {
                   this.datasets[i].getSeries(j).clear();
               }
               
              }

           

        }
    }

 private TimeSeriesCollection createDataset(String name) {
      
          TimeSeries [] series = new TimeSeries [PORT_NUM];
          final TimeSeriesCollection collection = new TimeSeriesCollection();
            for (int j = 0;j <PORT_NUM;j++)
               {
                    series [j] = new TimeSeries(name+""+j, Millisecond.class);
                    collection.addSeries(series [j]);


                  }
                       return collection;

    }


         public void updateAllCharts () {

             final Millisecond now = new Millisecond();
             chart.setNotify(false) ;
             // System.out.println("Now = " + now.toString());
              for (int i = 0;i<SUBPLOT_COUNT;i++)
              {
               for (int j =0;j<datasets[i].getSeriesCount();j++)
               {
                   this.datasets[i].getSeries(j).addOrUpdate(new Millisecond(), this.arrayValue[i][j]);
            
               }
              }
             chart.setNotify(true);

             
        }

}

Locked