Hi Prasanta, Thank you for the review. Here is the new Webrev:

 

http://cr.openjdk.java.net/~sveerabhadra/8153732/webrev.05/

 

For the EnumPrinters case, I think the cReturned is sufficient as it is set to 
zero every time we start.

 

Thanks and regards,

Shashi

 

From: Prasanta Sadhukhan 
Sent: Friday, June 22, 2018 10:41 AM
To: Shashidhara Veerabhadraiah <shashidhara.veerabhadra...@oracle.com>; Philip 
Race <philip.r...@oracle.com>; 2d-dev <2d-dev@openjdk.java.net>
Subject: Re: [OpenJDK 2D-Dev] <Swing Dev> [11] JDK-8153732: Windows remote 
printer changes do not reflect in lookupPrintServices()

 

I guess

if (pollStr.equalsIgnoreCase("true")) {
  70                 pollServices = true;
  71             } else if (pollStr.equalsIgnoreCase("false")) {
  72                 pollServices = false;
  73             }
can be written as
 
if (pollStr.equalsIgnoreCase("false")) 
pollServices = false;
 
as it is already defaulted to true.

 

78          * for polling PrintServices.  The default is 120.

I guess default is 240.

also, EnumPrinters returns bool, which we should check like

263         if (cReturned > 0 && enumprintersret !=0 ) {
 
Regards
Prasanta

On 6/22/2018 10:03 AM, Shashidhara Veerabhadraiah wrote:

Hi Phil, Thanks for your review.

 

I have made your suggested changes and here is the updated webrev:

HYPERLINK 
"http://cr.openjdk.java.net/%7Esveerabhadra/8153732/webrev.04/"http://cr.openjdk.java.net/~sveerabhadra/8153732/webrev.04/

 

Need one more review to commit this.

 

Note: A network printer can be added via the 'Add a printer' under the 'Devices 
and Printers' dialog. A network printer will have the property 'Device 
description' set to 'Network printer connection'.

 

Thanks and regards,

Shashi

 

From: Phil Race 
Sent: Friday, June 22, 2018 2:16 AM
To: Shashidhara Veerabhadraiah HYPERLINK 
"mailto:shashidhara.veerabhadra...@oracle.com";<shashidhara.veerabhadra...@oracle.com>;
 2d-dev HYPERLINK "mailto:2d-dev@openjdk.java.net";<2d-dev@openjdk.java.net>
Subject: Re: <Swing Dev> [11] JDK-8153732: Windows remote printer changes do 
not reflect in lookupPrintServices()

 

I thought you were going to make the refresh time 4 minutes ?
I don't see that it has to be the same on Windows as it was on Unix,
if you say 4 minutes is a sensible value there .. and 4 mins will be
less CPU wake up, so I'd back that (4 mins) ahead of 2 minutes as the default 
here.

You still have missing white space

 432             while(true) {


With these two changes you have my +1 ..

BTW the native diff looks MUCH better now - thanks !

-phil.

On 06/21/2018 01:33 PM, Shashidhara Veerabhadraiah wrote:

Hi Phil, Here is the new Webrev for changes you suggested.

 

HYPERLINK 
"http://cr.openjdk.java.net/%7Esveerabhadra/8153732/webrev.03/"http://cr.openjdk.java.net/~sveerabhadra/8153732/webrev.03/

 

Thanks and regards,

Shashi

 

From: Phil Race 
Sent: Friday, June 22, 2018 1:02 AM
To: Shashidhara Veerabhadraiah HYPERLINK 
"mailto:shashidhara.veerabhadra...@oracle.com";<shashidhara.veerabhadra...@oracle.com>;
 2d-dev HYPERLINK "mailto:2d-dev@openjdk.java.net";<2d-dev@openjdk.java.net>
Subject: Re: <Swing Dev> [11] JDK-8153732: Windows remote printer changes do 
not reflect in lookupPrintServices()

 

 
+        private static final long DELAY = 1000 * 60 * 4; // 4 min pooling
 
I think we need a System Property that can control this.
I suggest the name "sun.java2d.print.minRefreshTime" which is what we use on 
Unix.
 
and similarly to there we should have "sun.java2d.print.polling" which is a 
boolean
and controls whether we do this at all ..
 
See src/java.desktop/unix/classes/sun/print/PrintServiceLookupProvider.java
 
Lots of places where you are missing a space before "("
 
+            if(str1.length != str2.length) {
+                for(int i = 0;i < str1.length;i++) {
+                    for(int j = 0;j < str2.length;j++) {
+                        if(!str1[i].equals(str2[j])) {
 
+            while(true) {
+                if(doCompare(prevRemotePrinters, currentRemotePrinters)) {
 
 
There's some of that in native too
 266                 if(info4->Attributes & 0x00000010) {
 
In HYPERLINK 
"http://cr.openjdk.java.net/%7Esveerabhadra/8153732/webrev.01/src/java.desktop/windows/native/libawt/windows/WPrinterJob.cpp.sdiff.html"http://cr.openjdk.java.net/~sveerabhadra/8153732/webrev.01/src/java.desktop/windows/native/libawt/windows/WPrinterJob.cpp.sdiff.html
 
you seem to have moved all the existing and (I think) unchanged related 
functions so the DIFF appears
much bigger than it really is. Please move them back and re-generate.
 
The test really needs to provide an "out" for someone running the test who has 
no way
to add a network printer .. they don't want to have to fail the test.
 
As well as that, arguably this should be an @ignore test, so it is not run 
unless
you are trying to run all the tests.
 
-phil.

On 06/21/2018 12:08 PM, Shashidhara Veerabhadraiah wrote:

Hi Phil, Here is the new Webrev. I chose 4 mins because I think it takes around 
2 mins to add a new network printer, hence I felt 4 mins is a good time.

The windows *PrinterChangeNotifications* calls are a blocking function calls 
hence I could not add the remote printers monitor to the existing thread. Hence 
there is a new thread being added to listen to remote printers status changes.

 

HYPERLINK 
"http://cr.openjdk.java.net/%7Esveerabhadra/8153732/webrev.01/"http://cr.openjdk.java.net/~sveerabhadra/8153732/webrev.01/

 

Thanks and regards,

Shashi

 

From: Philip Race 
Sent: Thursday, June 21, 2018 5:38 AM
To: 2d-dev HYPERLINK "mailto:2d-dev@openjdk.java.net";<2d-dev@openjdk.java.net>; 
Shashidhara Veerabhadraiah HYPERLINK 
"mailto:shashidhara.veerabhadra...@oracle.com";<shashidhara.veerabhadra...@oracle.com>
Subject: Fwd: Re: <Swing Dev> [11] JDK-8153732: Windows remote printer changes 
do not reflect in lookupPrintServices()

 

The main concern I have is we now have a busy thread burning CPU ..
bad for laptops .. and if we add a delay we have less prompt notification
of a new local printer.

I think the compromise is that the existing thread maybe kept as is,
and we add a new thread that pools every 10 minutes for a remote printer.

If we can make the existing thread wake up from its wait and do that, even 
better.

-phil.

-------- Original Message -------- 

Subject: 

Re: [11] JDK-8153732: Windows remote printer changes do not reflect in 
lookupPrintServices()

Date: 

Wed, 20 Jun 2018 17:03:56 -0700

From: 

Philip Race HYPERLINK "mailto:philip.r...@oracle.com";<philip.r...@oracle.com>

Organization: 

Oracle Corporation

To: 

Shashidhara Veerabhadraiah HYPERLINK 
"mailto:shashidhara.veerabhadra...@oracle.com";<shashidhara.veerabhadra...@oracle.com>

CC: 

HYPERLINK "mailto:awt-...@openjdk.java.net"awt-...@openjdk.java.net, HYPERLINK 
"mailto:swing-...@openjdk.java.net"swing-...@openjdk.java.net



This is on the wrong lists. Not Swing. Not AWT. Should be 2d.
I'll forward it there and continue there. Consider the AWT+Swing threads dead.

-phil.

On 6/20/18, 3:12 AM, Shashidhara Veerabhadraiah wrote: 

Hi All, Please review this code changes for the below enhancement.

 

Enhancement: https://bugs.openjdk.java.net/browse/JDK-8153732

 

Webrev: HYPERLINK 
"http://cr.openjdk.java.net/%7Esveerabhadra/8153732/webrev.00/"http://cr.openjdk.java.net/~sveerabhadra/8153732/webrev.00/

 

Details of the changes: Windows provides *PrinterChangeNotification* functions 
that provides information about printer status changes of the local 
printers(subset) but not network printers. 
Alternatively, Windows provides a way thro' which one can get the network 
printer status changes by using WMI, RegistryKeyChange combination, which is a 
slightly complex mechanism. 
The Windows WMI offers an async and sync method to read thro' registry via the 
WQL query. The async method is considered dangerous as it leaves open a channel 
until we close it. But the async method has the advantage of being notified of 
a change in registry by calling callback without polling for it. The sync 
method uses the polling mechanism to notify. 
RegistryValueChange cannot be used in combination with WMI to get registry 
value change notification because of an error that may be generated because the 
scope of the query would be too big to handle(at times). 
Hence an alternative mechanism is choosen via the EnumPrinters by polling for 
the count of printer status changes(add\remove) and based on it update the 
printers list(both local and remote printers - superset).

 

Thanks and regards,

Shashi

 

 

 

Reply via email to