Re: [GCJ] Performance of GUI applications on embedded systems

"ffileppo" <[email protected]>
Newsgroups gmane.comp.gcc.java.devel,gmane.comp.java.classpath.devel
Message-ID <[email protected]>
> >> Here's one improvement.  If you can get rid of the places in the GTK peers
> >> where class and method lookups are performed at runtime you'll probably
> >> have a fix.  This shouldn't be a massive amount of work, just rather
> >> boring.
> >>
> >> In gcj,
> >>
> >>   * Compiled java code is quite fast.
> >>   * Class lookup by name is slow.
> >>   * Calling JNI code from compiled java code is quite fast.
> >>   * Calling compiled java code from JNI code is slow.
> >>   * Exceptions are slow.
>
> > I'm testing your patch on my embedded system and now I can see that GUI performance are very much better (particularly during application startup).
> >
> > Thank you so much!
> >
> > However running my test case (please see my first post) I see that CPU usage is always at 100% (after the application is running),
> > so the responsiveness is still not very good.
>
> What do you expect?  You're setting up a Timer with a delay of
> 0 milliseconds between events, and it's running continuously.
>
> Andrew.
>

You're right.
However I'm experiencing slowness when testing some other GUI sample application (e.g. the test case attached at the end).

In this particular test case, the application takes a lot of time to startup (compared to the same device, running WinCE and CrEme JVM) and during start up the CPU usage is always at 100%.

After startup, I'v also noticed that highlighting and/or clicking a certain number of times on buttons cause the application to hang and after that the CPU usage is always 100%.

I'm still trying to get oprofile working on my target device to see what's going wrong.

Thank you,
Francesco

Test case:

import javax.swing.JComponent;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

public class GUITest {

  public static void main(String[] args) {

  JFrame frame = new JFrame();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  JComponent newContentPane = new TestUI();
  frame.setTitle("TestUI");
  newContentPane.setOpaque(true);
  frame.setContentPane(newContentPane);
  frame.setBounds(10, 10, 500, 400);
  frame.setVisible(true);

  }

  static class TestUI extends JPanel {

  long startTime;
  JPanel createPanel(int start) {
  JPanel p = new JPanel();
  p.setLayout(null);

  for (int i=0; i<100; i++) {
      JButton ltit = new JButton("Variable "+(i+start)+": ");
      long val = System.currentTimeMillis() - startTime;
      JButton lval = new JButton(""+val);
      ltit.setBounds(5, 10+20*i, 150, 15);
      lval.setBounds(200, 10+20*i, 150, 15);
      p.add(ltit);
      p.add(lval);
  }
  return p;
  }

  TestUI() {
  super(new BorderLayout());
  startTime = System.currentTimeMillis();
  JTabbedPane p = new JTabbedPane();

  for (int i=0; i<10; i++) {
     JPanel page1 = createPanel(i*100+1);
     p.add("P"+i, page1);
  }

  add(p, BorderLayout.CENTER);
  }
  }

}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.