jdk/src/java.desktop/share/classes/sun/java2d/marlin/RendererContext.java
author lbourges
Wed, 15 Jun 2016 21:43:39 +0200
changeset 39519 21bfc4452441
parent 36458 25786a73a5fc
child 40421 d5ee65e2b0fb
permissions -rw-r--r--
8159093: Fix coding conventions in Marlin renderer Summary: capital letters for constants and use rdrCtx.stats (field) Reviewed-by: flar, prr
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
     1
/*
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 35688
diff changeset
     2
 * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
     4
 *
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    10
 *
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    15
 * accompanied this code).
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    16
 *
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    20
 *
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    23
 * questions.
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    24
 */
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    25
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    26
package sun.java2d.marlin;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    27
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    28
import java.awt.geom.Path2D;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    29
import java.lang.ref.WeakReference;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    30
import java.util.concurrent.atomic.AtomicInteger;
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 35688
diff changeset
    31
import sun.java2d.ReentrantContext;
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 35688
diff changeset
    32
import sun.java2d.ReentrantContextProvider;
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    33
import static sun.java2d.marlin.ArrayCache.*;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    34
import sun.java2d.marlin.MarlinRenderingEngine.NormalizingPathIterator;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    35
import static sun.java2d.marlin.MarlinUtils.logInfo;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    36
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    37
/**
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    38
 * This class is a renderer context dedicated to a single thread
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    39
 */
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 35688
diff changeset
    40
