Move GLES20DisplayList functionality into DisplayList
Removes unneeded indirection layer
Change-Id: I75d3e369eda2788cbc52a3575c4e1c521e842f59
diff --git a/core/java/android/view/DisplayList.java b/core/java/android/view/DisplayList.java
index e53ce8b..bb09c90 100644
--- a/core/java/android/view/DisplayList.java
+++ b/core/java/android/view/DisplayList.java
@@ -18,6 +18,8 @@
import android.graphics.Matrix;
+import java.util.ArrayList;
+
/**
* <p>A display list records a series of graphics related operations and can replay
* them later. Display lists are usually built by recording operations on a
@@ -120,12 +122,23 @@
*
* @hide
*/
-public abstract class DisplayList {
+public class DisplayList {
private boolean mDirty;
+ private ArrayList<DisplayList> mChildDisplayLists;
+
+ private GLES20RecordingCanvas mCanvas;
+ private boolean mValid;
+
+ // Used for debugging
+ private final String mName;
+
+ // The native display list will be destroyed when this object dies.
+ // DO NOT overwrite this reference once it is set.
+ private DisplayListFinalizer mFinalizer;
/**
* Flag used when calling
- * {@link HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int)}
+ * {@link HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int)}
* When this flag is set, draw operations lying outside of the bounds of the
* display list will be culled early. It is recommeneded to always set this
* flag.
@@ -173,6 +186,10 @@
*/
public static final int STATUS_DREW = 0x4;
+ private DisplayList(String name) {
+ mName = name;
+ }
+
/**
* Creates a new display list that can be used to record batches of
* drawing operations.
@@ -184,7 +201,7 @@
* @hide
*/
public static DisplayList create(String name) {
- return new GLES20DisplayList(name);
+ return new DisplayList(name);
}
/**
@@ -202,7 +219,21 @@
* @see #end()
* @see #isValid()
*/
- public abstract HardwareCanvas start(int width, int height);
+ public HardwareCanvas start(int width, int height) {
+ if (mCanvas != null) {
+ throw new IllegalStateException("Recording has already started");
+ }
+
+ mValid = false;
+ mCanvas = GLES20RecordingCanvas.obtain(this);
+ mCanvas.start();
+
+ mCanvas.setViewport(width, height);
+ // The dirty rect should always be null for a display list
+ mCanvas.onPreDraw(null);
+
+ return mCanvas;
+ }
/**
* Ends the recording for this display list. A display list cannot be
@@ -212,7 +243,20 @@
* @see #start(int, int)
* @see #isValid()
*/
- public abstract void end();
+ public void end() {
+ if (mCanvas != null) {
+ mCanvas.onPostDraw();
+ if (mFinalizer != null) {
+ mCanvas.end(mFinalizer.mNativeDisplayList);
+ } else {
+ mFinalizer = new DisplayListFinalizer(mCanvas.end(0));
+ nSetDisplayListName(mFinalizer.mNativeDisplayList, mName);
+ }
+ mCanvas.recycle();
+ mCanvas = null;
+ mValid = true;
+ }
+ }
/**
* Clears resources held onto by this display list. After calling this method
@@ -221,8 +265,26 @@
* @see #isValid()
* @see #reset()
*/
- public abstract void clear();
+ public void clear() {
+ clearDirty();
+ if (mCanvas != null) {
+ mCanvas.recycle();
+ mCanvas = null;
+ }
+ mValid = false;
+
+ clearReferences();
+ }
+
+ void clearReferences() {
+ if (mChildDisplayLists != null) mChildDisplayLists.clear();
+ }
+
+ ArrayList<DisplayList> getChildDisplayLists() {
+ if (mChildDisplayLists == null) mChildDisplayLists = new ArrayList<DisplayList>();
+ return mChildDisplayLists;
+ }
/**
* Reset native resources. This is called when cleaning up the state of display lists
@@ -233,7 +295,12 @@
*
* @hide
*/
- public abstract void reset();
+ public void reset() {
+ if (hasNativeDisplayList()) {
+ nReset(mFinalizer.mNativeDisplayList);
+ }
+ clear();
+ }
/**
* Sets the dirty flag. When a display list is dirty, {@link #clear()} should
@@ -279,16 +346,30 @@
*
* @return boolean true if the display list is able to be replayed, false otherwise.
*/
- public abstract boolean isValid();
+ public boolean isValid() { return mValid; }
/**
* Return the amount of memory used by this display list.
- *
+ *
* @return The size of this display list in bytes
*
* @hide
*/
- public abstract int getSize();
+ public int getSize() {
+ if (mFinalizer == null) return 0;
+ return nGetDisplayListSize(mFinalizer.mNativeDisplayList);
+ }
+
+ boolean hasNativeDisplayList() {
+ return mValid && mFinalizer != null;
+ }
+
+ int getNativeDisplayList() {
+ if (!mValid || mFinalizer == null) {
+ throw new IllegalStateException("The display list is not valid.");
+ }
+ return mFinalizer.mNativeDisplayList;
+ }
///////////////////////////////////////////////////////////////////////////
// DisplayList Property Setters
@@ -303,7 +384,11 @@
*
* @hide
*/
- public abstract void setCaching(boolean caching);
+ public void setCaching(boolean caching) {
+ if (hasNativeDisplayList()) {
+ nSetCaching(mFinalizer.mNativeDisplayList, caching);
+ }
+ }
/**
* Set whether the display list should clip itself to its bounds. This property is controlled by
@@ -311,7 +396,11 @@
*
* @param clipToBounds true if the display list should clip to its bounds
*/
- public abstract void setClipToBounds(boolean clipToBounds);
+ public void setClipToBounds(boolean clipToBounds) {
+ if (hasNativeDisplayList()) {
+ nSetClipToBounds(mFinalizer.mNativeDisplayList, clipToBounds);
+ }
+ }
/**
* Set the static matrix on the display list. The specified matrix is combined with other
@@ -322,7 +411,11 @@
* @see #getMatrix(android.graphics.Matrix)
* @see #getMatrix()
*/
- public abstract void setMatrix(Matrix matrix);
+ public void setMatrix(Matrix matrix) {
+ if (hasNativeDisplayList()) {
+ nSetStaticMatrix(mFinalizer.mNativeDisplayList, matrix.native_instance);
+ }
+ }
/**
* Returns the static matrix set on this display list.
@@ -348,7 +441,12 @@
* @see #getMatrix()
* @see #setMatrix(android.graphics.Matrix)
*/
- public abstract Matrix getMatrix(Matrix matrix);
+ public Matrix getMatrix(Matrix matrix) {
+ if (hasNativeDisplayList()) {
+ nGetMatrix(mFinalizer.mNativeDisplayList, matrix.native_instance);
+ }
+ return matrix;
+ }
/**
* Set the Animation matrix on the display list. This matrix exists if an Animation is
@@ -360,7 +458,12 @@
*
* @hide
*/
- public abstract void setAnimationMatrix(Matrix matrix);
+ public void setAnimationMatrix(Matrix matrix) {
+ if (hasNativeDisplayList()) {
+ nSetAnimationMatrix(mFinalizer.mNativeDisplayList,
+ (matrix != null) ? matrix.native_instance : 0);
+ }
+ }
/**
* Sets the translucency level for the display list.
@@ -370,7 +473,11 @@
* @see View#setAlpha(float)
* @see #getAlpha()
*/
- public abstract void setAlpha(float alpha);
+ public void setAlpha(float alpha) {
+ if (hasNativeDisplayList()) {
+ nSetAlpha(mFinalizer.mNativeDisplayList, alpha);
+ }
+ }
/**
* Returns the translucency level of this display list.
@@ -379,7 +486,12 @@
*
* @see #setAlpha(float)
*/
- public abstract float getAlpha();
+ public float getAlpha() {
+ if (hasNativeDisplayList()) {
+ return nGetAlpha(mFinalizer.mNativeDisplayList);
+ }
+ return 1.0f;
+ }
/**
* Sets whether the display list renders content which overlaps. Non-overlapping rendering
@@ -392,7 +504,11 @@
* @see android.view.View#hasOverlappingRendering()
* @see #hasOverlappingRendering()
*/
- public abstract void setHasOverlappingRendering(boolean hasOverlappingRendering);
+ public void setHasOverlappingRendering(boolean hasOverlappingRendering) {
+ if (hasNativeDisplayList()) {
+ nSetHasOverlappingRendering(mFinalizer.mNativeDisplayList, hasOverlappingRendering);
+ }
+ }
/**
* Indicates whether the content of this display list overlaps.
@@ -401,7 +517,13 @@
*
* @see #setHasOverlappingRendering(boolean)
*/
- public abstract boolean hasOverlappingRendering();
+ public boolean hasOverlappingRendering() {
+ //noinspection SimplifiableIfStatement
+ if (hasNativeDisplayList()) {
+ return nHasOverlappingRendering(mFinalizer.mNativeDisplayList);
+ }
+ return true;
+ }
/**
* Sets the translation value for the display list on the X axis
@@ -411,14 +533,23 @@
* @see View#setTranslationX(float)
* @see #getTranslationX()
*/
- public abstract void setTranslationX(float translationX);
+ public void setTranslationX(float translationX) {
+ if (hasNativeDisplayList()) {
+ nSetTranslationX(mFinalizer.mNativeDisplayList, translationX);
+ }
+ }
/**
* Returns the translation value for this display list on the X axis, in pixels.
*
* @see #setTranslationX(float)
*/
- public abstract float getTranslationX();
+ public float getTranslationX() {
+ if (hasNativeDisplayList()) {
+ return nGetTranslationX(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the translation value for the display list on the Y axis
@@ -428,14 +559,23 @@
* @see View#setTranslationY(float)
* @see #getTranslationY()
*/
- public abstract void setTranslationY(float translationY);
+ public void setTranslationY(float translationY) {
+ if (hasNativeDisplayList()) {
+ nSetTranslationY(mFinalizer.mNativeDisplayList, translationY);
+ }
+ }
/**
* Returns the translation value for this display list on the Y axis, in pixels.
*
* @see #setTranslationY(float)
*/
- public abstract float getTranslationY();
+ public float getTranslationY() {
+ if (hasNativeDisplayList()) {
+ return nGetTranslationY(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the translation value for the display list on the Z axis
@@ -443,14 +583,23 @@
* @see View#setTranslationZ(float)
* @see #getTranslationZ()
*/
- public abstract void setTranslationZ(float translationZ);
+ public void setTranslationZ(float translationZ) {
+ if (hasNativeDisplayList()) {
+ nSetTranslationZ(mFinalizer.mNativeDisplayList, translationZ);
+ }
+ }
/**
* Returns the translation value for this display list on the Z axis.
*
* @see #setTranslationZ(float)
*/
- public abstract float getTranslationZ();
+ public float getTranslationZ() {
+ if (hasNativeDisplayList()) {
+ return nGetTranslationZ(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the rotation value for the display list around the Z axis
@@ -460,14 +609,23 @@
* @see View#setRotation(float)
* @see #getRotation()
*/
- public abstract void setRotation(float rotation);
+ public void setRotation(float rotation) {
+ if (hasNativeDisplayList()) {
+ nSetRotation(mFinalizer.mNativeDisplayList, rotation);
+ }
+ }
/**
* Returns the rotation value for this display list around the Z axis, in degrees.
*
* @see #setRotation(float)
*/
- public abstract float getRotation();
+ public float getRotation() {
+ if (hasNativeDisplayList()) {
+ return nGetRotation(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the rotation value for the display list around the X axis
@@ -477,14 +635,23 @@
* @see View#setRotationX(float)
* @see #getRotationX()
*/
- public abstract void setRotationX(float rotationX);
+ public void setRotationX(float rotationX) {
+ if (hasNativeDisplayList()) {
+ nSetRotationX(mFinalizer.mNativeDisplayList, rotationX);
+ }
+ }
/**
* Returns the rotation value for this display list around the X axis, in degrees.
*
* @see #setRotationX(float)
*/
- public abstract float getRotationX();
+ public float getRotationX() {
+ if (hasNativeDisplayList()) {
+ return nGetRotationX(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the rotation value for the display list around the Y axis
@@ -494,14 +661,23 @@
* @see View#setRotationY(float)
* @see #getRotationY()
*/
- public abstract void setRotationY(float rotationY);
+ public void setRotationY(float rotationY) {
+ if (hasNativeDisplayList()) {
+ nSetRotationY(mFinalizer.mNativeDisplayList, rotationY);
+ }
+ }
/**
* Returns the rotation value for this display list around the Y axis, in degrees.
*
* @see #setRotationY(float)
*/
- public abstract float getRotationY();
+ public float getRotationY() {
+ if (hasNativeDisplayList()) {
+ return nGetRotationY(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the scale value for the display list on the X axis
@@ -511,14 +687,23 @@
* @see View#setScaleX(float)
* @see #getScaleX()
*/
- public abstract void setScaleX(float scaleX);
+ public void setScaleX(float scaleX) {
+ if (hasNativeDisplayList()) {
+ nSetScaleX(mFinalizer.mNativeDisplayList, scaleX);
+ }
+ }
/**
* Returns the scale value for this display list on the X axis.
*
* @see #setScaleX(float)
*/
- public abstract float getScaleX();
+ public float getScaleX() {
+ if (hasNativeDisplayList()) {
+ return nGetScaleX(mFinalizer.mNativeDisplayList);
+ }
+ return 1.0f;
+ }
/**
* Sets the scale value for the display list on the Y axis
@@ -528,14 +713,23 @@
* @see View#setScaleY(float)
* @see #getScaleY()
*/
- public abstract void setScaleY(float scaleY);
+ public void setScaleY(float scaleY) {
+ if (hasNativeDisplayList()) {
+ nSetScaleY(mFinalizer.mNativeDisplayList, scaleY);
+ }
+ }
/**
* Returns the scale value for this display list on the Y axis.
*
* @see #setScaleY(float)
*/
- public abstract float getScaleY();
+ public float getScaleY() {
+ if (hasNativeDisplayList()) {
+ return nGetScaleY(mFinalizer.mNativeDisplayList);
+ }
+ return 1.0f;
+ }
/**
* Sets all of the transform-related values of the display list
@@ -551,9 +745,15 @@
*
* @hide
*/
- public abstract void setTransformationInfo(float alpha,
+ public void setTransformationInfo(float alpha,
float translationX, float translationY, float translationZ,
- float rotation, float rotationX, float rotationY, float scaleX, float scaleY);
+ float rotation, float rotationX, float rotationY, float scaleX, float scaleY) {
+ if (hasNativeDisplayList()) {
+ nSetTransformationInfo(mFinalizer.mNativeDisplayList, alpha,
+ translationX, translationY, translationZ,
+ rotation, rotationX, rotationY, scaleX, scaleY);
+ }
+ }
/**
* Sets the pivot value for the display list on the X axis
@@ -563,14 +763,23 @@
* @see View#setPivotX(float)
* @see #getPivotX()
*/
- public abstract void setPivotX(float pivotX);
+ public void setPivotX(float pivotX) {
+ if (hasNativeDisplayList()) {
+ nSetPivotX(mFinalizer.mNativeDisplayList, pivotX);
+ }
+ }
/**
* Returns the pivot value for this display list on the X axis, in pixels.
*
* @see #setPivotX(float)
*/
- public abstract float getPivotX();
+ public float getPivotX() {
+ if (hasNativeDisplayList()) {
+ return nGetPivotX(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the pivot value for the display list on the Y axis
@@ -580,14 +789,23 @@
* @see View#setPivotY(float)
* @see #getPivotY()
*/
- public abstract void setPivotY(float pivotY);
+ public void setPivotY(float pivotY) {
+ if (hasNativeDisplayList()) {
+ nSetPivotY(mFinalizer.mNativeDisplayList, pivotY);
+ }
+ }
/**
* Returns the pivot value for this display list on the Y axis, in pixels.
*
* @see #setPivotY(float)
*/
- public abstract float getPivotY();
+ public float getPivotY() {
+ if (hasNativeDisplayList()) {
+ return nGetPivotY(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the camera distance for the display list. Refer to
@@ -599,14 +817,23 @@
* @see View#setCameraDistance(float)
* @see #getCameraDistance()
*/
- public abstract void setCameraDistance(float distance);
+ public void setCameraDistance(float distance) {
+ if (hasNativeDisplayList()) {
+ nSetCameraDistance(mFinalizer.mNativeDisplayList, distance);
+ }
+ }
/**
* Returns the distance in Z of the camera of the display list.
*
* @see #setCameraDistance(float)
*/
- public abstract float getCameraDistance();
+ public float getCameraDistance() {
+ if (hasNativeDisplayList()) {
+ return nGetCameraDistance(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the left position for the display list.
@@ -616,14 +843,23 @@
* @see View#setLeft(int)
* @see #getLeft()
*/
- public abstract void setLeft(int left);
+ public void setLeft(int left) {
+ if (hasNativeDisplayList()) {
+ nSetLeft(mFinalizer.mNativeDisplayList, left);
+ }
+ }
/**
* Returns the left position for the display list in pixels.
*
* @see #setLeft(int)
*/
- public abstract float getLeft();
+ public float getLeft() {
+ if (hasNativeDisplayList()) {
+ return nGetLeft(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the top position for the display list.
@@ -633,14 +869,23 @@
* @see View#setTop(int)
* @see #getTop()
*/
- public abstract void setTop(int top);
+ public void setTop(int top) {
+ if (hasNativeDisplayList()) {
+ nSetTop(mFinalizer.mNativeDisplayList, top);
+ }
+ }
/**
* Returns the top position for the display list in pixels.
*
* @see #setTop(int)
*/
- public abstract float getTop();
+ public float getTop() {
+ if (hasNativeDisplayList()) {
+ return nGetTop(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the right position for the display list.
@@ -650,14 +895,23 @@
* @see View#setRight(int)
* @see #getRight()
*/
- public abstract void setRight(int right);
+ public void setRight(int right) {
+ if (hasNativeDisplayList()) {
+ nSetRight(mFinalizer.mNativeDisplayList, right);
+ }
+ }
/**
* Returns the right position for the display list in pixels.
*
* @see #setRight(int)
*/
- public abstract float getRight();
+ public float getRight() {
+ if (hasNativeDisplayList()) {
+ return nGetRight(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the bottom position for the display list.
@@ -667,14 +921,23 @@
* @see View#setBottom(int)
* @see #getBottom()
*/
- public abstract void setBottom(int bottom);
+ public void setBottom(int bottom) {
+ if (hasNativeDisplayList()) {
+ nSetBottom(mFinalizer.mNativeDisplayList, bottom);
+ }
+ }
/**
* Returns the bottom position for the display list in pixels.
*
* @see #setBottom(int)
*/
- public abstract float getBottom();
+ public float getBottom() {
+ if (hasNativeDisplayList()) {
+ return nGetBottom(mFinalizer.mNativeDisplayList);
+ }
+ return 0.0f;
+ }
/**
* Sets the left and top positions for the display list
@@ -689,7 +952,11 @@
* @see View#setRight(int)
* @see View#setBottom(int)
*/
- public abstract void setLeftTopRightBottom(int left, int top, int right, int bottom);
+ public void setLeftTopRightBottom(int left, int top, int right, int bottom) {
+ if (hasNativeDisplayList()) {
+ nSetLeftTopRightBottom(mFinalizer.mNativeDisplayList, left, top, right, bottom);
+ }
+ }
/**
* Offsets the left and right positions for the display list
@@ -699,7 +966,11 @@
*
* @see View#offsetLeftAndRight(int)
*/
- public abstract void offsetLeftAndRight(float offset);
+ public void offsetLeftAndRight(float offset) {
+ if (hasNativeDisplayList()) {
+ nOffsetLeftAndRight(mFinalizer.mNativeDisplayList, offset);
+ }
+ }
/**
* Offsets the top and bottom values for the display list
@@ -709,7 +980,11 @@
*
* @see View#offsetTopAndBottom(int)
*/
- public abstract void offsetTopAndBottom(float offset);
+ public void offsetTopAndBottom(float offset) {
+ if (hasNativeDisplayList()) {
+ nOffsetTopAndBottom(mFinalizer.mNativeDisplayList, offset);
+ }
+ }
/**
* Outputs the display list to the log. This method exists for use by
@@ -717,5 +992,91 @@
*
* @hide
*/
- public abstract void output();
+ public void output() {
+ if (hasNativeDisplayList()) {
+ nOutput(mFinalizer.mNativeDisplayList);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Native methods
+ ///////////////////////////////////////////////////////////////////////////
+
+ private static native void nDestroyDisplayList(int displayList);
+ private static native int nGetDisplayListSize(int displayList);
+ private static native void nSetDisplayListName(int displayList, String name);
+
+ // Properties
+
+ private static native void nReset(int displayList);
+ private static native void nOffsetTopAndBottom(int displayList, float offset);
+ private static native void nOffsetLeftAndRight(int displayList, float offset);
+ private static native void nSetLeftTopRightBottom(int displayList, int left, int top,
+ int right, int bottom);
+ private static native void nSetBottom(int displayList, int bottom);
+ private static native void nSetRight(int displayList, int right);
+ private static native void nSetTop(int displayList, int top);
+ private static native void nSetLeft(int displayList, int left);
+ private static native void nSetCameraDistance(int displayList, float distance);
+ private static native void nSetPivotY(int displayList, float pivotY);
+ private static native void nSetPivotX(int displayList, float pivotX);
+ private static native void nSetCaching(int displayList, boolean caching);
+ private static native void nSetClipToBounds(int displayList, boolean clipToBounds);
+ private static native void nSetAlpha(int displayList, float alpha);
+ private static native void nSetHasOverlappingRendering(int displayList,
+ boolean hasOverlappingRendering);
+ private static native void nSetTranslationX(int displayList, float translationX);
+ private static native void nSetTranslationY(int displayList, float translationY);
+ private static native void nSetTranslationZ(int displayList, float translationZ);
+ private static native void nSetRotation(int displayList, float rotation);
+ private static native void nSetRotationX(int displayList, float rotationX);
+ private static native void nSetRotationY(int displayList, float rotationY);
+ private static native void nSetScaleX(int displayList, float scaleX);
+ private static native void nSetScaleY(int displayList, float scaleY);
+ private static native void nSetTransformationInfo(int displayList, float alpha,
+ float translationX, float translationY, float translationZ,
+ float rotation, float rotationX, float rotationY, float scaleX, float scaleY);
+ private static native void nSetStaticMatrix(int displayList, int nativeMatrix);
+ private static native void nSetAnimationMatrix(int displayList, int animationMatrix);
+
+ private static native boolean nHasOverlappingRendering(int displayList);
+ private static native void nGetMatrix(int displayList, int matrix);
+ private static native float nGetAlpha(int displayList);
+ private static native float nGetLeft(int displayList);
+ private static native float nGetTop(int displayList);
+ private static native float nGetRight(int displayList);
+ private static native float nGetBottom(int displayList);
+ private static native float nGetCameraDistance(int displayList);
+ private static native float nGetScaleX(int displayList);
+ private static native float nGetScaleY(int displayList);
+ private static native float nGetTranslationX(int displayList);
+ private static native float nGetTranslationY(int displayList);
+ private static native float nGetTranslationZ(int displayList);
+ private static native float nGetRotation(int displayList);
+ private static native float nGetRotationX(int displayList);
+ private static native float nGetRotationY(int displayList);
+ private static native float nGetPivotX(int displayList);
+ private static native float nGetPivotY(int displayList);
+ private static native void nOutput(int displayList);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Finalization
+ ///////////////////////////////////////////////////////////////////////////
+
+ private static class DisplayListFinalizer {
+ final int mNativeDisplayList;
+
+ public DisplayListFinalizer(int nativeDisplayList) {
+ mNativeDisplayList = nativeDisplayList;
+ }
+
+ @Override
+ protected void finalize() throws Throwable {
+ try {
+ nDestroyDisplayList(mNativeDisplayList);
+ } finally {
+ super.finalize();
+ }
+ }
+ }
}
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index 9b48881d..584a04c 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -416,7 +416,7 @@
@Override
public int drawDisplayList(DisplayList displayList, Rect dirty, int flags) {
- return nDrawDisplayList(mRenderer, ((GLES20DisplayList) displayList).getNativeDisplayList(),
+ return nDrawDisplayList(mRenderer, displayList.getNativeDisplayList(),
dirty, flags);
}
diff --git a/core/java/android/view/GLES20DisplayList.java b/core/java/android/view/GLES20DisplayList.java
deleted file mode 100644
index 7944e66..0000000
--- a/core/java/android/view/GLES20DisplayList.java
+++ /dev/null
@@ -1,538 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.view;
-
-import android.graphics.Matrix;
-
-import java.util.ArrayList;
-
-/**
- * An implementation of display list for OpenGL ES 2.0.
- */
-class GLES20DisplayList extends DisplayList {
- private ArrayList<DisplayList> mChildDisplayLists;
-
- private GLES20RecordingCanvas mCanvas;
- private boolean mValid;
-
- // Used for debugging
- private final String mName;
-
- // The native display list will be destroyed when this object dies.
- // DO NOT overwrite this reference once it is set.
- private DisplayListFinalizer mFinalizer;
-
- GLES20DisplayList(String name) {
- mName = name;
- }
-
- boolean hasNativeDisplayList() {
- return mValid && mFinalizer != null;
- }
-
- int getNativeDisplayList() {
- if (!mValid || mFinalizer == null) {
- throw new IllegalStateException("The display list is not valid.");
- }
- return mFinalizer.mNativeDisplayList;
- }
-
- @Override
- public HardwareCanvas start(int width, int height) {
- if (mCanvas != null) {
- throw new IllegalStateException("Recording has already started");
- }
-
- mValid = false;
- mCanvas = GLES20RecordingCanvas.obtain(this);
- mCanvas.start();
-
- mCanvas.setViewport(width, height);
- // The dirty rect should always be null for a display list
- mCanvas.onPreDraw(null);
-
- return mCanvas;
- }
- @Override
- public void clear() {
- clearDirty();
-
- if (mCanvas != null) {
- mCanvas.recycle();
- mCanvas = null;
- }
- mValid = false;
-
- clearReferences();
- }
-
- void clearReferences() {
- if (mChildDisplayLists != null) mChildDisplayLists.clear();
- }
-
- ArrayList<DisplayList> getChildDisplayLists() {
- if (mChildDisplayLists == null) mChildDisplayLists = new ArrayList<DisplayList>();
- return mChildDisplayLists;
- }
-
- @Override
- public void reset() {
- if (hasNativeDisplayList()) {
- nReset(mFinalizer.mNativeDisplayList);
- }
- clear();
- }
-
- @Override
- public boolean isValid() {
- return mValid;
- }
-
- @Override
- public void end() {
- if (mCanvas != null) {
- mCanvas.onPostDraw();
- if (mFinalizer != null) {
- mCanvas.end(mFinalizer.mNativeDisplayList);
- } else {
- mFinalizer = new DisplayListFinalizer(mCanvas.end(0));
- nSetDisplayListName(mFinalizer.mNativeDisplayList, mName);
- }
- mCanvas.recycle();
- mCanvas = null;
- mValid = true;
- }
- }
-
- @Override
- public int getSize() {
- if (mFinalizer == null) return 0;
- return nGetDisplayListSize(mFinalizer.mNativeDisplayList);
- }
-
- private static native void nDestroyDisplayList(int displayList);
- private static native int nGetDisplayListSize(int displayList);
- private static native void nSetDisplayListName(int displayList, String name);
-
- ///////////////////////////////////////////////////////////////////////////
- // Native View Properties
- ///////////////////////////////////////////////////////////////////////////
-
- @Override
- public void setCaching(boolean caching) {
- if (hasNativeDisplayList()) {
- nSetCaching(mFinalizer.mNativeDisplayList, caching);
- }
- }
-
- @Override
- public void setClipToBounds(boolean clipToBounds) {
- if (hasNativeDisplayList()) {
- nSetClipToBounds(mFinalizer.mNativeDisplayList, clipToBounds);
- }
- }
-
- @Override
- public void setMatrix(Matrix matrix) {
- if (hasNativeDisplayList()) {
- nSetStaticMatrix(mFinalizer.mNativeDisplayList, matrix.native_instance);
- }
- }
-
- @Override
- public Matrix getMatrix(Matrix matrix) {
- if (hasNativeDisplayList()) {
- nGetMatrix(mFinalizer.mNativeDisplayList, matrix.native_instance);
- }
- return matrix;
- }
-
- @Override
- public void setAnimationMatrix(Matrix matrix) {
- if (hasNativeDisplayList()) {
- nSetAnimationMatrix(mFinalizer.mNativeDisplayList,
- (matrix != null) ? matrix.native_instance : 0);
- }
- }
-
- @Override
- public void setAlpha(float alpha) {
- if (hasNativeDisplayList()) {
- nSetAlpha(mFinalizer.mNativeDisplayList, alpha);
- }
- }
-
- @Override
- public float getAlpha() {
- if (hasNativeDisplayList()) {
- return nGetAlpha(mFinalizer.mNativeDisplayList);
- }
- return 1.0f;
- }
-
- @Override
- public void setHasOverlappingRendering(boolean hasOverlappingRendering) {
- if (hasNativeDisplayList()) {
- nSetHasOverlappingRendering(mFinalizer.mNativeDisplayList, hasOverlappingRendering);
- }
- }
-
- @Override
- public boolean hasOverlappingRendering() {
- //noinspection SimplifiableIfStatement
- if (hasNativeDisplayList()) {
- return nHasOverlappingRendering(mFinalizer.mNativeDisplayList);
- }
- return true;
- }
-
- @Override
- public void setTranslationX(float translationX) {
- if (hasNativeDisplayList()) {
- nSetTranslationX(mFinalizer.mNativeDisplayList, translationX);
- }
- }
-
- @Override
- public float getTranslationX() {
- if (hasNativeDisplayList()) {
- return nGetTranslationX(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setTranslationY(float translationY) {
- if (hasNativeDisplayList()) {
- nSetTranslationY(mFinalizer.mNativeDisplayList, translationY);
- }
- }
-
- @Override
- public float getTranslationY() {
- if (hasNativeDisplayList()) {
- return nGetTranslationY(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setTranslationZ(float translationZ) {
- if (hasNativeDisplayList()) {
- nSetTranslationZ(mFinalizer.mNativeDisplayList, translationZ);
- }
- }
-
- @Override
- public float getTranslationZ() {
- if (hasNativeDisplayList()) {
- return nGetTranslationZ(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setRotation(float rotation) {
- if (hasNativeDisplayList()) {
- nSetRotation(mFinalizer.mNativeDisplayList, rotation);
- }
- }
-
- @Override
- public float getRotation() {
- if (hasNativeDisplayList()) {
- return nGetRotation(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setRotationX(float rotationX) {
- if (hasNativeDisplayList()) {
- nSetRotationX(mFinalizer.mNativeDisplayList, rotationX);
- }
- }
-
- @Override
- public float getRotationX() {
- if (hasNativeDisplayList()) {
- return nGetRotationX(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setRotationY(float rotationY) {
- if (hasNativeDisplayList()) {
- nSetRotationY(mFinalizer.mNativeDisplayList, rotationY);
- }
- }
-
- @Override
- public float getRotationY() {
- if (hasNativeDisplayList()) {
- return nGetRotationY(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setScaleX(float scaleX) {
- if (hasNativeDisplayList()) {
- nSetScaleX(mFinalizer.mNativeDisplayList, scaleX);
- }
- }
-
- @Override
- public float getScaleX() {
- if (hasNativeDisplayList()) {
- return nGetScaleX(mFinalizer.mNativeDisplayList);
- }
- return 1.0f;
- }
-
- @Override
- public void setScaleY(float scaleY) {
- if (hasNativeDisplayList()) {
- nSetScaleY(mFinalizer.mNativeDisplayList, scaleY);
- }
- }
-
- @Override
- public float getScaleY() {
- if (hasNativeDisplayList()) {
- return nGetScaleY(mFinalizer.mNativeDisplayList);
- }
- return 1.0f;
- }
-
- @Override
- public void setTransformationInfo(float alpha,
- float translationX, float translationY, float translationZ,
- float rotation, float rotationX, float rotationY, float scaleX, float scaleY) {
- if (hasNativeDisplayList()) {
- nSetTransformationInfo(mFinalizer.mNativeDisplayList, alpha,
- translationX, translationY, translationZ,
- rotation, rotationX, rotationY, scaleX, scaleY);
- }
- }
-
- @Override
- public void setPivotX(float pivotX) {
- if (hasNativeDisplayList()) {
- nSetPivotX(mFinalizer.mNativeDisplayList, pivotX);
- }
- }
-
- @Override
- public float getPivotX() {
- if (hasNativeDisplayList()) {
- return nGetPivotX(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setPivotY(float pivotY) {
- if (hasNativeDisplayList()) {
- nSetPivotY(mFinalizer.mNativeDisplayList, pivotY);
- }
- }
-
- @Override
- public float getPivotY() {
- if (hasNativeDisplayList()) {
- return nGetPivotY(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setCameraDistance(float distance) {
- if (hasNativeDisplayList()) {
- nSetCameraDistance(mFinalizer.mNativeDisplayList, distance);
- }
- }
-
- @Override
- public float getCameraDistance() {
- if (hasNativeDisplayList()) {
- return nGetCameraDistance(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setLeft(int left) {
- if (hasNativeDisplayList()) {
- nSetLeft(mFinalizer.mNativeDisplayList, left);
- }
- }
-
- @Override
- public float getLeft() {
- if (hasNativeDisplayList()) {
- return nGetLeft(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setTop(int top) {
- if (hasNativeDisplayList()) {
- nSetTop(mFinalizer.mNativeDisplayList, top);
- }
- }
-
- @Override
- public float getTop() {
- if (hasNativeDisplayList()) {
- return nGetTop(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setRight(int right) {
- if (hasNativeDisplayList()) {
- nSetRight(mFinalizer.mNativeDisplayList, right);
- }
- }
-
- @Override
- public float getRight() {
- if (hasNativeDisplayList()) {
- return nGetRight(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setBottom(int bottom) {
- if (hasNativeDisplayList()) {
- nSetBottom(mFinalizer.mNativeDisplayList, bottom);
- }
- }
-
- @Override
- public float getBottom() {
- if (hasNativeDisplayList()) {
- return nGetBottom(mFinalizer.mNativeDisplayList);
- }
- return 0.0f;
- }
-
- @Override
- public void setLeftTopRightBottom(int left, int top, int right, int bottom) {
- if (hasNativeDisplayList()) {
- nSetLeftTopRightBottom(mFinalizer.mNativeDisplayList, left, top, right, bottom);
- }
- }
-
- @Override
- public void offsetLeftAndRight(float offset) {
- if (hasNativeDisplayList()) {
- nOffsetLeftAndRight(mFinalizer.mNativeDisplayList, offset);
- }
- }
-
- @Override
- public void offsetTopAndBottom(float offset) {
- if (hasNativeDisplayList()) {
- nOffsetTopAndBottom(mFinalizer.mNativeDisplayList, offset);
- }
- }
-
- @Override
- public void output() {
- if (hasNativeDisplayList()) {
- nOutput(mFinalizer.mNativeDisplayList);
- }
- }
-
- private static native void nReset(int displayList);
- private static native void nOffsetTopAndBottom(int displayList, float offset);
- private static native void nOffsetLeftAndRight(int displayList, float offset);
- private static native void nSetLeftTopRightBottom(int displayList, int left, int top,
- int right, int bottom);
- private static native void nSetBottom(int displayList, int bottom);
- private static native void nSetRight(int displayList, int right);
- private static native void nSetTop(int displayList, int top);
- private static native void nSetLeft(int displayList, int left);
- private static native void nSetCameraDistance(int displayList, float distance);
- private static native void nSetPivotY(int displayList, float pivotY);
- private static native void nSetPivotX(int displayList, float pivotX);
- private static native void nSetCaching(int displayList, boolean caching);
- private static native void nSetClipToBounds(int displayList, boolean clipToBounds);
- private static native void nSetAlpha(int displayList, float alpha);
- private static native void nSetHasOverlappingRendering(int displayList,
- boolean hasOverlappingRendering);
- private static native void nSetTranslationX(int displayList, float translationX);
- private static native void nSetTranslationY(int displayList, float translationY);
- private static native void nSetTranslationZ(int displayList, float translationZ);
- private static native void nSetRotation(int displayList, float rotation);
- private static native void nSetRotationX(int displayList, float rotationX);
- private static native void nSetRotationY(int displayList, float rotationY);
- private static native void nSetScaleX(int displayList, float scaleX);
- private static native void nSetScaleY(int displayList, float scaleY);
- private static native void nSetTransformationInfo(int displayList, float alpha,
- float translationX, float translationY, float translationZ,
- float rotation, float rotationX, float rotationY, float scaleX, float scaleY);
- private static native void nSetStaticMatrix(int displayList, int nativeMatrix);
- private static native void nSetAnimationMatrix(int displayList, int animationMatrix);
-
- private static native boolean nHasOverlappingRendering(int displayList);
- private static native void nGetMatrix(int displayList, int matrix);
- private static native float nGetAlpha(int displayList);
- private static native float nGetLeft(int displayList);
- private static native float nGetTop(int displayList);
- private static native float nGetRight(int displayList);
- private static native float nGetBottom(int displayList);
- private static native float nGetCameraDistance(int displayList);
- private static native float nGetScaleX(int displayList);
- private static native float nGetScaleY(int displayList);
- private static native float nGetTranslationX(int displayList);
- private static native float nGetTranslationY(int displayList);
- private static native float nGetTranslationZ(int displayList);
- private static native float nGetRotation(int displayList);
- private static native float nGetRotationX(int displayList);
- private static native float nGetRotationY(int displayList);
- private static native float nGetPivotX(int displayList);
- private static native float nGetPivotY(int displayList);
- private static native void nOutput(int displayList);
-
- ///////////////////////////////////////////////////////////////////////////
- // Finalization
- ///////////////////////////////////////////////////////////////////////////
-
- private static class DisplayListFinalizer {
- final int mNativeDisplayList;
-
- public DisplayListFinalizer(int nativeDisplayList) {
- mNativeDisplayList = nativeDisplayList;
- }
-
- @Override
- protected void finalize() throws Throwable {
- try {
- nDestroyDisplayList(mNativeDisplayList);
- } finally {
- super.finalize();
- }
- }
- }
-}
diff --git a/core/java/android/view/GLES20RecordingCanvas.java b/core/java/android/view/GLES20RecordingCanvas.java
index b6fc38d..97efa18 100644
--- a/core/java/android/view/GLES20RecordingCanvas.java
+++ b/core/java/android/view/GLES20RecordingCanvas.java
@@ -33,13 +33,13 @@
private static final SynchronizedPool<GLES20RecordingCanvas> sPool =
new SynchronizedPool<GLES20RecordingCanvas>(POOL_LIMIT);
- private GLES20DisplayList mDisplayList;
+ private DisplayList mDisplayList;
private GLES20RecordingCanvas() {
super(true, true);
}
- static GLES20RecordingCanvas obtain(GLES20DisplayList displayList) {
+ static GLES20RecordingCanvas obtain(DisplayList displayList) {
GLES20RecordingCanvas canvas = sPool.acquire();
if (canvas == null) {
canvas = new GLES20RecordingCanvas();
diff --git a/core/java/android/view/GLES20RenderLayer.java b/core/java/android/view/GLES20RenderLayer.java
index 68ba77c..8c97867 100644
--- a/core/java/android/view/GLES20RenderLayer.java
+++ b/core/java/android/view/GLES20RenderLayer.java
@@ -124,7 +124,7 @@
@Override
void redrawLater(DisplayList displayList, Rect dirtyRect) {
GLES20Canvas.nUpdateRenderLayer(mLayer, mCanvas.getRenderer(),
- ((GLES20DisplayList) displayList).getNativeDisplayList(),
+ displayList.getNativeDisplayList(),
dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
}
}
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index 329331a..f26374a 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -42,6 +42,7 @@
android_database_SQLiteDebug.cpp \
android_emoji_EmojiFactory.cpp \
android_view_DisplayEventReceiver.cpp \
+ android_view_DisplayList.cpp \
android_view_Surface.cpp \
android_view_SurfaceControl.cpp \
android_view_SurfaceSession.cpp \
@@ -55,7 +56,6 @@
android_view_KeyCharacterMap.cpp \
android_view_GraphicBuffer.cpp \
android_view_GLRenderer.cpp \
- android_view_GLES20DisplayList.cpp \
android_view_GLES20Canvas.cpp \
android_view_ThreadedRenderer.cpp \
android_view_MotionEvent.cpp \
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index b20dc09..89d75dc 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -119,8 +119,8 @@
extern int register_android_graphics_Xfermode(JNIEnv* env);
extern int register_android_graphics_pdf_PdfDocument(JNIEnv* env);
extern int register_android_view_DisplayEventReceiver(JNIEnv* env);
+extern int register_android_view_DisplayList(JNIEnv* env);
extern int register_android_view_GraphicBuffer(JNIEnv* env);
-extern int register_android_view_GLES20DisplayList(JNIEnv* env);
extern int register_android_view_GLES20Canvas(JNIEnv* env);
extern int register_android_view_GLRenderer(JNIEnv* env);
extern int register_android_view_ThreadedRenderer(JNIEnv* env);
@@ -1121,11 +1121,11 @@
REG_JNI(register_android_os_SystemProperties),
REG_JNI(register_android_os_Binder),
REG_JNI(register_android_os_Parcel),
- REG_JNI(register_android_view_DisplayEventReceiver),
REG_JNI(register_android_nio_utils),
REG_JNI(register_android_graphics_Graphics),
+ REG_JNI(register_android_view_DisplayEventReceiver),
+ REG_JNI(register_android_view_DisplayList),
REG_JNI(register_android_view_GraphicBuffer),
- REG_JNI(register_android_view_GLES20DisplayList),
REG_JNI(register_android_view_GLES20Canvas),
REG_JNI(register_android_view_GLRenderer),
REG_JNI(register_android_view_ThreadedRenderer),
diff --git a/core/jni/android_view_DisplayList.cpp b/core/jni/android_view_DisplayList.cpp
new file mode 100644
index 0000000..fc12ec4
--- /dev/null
+++ b/core/jni/android_view_DisplayList.cpp
@@ -0,0 +1,386 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "OpenGLRenderer"
+
+#include <EGL/egl.h>
+
+#include "jni.h"
+#include "GraphicsJNI.h"
+#include <nativehelper/JNIHelp.h>
+#include <android_runtime/AndroidRuntime.h>
+
+#include <DisplayList.h>
+#include <DisplayListRenderer.h>
+
+namespace android {
+
+using namespace uirenderer;
+
+/**
+ * Note: OpenGLRenderer JNI layer is generated and compiled only on supported
+ * devices. This means all the logic must be compiled only when the
+ * preprocessor variable USE_OPENGL_RENDERER is defined.
+ */
+#ifdef USE_OPENGL_RENDERER
+
+// ----------------------------------------------------------------------------
+// DisplayList view properties
+// ----------------------------------------------------------------------------
+
+static void android_view_DisplayList_reset(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ displayList->reset();
+}
+
+static jint android_view_DisplayList_getDisplayListSize(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getSize();
+}
+
+static void android_view_DisplayList_setDisplayListName(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, jstring name) {
+ if (name != NULL) {
+ const char* textArray = env->GetStringUTFChars(name, NULL);
+ displayList->setName(textArray);
+ env->ReleaseStringUTFChars(name, textArray);
+ }
+}
+
+static void android_view_DisplayList_output(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ displayList->output();
+}
+
+static void android_view_DisplayList_destroyDisplayList(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ DisplayList::destroyDisplayListDeferred(displayList);
+}
+
+// ----------------------------------------------------------------------------
+// DisplayList view properties
+// ----------------------------------------------------------------------------
+
+static void android_view_DisplayList_setCaching(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, jboolean caching) {
+ displayList->setCaching(caching);
+}
+
+static void android_view_DisplayList_setStaticMatrix(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, SkMatrix* matrix) {
+ displayList->setStaticMatrix(matrix);
+}
+
+static void android_view_DisplayList_setAnimationMatrix(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, SkMatrix* matrix) {
+ displayList->setAnimationMatrix(matrix);
+}
+
+static void android_view_DisplayList_setClipToBounds(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, jboolean clipToBounds) {
+ displayList->setClipToBounds(clipToBounds);
+}
+
+static void android_view_DisplayList_setAlpha(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float alpha) {
+ displayList->setAlpha(alpha);
+}
+
+static void android_view_DisplayList_setHasOverlappingRendering(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, bool hasOverlappingRendering) {
+ displayList->setHasOverlappingRendering(hasOverlappingRendering);
+}
+
+static void android_view_DisplayList_setTranslationX(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float tx) {
+ displayList->setTranslationX(tx);
+}
+
+static void android_view_DisplayList_setTranslationY(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float ty) {
+ displayList->setTranslationY(ty);
+}
+
+static void android_view_DisplayList_setTranslationZ(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float tz) {
+ displayList->setTranslationZ(tz);
+}
+
+static void android_view_DisplayList_setRotation(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float rotation) {
+ displayList->setRotation(rotation);
+}
+
+static void android_view_DisplayList_setRotationX(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float rx) {
+ displayList->setRotationX(rx);
+}
+
+static void android_view_DisplayList_setRotationY(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float ry) {
+ displayList->setRotationY(ry);
+}
+
+static void android_view_DisplayList_setScaleX(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float sx) {
+ displayList->setScaleX(sx);
+}
+
+static void android_view_DisplayList_setScaleY(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float sy) {
+ displayList->setScaleY(sy);
+}
+
+static void android_view_DisplayList_setTransformationInfo(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float alpha,
+ float translationX, float translationY, float translationZ,
+ float rotation, float rotationX, float rotationY, float scaleX, float scaleY) {
+ displayList->setAlpha(alpha);
+ displayList->setTranslationX(translationX);
+ displayList->setTranslationY(translationY);
+ displayList->setTranslationZ(translationZ);
+ displayList->setRotation(rotation);
+ displayList->setRotationX(rotationX);
+ displayList->setRotationY(rotationY);
+ displayList->setScaleX(scaleX);
+ displayList->setScaleY(scaleY);
+}
+
+static void android_view_DisplayList_setPivotX(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float px) {
+ displayList->setPivotX(px);
+}
+
+static void android_view_DisplayList_setPivotY(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float py) {
+ displayList->setPivotY(py);
+}
+
+static void android_view_DisplayList_setCameraDistance(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float distance) {
+ displayList->setCameraDistance(distance);
+}
+
+static void android_view_DisplayList_setLeft(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, int left) {
+ displayList->setLeft(left);
+}
+
+static void android_view_DisplayList_setTop(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, int top) {
+ displayList->setTop(top);
+}
+
+static void android_view_DisplayList_setRight(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, int right) {
+ displayList->setRight(right);
+}
+
+static void android_view_DisplayList_setBottom(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, int bottom) {
+ displayList->setBottom(bottom);
+}
+
+static void android_view_DisplayList_setLeftTopRightBottom(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, int left, int top,
+ int right, int bottom) {
+ displayList->setLeftTopRightBottom(left, top, right, bottom);
+}
+
+static void android_view_DisplayList_offsetLeftAndRight(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float offset) {
+ displayList->offsetLeftRight(offset);
+}
+
+static void android_view_DisplayList_offsetTopAndBottom(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, float offset) {
+ displayList->offsetTopBottom(offset);
+}
+
+static void android_view_DisplayList_getMatrix(JNIEnv* env,
+ jobject clazz, DisplayList* displayList, SkMatrix* matrix) {
+ SkMatrix* source = displayList->getStaticMatrix();
+ if (source) {
+ matrix->setConcat(SkMatrix::I(), *source);
+ } else {
+ matrix->setIdentity();
+ }
+}
+
+static jboolean android_view_DisplayList_hasOverlappingRendering(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->hasOverlappingRendering();
+}
+
+static jfloat android_view_DisplayList_getAlpha(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getAlpha();
+}
+
+static jfloat android_view_DisplayList_getLeft(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getLeft();
+}
+
+static jfloat android_view_DisplayList_getTop(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getTop();
+}
+
+static jfloat android_view_DisplayList_getRight(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getRight();
+}
+
+static jfloat android_view_DisplayList_getBottom(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getBottom();
+}
+
+static jfloat android_view_DisplayList_getCameraDistance(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getCameraDistance();
+}
+
+static jfloat android_view_DisplayList_getScaleX(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getScaleX();
+}
+
+static jfloat android_view_DisplayList_getScaleY(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getScaleY();
+}
+
+static jfloat android_view_DisplayList_getTranslationX(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getTranslationX();
+}
+
+static jfloat android_view_DisplayList_getTranslationY(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getTranslationY();
+}
+
+static jfloat android_view_DisplayList_getRotation(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getRotation();
+}
+
+static jfloat android_view_DisplayList_getRotationX(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getRotationX();
+}
+
+static jfloat android_view_DisplayList_getRotationY(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getRotationY();
+}
+
+static jfloat android_view_DisplayList_getPivotX(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getPivotX();
+}
+
+static jfloat android_view_DisplayList_getPivotY(JNIEnv* env,
+ jobject clazz, DisplayList* displayList) {
+ return displayList->getPivotY();
+}
+
+#endif // USE_OPENGL_RENDERER
+
+// ----------------------------------------------------------------------------
+// JNI Glue
+// ----------------------------------------------------------------------------
+
+const char* const kClassPathName = "android/view/DisplayList";
+
+static JNINativeMethod gMethods[] = {
+#ifdef USE_OPENGL_RENDERER
+ { "nDestroyDisplayList", "(I)V", (void*) android_view_DisplayList_destroyDisplayList },
+ { "nGetDisplayListSize", "(I)I", (void*) android_view_DisplayList_getDisplayListSize },
+ { "nSetDisplayListName", "(ILjava/lang/String;)V",
+ (void*) android_view_DisplayList_setDisplayListName },
+ { "nOutput", "(I)V", (void*) android_view_DisplayList_output },
+
+ { "nReset", "(I)V", (void*) android_view_DisplayList_reset },
+ { "nSetCaching", "(IZ)V", (void*) android_view_DisplayList_setCaching },
+ { "nSetStaticMatrix", "(II)V", (void*) android_view_DisplayList_setStaticMatrix },
+ { "nSetAnimationMatrix", "(II)V", (void*) android_view_DisplayList_setAnimationMatrix },
+ { "nSetClipToBounds", "(IZ)V", (void*) android_view_DisplayList_setClipToBounds },
+ { "nSetAlpha", "(IF)V", (void*) android_view_DisplayList_setAlpha },
+ { "nSetHasOverlappingRendering", "(IZ)V",
+ (void*) android_view_DisplayList_setHasOverlappingRendering },
+ { "nSetTranslationX", "(IF)V", (void*) android_view_DisplayList_setTranslationX },
+ { "nSetTranslationY", "(IF)V", (void*) android_view_DisplayList_setTranslationY },
+ { "nSetTranslationZ", "(IF)V", (void*) android_view_DisplayList_setTranslationZ },
+ { "nSetRotation", "(IF)V", (void*) android_view_DisplayList_setRotation },
+ { "nSetRotationX", "(IF)V", (void*) android_view_DisplayList_setRotationX },
+ { "nSetRotationY", "(IF)V", (void*) android_view_DisplayList_setRotationY },
+ { "nSetScaleX", "(IF)V", (void*) android_view_DisplayList_setScaleX },
+ { "nSetScaleY", "(IF)V", (void*) android_view_DisplayList_setScaleY },
+ { "nSetTransformationInfo","(IFFFFFFFFF)V",
+ (void*) android_view_DisplayList_setTransformationInfo },
+ { "nSetPivotX", "(IF)V", (void*) android_view_DisplayList_setPivotX },
+ { "nSetPivotY", "(IF)V", (void*) android_view_DisplayList_setPivotY },
+ { "nSetCameraDistance", "(IF)V", (void*) android_view_DisplayList_setCameraDistance },
+ { "nSetLeft", "(II)V", (void*) android_view_DisplayList_setLeft },
+ { "nSetTop", "(II)V", (void*) android_view_DisplayList_setTop },
+ { "nSetRight", "(II)V", (void*) android_view_DisplayList_setRight },
+ { "nSetBottom", "(II)V", (void*) android_view_DisplayList_setBottom },
+ { "nSetLeftTopRightBottom","(IIIII)V", (void*) android_view_DisplayList_setLeftTopRightBottom },
+ { "nOffsetLeftAndRight", "(IF)V", (void*) android_view_DisplayList_offsetLeftAndRight },
+ { "nOffsetTopAndBottom", "(IF)V", (void*) android_view_DisplayList_offsetTopAndBottom },
+
+ { "nGetMatrix", "(II)V", (void*) android_view_DisplayList_getMatrix },
+ { "nHasOverlappingRendering", "(I)Z", (void*) android_view_DisplayList_hasOverlappingRendering },
+ { "nGetAlpha", "(I)F", (void*) android_view_DisplayList_getAlpha },
+ { "nGetLeft", "(I)F", (void*) android_view_DisplayList_getLeft },
+ { "nGetTop", "(I)F", (void*) android_view_DisplayList_getTop },
+ { "nGetRight", "(I)F", (void*) android_view_DisplayList_getRight },
+ { "nGetBottom", "(I)F", (void*) android_view_DisplayList_getBottom },
+ { "nGetCameraDistance", "(I)F", (void*) android_view_DisplayList_getCameraDistance },
+ { "nGetScaleX", "(I)F", (void*) android_view_DisplayList_getScaleX },
+ { "nGetScaleY", "(I)F", (void*) android_view_DisplayList_getScaleY },
+ { "nGetTranslationX", "(I)F", (void*) android_view_DisplayList_getTranslationX },
+ { "nGetTranslationY", "(I)F", (void*) android_view_DisplayList_getTranslationY },
+ { "nGetRotation", "(I)F", (void*) android_view_DisplayList_getRotation },
+ { "nGetRotationX", "(I)F", (void*) android_view_DisplayList_getRotationX },
+ { "nGetRotationY", "(I)F", (void*) android_view_DisplayList_getRotationY },
+ { "nGetPivotX", "(I)F", (void*) android_view_DisplayList_getPivotX },
+ { "nGetPivotY", "(I)F", (void*) android_view_DisplayList_getPivotY },
+#endif
+};
+
+#ifdef USE_OPENGL_RENDERER
+ #define FIND_CLASS(var, className) \
+ var = env->FindClass(className); \
+ LOG_FATAL_IF(! var, "Unable to find class " className);
+
+ #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \
+ var = env->GetMethodID(clazz, methodName, methodDescriptor); \
+ LOG_FATAL_IF(! var, "Unable to find method " methodName);
+#else
+ #define FIND_CLASS(var, className)
+ #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor)
+#endif
+
+int register_android_view_DisplayList(JNIEnv* env) {
+ return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
+}
+
+};
+
diff --git a/core/jni/android_view_GLES20DisplayList.cpp b/core/jni/android_view_GLES20DisplayList.cpp
deleted file mode 100644
index d6cddb2..0000000
--- a/core/jni/android_view_GLES20DisplayList.cpp
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "OpenGLRenderer"
-
-#include <EGL/egl.h>
-
-#include "jni.h"
-#include "GraphicsJNI.h"
-#include <nativehelper/JNIHelp.h>
-#include <android_runtime/AndroidRuntime.h>
-
-#include <DisplayList.h>
-#include <DisplayListRenderer.h>
-
-namespace android {
-
-using namespace uirenderer;
-
-/**
- * Note: OpenGLRenderer JNI layer is generated and compiled only on supported
- * devices. This means all the logic must be compiled only when the
- * preprocessor variable USE_OPENGL_RENDERER is defined.
- */
-#ifdef USE_OPENGL_RENDERER
-
-// ----------------------------------------------------------------------------
-// DisplayList view properties
-// ----------------------------------------------------------------------------
-
-static void android_view_GLES20DisplayList_reset(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- displayList->reset();
-}
-
-static jint android_view_GLES20DisplayList_getDisplayListSize(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getSize();
-}
-
-static void android_view_GLES20DisplayList_setDisplayListName(JNIEnv* env,
- jobject clazz, DisplayList* displayList, jstring name) {
- if (name != NULL) {
- const char* textArray = env->GetStringUTFChars(name, NULL);
- displayList->setName(textArray);
- env->ReleaseStringUTFChars(name, textArray);
- }
-}
-
-static void android_view_GLES20DisplayList_output(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- displayList->output();
-}
-
-static void android_view_GLES20DisplayList_destroyDisplayList(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- DisplayList::destroyDisplayListDeferred(displayList);
-}
-
-// ----------------------------------------------------------------------------
-// DisplayList view properties
-// ----------------------------------------------------------------------------
-
-static void android_view_GLES20DisplayList_setCaching(JNIEnv* env,
- jobject clazz, DisplayList* displayList, jboolean caching) {
- displayList->setCaching(caching);
-}
-
-static void android_view_GLES20DisplayList_setStaticMatrix(JNIEnv* env,
- jobject clazz, DisplayList* displayList, SkMatrix* matrix) {
- displayList->setStaticMatrix(matrix);
-}
-
-static void android_view_GLES20DisplayList_setAnimationMatrix(JNIEnv* env,
- jobject clazz, DisplayList* displayList, SkMatrix* matrix) {
- displayList->setAnimationMatrix(matrix);
-}
-
-static void android_view_GLES20DisplayList_setClipToBounds(JNIEnv* env,
- jobject clazz, DisplayList* displayList, jboolean clipToBounds) {
- displayList->setClipToBounds(clipToBounds);
-}
-
-static void android_view_GLES20DisplayList_setAlpha(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float alpha) {
- displayList->setAlpha(alpha);
-}
-
-static void android_view_GLES20DisplayList_setHasOverlappingRendering(JNIEnv* env,
- jobject clazz, DisplayList* displayList, bool hasOverlappingRendering) {
- displayList->setHasOverlappingRendering(hasOverlappingRendering);
-}
-
-static void android_view_GLES20DisplayList_setTranslationX(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float tx) {
- displayList->setTranslationX(tx);
-}
-
-static void android_view_GLES20DisplayList_setTranslationY(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float ty) {
- displayList->setTranslationY(ty);
-}
-
-static void android_view_GLES20DisplayList_setTranslationZ(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float tz) {
- displayList->setTranslationZ(tz);
-}
-
-static void android_view_GLES20DisplayList_setRotation(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float rotation) {
- displayList->setRotation(rotation);
-}
-
-static void android_view_GLES20DisplayList_setRotationX(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float rx) {
- displayList->setRotationX(rx);
-}
-
-static void android_view_GLES20DisplayList_setRotationY(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float ry) {
- displayList->setRotationY(ry);
-}
-
-static void android_view_GLES20DisplayList_setScaleX(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float sx) {
- displayList->setScaleX(sx);
-}
-
-static void android_view_GLES20DisplayList_setScaleY(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float sy) {
- displayList->setScaleY(sy);
-}
-
-static void android_view_GLES20DisplayList_setTransformationInfo(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float alpha,
- float translationX, float translationY, float translationZ,
- float rotation, float rotationX, float rotationY, float scaleX, float scaleY) {
- displayList->setAlpha(alpha);
- displayList->setTranslationX(translationX);
- displayList->setTranslationY(translationY);
- displayList->setTranslationZ(translationZ);
- displayList->setRotation(rotation);
- displayList->setRotationX(rotationX);
- displayList->setRotationY(rotationY);
- displayList->setScaleX(scaleX);
- displayList->setScaleY(scaleY);
-}
-
-static void android_view_GLES20DisplayList_setPivotX(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float px) {
- displayList->setPivotX(px);
-}
-
-static void android_view_GLES20DisplayList_setPivotY(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float py) {
- displayList->setPivotY(py);
-}
-
-static void android_view_GLES20DisplayList_setCameraDistance(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float distance) {
- displayList->setCameraDistance(distance);
-}
-
-static void android_view_GLES20DisplayList_setLeft(JNIEnv* env,
- jobject clazz, DisplayList* displayList, int left) {
- displayList->setLeft(left);
-}
-
-static void android_view_GLES20DisplayList_setTop(JNIEnv* env,
- jobject clazz, DisplayList* displayList, int top) {
- displayList->setTop(top);
-}
-
-static void android_view_GLES20DisplayList_setRight(JNIEnv* env,
- jobject clazz, DisplayList* displayList, int right) {
- displayList->setRight(right);
-}
-
-static void android_view_GLES20DisplayList_setBottom(JNIEnv* env,
- jobject clazz, DisplayList* displayList, int bottom) {
- displayList->setBottom(bottom);
-}
-
-static void android_view_GLES20DisplayList_setLeftTopRightBottom(JNIEnv* env,
- jobject clazz, DisplayList* displayList, int left, int top,
- int right, int bottom) {
- displayList->setLeftTopRightBottom(left, top, right, bottom);
-}
-
-static void android_view_GLES20DisplayList_offsetLeftAndRight(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float offset) {
- displayList->offsetLeftRight(offset);
-}
-
-static void android_view_GLES20DisplayList_offsetTopAndBottom(JNIEnv* env,
- jobject clazz, DisplayList* displayList, float offset) {
- displayList->offsetTopBottom(offset);
-}
-
-static void android_view_GLES20DisplayList_getMatrix(JNIEnv* env,
- jobject clazz, DisplayList* displayList, SkMatrix* matrix) {
- SkMatrix* source = displayList->getStaticMatrix();
- if (source) {
- matrix->setConcat(SkMatrix::I(), *source);
- } else {
- matrix->setIdentity();
- }
-}
-
-static jboolean android_view_GLES20DisplayList_hasOverlappingRendering(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->hasOverlappingRendering();
-}
-
-static jfloat android_view_GLES20DisplayList_getAlpha(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getAlpha();
-}
-
-static jfloat android_view_GLES20DisplayList_getLeft(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getLeft();
-}
-
-static jfloat android_view_GLES20DisplayList_getTop(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getTop();
-}
-
-static jfloat android_view_GLES20DisplayList_getRight(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getRight();
-}
-
-static jfloat android_view_GLES20DisplayList_getBottom(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getBottom();
-}
-
-static jfloat android_view_GLES20DisplayList_getCameraDistance(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getCameraDistance();
-}
-
-static jfloat android_view_GLES20DisplayList_getScaleX(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getScaleX();
-}
-
-static jfloat android_view_GLES20DisplayList_getScaleY(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getScaleY();
-}
-
-static jfloat android_view_GLES20DisplayList_getTranslationX(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getTranslationX();
-}
-
-static jfloat android_view_GLES20DisplayList_getTranslationY(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getTranslationY();
-}
-
-static jfloat android_view_GLES20DisplayList_getRotation(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getRotation();
-}
-
-static jfloat android_view_GLES20DisplayList_getRotationX(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getRotationX();
-}
-
-static jfloat android_view_GLES20DisplayList_getRotationY(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getRotationY();
-}
-
-static jfloat android_view_GLES20DisplayList_getPivotX(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getPivotX();
-}
-
-static jfloat android_view_GLES20DisplayList_getPivotY(JNIEnv* env,
- jobject clazz, DisplayList* displayList) {
- return displayList->getPivotY();
-}
-
-#endif // USE_OPENGL_RENDERER
-
-// ----------------------------------------------------------------------------
-// JNI Glue
-// ----------------------------------------------------------------------------
-
-const char* const kClassPathName = "android/view/GLES20DisplayList";
-
-static JNINativeMethod gMethods[] = {
-#ifdef USE_OPENGL_RENDERER
- { "nDestroyDisplayList", "(I)V", (void*) android_view_GLES20DisplayList_destroyDisplayList },
- { "nGetDisplayListSize", "(I)I", (void*) android_view_GLES20DisplayList_getDisplayListSize },
- { "nSetDisplayListName", "(ILjava/lang/String;)V",
- (void*) android_view_GLES20DisplayList_setDisplayListName },
- { "nOutput", "(I)V", (void*) android_view_GLES20DisplayList_output },
-
- { "nReset", "(I)V", (void*) android_view_GLES20DisplayList_reset },
- { "nSetCaching", "(IZ)V", (void*) android_view_GLES20DisplayList_setCaching },
- { "nSetStaticMatrix", "(II)V", (void*) android_view_GLES20DisplayList_setStaticMatrix },
- { "nSetAnimationMatrix", "(II)V", (void*) android_view_GLES20DisplayList_setAnimationMatrix },
- { "nSetClipToBounds", "(IZ)V", (void*) android_view_GLES20DisplayList_setClipToBounds },
- { "nSetAlpha", "(IF)V", (void*) android_view_GLES20DisplayList_setAlpha },
- { "nSetHasOverlappingRendering", "(IZ)V",
- (void*) android_view_GLES20DisplayList_setHasOverlappingRendering },
- { "nSetTranslationX", "(IF)V", (void*) android_view_GLES20DisplayList_setTranslationX },
- { "nSetTranslationY", "(IF)V", (void*) android_view_GLES20DisplayList_setTranslationY },
- { "nSetTranslationZ", "(IF)V", (void*) android_view_GLES20DisplayList_setTranslationZ },
- { "nSetRotation", "(IF)V", (void*) android_view_GLES20DisplayList_setRotation },
- { "nSetRotationX", "(IF)V", (void*) android_view_GLES20DisplayList_setRotationX },
- { "nSetRotationY", "(IF)V", (void*) android_view_GLES20DisplayList_setRotationY },
- { "nSetScaleX", "(IF)V", (void*) android_view_GLES20DisplayList_setScaleX },
- { "nSetScaleY", "(IF)V", (void*) android_view_GLES20DisplayList_setScaleY },
- { "nSetTransformationInfo","(IFFFFFFFFF)V",
- (void*) android_view_GLES20DisplayList_setTransformationInfo },
- { "nSetPivotX", "(IF)V", (void*) android_view_GLES20DisplayList_setPivotX },
- { "nSetPivotY", "(IF)V", (void*) android_view_GLES20DisplayList_setPivotY },
- { "nSetCameraDistance", "(IF)V", (void*) android_view_GLES20DisplayList_setCameraDistance },
- { "nSetLeft", "(II)V", (void*) android_view_GLES20DisplayList_setLeft },
- { "nSetTop", "(II)V", (void*) android_view_GLES20DisplayList_setTop },
- { "nSetRight", "(II)V", (void*) android_view_GLES20DisplayList_setRight },
- { "nSetBottom", "(II)V", (void*) android_view_GLES20DisplayList_setBottom },
- { "nSetLeftTopRightBottom","(IIIII)V",
- (void*) android_view_GLES20DisplayList_setLeftTopRightBottom },
- { "nOffsetLeftAndRight", "(IF)V", (void*) android_view_GLES20DisplayList_offsetLeftAndRight },
- { "nOffsetTopAndBottom", "(IF)V", (void*) android_view_GLES20DisplayList_offsetTopAndBottom },
-
-
- { "nGetMatrix", "(II)V", (void*) android_view_GLES20DisplayList_getMatrix },
- { "nHasOverlappingRendering", "(I)Z", (void*) android_view_GLES20DisplayList_hasOverlappingRendering },
- { "nGetAlpha", "(I)F", (void*) android_view_GLES20DisplayList_getAlpha },
- { "nGetLeft", "(I)F", (void*) android_view_GLES20DisplayList_getLeft },
- { "nGetTop", "(I)F", (void*) android_view_GLES20DisplayList_getTop },
- { "nGetRight", "(I)F", (void*) android_view_GLES20DisplayList_getRight },
- { "nGetBottom", "(I)F", (void*) android_view_GLES20DisplayList_getBottom },
- { "nGetCameraDistance", "(I)F", (void*) android_view_GLES20DisplayList_getCameraDistance },
- { "nGetScaleX", "(I)F", (void*) android_view_GLES20DisplayList_getScaleX },
- { "nGetScaleY", "(I)F", (void*) android_view_GLES20DisplayList_getScaleY },
- { "nGetTranslationX", "(I)F", (void*) android_view_GLES20DisplayList_getTranslationX },
- { "nGetTranslationY", "(I)F", (void*) android_view_GLES20DisplayList_getTranslationY },
- { "nGetRotation", "(I)F", (void*) android_view_GLES20DisplayList_getRotation },
- { "nGetRotationX", "(I)F", (void*) android_view_GLES20DisplayList_getRotationX },
- { "nGetRotationY", "(I)F", (void*) android_view_GLES20DisplayList_getRotationY },
- { "nGetPivotX", "(I)F", (void*) android_view_GLES20DisplayList_getPivotX },
- { "nGetPivotY", "(I)F", (void*) android_view_GLES20DisplayList_getPivotY },
-#endif
-};
-
-#ifdef USE_OPENGL_RENDERER
- #define FIND_CLASS(var, className) \
- var = env->FindClass(className); \
- LOG_FATAL_IF(! var, "Unable to find class " className);
-
- #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \
- var = env->GetMethodID(clazz, methodName, methodDescriptor); \
- LOG_FATAL_IF(! var, "Unable to find method " methodName);
-#else
- #define FIND_CLASS(var, className)
- #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor)
-#endif
-
-int register_android_view_GLES20DisplayList(JNIEnv* env) {
- return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
-}
-
-};
-
diff --git a/preloaded-classes b/preloaded-classes
index 342126d..42412c6 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -977,14 +977,13 @@
android.view.DisplayInfo
android.view.DisplayInfo$1
android.view.DisplayList
+android.view.DisplayList$DisplayListFinalizer
android.view.FallbackEventHandler
android.view.FocusFinder
android.view.FocusFinder$1
android.view.FocusFinder$SequentialFocusComparator
android.view.GLES20Canvas
android.view.GLES20Canvas$CanvasFinalizer
-android.view.GLES20DisplayList
-android.view.GLES20DisplayList$DisplayListFinalizer
android.view.GLES20Layer
android.view.GLES20Layer$Finalizer
android.view.GLES20RecordingCanvas