summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.com>2014-07-07 17:30:30 +0200
committerTomaž Vajngerl <tomaz.vajngerl@collabora.com>2014-07-10 11:17:54 +0200
commit842d8fb5118fa1ac46102cfaac6a1aafc33cbd46 (patch)
tree760d8beef21956b57b28f6afd769153ba840e077 /android
parente7b401d9fb86da9b6d18709a21886cb91e7a0ce5 (diff)
LOAndroid3: Add and use DirectBufferAllocator
Change-Id: I20a1de3a18deab6b978192d1d8a54278addbb083
Diffstat (limited to 'android')
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/DirectBufferAllocator.java33
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java58
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/BufferedCairoImage.java9
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/CheckerboardImage.java8
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java1
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerRenderer.java25
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ScrollbarLayer.java9
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/TextLayer.java20
8 files changed, 68 insertions, 95 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/DirectBufferAllocator.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/DirectBufferAllocator.java
new file mode 100644
index 000000000000..902d94ae0ecf
--- /dev/null
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/DirectBufferAllocator.java
@@ -0,0 +1,33 @@
+package org.libreoffice;
+
+import java.nio.ByteBuffer;
+
+public class DirectBufferAllocator {
+ public static ByteBuffer allocate(int size) {
+ if (size <= 0) {
+ throw new IllegalArgumentException("Invalid size " + size);
+ }
+
+ ByteBuffer directBuffer = ByteBuffer.allocateDirect(size);
+ //ByteBuffer directBuffer = nativeAllocateDirectBuffer(size);
+ if (directBuffer == null) {
+ throw new OutOfMemoryError("allocateDirectBuffer() returned null");
+ } else if (!directBuffer.isDirect()) {
+ throw new AssertionError("allocateDirectBuffer() did not return a direct buffer");
+ }
+
+ return directBuffer;
+ }
+
+ public static ByteBuffer free(ByteBuffer buffer) {
+ if (buffer == null) {
+ return null;
+ }
+
+ if (!buffer.isDirect()) {
+ throw new IllegalArgumentException("buffer must be direct");
+ }
+ //nativeFreeDirectBuffer(buffer);
+ return buffer;
+ }
+}
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java
index e4f6b08977c8..e9781ffa4035 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java
@@ -3,15 +3,6 @@ package org.libreoffice;
import android.util.DisplayMetrics;
import android.util.Log;
-import android.view.MotionEvent;
-import android.view.View;
-
-import org.mozilla.gecko.gfx.GeckoSoftwareLayerClient;
-import org.mozilla.gecko.gfx.IntSize;
-import org.mozilla.gecko.gfx.LayerController;
-import org.mozilla.gecko.gfx.LayerView;
-
-import java.nio.ByteBuffer;
public class LOKitShell {
private static final String LOGTAG = LOKitShell.class.getSimpleName();
@@ -21,39 +12,13 @@ public class LOKitShell {
return (int) metrics.density * 160;
}
- public static ByteBuffer allocateDirectBuffer(int size) {
- if (size <= 0) {
- throw new IllegalArgumentException("Invalid size " + size);
- }
-
- ByteBuffer directBuffer = ByteBuffer.allocateDirect(size);
- //ByteBuffer directBuffer = nativeAllocateDirectBuffer(size);
- if (directBuffer == null) {
- throw new OutOfMemoryError("allocateDirectBuffer() returned null");
- } else if (!directBuffer.isDirect()) {
- throw new AssertionError("allocateDirectBuffer() did not return a direct buffer");
- }
-
- return directBuffer;
- }
-
- public static void freeDirectBuffer(ByteBuffer buffer) {
- if (buffer == null) {
- return;
- }
-
- if (!buffer.isDirect()) {
- throw new IllegalArgumentException("buffer must be direct");
- }
- //nativeFreeDirectBuffer(buffer);
- return ;
- }
-
public static void bindWidgetTexture() {
}
public static void sendEvent(LOEvent event) {
- Log.i(LOGTAG, "Event: " + event.getTypeString());
+ if (LibreOfficeMainActivity.mAppContext != null && LibreOfficeMainActivity.mAppContext.getLOKitThread() != null) {
+ LibreOfficeMainActivity.mAppContext.getLOKitThread().queueEvent(event);
+ }
}
public static void runGecko(String apkPath, String args, String url, boolean restoreSession) {
@@ -85,27 +50,10 @@ public class LOKitShell {
geckoLoaded();
}
});
-
- //LOKitShell.nativeRun(combinedArgs);
}
// Called on the UI thread after Gecko loads.
private static void geckoLoaded() {
- /*final LayerController layerController = LibreOfficeMainActivity.mAppContext.getLayerController();
- LayerView v = layerController.getView();
- mInputConnection = GeckoInputConnection.create(v);
- v.setInputConnectionHandler(mInputConnection);
-
- layerController.setOnTouchListener(new View.OnTouchListener() {
- public boolean onTouch(View view, MotionEvent event) {
- if (event == null)
- return true;
- GeckoAppShell.sendEventToGecko(new GeckoEvent(event));
- return true;
- }
- });
-
- layerController.notifyLayerClientOfGeometryChange();*/
}
public static void viewSizeChanged() {
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/BufferedCairoImage.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/BufferedCairoImage.java
index 2ffe11329f85..7a98be339c0c 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/BufferedCairoImage.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/BufferedCairoImage.java
@@ -39,7 +39,7 @@ package org.mozilla.gecko.gfx;
import android.graphics.Bitmap;
-import org.libreoffice.LOKitShell;
+import org.libreoffice.DirectBufferAllocator;
import java.nio.ByteBuffer;
@@ -71,15 +71,16 @@ public class BufferedCairoImage extends CairoImage {
mSize = new IntSize(bitmap.getWidth(), bitmap.getHeight());
mNeedToFreeBuffer = true;
// XXX Why is this * 4? Shouldn't it depend on mFormat?
- mBuffer = LOKitShell.allocateDirectBuffer(mSize.getArea() * 4);
+ mBuffer = DirectBufferAllocator.allocate(mSize.getArea() * 4);
bitmap.copyPixelsToBuffer(mBuffer.asIntBuffer());
}
protected void finalize() throws Throwable {
try {
- if (mNeedToFreeBuffer && mBuffer != null)
- LOKitShell.freeDirectBuffer(mBuffer);
+ if (mNeedToFreeBuffer && mBuffer != null) {
+ DirectBufferAllocator.free(mBuffer);
+ }
mNeedToFreeBuffer = false;
mBuffer = null;
} finally {
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/CheckerboardImage.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/CheckerboardImage.java
index 392d7e8d8463..05a4d57a7346 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/CheckerboardImage.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/CheckerboardImage.java
@@ -37,8 +37,10 @@
package org.mozilla.gecko.gfx;
-import org.libreoffice.LOKitShell;
import android.graphics.Color;
+
+import org.libreoffice.DirectBufferAllocator;
+
import java.nio.ByteBuffer;
import java.nio.ShortBuffer;
import java.util.Arrays;
@@ -61,7 +63,7 @@ public class CheckerboardImage extends CairoImage {
/** Creates a new checkerboard image. */
public CheckerboardImage() {
int bpp = CairoUtils.bitsPerPixelForCairoFormat(FORMAT);
- mBuffer = LOKitShell.allocateDirectBuffer(SIZE * SIZE * bpp / 8);
+ mBuffer = DirectBufferAllocator.allocate(SIZE * SIZE * bpp / 8);
update(true, Color.WHITE);
}
@@ -145,7 +147,7 @@ public class CheckerboardImage extends CairoImage {
protected void finalize() throws Throwable {
try {
if (mBuffer != null) {
- LOKitShell.freeDirectBuffer(mBuffer);
+ DirectBufferAllocator.free(mBuffer);
}
} finally {
super.finalize();
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 5fd130f11d78..66ac7e985c71 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
@@ -64,6 +64,7 @@ public abstract class GeckoLayerClient implements GeckoEventListener {
protected ViewportMetrics mGeckoViewport;
/* The viewport that Gecko will display when drawing is finished */
protected ViewportMetrics mNewGeckoViewport;
+ protected LayerController mLayerController;
private long mLastViewportChangeTime;
private boolean mPendingViewportAdjust;
private boolean mViewportSizeChanged;
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerRenderer.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerRenderer.java
index 095a6f497ef7..8fb391a81f8e 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerRenderer.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerRenderer.java
@@ -39,21 +39,9 @@
package org.mozilla.gecko.gfx;
-import org.libreoffice.LOKitShell;
-import org.mozilla.gecko.gfx.BufferedCairoImage;
-import org.mozilla.gecko.gfx.IntSize;
-import org.mozilla.gecko.gfx.Layer.RenderContext;
-import org.mozilla.gecko.gfx.LayerController;
-import org.mozilla.gecko.gfx.NinePatchTileLayer;
-import org.mozilla.gecko.gfx.SingleTileLayer;
-import org.mozilla.gecko.gfx.TextureReaper;
-import org.mozilla.gecko.gfx.TextureGenerator;
-import org.mozilla.gecko.gfx.TextLayer;
-import org.mozilla.gecko.gfx.TileLayer;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Point;
-import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Region;
@@ -61,17 +49,20 @@ import android.graphics.RegionIterator;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.os.SystemClock;
-import android.util.DisplayMetrics;
import android.util.Log;
-import android.view.WindowManager;
-import javax.microedition.khronos.egl.EGLConfig;
-import javax.microedition.khronos.opengles.GL10;
+
+import org.libreoffice.DirectBufferAllocator;
+import org.mozilla.gecko.gfx.Layer.RenderContext;
+
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.util.ArrayList;
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.opengles.GL10;
+
/**
* The layer renderer implements the rendering logic for a layer view.
*/
@@ -186,7 +177,7 @@ public class LayerRenderer implements GLSurfaceView.Renderer {
// Initialize the FloatBuffer that will be used to store all vertices and texture
// coordinates in draw() commands.
- ByteBuffer byteBuffer = LOKitShell.allocateDirectBuffer(COORD_BUFFER_SIZE * 4);
+ ByteBuffer byteBuffer = DirectBufferAllocator.allocate(COORD_BUFFER_SIZE * 4);
byteBuffer.order(ByteOrder.nativeOrder());
mCoordBuffer = byteBuffer.asFloatBuffer();
}
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ScrollbarLayer.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ScrollbarLayer.java
index 68b7265b368b..9c33d40eef8f 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ScrollbarLayer.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ScrollbarLayer.java
@@ -47,7 +47,7 @@ import android.graphics.Rect;
import android.graphics.RectF;
import android.opengl.GLES20;
-import org.libreoffice.LOKitShell;
+import org.libreoffice.DirectBufferAllocator;
import org.mozilla.gecko.util.FloatUtils;
import java.nio.ByteBuffer;
@@ -128,7 +128,7 @@ public class ScrollbarLayer extends TileLayer {
// just create an empty image for now, it will get drawn
// on demand anyway
int imageSize = IntSize.nextPowerOfTwo(BAR_SIZE);
- ByteBuffer buffer = LOKitShell.allocateDirectBuffer(imageSize * imageSize * 4);
+ ByteBuffer buffer = DirectBufferAllocator.allocate(imageSize * imageSize * 4);
CairoImage image = new BufferedCairoImage(buffer, imageSize, imageSize,
CairoImage.FORMAT_ARGB32);
return new ScrollbarLayer(image, vertical, buffer);
@@ -136,8 +136,9 @@ public class ScrollbarLayer extends TileLayer {
protected void finalize() throws Throwable {
try {
- if (!mFinalized && mBuffer != null)
- LOKitShell.freeDirectBuffer(mBuffer);
+ if (!mFinalized && mBuffer != null) {
+ DirectBufferAllocator.free(mBuffer);
+ }
mFinalized = true;
} finally {
super.finalize();
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/TextLayer.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/TextLayer.java
index f2cc640baaa7..e3bd2f22013e 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/TextLayer.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/TextLayer.java
@@ -38,19 +38,15 @@
package org.mozilla.gecko.gfx;
//import org.mozilla.gecko.GeckoAppShell;
-import org.libreoffice.LOKitShell;
-import org.mozilla.gecko.gfx.BufferedCairoImage;
-import org.mozilla.gecko.gfx.CairoImage;
-import org.mozilla.gecko.gfx.IntSize;
-import org.mozilla.gecko.gfx.SingleTileLayer;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
-import android.util.Log;
+
+import org.libreoffice.DirectBufferAllocator;
+
import java.nio.ByteBuffer;
-import java.nio.IntBuffer;
/**
* Draws text on a layer. This is used for the frame rate meter.
@@ -73,8 +69,9 @@ public class TextLayer extends SingleTileLayer {
protected void finalize() throws Throwable {
try {
- if (!mFinalized && mBuffer != null)
- /*GeckoAppShell*/ LOKitShell.freeDirectBuffer(mBuffer);
+ if (!mFinalized && mBuffer != null) {
+ DirectBufferAllocator.free(mBuffer);
+ }
mFinalized = true;
} finally {
super.finalize();
@@ -82,9 +79,8 @@ public class TextLayer extends SingleTileLayer {
}
public static TextLayer create(IntSize size, String text) {
- ByteBuffer buffer = /*GeckoAppShell*/LOKitShell.allocateDirectBuffer(size.width * size.height * 4);
- BufferedCairoImage image = new BufferedCairoImage(buffer, size.width, size.height,
- CairoImage.FORMAT_ARGB32);
+ ByteBuffer buffer = DirectBufferAllocator.allocate(size.width * size.height * 4);
+ BufferedCairoImage image = new BufferedCairoImage(buffer, size.width, size.height, CairoImage.FORMAT_ARGB32);
return new TextLayer(buffer, image, size, text);
}