jdk/src/java.desktop/share/classes/sun/awt/image/ImageCache.java
author prr
Sat, 19 Sep 2015 15:45:59 -0700
changeset 32865 f9cb6e427f9e
parent 25859 3317bb8137f4
permissions -rw-r--r--
8136783: Run blessed-modifier-order script on java.desktop Reviewed-by: martin, serb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23666
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
     1
/*
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
     2
 * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
     4
 *
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    10
 *
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    15
 * accompanied this code).
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    16
 *
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    20
 *
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    23
 * questions.
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    24
 */
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    25
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    26
package sun.awt.image;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    27
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    28
import java.awt.*;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    29
import java.lang.ref.*;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    30
import java.util.*;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    31
import java.util.concurrent.locks.*;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    32
import sun.awt.AppContext;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    33
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    34
/**
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    35
 * ImageCache - A fixed pixel count sized cache of Images keyed by arbitrary
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    36
 * set of arguments. All images are held with SoftReferences so they will be
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    37
 * dropped by the GC if heap memory gets tight. When our size hits max pixel
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    38
 * count least recently requested images are removed first.
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    39
 *
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    40
 * The ImageCache must be used from the thread with an AppContext only.
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    41
 *
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    42
 */
32865
f9cb6e427f9e 8136783: Run blessed-modifier-order script on java.desktop
prr
parents: 25859
diff changeset
    43
public final class ImageCache {
23666
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    44
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    45
    // Ordered Map keyed by args hash, ordered by most recent accessed entry.
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    46
    private final LinkedHashMap<PixelsKey, ImageSoftReference> map
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    47
            = new LinkedHashMap<>(16, 0.75f, true);
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    48
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    49
    // Maximum number of pixels to cache, this is used if maxCount
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    50
    private final int maxPixelCount;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    51
    // The current number of pixels stored in the cache
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    52
    private int currentPixelCount = 0;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    53
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    54
    // Lock for concurrent access to map
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    55
    private final ReadWriteLock lock = new ReentrantReadWriteLock();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    56
    // Reference queue for tracking lost softreferences to images in the cache
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    57
    private final ReferenceQueue<Image> referenceQueue = new ReferenceQueue<>();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    58
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    59
    public static ImageCache getInstance() {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    60
        return AppContext.getSoftReferenceValue(ImageCache.class,
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    61
                () -> new ImageCache());
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    62
    }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    63
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    64
    ImageCache(final int maxPixelCount) {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    65
        this.maxPixelCount = maxPixelCount;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    66
    }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    67
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    68
    ImageCache() {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    69
        this((8 * 1024 * 1024) / 4); // 8Mb of pixels
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    70
    }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    71
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    72
    public void flush() {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    73
        lock.writeLock().lock();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    74
        try {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    75
            map.clear();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    76
        } finally {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    77
            lock.writeLock().unlock();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    78
        }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    79
    }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    80
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    81
    public Image getImage(final PixelsKey key){
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    82
        final ImageSoftReference ref;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    83
        lock.readLock().lock();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    84
        try {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    85
            ref = map.get(key);
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    86
        } finally {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    87
            lock.readLock().unlock();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    88
        }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    89
        return ref == null ? null : ref.get();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    90
    }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    91
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    92
    /**
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    93
     * Sets the cached image for the specified constraints.
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    94
     *
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    95
     * @param key The key with which the specified image is to be associated
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    96
     * @param image  The image to store in cache
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    97
     */
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    98
    public void setImage(final PixelsKey key, final Image image) {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
    99
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   100
        lock.writeLock().lock();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   101
        try {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   102
            ImageSoftReference ref = map.get(key);
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   103
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   104
            // check if currently in map
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   105
            if (ref != null) {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   106
                if (ref.get() != null) {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   107
                    return;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   108
                }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   109
                // soft image has been removed
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   110
                currentPixelCount -= key.getPixelCount();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   111
                map.remove(key);
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   112
            };
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   113
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   114
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   115
            // add new image to pixel count
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   116
            final int newPixelCount = key.getPixelCount();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   117
            currentPixelCount += newPixelCount;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   118
            // clean out lost references if not enough space
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   119
            if (currentPixelCount > maxPixelCount) {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   120
                while ((ref = (ImageSoftReference)referenceQueue.poll()) != null) {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   121
                    //reference lost
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   122
                    map.remove(ref.key);
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   123
                    currentPixelCount -= ref.key.getPixelCount();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   124
                }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   125
            }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   126
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   127
            // remove old items till there is enough free space
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   128
            if (currentPixelCount > maxPixelCount) {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   129
                final Iterator<Map.Entry<PixelsKey, ImageSoftReference>>
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   130
                        mapIter = map.entrySet().iterator();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   131
                while ((currentPixelCount > maxPixelCount) && mapIter.hasNext()) {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   132
                    final Map.Entry<PixelsKey, ImageSoftReference> entry =
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   133
                            mapIter.next();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   134
                    mapIter.remove();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   135
                    final Image img = entry.getValue().get();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   136
                    if (img != null) img.flush();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   137
                    currentPixelCount -= entry.getValue().key.getPixelCount();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   138
                }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   139
            }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   140
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   141
            // finally put new in map
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   142
            map.put(key, new ImageSoftReference(key, image, referenceQueue));
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   143
        } finally {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   144
            lock.writeLock().unlock();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   145
        }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   146
    }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   147
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   148
    public interface PixelsKey {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   149
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   150
        int getPixelCount();
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   151
    }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   152
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   153
    private static class ImageSoftReference extends SoftReference<Image> {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   154
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   155
        final PixelsKey key;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   156
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   157
        ImageSoftReference(final PixelsKey key, final Image referent,
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   158
                final ReferenceQueue<? super Image> q) {
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   159
            super(referent, q);
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   160
            this.key = key;
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   161
        }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   162
    }
a54bf43b5ba9 8035069: [macosx] Loading resolution variants by demand
alexsch
parents:
diff changeset
   163
}