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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> >> 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);
  }
  }

}




[Index of Archives]     [Linux Kernel]     [Linux Cryptography]     [Fedora]     [Fedora Directory]     [Red Hat Development]

  Powered by Linux