<AWT Dev> [8] Review request for 7153339: InternalError when drawLine with Xor and Antialiasing

Oleg Pekhovskiy oleg.pekhovskiy at oracle.com
Tue Sep 4 11:32:03 PDT 2012

Hi all,

please review the second version of fix for CR:


To avoid influence to the platforms other than Windows and guarantee 
SurfaceData.getReplacement() returns valid surface
I made changes in ScreenUpdateManager.getReplacementScreenSurface() 
where WComponentPeer.replaceSurfaceData()
is called to make peer's surfaceData valid.


8/25/2012 3:07 AM, Jim Graham wrote:
> Hi Oleg,
> Let me clarify, I'm not referring to a "better way" to fix this. 
> Actually, the fix you have prepared has a problem.  Once the SD is 
> "invalid due to switching to software" and the SG2D decides to install 
> a null SD instead, then it will never recover.  But, no change to a 
> drawable should happen (other than it going away) to cause that state. 
> The SG2D's were designed to survive changes in state to the underlying 
> drawable, as long as it remains viable as a drawing destination, but 
> here you are giving up on it when that (externally not really very 
> obvious) state change occurs.  Thread A could be happily rendering to 
> the surface on the screen, thread B decides to use XOR thereby 
> changing the state, but thread A's G2D now stops working?  Thread A 
> would be very very confused.
> So, while there may be a fix we could add to SG2D to work around the 
> problem, your fix isn't the right solution.  I believe that the right 
> solution is to have the D3DSurface return the correct new surface, but 
> it being "what I think is the right solution" is just part of the 
> issue with your currently proposed fix - the proposed fix violates a 
> long-standing behavior of G2D objects to remain viable until the 
> surface is gone...
>         ...jim
> On 8/24/2012 3:01 AM, Oleg Pekhovskiy wrote:
>> Hi Jim,
>> first of all I should say, that I prepared that fix for 7u as the most
>> safe, with minimum changes.
>> I agree that getReplacement() should return a valid sufrace or null, but
>> it doesn't happen during that switch.
>> That CR was assigned to me because my previous changes for:
>> 7112642 Incorrect checking for graphics rendering object
>> 7121482 some sun/java2d and sun/awt tests failed with 
>> InvalidPipeException
>> discovered the problem with getReplacement() and were somehow related.
>> But maybe it would be better to create a separate CR for
>> getReplacement() issue and assign it to Java2d Team?
>> I also could add a comment for "!surfaceData.isValid()" reffering to
>> CR7153339.
>> What do you think?
>> Thanks,
>> Oleg
>> 24.08.2012 4:04, Jim Graham wrote:
>>> Hi Oleg,
>>> getReplacement should not be returning an invalid surface. If the
>>> current D3DSD is invalid, then it should return a valid replacement.
>>> The only time it should return null is when the window is gone. It
>>> sounds like the window isn't gone here, it has just switched over to a
>>> non-D3D type of SurfaceData and return that...
>>> ...jim
>>> On 8/23/2012 4:37 PM, Oleg Pekhovskiy wrote:
>>>> Hi Phil, Jim,
>>>> thank you for pointing out the testing work that should be performed.
>>>> I tested my fix with the following regression tests:
>>>> test/java/awt/Graphics
>>>> test/java/awt/Graphics2D
>>>> test/java/awt/GraphicsDevice
>>>> test/java/awt/GraphicsEnvironment
>>>> test/sun/java2d
>>>> Plus I tested performance differences on:
>>>> demo/jfc/Java2D/Java2Demo.jar
>>>> Testing was done on Windows 7 & Ubuntu 12.04 LTS.
>>>> No differences were found.
>>>> I also asked Yuri Nesterenko to test all that stuff on Mac.
>>>> Thanks,
>>>> Oleg
>>>> 11.08.2012 3:10, Phil Race wrote:
>>>>> Oleg,
>>>>> This looks OK to me but since this is a shared code change I have
>>>>> to ask what testing you've done ?
>>>>> Also why not provide a regression test ? The provided test was
>>>>> interactive but I think it can be automated.
>>>>> You need another review and I'd like Jim to take a look.
>>>>> -phil.
>>>>> On 8/10/2012 2:26 PM, Oleg Pekhovskiy wrote:
>>>>>> Hi,
>>>>>> Please review the fix for CR:
>>>>>> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7153339
>>>>>> Webrev:
>>>>>> http://cr.openjdk.java.net/~bagiras/8/7153339.1/
>>>>>> Comments:
>>>>>> XOR is not supported for D3D (see comments inside
>>>>>> D3DSurfaceData.validatePipe()) and
>>>>>> software rendering is used invalidating current D3DSurfaceData.
>>>>>> So we have situation when component's peer has invalid SurfaceData
>>>>>> and it's retrieved in
>>>>>> SunGraphics2D.revalidateAll() through SurfaceData.getReplacement()
>>>>>> without any check.
>>>>>> That's why I added validity check there.
>>>>>> Thanks,
>>>>>> Oleg
>>>>>> <http://cr.openjdk.java.net/%7Ebagiras/8/7153339.1/>

More information about the awt-dev mailing list