<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Can I get clarification here. <br>
<br>
> I do, and had to run with "-Dsun.java2d.uiScale=1" in order to
see the failure with <font class="">LargeWindowPaintTest.<br>
<br>
So you both mean a JDK 15 promoted build without this fix and
without this property passes because you have<br>
a hidpi setup. And to see the failure without the fix you needed
the above property.<br>
If so we could just be looking at a similar anomaly as I saw with
printing which uses a very large<br>
image - it reported failure but actually worked !</font><br>
<br>
Also - for both of you - with the fix and without forcing uiScale=1
does the test pass ?<br>
<br>
-phil.<br>
<br>
On 6/11/20, 7:10 AM, Jayathirth D v wrote:
<blockquote
cite="mid:2D493453-9DEA-474E-8BFF-79EAD55BBECC@ORACLE.COM"
type="cite">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<div class="">Yes my machine was at 150% scaling.</div>
<div class=""><br class="">
</div>
<div class="">If I force uiScale = 1, I see that:</div>
<div class=""><span style="color: rgb(0, 0, 0);" class="">LargeWindowPaintTest
fails without patch and passes with patch.</span></div>
<div class=""><font class="" color="#000000">AlphaPrintTest shows <span
style="caret-color: rgb(0, 0, 0);" class="">instructions
without patch also.</span></font></div>
<div class=""><font class="" color="#000000"><span
style="caret-color: rgb(0, 0, 0);" class=""><br class="">
</span></font></div>
<div class="">@Phil : I think its better if we test at
uiScale=1(larger memory footprint). Please clarify.</div>
<div class=""><br class="">
</div>
<div class="">Thanks,</div>
<div class="">Jay</div>
<div class=""><br class="">
<div>
<blockquote type="cite" class="">
<div class="">On 11-Jun-2020, at 5:53 PM, Kevin Rushforth
<<a moz-do-not-send="true"
href="mailto:kevin.rushforth@oracle.com" class="">kevin.rushforth@oracle.com</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" class="">
<div class=""> Do you have a Hi-DPI machine? I do, and had
to run with "-Dsun.java2d.uiScale=1" in order to see the
failure with <font class="">LargeWindowPaintTest.<br
class="">
<br class="">
For AlphaPrintTest, the test deliberately ensures that
you print before saying whether it passes or not.
FWIW, I verified that the printing test on my system
was hitting the fallback code with the patch, but it
seemed to print correctly even without the patch.<br
class="">
<br class="">
-- Kevin<br class="">
</font><br class="">
<br class="">
<div class="moz-cite-prefix">On 6/11/2020 1:58 AM,
Jayathirth D v wrote:<br class="">
</div>
<blockquote type="cite"
cite="mid:40C65E05-2AA8-4C4B-98B1-6A7F58BFFD22@ORACLE.COM"
class="">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8" class="">
Typo : I tried tested -><span style="caret-color:
rgb(0, 0, 0);" class=""> I tried </span>testing<br
class="">
<div class=""><br class="">
<blockquote type="cite" class="">
<div class="">On 11-Jun-2020, at 2:27 PM,
Jayathirth D v <<a
href="mailto:JAYATHIRTH.D.V@ORACLE.COM"
class="" moz-do-not-send="true">JAYATHIRTH.D.V@ORACLE.COM</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8" class="">
<div style="word-wrap: break-word;
-webkit-nbsp-mode: space; line-break:
after-white-space;" class="">Hi Phil,
<div class=""><br class="">
</div>
<div class="">I tried tested the fix in my
Windows 10 machine with Intel integrated UHD
Graphics 620.</div>
<div class=""><br class="">
</div>
<div class=""><font class="">LargeWindowPaintTest.java
passes with/without fix in my machine.</font></div>
<div class=""><font class="">AlphaPrintTest.java
without fix just opens up blank frame
without any instructions and with fix it
shows instructions for the test.</font></div>
<div class=""><span style="caret-color: rgb(0,
0, 0);" class="">Is this expected
behaviour?</span></div>
<div class=""><span style="caret-color: rgb(0,
0, 0);" class=""><br class="">
</span></div>
<div class=""><span style="caret-color: rgb(0,
0, 0);" class="">AlphaPrintTest.java w</span><font
class="">ith fix when it shows
instructions if I click on
Pass(Since I don’t have printer right now)
it doesn’t pass/close the window. Only
after I click on Print button and then
close print dialog it allows me to click
on Pass button.</font></div>
<div class=""><font class=""><span
style="caret-color: rgb(0, 0, 0);"
class=""><br class="">
</span></font></div>
<div class=""><font class=""><span
style="caret-color: rgb(0, 0, 0);"
class="">Also how does these tests
behave in our internal CI machines?</span></font></div>
<div class=""><br class="">
<div class="">Thanks,</div>
<div class="">Jay</div>
<div class=""><br class="">
<blockquote type="cite" class="">
<div class="">On 11-Jun-2020, at 2:18
AM, Philip Race <<a
href="mailto:philip.race@oracle.com"
class="" moz-do-not-send="true">philip.race@oracle.com</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="content-type"
content="text/html; charset=UTF-8"
class="">
<div class=""> Bug: <a
class="moz-txt-link-freetext"
href="https://bugs.openjdk.java.net/browse/JDK-8240654"
moz-do-not-send="true">https://bugs.openjdk.java.net/browse/JDK-8240654</a><br
class="">
Webrev: <a
class="moz-txt-link-freetext"
href="http://cr.openjdk.java.net/%7Eprr/8240654/index.html"
moz-do-not-send="true">http://cr.openjdk.java.net/~prr/8240654/index.html</a><br
class="">
<br class="">
This is for JDK 15 so review ASAP
please since RDP 1 and the test
cycle are looming.<br class="">
<br class="">
This is not a fix for a JDK bug. It
is a bunch of workarounds for a
Microsoft Windows bug affecting<br
class="">
GDI in the context of ZGC (<a
class="moz-txt-link-freetext"
href="http://openjdk.java.net/jeps/333"
moz-do-not-send="true">http://openjdk.java.net/jeps/333</a>).<br
class="">
Some extra details about the Windows
bug at the end, but first the
technical details of the fix.<br
class="">
<br class="">
With ZGC's memory allocation
requirement of reserving memory in
2Mb chunks some Windows GDI<br
class="">
functions, mostly involving some
bitmaps APIs may return a failure
code (ie fail!)<br class="">
This typically occurs when Java heap
memory is used for a Java image and
then in a JNI<br class="">
call we use
GetPrimitiveArrayCritical so that
Java heap allocated memory is passed
to a GDI<br class="">
function AND the Java heap memory
spans one of the 2Mb boundaries. <br
class="">
This is very easy to trigger in
almost any Java UI app if the window
is of a large enough (ie typical)
size.<br class="">
NB: if you have an Nvidia or ATI
card, then you won't see it, because
the D3D pipeline doesn't<br class="">
call the affected method but if you
have an Intel chip as do 90% (?) of
laptops you will see it.<br class="">
There are also several other places
we found that are affected. Printing
is the other one<br class="">
somewhat easy to trigger. The others
: custom cursors and tray icons are
less common.<br class="">
The painful thing here is that there
is no definitive list (a list of the
known ones is below) of<br class="">
affected Windows GDI APIs and we are
just hunting around our code trying
to see where it<br class="">
might be side-swiped by this bug.<br
class="">
<br class="">
The basic approach in these
workarounds is that for cases where
performance does not matter we now
copy <br class="">
and for cases where performance does
matter or larger amounts of memory
is involved we check if<br class="">
the return value of the GDI function
indicates failure and then re-try
with a copy of the heap memory. <br
class="">
Unless GDI was randomly failing
already (unlikely) this should be a
no-risk solution in the high profile
cases. <br class="">
We have done performance
measurements on the important screen
case and the failures<br class="">
happen fast so the penalty is then
in the re-try which is only if ZGC
is enabled.<br class="">
Always copying the memory is slower
(and memcpy is the slow operation)
than an alternative approach<br
class="">
that "knows" about the memory
allocation of ZGC but this coupling
and the complexity seem like they
aren't<br class="">
worth it since I haven't seen any
visible performance consequence.
That can be revisited<br class="">
some day if need be, but for now we
have correctness which is the key as
well as sufficient performance.<br
class="">
<br class="">
I've created an automated test for
the most important on-screen case. <br
class="">
Also a manual printing test case
which invokes ZGC is provided since
there we also only<br class="">
conditionally copy. In the other
cases we now always copy so existing
test cases should over those.<br
class="">
<br class="">
There is some clean up in this fix -
one completely unused (provably so
because it was #if'd out)<br
class="">
JNI method in awt_PrintJob.cpp is
removed since it had code that
looked like it needed a workaround,<br
class="">
which would be somewhat of a waste
of effort.<br class="">
<br class="">
the doPrintBand code and its callee
bitsToDevice has code I think we can
remove too since<br class="">
I don't see how it ever gets
executed (the top down case for
browserPrint == true) but<br
class="">
I think I'll save that for a P4
follow-on since it does nothing that
would be affected by this<br
class="">
Windows bug.<br class="">
<br class="">
One oddity is the in the printing
case I observed that some times the
rendering is performed<br class="">
even if an error code is returned. I
don't know why, but in code we can't
tell that it was actually<br
class="">
rendered and in any case there is no
harm in repeating the call with
copied memory.<br class="">
<br class="">
We are right before the JDK15
stabilisation fork and this fix
needs to go there and will<br
class="">
but the webrev is against jdk/client
simply because jdk15 does not exist
yet !<br class="">
<br class="">
Please test and review ASAP.<br
class="">
<br class="">
About the bug:<br class="">
Microsoft has acknowleged the bug
and will publish a knowledge base
article about it<br class="">
but a fix may show up only in a
future version of Windows. Not, it
seems, any time soon.<br class="">
Below is a list of potentially
affected GDI APIs. Per microsoft
whether it actually manifests in<br
class="">
any specific case depends on
"branching"<br class="">
<span
style="font-family:"Courier
New",serif;color:#1F4E79"
class=""></span>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><a
href="https://docs.microsoft.com/en-us/previous-versions/windows/desktop/wcs/checkbitmapbits"
class=""
moz-do-not-send="true">https://docs.microsoft.com/en-us/previous-versions/windows/desktop/wcs/checkbitmapbits</a></span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><a
href="https://docs.microsoft.com/en-us/previous-versions/windows/desktop/wcs/createcolortransform"
class=""
moz-do-not-send="true">https://docs.microsoft.com/en-us/previous-versions/windows/desktop/wcs/createcolortransform</a></span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><a
href="https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setdibitstodevice"
class=""
moz-do-not-send="true">https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setdibitstodevice</a></span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><a
href="https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-stretchdibits"
class=""
moz-do-not-send="true">https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-stretchdibits</a></span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><a
href="https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-getbitmapbits"
class=""
moz-do-not-send="true">https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-getbitmapbits</a></span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><a
href="https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-createdibitmap"
class=""
moz-do-not-send="true">https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-createdibitmap</a></span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><a
href="https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-createdibsection"
class=""
moz-do-not-send="true">https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-createdibsection</a></span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><a
href="https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-polydraw"
class=""
moz-do-not-send="true">https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-polydraw</a></span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><a
href="https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-drawescape"
class=""
moz-do-not-send="true">https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-drawescape</a></span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><a
href="https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-createbitmap"
class=""
moz-do-not-send="true">https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-createbitmap</a></span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><a
href="https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setbitmapbits"
class=""
moz-do-not-send="true">https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-setbitmapbits</a></span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><a
href="https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-getdibits"
class=""
moz-do-not-send="true">https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-getdibits</a></span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class=""><br
class="">
</span></p>
<p class="MsoNormal"><span
style="font-family:"Courier
New",serif" class="">-phil.<br
class="">
</span></p>
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
</div>
</blockquote>
</div>
<br class="">
</blockquote>
<br class="">
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</blockquote>
</body>
</html>