diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-07-07 17:30:30 +0200 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-07-10 11:17:54 +0200 |
commit | 842d8fb5118fa1ac46102cfaac6a1aafc33cbd46 (patch) | |
tree | 760d8beef21956b57b28f6afd769153ba840e077 /android | |
parent | LOAndorid3: Clean unused code, add getTiles() to MultiTileLayer (diff) | |
download | core-842d8fb5118fa1ac46102cfaac6a1aafc33cbd46.tar.gz core-842d8fb5118fa1ac46102cfaac6a1aafc33cbd46.zip |
LOAndroid3: Add and use DirectBufferAllocator
Change-Id: I20a1de3a18deab6b978192d1d8a54278addbb083
Diffstat (limited to 'android')
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); } |