[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-2d-dev
Subject:    Re: RFR: 7001973: java/awt/Graphics2D/CopyAreaOOB.java fails
From:       Masanori Yano <myano () openjdk ! java ! net>
Date:       2021-09-30 8:43:30
Message-ID: 5Cz27HBZADRf75BlHEr0SD89JFLQqlt3mpqQ3qk0cUA=.adb31201-4b61-4bbd-bb12-3a94bb848aa4 () github ! com
[Download RAW message or body]

On Wed, 29 Sep 2021 00:42:01 GMT, Sergey Bylokhov <serb@openjdk.org> wrote:

> Do you know why we post it twice? It does not seem right, since we repaint all \
> content in the apps like Netbeans/Idea and it is quite a heavyweight operation.

Because SurfaceData is judged to be lost when 1st getGraphics() is called on 1st \
PaintEvent processing.

https://github.com/openjdk/jdk/blob/master/src/java.desktop/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java#L478


I traced PaintEvent, then I got following stacktrace.


breakpoint hit: "Thread=AWT-EventQueue-0", \
java.awt.event.PaintEvent.<init>()、line=106 bci=0

  [1] java.awt.event.PaintEvent.<init> (PaintEvent.java:106)
  [2] sun.awt.PaintEventDispatcher.createPaintEvent (PaintEventDispatcher.java:80)
  [3] sun.awt.windows.WComponentPeer.postPaintIfNecessary (WComponentPeer.java:892)
  [4] sun.awt.windows.WComponentPeer.handlePaint (WComponentPeer.java:886)
  [5] sun.java2d.d3d.D3DScreenUpdateManager.repaintPeerTarget \
(D3DScreenUpdateManager.java:283)  [6] sun.java2d.d3d.D3DScreenUpdateManager.validate \
(D3DScreenUpdateManager.java:492)  [7] \
sun.java2d.d3d.D3DScreenUpdateManager.createGraphics \
(D3DScreenUpdateManager.java:260)  [8] sun.awt.windows.WComponentPeer.getGraphics \
(WComponentPeer.java:646)  [9] java.awt.Component.getGraphics (Component.java:3,128)
  [10] sun.awt.RepaintArea.paint (RepaintArea.java:227)
  [11] sun.awt.windows.WComponentPeer.handleEvent (WComponentPeer.java:371)
  [12] java.awt.Component.dispatchEventImpl (Component.java:5,056)
  [13] java.awt.Container.dispatchEventImpl (Container.java:2,325)
  [14] java.awt.Window.dispatchEventImpl (Window.java:2,775)
  [15] java.awt.Component.dispatchEvent (Component.java:4,827)
  [16] java.awt.EventQueue.dispatchEventImpl (EventQueue.java:772)
  [17] java.awt.EventQueue$4.run (EventQueue.java:721)
  [18] java.awt.EventQueue$4.run (EventQueue.java:715)
  [19] java.security.AccessController.executePrivileged (AccessController.java:753)
  [20] java.security.AccessController.doPrivileged (AccessController.java:391)
  [21] java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege \
(ProtectionDomain.java:85)  [22] \
java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege \
(ProtectionDomain.java:95)  [23] java.awt.EventQueue$5.run (EventQueue.java:745)
  [24] java.awt.EventQueue$5.run (EventQueue.java:743)
  [25] java.security.AccessController.executePrivileged (AccessController.java:753)
  [26] java.security.AccessController.doPrivileged (AccessController.java:391)
  [27] java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege \
(ProtectionDomain.java:85)  [28] java.awt.EventQueue.dispatchEvent \
(EventQueue.java:742)  [29] java.awt.EventDispatchThread.pumpOneEventForFilters \
(EventDispatchThread.java:203)  [30] java.awt.EventDispatchThread.pumpEventsForFilter \
(EventDispatchThread.java:124)  [31] \
java.awt.EventDispatchThread.pumpEventsForHierarchy (EventDispatchThread.java:113)  \
[32] java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:109)  [33] \
java.awt.EventDispatchThread.pumpEvents (EventDispatchThread.java:101)  [34] \
java.awt.EventDispatchThread.run (EventDispatchThread.java:90) AWT-EventQueue-0[1] > \
>


At 1st PaintEvent is processing, RepaintArea calls getGraphics(), then \
D3DScreenUpdateManager finally calls new PaintEvent(). So, 2nd PaintEvent is posted \
and invoked later on EDT.

-------------

PR: https://git.openjdk.java.net/jdk/pull/5491


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic