I think the change looks reasonable. Has it been tested against things like changing -fx-font in some parent, or setting the font property in some parent? What about popups? If I have a tooltip on a Label, for example, does the tooltip properly pick up font from the Label's style or font property?

On 1/17/19 11:10 AM, Dean Wookey wrote:
This is almost a year old, but I think I've found a partial solution (David's suggestions on a top down approach still make sense, but that's a bigger issue). Caching an uncached call to lookupFont definitely improves performance.

https://github.com/DeanWookey/openjdk-jfx/commit/e12f00fb6c2fc690c0a7fb089f7b0c81d6930fa9 <https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_DeanWookey_openjdk-2Djfx_commit_e12f00fb6c2fc690c0a7fb089f7b0c81d6930fa9&d=DwMFaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=H6jKHjHoLf6vCNF0PYEnJ6cS6kScbGLraJqgoRs9znU&m=xH8dfYiQe6JO5VXucoVgtnsubTZNAhr0XVK5OaSDDbs&s=YvsZxESGrm40L34aR16E2fQCKjh8tCQ311R3h63hu0c&e=>

Using a stack of 50 stackpanes instead of 20, I now get the following:

Before modification:

With setting font size: 10675ms
Without setting font size: 49243ms

After modification:

With setting font size: 10852ms
Without setting font size: 20357ms

Dean

On Thu, Apr 19, 2018 at 9:51 PM David Grieve <david.gri...@oracle.com <mailto:david.gri...@oracle.com>> wrote:

    I was thinking about
    https://bugs.openjdk.java.net/browse/JDK-8177635 and
    https://bugs.openjdk.java.net/browse/JDK-8090462

    There is also https://bugs.openjdk.java.net/browse/JDK-8187955


    On 4/19/18 3:02 PM, Nir Lisker wrote:
    I think this is the issue:
    https://bugs.openjdk.java.net/browse/JDK-8088615. There's also
    https://bugs.openjdk.java.net/browse/JDK-8193445.

    - Nir

    On Thu, Apr 19, 2018 at 1:42 PM, David Grieve
    <david.gri...@oracle.com <mailto:david.gri...@oracle.com>> wrote:

        Resolving the relative size involves a lot of lookup. You
        have to go up the scene-graph from the child to find a font
        style. If you get to the root and haven't found a font style,
        then use the default font. Performance in this area could be
        vastly improved by passing the size from either a font style
        or the default font down the scene-graph as styles are
        evaluated. There are other style lookups that could benefit
        from this as well, resolving looked-up colors for example. I
        believe I created a bug for this a long time ago.



        On 4/19/18 5:57 AM, Dean Wookey wrote:

            Hi All,

            In our application we add and remove a lot of nodes to
            the scene graph
            regularly, and also make use of em font sizes to scale
            certain parts of our
            application. We've noticed performance issues when adding
            nodes to the
            scene, and it seems to be related to em sizes in our css.

            As a test we added a chain of 20 stackpanes to a root
            stackpane. On the
            root, we set a font size of 8pt via inline css. We then
            added and removed a
            new tableview from the deepest stackpane 500 times,
            waiting for the node to
            render after each add and remove.

            In each of the experiments, we compared adding tableviews
            without css and
            adding tableviews with an inline css font size of 8pt. We
            then tried
            setting different font sizes in the stackpane chain.

            I've attached sample code for these experiments.

            The results (on jdk 9.0.4 - jdk 10 was similar) are as
            follows:

            Setting a 1em font size on all stackpanes except the root.
            With font on tableview: 14707ms
            Without font on tableview: 27725ms

            Setting a 1em font size on the first child of the root only.
            With font on tableview: 14221ms
            Without font on tableview: 19187ms

            Using the original setup with no additional fonts.
            With font on tableview: 13990ms
            Without font on tableview: 13847ms

            It looks like using a relative font size has a large
            effect performance
            wise on descendant nodes. I would expect some amount of
            font size caching
            in the chain of stackpanes since I'm reusing the same
            chain and
            adding/removing nodes from that chain repeatedly.

            I'm not sure how valid my test is, or how much of an
            issue this really is
            in practice?

            Dean




Reply via email to