Hi, Laurent.
Fix looks good.

Thanks!

On 4/2/13 3:35 PM, 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.pet...@oracle.com <mailto: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

            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
                    (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>.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>("");


                        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.laur...@gmail.com>
                        <mailto:bourges.laur...@gmail.com
                        <mailto: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.laur...@gmail.com>
                            <mailto:bourges.laur...@gmail.com
                        <mailto: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


                                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.pet...@oracle.com>
                                <mailto:anthony.pet...@oracle.com
                        <mailto: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.




--
Best regards, Sergey.

Reply via email to