Changeset 10588 in josm for trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
- Timestamp:
- 2016-07-22T23:03:22+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
r10576 r10588 90 90 import org.openstreetmap.josm.io.WMSLayerImporter; 91 91 import org.openstreetmap.josm.tools.GBC; 92 import org.openstreetmap.josm.tools.MemoryManager; 93 import org.openstreetmap.josm.tools.MemoryManager.MemoryHandle; 94 import org.openstreetmap.josm.tools.MemoryManager.NotEnoughMemoryException; 92 95 93 96 /** … … 694 697 throw new IllegalArgumentException(tr("Failed to create tile source")); 695 698 } 696 checkLayerMemoryDoesNotExceedMaximum();697 699 // check if projection is supported 698 700 projectionChanged(null, Main.getProjection()); … … 703 705 @Override 704 706 protected LayerPainter createMapViewPainter(MapViewEvent event) { 705 return new CompatibilityModeLayerPainter() { 706 @Override 707 public void detachFromMapView(MapViewEvent event) { 708 event.getMapView().removeMouseListener(adapter); 709 MapView.removeZoomChangeListener(AbstractTileSourceLayer.this); 710 super.detachFromMapView(event); 711 } 712 }; 707 return new TileSourcePainter(); 713 708 } 714 709 … … 732 727 add(new JMenuItem(new ShowTileInfoAction())); 733 728 } 734 }735 736 @Override737 protected long estimateMemoryUsage() {738 return 4L * tileSource.getTileSize() * tileSource.getTileSize() * estimateTileCacheSize();739 729 } 740 730 … … 1940 1930 adjustAction.destroy(); 1941 1931 } 1932 1933 private class TileSourcePainter extends CompatibilityModeLayerPainter { 1934 /** 1935 * The memory handle that will hold our tile source. 1936 */ 1937 private MemoryHandle<?> memory; 1938 1939 @Override 1940 public void paint(MapViewGraphics graphics) { 1941 allocateCacheMemory(); 1942 if (memory != null) { 1943 super.paint(graphics); 1944 } 1945 } 1946 1947 private void allocateCacheMemory() { 1948 if (memory == null) { 1949 MemoryManager manager = MemoryManager.getInstance(); 1950 if (manager.isAvailable(getEstimatedCacheSize())) { 1951 try { 1952 memory = manager.allocateMemory("tile source layer", getEstimatedCacheSize(), () -> new Object()); 1953 } catch (NotEnoughMemoryException e) { 1954 Main.warn("Could not allocate tile source memory", e); 1955 } 1956 } 1957 } 1958 } 1959 1960 protected long getEstimatedCacheSize() { 1961 return 4L * tileSource.getTileSize() * tileSource.getTileSize() * estimateTileCacheSize(); 1962 } 1963 1964 @Override 1965 public void detachFromMapView(MapViewEvent event) { 1966 event.getMapView().removeMouseListener(adapter); 1967 MapView.removeZoomChangeListener(AbstractTileSourceLayer.this); 1968 super.detachFromMapView(event); 1969 if (memory != null) { 1970 memory.free(); 1971 } 1972 } 1973 } 1942 1974 }
Note:
See TracChangeset
for help on using the changeset viewer.