<Swing Dev> <AWT Dev> sun.awt.X11 logs still using String + (waste)
Anthony Petrov
anthony.petrov at oracle.com
Tue Apr 2 12:11:54 UTC 2013
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/
>
> 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>>
>
> 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>
>
> Fix:
> http://cr.openjdk.java.net/~__anthony/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>
> (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/%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>>.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>>("");
>
>
> 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>>>
>
> 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>>>
>
> 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>
>
>
> 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>>>
>
> 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 swing-dev
mailing list