final class RendererContext extends ReentrantContext implements MarlinConst {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    41
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    42
    // RendererContext creation counter
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
    43
    private static final AtomicInteger CTX_COUNT = new AtomicInteger(1);
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    44
    // RendererContext statistics
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
    45
    final RendererStats stats = (DO_STATS || DO_MONITORS)
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    46
                                       ? RendererStats.getInstance(): null;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    47
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
    48
    private static final boolean USE_CACHE_HARD_REF = DO_STATS
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 35688
diff changeset
    49
        || (MarlinRenderingEngine.REF_TYPE == ReentrantContextProvider.REF_WEAK);
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    50
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    51
    /**
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    52
     * Create a new renderer context
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    53
     *
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    54
     * @return new RendererContext instance
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    55
     */
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    56
    static RendererContext createContext() {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    57
        final RendererContext newCtx = new RendererContext("ctx"
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
    58
                    + Integer.toString(CTX_COUNT.getAndIncrement()));
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 35688
diff changeset
    59
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
    60
        if (DO_STATS || DO_MONITORS) {
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
    61
            RendererStats.ALL_CONTEXTS.add(newCtx);
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    62
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    63
        return newCtx;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    64
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    65
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    66
    // context name (debugging purposes)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    67
    final String name;
35688
744b6cf60397 8147443: Use the Common Cleaner in Marlin OffHeapArray
lbourges
parents: 34816
diff changeset
    68
    // Smallest object used as Cleaner's parent reference
744b6cf60397 8147443: Use the Common Cleaner in Marlin OffHeapArray
lbourges
parents: 34816
diff changeset
    69
    final Object cleanerObj = new Object();
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    70
    // dirty flag indicating an exception occured during pipeline in pathTo()
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    71
    boolean dirty = false;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    72
    // dynamic array caches kept using weak reference (low memory footprint)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    73
    WeakReference<ArrayCachesHolder> refArrayCaches = null;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    74
    // hard reference to array caches (for statistics)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    75
    ArrayCachesHolder hardRefArrayCaches = null;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    76
    // shared data
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    77
    final float[] float6 = new float[6];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    78
    // shared curve (dirty) (Renderer / Stroker)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    79
    final Curve curve = new Curve();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    80
    // MarlinRenderingEngine NormalizingPathIterator NearestPixelCenter:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    81
    final NormalizingPathIterator nPCPathIterator;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    82
    // MarlinRenderingEngine NearestPixelQuarter NormalizingPathIterator:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    83
    final NormalizingPathIterator nPQPathIterator;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    84
    // MarlinRenderingEngine.TransformingPathConsumer2D
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    85
    final TransformingPathConsumer2D transformerPC2D;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    86
    // recycled Path2D instance
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    87
    Path2D.Float p2d = null;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    88
    final Renderer renderer;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    89
    final Stroker stroker;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    90
    // Simplifies out collinear lines
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    91
    final CollinearSimplifier simplifier = new CollinearSimplifier();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    92
    final Dasher dasher;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    93
    final MarlinTileGenerator ptg;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    94
    final MarlinCache cache;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    95
    // flag indicating the shape is stroked (1) or filled (0)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    96
    int stroking = 0;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    97
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    98
    /**
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
    99
     * Constructor
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   100
     *
36458
25786a73a5fc 8148886: SEGV in sun.java2d.marlin.Renderer._endRendering
lbourges
parents: 35688
diff changeset
   101
     * @param name context name (debugging)
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   102
     */
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   103
    RendererContext(final String name) {
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   104
        if (LOG_CREATE_CONTEXT) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   105
            MarlinUtils.logInfo("new RendererContext = " + name);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   106
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   107
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   108
        this.name = name;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   109
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   110
        // NormalizingPathIterator instances:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   111
        nPCPathIterator = new NormalizingPathIterator.NearestPixelCenter(float6);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   112
        nPQPathIterator  = new NormalizingPathIterator.NearestPixelQuarter(float6);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   113
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   114
        // MarlinRenderingEngine.TransformingPathConsumer2D
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   115
        transformerPC2D = new TransformingPathConsumer2D();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   116
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   117
        // Renderer:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   118
        cache = new MarlinCache(this);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   119
        renderer = new Renderer(this); // needs MarlinCache from rdrCtx.cache
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   120
        ptg = new MarlinTileGenerator(renderer);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   121
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   122
        stroker = new Stroker(this);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   123
        dasher = new Dasher(this);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   124
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   125
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   126
    /**
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   127
     * Disposes this renderer context:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   128
     * clean up before reusing this context
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   129
     */
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   130
    void dispose() {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   131
        stroking = 0;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   132
        // reset hard reference to array caches if needed:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   133
        if (!USE_CACHE_HARD_REF) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   134
            hardRefArrayCaches = null;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   135
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   136
        // if context is maked as DIRTY:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   137
        if (dirty) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   138
            // may happen if an exception if thrown in the pipeline processing:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   139
            // force cleanup of all possible pipelined blocks (except Renderer):
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   140
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   141
            // NormalizingPathIterator instances:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   142
            this.nPCPathIterator.dispose();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   143
            this.nPQPathIterator.dispose();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   144
            // Dasher:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   145
            this.dasher.dispose();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   146
            // Stroker:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   147
            this.stroker.dispose();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   148
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   149
            // mark context as CLEAN:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   150
            dirty = false;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   151
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   152
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   153
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   154
    // Array caches
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   155
    ArrayCachesHolder getArrayCachesHolder() {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   156
        // Use hard reference first (cached resolved weak reference):
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   157
        ArrayCachesHolder holder = hardRefArrayCaches;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   158
        if (holder == null) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   159
            // resolve reference:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   160
            holder = (refArrayCaches != null)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   161
                     ? refArrayCaches.get()
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   162
                     : null;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   163
            // create a new ArrayCachesHolder if none is available
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   164
            if (holder == null) {
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   165
                if (LOG_CREATE_CONTEXT) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   166
                    MarlinUtils.logInfo("new ArrayCachesHolder for "
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   167
                                        + "RendererContext = " + name);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   168
                }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   169
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   170
                holder = new ArrayCachesHolder();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   171
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   172
                if (USE_CACHE_HARD_REF) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   173
                    // update hard reference:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   174
                    hardRefArrayCaches = holder;
35688
744b6cf60397 8147443: Use the Common Cleaner in Marlin OffHeapArray
lbourges
parents: 34816
diff changeset
   175
                } else {
744b6cf60397 8147443: Use the Common Cleaner in Marlin OffHeapArray
lbourges
parents: 34816
diff changeset
   176
                    // update weak reference:
744b6cf60397 8147443: Use the Common Cleaner in Marlin OffHeapArray
lbourges
parents: 34816
diff changeset
   177
                    refArrayCaches = new WeakReference<ArrayCachesHolder>(holder);
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   178
                }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   179
            }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   180
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   181
        return holder;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   182
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   183
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   184
    // dirty byte array cache
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   185
    ByteArrayCache getDirtyByteArrayCache(final int length) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   186
        final int bucket = ArrayCache.getBucketDirtyBytes(length);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   187
        return getArrayCachesHolder().dirtyByteArrayCaches[bucket];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   188
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   189
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   190
    byte[] getDirtyByteArray(final int length) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   191
        if (length <= MAX_DIRTY_BYTE_ARRAY_SIZE) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   192
            return getDirtyByteArrayCache(length).getArray();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   193
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   194
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   195
        if (DO_STATS) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   196
            incOversize();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   197
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   198
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   199
        if (DO_LOG_OVERSIZE) {
34816
5ff696b1bbac 8144654: Improve Marlin logging
lbourges
parents: 34417
diff changeset
   200
            logInfo("getDirtyByteArray[oversize]: length=\t" + length);
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   201
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   202
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   203
        return new byte[length];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   204
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   205
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   206
    void putDirtyByteArray(final byte[] array) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   207
        final int length = array.length;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   208
        // odd sized array are non-cached arrays (initial arrays)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   209
        // ensure to never store initial arrays in cache:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   210
        if (((length & 0x1) == 0) && (length <= MAX_DIRTY_BYTE_ARRAY_SIZE)) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   211
            getDirtyByteArrayCache(length).putDirtyArray(array, length);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   212
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   213
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   214
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   215
    byte[] widenDirtyByteArray(final byte[] in,
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   216
                               final int usedSize, final int needSize)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   217
    {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   218
        final int length = in.length;
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   219
        if (DO_CHECKS && length >= needSize) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   220
            return in;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   221
        }
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   222
        if (DO_STATS) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   223
            incResizeDirtyByte();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   224
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   225
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   226
        // maybe change bucket:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   227
        // ensure getNewSize() > newSize:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   228
        final byte[] res = getDirtyByteArray(getNewSize(usedSize, needSize));
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   229
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   230
        System.arraycopy(in, 0, res, 0, usedSize); // copy only used elements
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   231
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   232
        // maybe return current array:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   233
        // NO clean-up of array data = DIRTY ARRAY
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   234
        putDirtyByteArray(in);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   235
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   236
        if (DO_LOG_WIDEN_ARRAY) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   237
            logInfo("widenDirtyByteArray[" + res.length + "]: usedSize=\t"
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   238
                    + usedSize + "\tlength=\t" + length + "\tneeded length=\t"
34816
5ff696b1bbac 8144654: Improve Marlin logging
lbourges
parents: 34417
diff changeset
   239
                    + needSize);
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   240
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   241
        return res;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   242
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   243
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   244
    // int array cache
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   245
    IntArrayCache getIntArrayCache(final int length) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   246
        final int bucket = ArrayCache.getBucket(length);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   247
        return getArrayCachesHolder().intArrayCaches[bucket];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   248
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   249
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   250
    int[] getIntArray(final int length) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   251
        if (length <= MAX_ARRAY_SIZE) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   252
            return getIntArrayCache(length).getArray();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   253
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   254
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   255
        if (DO_STATS) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   256
            incOversize();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   257
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   258
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   259
        if (DO_LOG_OVERSIZE) {
34816
5ff696b1bbac 8144654: Improve Marlin logging
lbourges
parents: 34417
diff changeset
   260
            logInfo("getIntArray[oversize]: length=\t" + length);
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   261
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   262
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   263
        return new int[length];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   264
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   265
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   266
    // unused
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   267
    int[] widenIntArray(final int[] in, final int usedSize,
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   268
                        final int needSize, final int clearTo)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   269
    {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   270
        final int length = in.length;
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   271
        if (DO_CHECKS && length >= needSize) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   272
            return in;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   273
        }
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   274
        if (DO_STATS) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   275
            incResizeInt();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   276
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   277
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   278
        // maybe change bucket:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   279
        // ensure getNewSize() > newSize:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   280
        final int[] res = getIntArray(getNewSize(usedSize, needSize));
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   281
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   282
        System.arraycopy(in, 0, res, 0, usedSize); // copy only used elements
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   283
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   284
        // maybe return current array:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   285
        putIntArray(in, 0, clearTo); // ensure all array is cleared (grow-reduce algo)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   286
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   287
        if (DO_LOG_WIDEN_ARRAY) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   288
            logInfo("widenIntArray[" + res.length + "]: usedSize=\t"
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   289
                    + usedSize + "\tlength=\t" + length + "\tneeded length=\t"
34816
5ff696b1bbac 8144654: Improve Marlin logging
lbourges
parents: 34417
diff changeset
   290
                    + needSize);
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   291
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   292
        return res;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   293
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   294
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   295
    void putIntArray(final int[] array, final int fromIndex,
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   296
                     final int toIndex)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   297
    {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   298
        final int length = array.length;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   299
        // odd sized array are non-cached arrays (initial arrays)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   300
        // ensure to never store initial arrays in cache:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   301
        if (((length & 0x1) == 0) && (length <= MAX_ARRAY_SIZE)) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   302
            getIntArrayCache(length).putArray(array, length, fromIndex, toIndex);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   303
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   304
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   305
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   306
    // dirty int array cache
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   307
    IntArrayCache getDirtyIntArrayCache(final int length) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   308
        final int bucket = ArrayCache.getBucket(length);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   309
        return getArrayCachesHolder().dirtyIntArrayCaches[bucket];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   310
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   311
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   312
    int[] getDirtyIntArray(final int length) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   313
        if (length <= MAX_ARRAY_SIZE) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   314
            return getDirtyIntArrayCache(length).getArray();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   315
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   316
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   317
        if (DO_STATS) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   318
            incOversize();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   319
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   320
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   321
        if (DO_LOG_OVERSIZE) {
34816
5ff696b1bbac 8144654: Improve Marlin logging
lbourges
parents: 34417
diff changeset
   322
            logInfo("getDirtyIntArray[oversize]: length=\t" + length);
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   323
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   324
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   325
        return new int[length];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   326
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   327
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   328
    int[] widenDirtyIntArray(final int[] in,
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   329
                             final int usedSize, final int needSize)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   330
    {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   331
        final int length = in.length;
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   332
        if (DO_CHECKS && length >= needSize) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   333
            return in;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   334
        }
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   335
        if (DO_STATS) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   336
            incResizeDirtyInt();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   337
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   338
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   339
        // maybe change bucket:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   340
        // ensure getNewSize() > newSize:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   341
        final int[] res = getDirtyIntArray(getNewSize(usedSize, needSize));
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   342
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   343
        System.arraycopy(in, 0, res, 0, usedSize); // copy only used elements
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   344
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   345
        // maybe return current array:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   346
        // NO clean-up of array data = DIRTY ARRAY
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   347
        putDirtyIntArray(in);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   348
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   349
        if (DO_LOG_WIDEN_ARRAY) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   350
            logInfo("widenDirtyIntArray[" + res.length + "]: usedSize=\t"
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   351
                    + usedSize + "\tlength=\t" + length + "\tneeded length=\t"
34816
5ff696b1bbac 8144654: Improve Marlin logging
lbourges
parents: 34417
diff changeset
   352
                    + needSize);
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   353
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   354
        return res;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   355
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   356
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   357
    void putDirtyIntArray(final int[] array) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   358
        final int length = array.length;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   359
        // odd sized array are non-cached arrays (initial arrays)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   360
        // ensure to never store initial arrays in cache:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   361
        if (((length & 0x1) == 0) && (length <= MAX_ARRAY_SIZE)) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   362
            getDirtyIntArrayCache(length).putDirtyArray(array, length);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   363
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   364
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   365
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   366
    // dirty float array cache
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   367
    FloatArrayCache getDirtyFloatArrayCache(final int length) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   368
        final int bucket = ArrayCache.getBucket(length);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   369
        return getArrayCachesHolder().dirtyFloatArrayCaches[bucket];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   370
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   371
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   372
    float[] getDirtyFloatArray(final int length) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   373
        if (length <= MAX_ARRAY_SIZE) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   374
            return getDirtyFloatArrayCache(length).getArray();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   375
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   376
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   377
        if (DO_STATS) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   378
            incOversize();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   379
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   380
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   381
        if (DO_LOG_OVERSIZE) {
34816
5ff696b1bbac 8144654: Improve Marlin logging
lbourges
parents: 34417
diff changeset
   382
            logInfo("getDirtyFloatArray[oversize]: length=\t" + length);
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   383
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   384
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   385
        return new float[length];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   386
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   387
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   388
    float[] widenDirtyFloatArray(final float[] in,
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   389
                                 final int usedSize, final int needSize)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   390
    {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   391
        final int length = in.length;
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   392
        if (DO_CHECKS && length >= needSize) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   393
            return in;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   394
        }
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   395
        if (DO_STATS) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   396
            incResizeDirtyFloat();
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   397
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   398
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   399
        // maybe change bucket:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   400
        // ensure getNewSize() > newSize:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   401
        final float[] res = getDirtyFloatArray(getNewSize(usedSize, needSize));
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   402
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   403
        System.arraycopy(in, 0, res, 0, usedSize); // copy only used elements
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   404
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   405
        // maybe return current array:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   406
        // NO clean-up of array data = DIRTY ARRAY
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   407
        putDirtyFloatArray(in);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   408
39519
21bfc4452441 8159093: Fix coding conventions in Marlin renderer
lbourges
parents: 36458
diff changeset
   409
        if (DO_LOG_WIDEN_ARRAY) {
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   410
            logInfo("widenDirtyFloatArray[" + res.length + "]: usedSize=\t"
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   411
                    + usedSize + "\tlength=\t" + length + "\tneeded length=\t"
34816
5ff696b1bbac 8144654: Improve Marlin logging
lbourges
parents: 34417
diff changeset
   412
                    + needSize);
34417
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   413
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   414
        return res;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   415
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   416
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   417
    void putDirtyFloatArray(final float[] array) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   418
        final int length = array.length;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   419
        // odd sized array are non-cached arrays (initial arrays)
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   420
        // ensure to never store initial arrays in cache:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   421
        if (((length & 0x1) == 0) && (length <= MAX_ARRAY_SIZE)) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   422
            getDirtyFloatArrayCache(length).putDirtyArray(array, length);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   423
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   424
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   425
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   426
    /* class holding all array cache instances */
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   427
    static final class ArrayCachesHolder {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   428
        // zero-filled int array cache:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   429
        final IntArrayCache[] intArrayCaches;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   430
        // dirty array caches:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   431
        final IntArrayCache[] dirtyIntArrayCaches;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   432
        final FloatArrayCache[] dirtyFloatArrayCaches;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   433
        final ByteArrayCache[] dirtyByteArrayCaches;
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   434
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   435
        ArrayCachesHolder() {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   436
            intArrayCaches = new IntArrayCache[BUCKETS];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   437
            dirtyIntArrayCaches = new IntArrayCache[BUCKETS];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   438
            dirtyFloatArrayCaches = new FloatArrayCache[BUCKETS];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   439
            dirtyByteArrayCaches = new ByteArrayCache[BUCKETS];
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   440
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   441
            for (int i = 0; i < BUCKETS; i++) {
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   442
                intArrayCaches[i] = new IntArrayCache(ARRAY_SIZES[i]);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   443
                // dirty array caches:
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   444
                dirtyIntArrayCaches[i] = new IntArrayCache(ARRAY_SIZES[i]);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   445
                dirtyFloatArrayCaches[i] = new FloatArrayCache(ARRAY_SIZES[i]);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   446
                dirtyByteArrayCaches[i] = new ByteArrayCache(DIRTY_BYTE_ARRAY_SIZES[i]);
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   447
            }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   448
        }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   449
    }
57a3863abbb4 8076529: Marlin antialiasing renderer integration
flar
parents:
diff changeset
   450
}