You might want to separate the new ReentrantTL class into a separate file in sun.java2d so it can be used in other places. What are the hurdles for using it in Marlin instead of rolling its own? If it is going to be reused it might be better to represent the ReentrantContext class as an interface so that objects with pre-determined super-class hierarchies can still participate.

TILE_SIZE is probably mostly obsolete now, but that's fodder for some other work. Also, 32 may not be the best choice to use when we aren't using Ductus, but currently D3D can only accept 32 so there is work to be done before that is really configurable.

MarlinRenderingEngine line 182 - testing useThreadLocal is redundant/irrelevant here, checking the queue variable should be enough.

ReentrantThreadLocal - depth is a poor name for that field. Perhaps usage? With "*_TL_INACTIVE", "*_TL_IN_USE", and "*_CLQ" being the variants?

AAShapePipe line 297 - should it double check that the level is DEPTH_CLQ? Otherwise someone can submit an undefined TL object for restore() and it will end up in the queue...

                        ...jim

On 2/5/16 3:21 PM, Laurent Bourgès wrote:
Jim & Phil,

Here is an updated webrev according to jim's comments:
http://cr.openjdk.java.net/~lbourges/marlin/marlin-8148886.1/

Changes:
- AAShapePipe rewritten to use a new ReentrantThreadLocal class
(generalization) that use TL + CLQ (like Marlin) to use other (cached)
TileState instances in case of reentrancy; such class may be useful for
other use cases (replacing synchronized / static refs); it do not use
WeakReference as TileState instances are very small (to be improved later ?)
- Improved CrashPaintTest to check few pixel values to ensure rendering
is correct

PS: I noticed that AlphaPaintPipe has a constant int TILE_SIZE = 32 that
seems useless as the method has a tilesize argument; maybe it should be
cleaned up ?

Regards,
Laurent

2016-02-05 2:20 GMT+01:00 Jim Graham <[email protected]
<mailto:[email protected]>>:

    Ah, at least one error spotted here after my initial review...

    The abox values could be changed by the code in lines 157-160 so you
    can't cache their values until after that.

    Also, as you pointed out in another thread in the grdev group, we
    should probably do the same treatment for the TileState in case we
    have reentrance for the AAShapePipe code...

                     ...jim


    On 2/4/2016 5:10 PM, Jim Graham wrote:

        Hi Laurent,

        In AAShapePipe you load the values from abox[] into variables named
        xywh, but these are not xywh values, they are min/max values.  We
        typically use any of the following naming conventions for these
        types of
        values:

        - x0, y0, x1, y1
        - x1, y1, x2, y2
        - minX, minY, maxX, maxY

        Other than that naming inconsistency the changes look great...

                      ...jim

        On 2/4/2016 2:21 PM, Laurent Bourgès wrote:

            Please review the webrev fixing SEGFAULT (P2) in the Marlin
            Renderer
            when using thread-local storage with custom Paint (reentrance):
            bug: https://bugs.openjdk.java.net/browse/JDK-8148886
            webrev:
            http://cr.openjdk.java.net/~lbourges/marlin/marlin-8148886.0/

            Changes:
            - detect reentrance in MarlinRenderingEngine using flag
            RendererContext.usedTL (true/false) and use another context
            from CLQ
            - added few more details in array checks (XXXArrayCache)
            - fixed AAShapePipe to support reentrancy: added defensive
            copy of int[]
            abox in local variables + TODO to discuss
            - updated Version to 0.7.3.2
            - fixed copyright headers

            Best regards,
            Laurent




--
--
Laurent Bourgès

Reply via email to