| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /* $Id$ */ |
| |
| package org.apache.xmlgraphics.image.loader.cache; |
| |
| import java.util.Collections; |
| import java.util.Map; |
| |
| /** |
| * Convenience class that gathers statistical information about the image cache. |
| */ |
| public class ImageCacheStatistics implements ImageCacheListener { |
| |
| private int invalidHits; |
| private int imageInfoCacheHits; |
| private int imageInfoCacheMisses; |
| private int imageCacheHits; |
| private int imageCacheMisses; |
| private Map imageCacheHitMap; |
| private Map imageCacheMissMap; |
| |
| /** |
| * Main constructor. |
| * @param detailed true if the cache hits/misses for each Image instance should be recorded. |
| */ |
| public ImageCacheStatistics(boolean detailed) { |
| if (detailed) { |
| imageCacheHitMap = new java.util.HashMap(); |
| imageCacheMissMap = new java.util.HashMap(); |
| } |
| } |
| |
| /** |
| * Reset the gathered statistics information. |
| */ |
| public void reset() { |
| this.imageInfoCacheHits = 0; |
| this.imageInfoCacheMisses = 0; |
| this.invalidHits = 0; |
| } |
| |
| /** {@inheritDoc} */ |
| public void invalidHit(String uri) { |
| invalidHits++; |
| } |
| |
| /** {@inheritDoc} */ |
| public void cacheHitImageInfo(String uri) { |
| imageInfoCacheHits++; |
| } |
| |
| /** {@inheritDoc} */ |
| public void cacheMissImageInfo(String uri) { |
| imageInfoCacheMisses++; |
| } |
| |
| private void increaseEntry(Map map, Object key) { |
| Integer v = (Integer)map.get(key); |
| if (v == null) { |
| v = new Integer(1); |
| } else { |
| v = new Integer(v.intValue() + 1); |
| } |
| map.put(key, v); |
| } |
| |
| /** {@inheritDoc} */ |
| public void cacheHitImage(ImageKey key) { |
| imageCacheHits++; |
| if (imageCacheHitMap != null) { |
| increaseEntry(imageCacheHitMap, key); |
| } |
| } |
| |
| /** {@inheritDoc} */ |
| public void cacheMissImage(ImageKey key) { |
| imageCacheMisses++; |
| if (imageCacheMissMap != null) { |
| increaseEntry(imageCacheMissMap, key); |
| } |
| } |
| |
| /** |
| * Returns the number of times an invalid URI is tried. |
| * @return the number of times an invalid URI is tried. |
| */ |
| public int getInvalidHits() { |
| return invalidHits; |
| } |
| |
| /** |
| * Returns the number of cache hits for ImageInfo instances. |
| * @return the number of cache hits for ImageInfo instances. |
| */ |
| public int getImageInfoCacheHits() { |
| return imageInfoCacheHits; |
| } |
| |
| /** |
| * Returns the number of cache misses for ImageInfo instances. |
| * @return the number of cache misses for ImageInfo instances. |
| */ |
| public int getImageInfoCacheMisses() { |
| return imageInfoCacheMisses; |
| } |
| |
| /** |
| * Returns the number of cache hits for Image instances. |
| * @return the number of cache hits for Image instances. |
| */ |
| public int getImageCacheHits() { |
| return imageCacheHits; |
| } |
| |
| /** |
| * Returns the number of cache misses for Image instances. |
| * @return the number of cache misses for Image instances. |
| */ |
| public int getImageCacheMisses() { |
| return imageCacheMisses; |
| } |
| |
| /** |
| * Returns a Map<ImageKey, Integer> with the number of cache hits. |
| * @return a Map<ImageKey, Integer> with the number of cache hits |
| */ |
| public Map getImageCacheHitMap() { |
| return Collections.unmodifiableMap(imageCacheHitMap); |
| } |
| |
| /** |
| * Returns a Map<ImageKey, Integer> with the number of cache misses. |
| * @return a Map<ImageKey, Integer> with the number of cache misses |
| */ |
| public Map getImageCacheMissMap() { |
| return Collections.unmodifiableMap(imageCacheMissMap); |
| } |
| |
| } |