Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4468154

Graphics.drawImage() is much slower under 1.4 than under 1.2

    XMLWordPrintable

    Details

    • Subcomponent:
      2d
    • Resolved In Build:
      beta2
    • CPU:
      sparc
    • OS:
      solaris_8

      Description

      In Sun Management Center, Graphics.paintImage() is being used, we first copy the screen to a image as double buffer, then when there is a request from awt for repaint, the image will be painted again.
      Under jdk1.2, the speed to paint the image is quick, but under jdk1.4, the paint speed is very slow.

      refer to /net/hotsauce.eng/guest/sunmc_jdk1.4/src/java/com/sun/symon/base/console/views/topology/CvTopologyViewPanel.java for the implementation of SunMC.

      Please compile and run the following codes under jdk1.2 and jdk1.4, you can find the refresh difference.

      import javax.swing.*;
      import java.awt.*;
      import javax.swing.plaf.*;

      public class Test {
          Image DoubleBuffer = null;
          public Test() {
              JFrame f = new JFrame();
      MyCom com = new MyCom();
      f.getContentPane().add(com);
      f.setSize(800, 500);
      f.setVisible(true);
      com.createDBBuffer();
          }
          
          public static void main(String[] args) {
              new Test();
      new Test();
          }
      }

      class MyCom extends JComponent {
          Image DoubleBuffer = null;
          
          public MyCom() {
              setUI(MyComUI.createUI(this));
          }

          public void createDBBuffer() {
              DoubleBuffer = createImage(500, 500);
      Graphics gr = DoubleBuffer.getGraphics();
      gr.setFont(getFont());
              gr.setColor(Color.blue);
              gr.fillRect(0, 0, 800, 500);
          }

          public void paintBuffer(Graphics gr) {
              if (DoubleBuffer != null) {
      gr.drawImage(DoubleBuffer, 0, 0, Color.black, null);
      }
          }
      }

      class MyComUI extends ComponentUI {
          MyCom com;
          
          public MyComUI(JComponent c) {
              com = (MyCom)c;
          }

          public void paint(Graphics g, JComponent c) {
              com.paintBuffer(g);
          }

          public Dimension getPreferredSize(JComponent c) {
              return new Dimension(800, 500);
          }

          public Dimension getMinimumSize(JComponent c) {
              return getPreferredSize(c);
          }

          public Dimension getMaximumSize(JComponent c) {
              return getPreferredSize(c);
          }

          public static ComponentUI createUI(JComponent c) {
              return new MyComUI(c);
          }
      }

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              tdv Dmitri Trembovetski (Inactive)
              Reporter:
              duke J. Duke (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: