summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2015-01-15 17:56:14 +0900
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-01-16 13:18:31 +0100
commit6263bcfd70bf76dbcdf6b7e35bb02e48e44cbd94 (patch)
tree9db64f5f07d647c68412864aea0abd0b8e154764 /android
parent6b71410185900d7eea8d37f725c8f5ccb9b26d08 (diff)
android: store tiles in Map for faster access to tiles
Change-Id: I54c5fbe0b24ecf82de2d3d9f72d7f72d59125d58
Diffstat (limited to 'android')
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java54
1 files changed, 27 insertions, 27 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java
index 6f288d5dc387..862d2c822d1b 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java
@@ -14,14 +14,18 @@ import org.libreoffice.LOKitShell;
import org.libreoffice.TileIdentifier;
import org.mozilla.gecko.util.FloatUtils;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
public abstract class ComposedTileLayer extends Layer implements ComponentCallbacks2 {
private static final String LOGTAG = ComposedTileLayer.class.getSimpleName();
- protected final List<SubTile> tiles = new CopyOnWriteArrayList<SubTile>();
+ protected final ConcurrentMap<TileIdentifier, SubTile> tiles = new ConcurrentHashMap<TileIdentifier, SubTile>();
+ protected final Set<TileIdentifier> newTileIds = Collections.newSetFromMap(new ConcurrentHashMap<TileIdentifier, Boolean>());
protected final IntSize tileSize;
protected RectF currentViewport = new RectF();
@@ -38,7 +42,7 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
}
public void invalidate() {
- for (SubTile tile : tiles) {
+ for (SubTile tile : tiles.values()) {
tile.invalidate();
}
}
@@ -46,14 +50,14 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
@Override
public void beginTransaction() {
super.beginTransaction();
- for (SubTile tile : tiles) {
+ for (SubTile tile : tiles.values()) {
tile.beginTransaction();
}
}
@Override
public void endTransaction() {
- for (SubTile tile : tiles) {
+ for (SubTile tile : tiles.values()) {
tile.endTransaction();
}
super.endTransaction();
@@ -61,7 +65,7 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
@Override
public void draw(RenderContext context) {
- for (SubTile tile : tiles) {
+ for (SubTile tile : tiles.values()) {
if (RectF.intersects(tile.getBounds(context), context.viewport)) {
tile.draw(context);
}
@@ -72,7 +76,7 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
protected void performUpdates(RenderContext context) {
super.performUpdates(context);
- for (SubTile tile : tiles) {
+ for (SubTile tile : tiles.values()) {
tile.beginTransaction();
tile.refreshTileMetrics();
tile.endTransaction();
@@ -83,7 +87,7 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
@Override
public Region getValidRegion(RenderContext context) {
Region validRegion = new Region();
- for (SubTile tile : tiles) {
+ for (SubTile tile : tiles.values()) {
validRegion.op(tile.getValidRegion(context), Region.Op.UNION);
}
@@ -93,7 +97,7 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
@Override
public void setResolution(float newResolution) {
super.setResolution(newResolution);
- for (SubTile tile : tiles) {
+ for (SubTile tile : tiles.values()) {
tile.setResolution(newResolution);
}
}
@@ -163,14 +167,9 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
if (x > pageRect.width()) {
continue;
}
- boolean contains = false;
- for (SubTile tile : tiles) {
- if (tile.id.x == x && tile.id.y == y && tile.id.zoom == currentZoom) {
- contains = true;
- }
- }
- if (!contains) {
- TileIdentifier tileId = new TileIdentifier((int) x, (int) y, currentZoom, tileSize);
+ TileIdentifier tileId = new TileIdentifier((int) x, (int) y, currentZoom, tileSize);
+ if (!tiles.containsKey(tileId) && !newTileIds.contains(tileId)) {
+ newTileIds.add(tileId);
LOEvent event = LOEventFactory.tileRequest(this, tileId, true);
event.mPriority = getTilePriority();
LOKitShell.sendEvent(event);
@@ -180,18 +179,18 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
}
private void clearMarkedTiles() {
- List<SubTile> tilesToRemove = new ArrayList<SubTile>();
- for (SubTile tile : tiles) {
+ Iterator<Map.Entry<TileIdentifier, SubTile>> iterator;
+ for (iterator = tiles.entrySet().iterator(); iterator.hasNext();) {
+ SubTile tile = iterator.next().getValue();
if (tile.markedForRemoval) {
tile.destroy();
- tilesToRemove.add(tile);
+ iterator.remove();
}
}
- tiles.removeAll(tilesToRemove);
}
private void markTiles() {
- for (SubTile tile : tiles) {
+ for (SubTile tile : tiles.values()) {
if (FloatUtils.fuzzyEquals(tile.id.zoom, currentZoom)) {
RectF tileRect = tile.id.getRect();
if (!RectF.intersects(currentViewport, tileRect)) {
@@ -210,7 +209,8 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
public void addTile(SubTile tile) {
tile.beginTransaction();
- tiles.add(tile);
+ tiles.put(tile.id, tile);
+ newTileIds.remove(tile.id);
}
public boolean isStillValid(TileIdentifier tileId) {
@@ -223,7 +223,7 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
public void invalidateTiles(RectF rect) {
RectF zoomedRect = RectUtils.inverseScale(rect, currentZoom);
- for (SubTile tile : tiles) {
+ for (SubTile tile : tiles.values()) {
if (RectF.intersects(rect, tile.id.getRect())) {
LOKitShell.sendEvent(LOEventFactory.tileRerender(this, tile));
}
@@ -246,7 +246,7 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
Log.i(LOGTAG, "Trimming memory - TRIM_MEMORY_RUNNING_LOW");
} else if (level >= 15 /*TRIM_MEMORY_RUNNING_CRITICAL*/) {
Log.i(LOGTAG, "Trimming memory - TRIM_MEMORY_RUNNING_CRITICAL");
- clearAndReset();
+ //clearAndReset();
}
}
} \ No newline at end of file