Print this page
rev 54883 : JDK-8220154 Improve java2d rendering performance on macOS by using Metal framework

Split Close
Expand all
Collapse all
          --- old/src/java.desktop/macosx/classes/sun/lwawt/LWComponentPeer.java
          +++ new/src/java.desktop/macosx/classes/sun/lwawt/LWComponentPeer.java
↓ open down ↓ 69 lines elided ↑ open up ↑
  70   70  
  71   71  import com.sun.java.swing.SwingUtilities3;
  72   72  import sun.awt.AWTAccessor;
  73   73  import sun.awt.PaintEventDispatcher;
  74   74  import sun.awt.RepaintArea;
  75   75  import sun.awt.SunToolkit;
  76   76  import sun.awt.event.IgnorePaintEvent;
  77   77  import sun.awt.image.SunVolatileImage;
  78   78  import sun.awt.image.ToolkitImage;
  79   79  import sun.java2d.SunGraphics2D;
       80 +import sun.java2d.macos.MacOSFlags;
       81 +import sun.java2d.metal.MTLRenderQueue;
  80   82  import sun.java2d.opengl.OGLRenderQueue;
  81   83  import sun.java2d.pipe.Region;
       84 +import sun.java2d.pipe.RenderQueue;
  82   85  import sun.util.logging.PlatformLogger;
  83   86  
  84   87  public abstract class LWComponentPeer<T extends Component, D extends JComponent>
  85   88      implements ComponentPeer, DropTargetPeer
  86   89  {
  87   90      private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.lwawt.focus.LWComponentPeer");
  88   91  
  89   92      /**
  90   93       * State lock is to be used for modifications to this peer's fields (e.g.
  91   94       * bounds, background, font, etc.) It should be the last lock in the lock
↓ open down ↓ 1335 lines elided ↑ open up ↑
1427 1430                  throw new InternalError("Painting must be done on EDT");
1428 1431              }
1429 1432              synchronized (getDelegateLock()) {
1430 1433                  // JComponent.print() is guaranteed to not affect the double buffer
1431 1434                  getDelegate().print(g);
1432 1435              }
1433 1436          }
1434 1437      }
1435 1438  
1436 1439      protected static final void flushOnscreenGraphics(){
1437      -        final OGLRenderQueue rq = OGLRenderQueue.getInstance();
     1440 +        RenderQueue rq = MacOSFlags.isMetalEnabled() ?
     1441 +                MTLRenderQueue.getInstance() : OGLRenderQueue.getInstance();
1438 1442          rq.lock();
1439 1443          try {
1440 1444              rq.flushNow();
1441 1445          } finally {
1442 1446              rq.unlock();
1443 1447          }
1444 1448      }
1445 1449  
1446 1450      /**
1447 1451       * Used by ContainerPeer to skip all the paint events during layout.
↓ open down ↓ 17 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX