Hi I started fixing All PlatformlLogger "bad" usages and I am fixing also many jul Logger usages without isLoggable ... That represents a lot of changes and a very boring job.
I think sending a webrew tomorrow. Laurent Le 4 avr. 2013 14:08, "Laurent Bourgès" <bourges.laur...@gmail.com> a écrit : > Ok, I can provide an updated patch after finding / fixing all usages. > > Probably in 1 or 2 days, > > Laurent > > 2013/4/4 Anthony Petrov <anthony.pet...@oracle.com> > >> Yes, this makes sense. Do you want to update your fix for 8010297 to >> include these changes as well? >> >> -- >> best regards, >> Anthony >> >> >> On 04/04/13 15:47, Laurent Bourgès wrote: >> >>> Dear all, >>> >>> I just realized there is another problem with PlatformLogger log >>> statements: >>> XBaseWindow: >>> public boolean grabInput() { >>> grabLog.fine("Grab input on {0}", this); >>> ... >>> } >>> >>> This calls the PlatformLogger.fine( varargs): >>> public void fine(String msg, Object... params) { >>> logger.doLog(FINE, msg, params); >>> } >>> >>> Doing so, the JVM creates a new Object[] instance to provide params as >>> varargs. >>> >>> I would recommend using isLoggable() test to avoid such waste if the log >>> is disabled (fine, finer, finest ...). >>> >>> Do you want me to provide a new patch related to this problem ? >>> >>> Does somebody have an idea to automatically analyze the JDK code and >>> detect missing isLoggable statements ... >>> >>> Regards, >>> Laurent >>> >>> 2013/4/3 Laurent Bourgès <bourges.laur...@gmail.com >>> <mailto:bourges.laurent@gmail.**com <bourges.laur...@gmail.com>>> >>> >>> >>> Anthony, >>> >>> could you tell me once it is in the OpenJDK8 repository ? >>> I would then perform again profiling tests to check if there is no >>> more missing isLoggable() statements. >>> >>> Once JMX and other projects switch to PlatformLogger, I could check >>> again. >>> >>> Maybe I could write a small java code checker (pmd rule) to test if >>> there is missing isLoggable() statements wrapping PlatformLogger log >>> statements. Any idea about how to reuse java parser to do so ? >>> >>> Regards, >>> >>> Laurent >>> >>> 2013/4/2 Anthony Petrov <anthony.pet...@oracle.com >>> <mailto:anthony.petrov@oracle.**com <anthony.pet...@oracle.com>>> >>> >>> >>> Looks fine to me as well. Thanks for fixing this, Laurent. >>> >>> Let's wait a couple more days in case Net or Swing folks want to >>> review the fix. After that I'll push it to the repository. >>> >>> -- >>> best regards, >>> Anthony >>> >>> >>> On 4/2/2013 15:35, Laurent Bourgès wrote: >>> >>> Here is the updated patch: >>> >>> http://jmmc.fr/~bourgesl/__**share/webrev-8010297.2/<http://jmmc.fr/%7Ebourgesl/__share/webrev-8010297.2/> >>> >>> <http://jmmc.fr/%7Ebourgesl/**share/webrev-8010297.2/<http://jmmc.fr/%7Ebourgesl/share/webrev-8010297.2/> >>> > >>> >>> >>> Fixed inconsistencies between FINE / FINER log statements: >>> - XScrollbarPeer >>> - XWindowPeer >>> >>> Laurent >>> >>> 2013/4/2 Anthony Petrov <anthony.pet...@oracle.com >>> <mailto:anthony.petrov@oracle.**com<anthony.pet...@oracle.com> >>> > >>> <mailto:anthony.petrov@oracle.**__com >>> >>> <mailto:anthony.petrov@oracle.**com<anthony.pet...@oracle.com> >>> >>> >>> >>> >>> 1. Sergey: I believe this is for purposes of better >>> formating the >>> log output and making it more readable by separating or >>> highlighting >>> some sections. I don't think this should be changed. >>> >>> 2. Laurent: can you please address this issue and send >>> us a new patch? >>> >>> -- >>> best regards, >>> Anthony >>> >>> >>> On 4/1/2013 16:08, Sergey Bylokhov wrote: >>> >>> >>> Hi, Anthony >>> Only two comments: >>> 1 Why we need some special text in the log output >>> like "***" and >>> "###" >>> 2 XScrollbarPeer.java: >>> >>> + if >>> (log.isLoggable(____**PlatformLogger.FINEST)) { >>> >>> >>> + log.finer("KeyEvent on scrollbar: " + >>> event); >>> + } >>> >>> >>> >>> On 4/1/13 12:20 PM, Anthony Petrov wrote: >>> >>> Awt, Swing, Net engineers, >>> >>> Could anyone review the fix please? For your >>> convenience: >>> >>> Bug: >>> >>> http://bugs.sun.com/view_bug._**___do?bug_id=8010297<http://bugs.sun.com/view_bug.____do?bug_id=8010297> >>> >>> <http://bugs.sun.com/view_bug.**__do?bug_id=8010297<http://bugs.sun.com/view_bug.__do?bug_id=8010297> >>> > >>> >>> >>> <http://bugs.sun.com/view_bug.**__do?bug_id=8010297<http://bugs.sun.com/view_bug.__do?bug_id=8010297> >>> >>> <http://bugs.sun.com/view_bug.**do?bug_id=8010297<http://bugs.sun.com/view_bug.do?bug_id=8010297> >>> >> >>> >>> Fix: >>> http://cr.openjdk.java.net/~__** >>> __anthony/8-55-isLoggable-____**8010297.0/<http://cr.openjdk.java.net/%7E____anthony/8-55-isLoggable-____8010297.0/> >>> <http://cr.openjdk.java.net/%** >>> 7E__anthony/8-55-isLoggable-__**8010297.0/<http://cr.openjdk.java.net/%7E__anthony/8-55-isLoggable-__8010297.0/> >>> > >>> <http://cr.openjdk.java.net/%_** >>> _7Eanthony/8-55-isLoggable-__**8010297.0/ >>> <http://cr.openjdk.java.net/%**7Eanthony/8-55-isLoggable-** >>> 8010297.0/<http://cr.openjdk.java.net/%7Eanthony/8-55-isLoggable-8010297.0/> >>> >> >>> >>> -- best regards, >>> Anthony >>> >>> On 3/22/2013 2:26, Anthony Petrov wrote: >>> >>> Hi Laurent, >>> >>> The fix looks great to me. Thank you very >>> much. >>> >>> We still need at least one review, though. >>> Hopefully >>> net-dev@ and/or swing-dev@ folks might help >>> us out a bit. >>> >>> -- best regards, >>> Anthony >>> >>> On 3/20/2013 15:10, Anthony Petrov wrote: >>> >>> Hi Laurent, >>> >>> Thanks for the patch. I've filed a bug >>> at: >>> >>> http://bugs.sun.com/view_bug._**___do?bug_id=8010297<http://bugs.sun.com/view_bug.____do?bug_id=8010297> >>> >>> <http://bugs.sun.com/view_bug.**__do?bug_id=8010297<http://bugs.sun.com/view_bug.__do?bug_id=8010297> >>> > >>> >>> >>> >>> <http://bugs.sun.com/view_bug.**__do?bug_id=8010297<http://bugs.sun.com/view_bug.__do?bug_id=8010297> >>> >>> <http://bugs.sun.com/view_bug.**do?bug_id=8010297<http://bugs.sun.com/view_bug.do?bug_id=8010297> >>> >> >>> (should be available in a day or two) >>> >>> and published a webrev generated from >>> your patch at: >>> http://cr.openjdk.java.net/~__** >>> __anthony/8-55-isLoggable-____**8010297.0/<http://cr.openjdk.java.net/%7E____anthony/8-55-isLoggable-____8010297.0/> >>> <http://cr.openjdk.java.net/%** >>> 7E__anthony/8-55-isLoggable-__**8010297.0/<http://cr.openjdk.java.net/%7E__anthony/8-55-isLoggable-__8010297.0/> >>> > >>> <http://cr.openjdk.java.net/%_** >>> _7Eanthony/8-55-isLoggable-__**8010297.0/ >>> <http://cr.openjdk.java.net/%**7Eanthony/8-55-isLoggable-** >>> 8010297.0/<http://cr.openjdk.java.net/%7Eanthony/8-55-isLoggable-8010297.0/> >>> >> >>> >>> >>> I'm also copying swing-dev@ and >>> net-dev@ because the >>> fix affects those areas too. I myself >>> will review >>> the fix a bit later but am sending it >>> now for other >>> folks to take a look at it. >>> >>> On 3/19/2013 15:29, Laurent Bourgès >>> wrote: >>> >>> I am sorry I started modifying >>> PlatformLogger >>> and reverted changes to this class >>> as it is >>> another topic to be discussed >>> later: isLoggable >>> performance and waste due to >>> HashMap<Integer, >>> Level> leads to Integer allocations >>> (boxing). >>> >>> >>> I saw your message to core-libs-dev@, >>> so I just >>> dropped all changes to the >>> PlatformLogger from this >>> patch. >>> >>> Finally, I have another question >>> related to the >>> WrapperGenerator class: it >>> generates a lot of >>> empty log statements (XEvent): >>> >>> log >>> <http://grepcode.com/file/____** >>> repository.grepcode.com/java/_**___root/jdk/openjdk/6-b14/sun/** >>> ____awt/X11/XWrapperBase.java#**____XWrapperBase.0log<http://grepcode.com/file/____repository.grepcode.com/java/____root/jdk/openjdk/6-b14/sun/____awt/X11/XWrapperBase.java#____XWrapperBase.0log> >>> <http://grepcode.com/file/__**repository.grepcode.com/java/_ >>> **_root/jdk/openjdk/6-b14/sun/__**awt/X11/XWrapperBase.java#__** >>> XWrapperBase.0log<http://grepcode.com/file/__repository.grepcode.com/java/__root/jdk/openjdk/6-b14/sun/__awt/X11/XWrapperBase.java#__XWrapperBase.0log> >>> > >>> >>> <http://grepcode.com/file/__**repository.grepcode.com/java/_ >>> **_root/jdk/openjdk/6-b14/sun/__**awt/X11/XWrapperBase.java#__** >>> XWrapperBase.0log<http://grepcode.com/file/__repository.grepcode.com/java/__root/jdk/openjdk/6-b14/sun/__awt/X11/XWrapperBase.java#__XWrapperBase.0log> >>> <http://grepcode.com/file/**repository.grepcode.com/java/** >>> root/jdk/openjdk/6-b14/sun/**awt/X11/XWrapperBase.java#** >>> XWrapperBase.0log<http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/sun/awt/X11/XWrapperBase.java#XWrapperBase.0log> >>> >>>.finest >>> <http://grepcode.com/file/____** >>> repository.grepcode.com/java/_**___root/jdk/openjdk/6-b14/** >>> java/____util/logging/Logger.**java#____Logger.finest%28java.** >>> lang.____String%29<http://grepcode.com/file/____repository.grepcode.com/java/____root/jdk/openjdk/6-b14/java/____util/logging/Logger.java#____Logger.finest%28java.lang.____String%29> >>> <http://grepcode.com/file/__**repository.grepcode.com/java/_ >>> **_root/jdk/openjdk/6-b14/java/_**_util/logging/Logger.java#__** >>> Logger.finest%28java.lang.__**String%29<http://grepcode.com/file/__repository.grepcode.com/java/__root/jdk/openjdk/6-b14/java/__util/logging/Logger.java#__Logger.finest%28java.lang.__String%29> >>> > >>> >>> <http://grepcode.com/file/__**repository.grepcode.com/java/_ >>> **_root/jdk/openjdk/6-b14/java/_**_util/logging/Logger.java#__** >>> Logger.finest%28java.lang.__**String%29<http://grepcode.com/file/__repository.grepcode.com/java/__root/jdk/openjdk/6-b14/java/__util/logging/Logger.java#__Logger.finest%28java.lang.__String%29> >>> <http://grepcode.com/file/**repository.grepcode.com/java/** >>> root/jdk/openjdk/6-b14/java/**util/logging/Logger.java#** >>> Logger.finest%28java.lang.**String%29<http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/logging/Logger.java#Logger.finest%28java.lang.String%29> >>> >>>(""); >>> >>> >>> Is it really useful to have such >>> statements ? I >>> would keep logs with non empty >>> messages only. >>> >>> See WrapperGenerator:753: >>> String s_log = >>> >>> (generateLog?"log.finest(\"\")**____;":""); >>> >>> >>> >>> >>> I believe they're used for log >>> formatting purposes >>> to separate numerous events in a log >>> (e.g. think of >>> mouse-move events - there can be >>> hundreds of them in >>> a raw). >>> >>> >>> Please note that the hg export format >>> is not that >>> useful unless you're assigned an >>> OpenJDK id already >>> (please see Dalibor's message for >>> details) because I >>> can't import it directly. So for the >>> time being you >>> could send just raw patches (i.e. the >>> output of hg >>> diff only - and there's no need to >>> commit your >>> changes in this case). Also, please >>> note that the >>> mailing lists strip attachments. The >>> reason I got it >>> is because I was listed in To: of your >>> message. So >>> when sending patches you can: >>> 1) post them inline, or >>> 2) attach them and add a person to To: >>> of your >>> message, or >>> 3) upload them somewhere on the web. >>> However, it would be best if you could >>> generate a >>> webrev for your changes and upload it >>> somewhere. >>> Currently this is the standard format >>> for reviewing >>> fixes in OpenJDK. >>> >>> -- best regards, >>> Anthony >>> >>> >>> Regards, >>> Laurent >>> >>> >>> >>> 2013/3/19 Laurent Bourgès >>> <bourges.laur...@gmail.com <mailto:bourges.laurent@gmail.** >>> com <bourges.laur...@gmail.com>> >>> <mailto:bourges.laurent@gmail.**__com >>> <mailto:bourges.laurent@gmail.**com<bourges.laur...@gmail.com> >>> >> >>> <mailto:bourges.laurent@gmail. >>> <mailto:bourges.laurent@gmail.**>____com >>> >>> <mailto:bourges.laurent@gmail.**__com >>> <mailto:bourges.laurent@gmail.**com<bourges.laur...@gmail.com> >>> >>>> >>> >>> Hi antony, >>> >>> FYI I started reviewing and >>> fixing all >>> PlatformLogger use cases (not >>> too many as I thought first) >>> mainly used by >>> awt / swing projects to >>> provide you a patch on latest >>> JDK8 source code: >>> >>> I am adding the log level check >>> when it is >>> missing: >>> if >>> (...log.isLoggable(____**PlatformLogger.xxx)) { >>> >>> >>> log... >>> } >>> >>> I will not change the String + >>> operations to >>> use the message format >>> syntax in this patch. >>> >>> Do you accept such patch / >>> proposed >>> contribution ? >>> >>> Regards, >>> Laurent >>> >>> >>> 2013/3/18 Laurent Bourgès >>> <bourges.laur...@gmail.com <mailto:bourges.laurent@gmail.** >>> com <bourges.laur...@gmail.com>> >>> <mailto:bourges.laurent@gmail.**__com >>> <mailto:bourges.laurent@gmail.**com<bourges.laur...@gmail.com> >>> >> >>> <mailto:bourges.laurent@gmail. >>> <mailto:bourges.laurent@gmail.**>____com >>> >>> <mailto:bourges.laurent@gmail.**__com >>> <mailto:bourges.laurent@gmail.**com<bourges.laur...@gmail.com> >>> >>>> >>> >>> Hi antony, >>> >>> 2 different things: >>> 1/ PlatformLogger was >>> patched (doLog >>> method) to avoid string >>> operations (message >>> formatting) for >>> disabled logs (patch >>> submiited on JDK8 and >>> JDK7u): >>> http://mail.openjdk.java.net/_** >>> ___pipermail/jdk7u-dev/2012-__**__April/002751.html<http://mail.openjdk.java.net/____pipermail/jdk7u-dev/2012-____April/002751.html> >>> <http://mail.openjdk.java.net/** >>> __pipermail/jdk7u-dev/2012-__**April/002751.html<http://mail.openjdk.java.net/__pipermail/jdk7u-dev/2012-__April/002751.html> >>> > >>> >>> >>> <http://mail.openjdk.java.net/** >>> __pipermail/jdk7u-dev/2012-__**April/002751.html<http://mail.openjdk.java.net/__pipermail/jdk7u-dev/2012-__April/002751.html> >>> <http://mail.openjdk.java.net/**pipermail/jdk7u-dev/2012-** >>> April/002751.html<http://mail.openjdk.java.net/pipermail/jdk7u-dev/2012-April/002751.html> >>> >> >>> >>> >>> 2/ I looked 2 hours ago on >>> JDK7u AND >>> JDK8 source codes and both >>> still have: >>> - log statements WITHOUT >>> log level check >>> : if >>> >>> (log.isLoggable(____**PlatformLogger.FINE)) >>> >>> >>> log.fine(...); >>> - string operations (+) in >>> log calls >>> that could be improved >>> using the message format >>> syntax (String >>> + args): for example, >>> avoid using >>> PlatformLogger.fine(String + >>> ...) in favor of using >>> PlatformLogger.fine(String >>> msg, >>> Object... params) >>> >>> I reported in my previous >>> mail several >>> cases where the >>> isLoggable() call is >>> missing and leads >>> to useless String >>> operations but also method >>> calls >>> (Component.paramString() for >>> example). >>> >>> Finally, I also provided >>> other possible >>> cases (using grep); >>> maybe there is a better >>> alternative to >>> find all occurences of >>> String operations in log >>> calls. >>> >>> Regards, >>> Laurent >>> >>> 2013/3/18 Anthony Petrov >>> <anthony.pet...@oracle.com <mailto:anthony.petrov@oracle.** >>> com <anthony.pet...@oracle.com>> >>> <mailto:anthony.petrov@oracle.**__com >>> <mailto:anthony.petrov@oracle.**com<anthony.pet...@oracle.com> >>> >> >>> <mailto:anthony.petrov@oracle. >>> <mailto:anthony.petrov@oracle.**>____com >>> >>> <mailto:anthony.petrov@oracle.**__com >>> <mailto:anthony.petrov@oracle.**com<anthony.pet...@oracle.com> >>> >>>> >>> >>> Hi Laurent, >>> >>> Normally we fix an >>> issue in JDK 8 >>> first, and then back-port >>> the fix to a 7u >>> release. You're >>> saying that in JDK 8 the >>> problem isn't >>> reproducible anymore. >>> Can you please >>> investigate (using the >>> Mercurial >>> history log) what exact fix >>> resolved it in JDK 8? >>> >>> -- >>> best regards, >>> Anthony >>> >>> On 03/18/13 15:09, >>> Laurent Bourgès >>> wrote: >>> >>> Dear all, >>> >>> I run recently >>> netbeans profiler >>> on my swing application >>> (Aspro2: >>> http://www.jmmc.fr/aspro) under >>> linux x64 platform and I >>> figured out >>> that a lot of >>> char[] instances >>> are coming from String + >>> operator called >>> by sun.awt.X11 code. >>> >>> I looked at >>> PlatformLogger >>> source code but found not way >>> to disable it >>> completely: maybe >>> an empty >>> logger implementation could >>> be interesting to >>> be used during >>> profiling or >>> normal use (not debugging). >>> Apparently JDK8 >>> provides some >>> patchs to avoid String >>> creation when the >>> logger is disabled >>> (level). >>> >>> However, I looked >>> also to the >>> sun.awt code (jdk7u >>> repository) to see >>> the >>> origin of the >>> string allocations: >>> XDecoratedPeer: >>> public void >>> handleFocusEvent(XEvent xev) { >>> ... >>> * >>> focusLog.finer("Received focus event on shell: >>> " + xfe); >>> * } >>> >>> public boolean >>> requestWindowFocus(long time, >>> boolean >>> timeProvided) { >>> ... >>> * >>> focusLog.finest("Real native focused >>> window: " + >>> >>> realNativeFocusedWindow + >>> "\nKFM's focused window: " + >>> focusedWindow); >>> *... >>> * >>> focusLog.fine("Requesting focus to " + (this == >>> toFocus ? "this >>> window" : toFocus)); >>> *... >>> } >>> >>> XBaseWindow: >>> public void >>> xSetBounds(int >>> x, int y, int width, int >>> height) { >>> ... >>> * >>> insLog.fine("Setting >>> bounds on " + this + " to >>> (" + x + ", " + >>> y + "), " + width + >>> "x" + height); >>> *} >>> >>> XNetProtocol: >>> boolean >>> doStateProtocol() { >>> ... >>> * >>> stateLog.finer("______**doStateProtocol() >>> returns " + >>> >>> >>> res); >>> *} >>> >>> XSystemTrayPeer: >>> >>> XSystemTrayPeer(SystemTray >>> target) { >>> ... >>> * log.fine(" >>> check if >>> system tray is available. >>> selection owner: >>> " + selection_owner); >>> *} >>> void >>> addTrayIcon(XTrayIconPeer tiPeer) >>> throws >>> AWTException { >>> ... >>> * log.fine(" >>> send >>> SYSTEM_TRAY_REQUEST_DOCK >>> message to owner: " >>> + >>> selection_owner); >>> *} >>> >>> XFramePeer: >>> public void >>> handlePropertyNotify(XEvent xev) { >>> ... >>> >>> stateLog.finer("State is the same: " + >>> state); >>> } >>> >>> However I only give >>> here few >>> cases but certainly others >>> are still >>> present in the >>> source code; >>> maybe findbugs or netbeans >>> warnings could >>> help you finding >>> all of them. >>> >>> I advocate the >>> amount of waste >>> (GC) is not very >>> important but String >>> conversion are also >>> calling >>> several toString() methods >>> that can be >>> costly (event, >>> Frame, window ...) >>> >>> Finally, I ran few >>> grep commands >>> on the sun.awt.X11 code >>> (jdk7u) and you >>> can look at them to >>> see all >>> string + operations related >>> to log statements. >>> >>> PS: I may help >>> fixing the source >>> code but I have no idea >>> how to >>> collaborate >>> (provide a patch ?) >>> >>> Regards, >>> Laurent Bourgès >>> >>> >>> >>> >>> >>> >>> -- Best regards, Sergey. >>> >>> >>> >>> >>> >