<AWT Dev> <Swing Dev> sun.awt.X11 logs still using String + (waste)

Laurent Bourgès bourges.laurent at gmail.com
Mon Apr 8 11:32:01 UTC 2013


Anthony,

here is an updated patch concerning both PlatformLogger and Logger 'bad'
usages:
http://jmmc.fr/~bourgesl/share/webrev-8010297.3/

It impacts now awt, swing, JMX, security, network, and apache xml.

Thanks for the review,
Laurent

2013/4/8 Laurent Bourgès <bourges.laurent at gmail.com>

> Peter, Mandy,
>
> I think it would be great to make PlatformLogger very similar to Logger
> API:
> I mean JUL Logger already has only 1 convenient method with 1 param so it
> may be great to have the same API in PlatformLogger too: maybe extend it to
> 2 or 3 params ...
>
> Peter, could you look at the API differences between Logger /
> PlatformLogger to make PlatformLogger API more similar to JUL Logger ?
>
> Laurent
>
>
> 2013/4/8 Peter Levart <peter.levart at gmail.com>
>
>>  On 04/07/2013 07:11 PM, Laurent Bourgès wrote:
>>
>> 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.
>>
>>
>> Hi Laurent,
>>
>> Since you're already deep in the task, you might have a rough feeling
>> what part of such unguarded log statements are of the following type:
>>
>> logger.[fine,info,...]("a message with {0} and {1} placeholders",
>> someArg1, someArg2);
>>
>> where someArg1, ... are some values that are already present in the
>> context of the logging statement and don't have to be computed just for
>> satisfying the logging (not even boxing). Such usages could be effectively
>> optimized by adding some overloaded methods to PlatformLogger that take 1,
>> 2, 3, ... arguments:
>>
>> class PlatformLogger {
>>
>>     ...
>>
>>     public void finest(String msg, Object param1) {
>>         if (isLoggable(Level.FINEST)) {
>>             loggerProxy.doLog(Level.FINEST, msg, param1);
>>         }
>>     }
>>
>>     public void finest(String msg, Object param1, Object param2) {
>>         if (isLoggable(Level.FINEST)) {
>>             loggerProxy.doLog(Level.FINEST, msg, param1, param2);
>>         }
>>     }
>>
>>     public void finest(String msg, Object param1, Object param2, Object
>> param3) {
>>         if (isLoggable(Level.FINEST)) {
>>             loggerProxy.doLog(Level.FINEST, msg, param1, param2, param3);
>>         }
>>     }
>>
>> ...
>>
>> This would effectively guard creation of the arguments array with an
>> isLoggable check for some common usages, eliminating the need to explicitly
>> guard such statements. Of course, the user would have to be aware of when
>> such unguarded logging statement is without overhead and when not...
>>
>> How do you feel about such API extension?
>>
>>
>> Regards, Peter
>>
>>
>>
>>  Laurent
>> Le 4 avr. 2013 14:08, "Laurent Bourgès" <bourges.laurent at 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.petrov at 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.laurent at gmail.com
>>>>>  <mailto:bourges.laurent at 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.petrov at oracle.com
>>>>>      <mailto:anthony.petrov at 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/>
>>>>>
>>>>>
>>>>>             Fixed inconsistencies between FINE / FINER log statements:
>>>>>             - XScrollbarPeer
>>>>>             - XWindowPeer
>>>>>
>>>>>             Laurent
>>>>>
>>>>>             2013/4/2 Anthony Petrov <anthony.petrov at oracle.com
>>>>>             <mailto:anthony.petrov at oracle.com>
>>>>>              <mailto:anthony.petrov at oracle.__com
>>>>>
>>>>>             <mailto:anthony.petrov at 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>>
>>>>>
>>>>>                          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/%__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>>
>>>>>                                  (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/%__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
>>>>> >>>.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
>>>>> >>>("");
>>>>>
>>>>>
>>>>>                                      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.laurent at gmail.com <mailto:
>>>>> bourges.laurent at gmail.com>
>>>>>             <mailto:bourges.laurent at gmail.__com
>>>>>             <mailto:bourges.laurent at gmail.com>>
>>>>>               <mailto:bourges.laurent at gmail.
>>>>>             <mailto:bourges.laurent at gmail.>____com
>>>>>
>>>>>              <mailto:bourges.laurent at gmail.__com
>>>>>             <mailto:bourges.laurent at 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.laurent at gmail.com <mailto:
>>>>> bourges.laurent at gmail.com>
>>>>>             <mailto:bourges.laurent at gmail.__com
>>>>>             <mailto:bourges.laurent at gmail.com>>
>>>>>              <mailto:bourges.laurent at gmail.
>>>>>             <mailto:bourges.laurent at gmail.>____com
>>>>>
>>>>>              <mailto:bourges.laurent at gmail.__com
>>>>>             <mailto:bourges.laurent at 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
>>>>> >>
>>>>>
>>>>>
>>>>>                                              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.petrov at oracle.com <mailto:
>>>>> anthony.petrov at oracle.com>
>>>>>             <mailto:anthony.petrov at oracle.__com
>>>>>             <mailto:anthony.petrov at oracle.com>>
>>>>>               <mailto:anthony.petrov at oracle.
>>>>>             <mailto:anthony.petrov at oracle.>____com
>>>>>
>>>>>               <mailto:anthony.petrov at oracle.__com
>>>>>             <mailto:anthony.petrov at 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.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>
>>
>



More information about the core-libs-dev mailing list