[Libreoffice-commits] core.git: Branch 'feature/tiled-editing' - 6 commits - android/experimental

Tomaž Vajngerl tomaz.vajngerl at collabora.co.uk
Tue Jan 20 21:58:10 PST 2015


 android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java              |    4 +
 android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java             |   21 ++++++--
 android/experimental/LOAndroid3/src/java/org/libreoffice/TileIdentifier.java          |   24 +++++++--
 android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java |   25 ++++------
 android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java  |    4 -
 android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/SubTile.java           |    8 ---
 6 files changed, 54 insertions(+), 32 deletions(-)

New commits:
commit dee9484d196a16a59ec70058401890181c9fb9c2
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Wed Jan 21 14:53:26 2015 +0900

    android: guard rendering if buffer could not be allocated
    
    Change-Id: I51a8f7f56531e5f0c4cb966c44be40913c557da7

diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
index 9a32fe8..fd88f1c 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
@@ -30,12 +30,11 @@ public class LOKitThread extends Thread implements TileProvider.TileInvalidation
     private void tileRequest(ComposedTileLayer composedTileLayer, TileIdentifier tileId, boolean forceRedraw) {
         if (composedTileLayer.isStillValid(tileId)) {
             CairoImage image = mTileProvider.createTile(tileId.x, tileId.y, tileId.size, tileId.zoom);
-            mViewportMetrics = mLayerClient.getViewportMetrics();
-            mLayerClient.beginDrawing();
-            SubTile tile = new SubTile(image, tileId);
-            composedTileLayer.addTile(tile);
-            mLayerClient.endDrawing(mViewportMetrics);
-            if (forceRedraw) {
+            if (image != null) {
+                mLayerClient.beginDrawing();
+                SubTile tile = new SubTile(image, tileId);
+                composedTileLayer.addTile(tile);
+                mLayerClient.endDrawing(mViewportMetrics);
                 mLayerClient.forceRender();
             }
         } else {
commit f1768204633170da647426dcb09502c13454d628
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Wed Jan 21 13:50:22 2015 +0900

    android: getRect renamed to getRectF - adapt the code to this
    
    Change-Id: Id0248803fbd8fedf846d7741a2faddb9bfd171e0

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 db27d1b..d917c03 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
@@ -184,7 +184,7 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
     private void markTiles() {
         for (SubTile tile : tiles.values()) {
             if (FloatUtils.fuzzyEquals(tile.id.zoom, currentZoom)) {
-                RectF tileRect = tile.id.getRect();
+                RectF tileRect = tile.id.getRectF();
                 if (!RectF.intersects(currentViewport, tileRect)) {
                     tile.markForRemoval();
                 }
@@ -206,16 +206,17 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
     }
 
     public boolean isStillValid(TileIdentifier tileId) {
-        return RectF.intersects(currentViewport, tileId.getRect()) || currentViewport.contains(tileId.getRect());
+        return RectF.intersects(currentViewport, tileId.getRectF()) || currentViewport.contains(tileId.getRectF());
     }
 
     /**
      * Invalidate tiles which intersect the input rect
      */
-    public void invalidateTiles(RectF rect) {
-        RectF zoomedRect = RectUtils.scale(rect, currentZoom);
+    public void invalidateTiles(RectF cssRect) {
+        RectF zoomedRect = RectUtils.scale(cssRect, currentZoom);
+
         for (SubTile tile : tiles.values()) {
-            if (RectF.intersects(zoomedRect, tile.id.getRect())) {
+            if (RectF.intersects(zoomedRect, tile.id.getRectF())) {
                 LOKitShell.sendEvent(LOEventFactory.tileRerender(this, tile));
             }
         }
commit 5203ab4862e354d04e918311e0ee15a6611b98c9
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Wed Jan 21 13:46:06 2015 +0900

    android: invalidate only new/changed tiles - big perf. improvement
    
    Previously on every rerender or draw event all tiles were
    invalidated (which means they were reuploaded to GPU even when
    the tiles didn't change). This was changed to only invalidate
    tiles that did actually change.
    
    Change-Id: I50a8b51b9d5b44797ac3e2dedd20cfb07fb2bb8b

diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
index ed63cd7..9a32fe8 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
@@ -30,6 +30,7 @@ public class LOKitThread extends Thread implements TileProvider.TileInvalidation
     private void tileRequest(ComposedTileLayer composedTileLayer, TileIdentifier tileId, boolean forceRedraw) {
         if (composedTileLayer.isStillValid(tileId)) {
             CairoImage image = mTileProvider.createTile(tileId.x, tileId.y, tileId.size, tileId.zoom);
+            mViewportMetrics = mLayerClient.getViewportMetrics();
             mLayerClient.beginDrawing();
             SubTile tile = new SubTile(image, tileId);
             composedTileLayer.addTile(tile);
@@ -46,6 +47,7 @@ public class LOKitThread extends Thread implements TileProvider.TileInvalidation
         if (composedTileLayer.isStillValid(tile.id) && !tile.markedForRemoval) {
             mLayerClient.beginDrawing();
             mTileProvider.rerenderTile(tile.getImage(), tile.id.x, tile.id.y, tile.id.size, tile.id.zoom);
+            tile.invalidate();
             mLayerClient.endDrawing(mViewportMetrics);
             mLayerClient.forceRender();
         }
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java
index 1006383..9ec1c98 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java
@@ -277,8 +277,8 @@ public class GeckoLayerClient implements PanZoomTarget, LayerView.Listener {
             try {
                 mNewGeckoViewport = viewportMetrics;
                 updateViewport();
-                mLowResLayer.invalidate();
-                mRootLayer.invalidate();
+                //mLowResLayer.invalidate();
+                //mRootLayer.invalidate();
             } finally {
                 mLowResLayer.endTransaction();
                 mRootLayer.endTransaction();
commit c97a5143f2c22bb67983cc95730dd2a06b788006
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Wed Jan 21 13:44:06 2015 +0900

    android: make editing switchable via LOKitShell
    
    Change-Id: I329dbead616527a985eba1f3b42cddf573501e86

diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java
index ac3e360..49da6b4 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java
@@ -82,4 +82,8 @@ public class LOKitShell {
     public static void sendKeyPressEvent(KeyEvent event) {
         LOKitShell.sendEvent(new LOEvent(LOEvent.KEY_PRESS, event));
     }
+
+    public static boolean isEditingEnabled() {
+        return false;
+    }
 }
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
index 9954ea8..ed63cd7 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java
@@ -147,9 +147,15 @@ public class LOKitThread extends Thread implements TileProvider.TileInvalidation
                 createThumbnail(event.mTask);
                 break;
             case LOEvent.TOUCH:
+                if (!LOKitShell.isEditingEnabled()) {
+                    return;
+                }
                 touch(event.mTouchType, event.mMotionEvent);
                 break;
             case LOEvent.KEY_PRESS:
+                if (!LOKitShell.isEditingEnabled()) {
+                    return;
+                }
                 mTileProvider.keyPress(event.mKeyEvent);
                 break;
         }
@@ -174,6 +180,10 @@ public class LOKitThread extends Thread implements TileProvider.TileInvalidation
 
     @Override
     public void invalidate(RectF rect) {
+        if (!LOKitShell.isEditingEnabled()) {
+            return;
+        }
+
         Log.i(LOGTAG, "Invalidate request: " + rect);
 
         mLayerClient = mApplication.getLayerClient();
commit c5a798ba4efed1e257989d03555b8306925906e0
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Wed Jan 21 13:35:48 2015 +0900

    android: add getCSSRect to TileIdentifier and use id in SubTile
    
    Change-Id: I565a5f88d5913f5337f5c3d32d54be71a32f542a

diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileIdentifier.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileIdentifier.java
index 40ec60c..d682775 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileIdentifier.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileIdentifier.java
@@ -1,5 +1,6 @@
 package org.libreoffice;
 
+import android.graphics.Rect;
 import android.graphics.RectF;
 
 import org.mozilla.gecko.gfx.IntSize;
@@ -17,14 +18,27 @@ public class TileIdentifier {
         this.size = size;
     }
 
-    public RectF getRect() {
+    public RectF getRectF() {
         return new RectF(x, y, x + size.width, y + size.height);
     }
 
-    public RectF getCSSRect() {
-        float cssX = x * zoom;
-        float cssY = y * zoom;
-        return new RectF(cssX, cssY, cssX + (size.width * zoom), cssY + (size.height * zoom));
+    public RectF getCSSRectF() {
+        float cssX = x / zoom;
+        float cssY = y / zoom;
+        float cssSizeW = size.width / zoom;
+        float cssSizeH = size.height / zoom;
+        return new RectF(cssX, cssY, cssX + cssSizeW, cssY + cssSizeH);
+    }
+
+    public Rect getCSSRect() {
+        float cssX = x / zoom;
+        float cssY = y / zoom;
+        float sizeW = size.width / zoom;
+        float sizeH = size.height / zoom;
+        return new Rect(
+                (int) cssX, (int) cssY,
+                (int) (cssX + sizeW),
+                (int) (cssY + sizeH) );
     }
 
     @Override
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/SubTile.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/SubTile.java
index d76bc54..b5af410 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/SubTile.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/SubTile.java
@@ -19,13 +19,7 @@ public class SubTile extends SingleTileLayer {
     }
 
     public void refreshTileMetrics() {
-        Rect position = getPosition();
-        float positionX = id.x / id.zoom;
-        float positionY = id.y / id.zoom;
-        float tileSizeWidth = id.size.width / id.zoom;
-        float tileSizeHeight = id.size.height / id.zoom;
-        position.set((int) positionX, (int) positionY, (int) (positionX + tileSizeWidth), (int) (positionY + tileSizeHeight));
-        setPosition(position);
+        setPosition(id.getCSSRect());
     }
 
     public void markForRemoval() {
commit 4774cf1eb1942c03c553b7c7aa28fec256475b5c
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Wed Jan 21 11:41:38 2015 +0900

    android: small cleanup of ComposedTileLayer
    
    Change-Id: Ifa4b35fa23a754c0ba0dbf63653986e61e6cb399

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 7989ffe..db27d1b 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
@@ -130,11 +130,11 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
     }
 
     public void reevaluateTiles(ImmutableViewportMetrics viewportMetrics, DisplayPortMetrics mDisplayPort) {
-        RectF newCurrentViewPort = getViewPort(viewportMetrics);
+        RectF newViewPort = getViewPort(viewportMetrics);
         float newZoom = getZoom(viewportMetrics);
 
-        if (!currentViewport.equals(newCurrentViewPort) || currentZoom != newZoom) {
-            currentViewport = newCurrentViewPort;
+        if (!currentViewport.equals(newViewPort) || currentZoom != newZoom) {
+            currentViewport = newViewPort;
             currentZoom = newZoom;
             RectF pageRect = viewportMetrics.getPageRect();
 
@@ -232,12 +232,10 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba
 
     @Override
     public void onTrimMemory(int level) {
-        Log.i(LOGTAG, "Trimming memory " + level);
-        if (level >= 10 /*TRIM_MEMORY_RUNNING_LOW*/) {
-            Log.i(LOGTAG, "Trimming memory - TRIM_MEMORY_RUNNING_LOW");
-        } else if (level >= 15 /*TRIM_MEMORY_RUNNING_CRITICAL*/) {
+        if (level >= 15 /*TRIM_MEMORY_RUNNING_CRITICAL*/) {
             Log.i(LOGTAG, "Trimming memory - TRIM_MEMORY_RUNNING_CRITICAL");
-            //clearAndReset();
+        } else if (level >= 10 /*TRIM_MEMORY_RUNNING_LOW*/) {
+            Log.i(LOGTAG, "Trimming memory - TRIM_MEMORY_RUNNING_LOW");
         }
     }
 


More information about the Libreoffice-commits mailing list