[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