Code cleanup
Change-Id: I64c346004e0adf9a776d0315534d4fe445f0c0ca
diff --git a/api/current.txt b/api/current.txt
index 19557f5..2ad044e 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -22055,6 +22055,7 @@
method protected boolean verifyDrawable(android.graphics.drawable.Drawable);
method public boolean willNotCacheDrawing();
method public boolean willNotDraw();
+ field public static android.util.Property ALPHA;
field public static final int DRAWING_CACHE_QUALITY_AUTO = 0; // 0x0
field public static final int DRAWING_CACHE_QUALITY_HIGH = 1048576; // 0x100000
field public static final int DRAWING_CACHE_QUALITY_LOW = 524288; // 0x80000
diff --git a/core/java/android/view/GLES20Layer.java b/core/java/android/view/GLES20Layer.java
index 69dfc2b..a491a0b 100644
--- a/core/java/android/view/GLES20Layer.java
+++ b/core/java/android/view/GLES20Layer.java
@@ -42,9 +42,15 @@
return mLayer;
}
+ @Override
boolean copyInto(Bitmap bitmap) {
return GLES20Canvas.nCopyLayer(mLayer, bitmap.mNativeBitmap);
- }
+ }
+
+ @Override
+ void update(int width, int height, boolean isOpaque) {
+ super.update(width, height, isOpaque);
+ }
@Override
void destroy() {
diff --git a/core/java/android/view/GLES20TextureLayer.java b/core/java/android/view/GLES20TextureLayer.java
index 5ee292e..391d9f4 100644
--- a/core/java/android/view/GLES20TextureLayer.java
+++ b/core/java/android/view/GLES20TextureLayer.java
@@ -70,7 +70,9 @@
return mSurface;
}
+ @Override
void update(int width, int height, boolean isOpaque) {
+ super.update(width, height, isOpaque);
GLES20Canvas.nUpdateTextureLayer(mLayer, width, height, isOpaque, mSurface);
}
}
diff --git a/core/java/android/view/HardwareLayer.java b/core/java/android/view/HardwareLayer.java
index 86dec3f..dfb39ae 100644
--- a/core/java/android/view/HardwareLayer.java
+++ b/core/java/android/view/HardwareLayer.java
@@ -16,6 +16,7 @@
package android.view;
+import android.graphics.Bitmap;
import android.graphics.Canvas;
/**
@@ -34,7 +35,7 @@
int mWidth;
int mHeight;
- final boolean mOpaque;
+ boolean mOpaque;
/**
* Creates a new hardware layer with undefined dimensions.
@@ -92,7 +93,7 @@
abstract boolean isValid();
/**
- * Resizes the layer, if necessary, to be at least as large
+ * Resize the layer, if necessary, to be at least as large
* as the supplied dimensions.
*
* @param width The new desired minimum width for this layer
@@ -124,4 +125,29 @@
* @param currentCanvas
*/
abstract void end(Canvas currentCanvas);
+
+ /**
+ * Copies this layer into the specified bitmap.
+ *
+ * @param bitmap The bitmap to copy they layer into
+ *
+ * @return True if the copy was successful, false otherwise
+ */
+ abstract boolean copyInto(Bitmap bitmap);
+
+ /**
+ * Update the layer's properties. This method should be used
+ * when the underlying storage is modified by an external entity.
+ * To change the underlying storage, use the {@link #resize(int, int)}
+ * method instead.
+ *
+ * @param width The new width of this layer
+ * @param height The new height of this layer
+ * @param isOpaque Whether this layer is opaque
+ */
+ void update(int width, int height, boolean isOpaque) {
+ mWidth = width;
+ mHeight = height;
+ mOpaque = isOpaque;
+ }
}
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index c6d011e..bbfb4c1 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -17,12 +17,11 @@
package android.view;
-import android.graphics.Bitmap;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;
-import android.os.*;
-import android.util.EventLog;
+import android.os.SystemClock;
+import android.os.SystemProperties;
import android.util.Log;
import javax.microedition.khronos.egl.EGL10;
@@ -199,26 +198,6 @@
abstract SurfaceTexture createSurfaceTexture(HardwareLayer layer);
/**
- * Updates the specified layer.
- *
- * @param layer The hardware layer to update
- * @param width The layer's width
- * @param height The layer's height
- * @param isOpaque Whether the layer is opaque
- */
- abstract void updateTextureLayer(HardwareLayer layer, int width, int height, boolean isOpaque);
-
- /**
- * Copies the content of the specified layer into the specified bitmap.
- *
- * @param layer The hardware layer to copy
- * @param bitmap The bitmap to copy the layer into
- *
- * @return True if the copy was successful, false otherwise
- */
- abstract boolean copyLayer(HardwareLayer layer, Bitmap bitmap);
-
- /**
* Initializes the hardware renderer for the specified surface and setup the
* renderer for drawing, if needed. This is invoked when the ViewAncestor has
* potentially lost the hardware renderer. The hardware renderer should be
@@ -342,6 +321,13 @@
}
/**
+ * Indicates whether this renderer instance can track and update dirty regions.
+ */
+ boolean hasDirtyRegions() {
+ return mDirtyRegions;
+ }
+
+ /**
* Return a string for the EGL error code, or the hex representation
* if the error is unknown.
*
@@ -634,19 +620,14 @@
void draw(View view, View.AttachInfo attachInfo, HardwareDrawCallbacks callbacks,
Rect dirty) {
if (canDraw()) {
- if (!mDirtyRegions) {
+ if (!hasDirtyRegions()) {
dirty = null;
}
-
- attachInfo.mDrawingTime = SystemClock.uptimeMillis();
attachInfo.mIgnoreDirtyState = true;
+ attachInfo.mDrawingTime = SystemClock.uptimeMillis();
+
view.mPrivateFlags |= View.DRAWN;
- long startTime;
- if (ViewDebug.DEBUG_PROFILE_DRAWING) {
- startTime = SystemClock.elapsedRealtime();
- }
-
final int surfaceState = checkCurrent();
if (surfaceState != SURFACE_STATE_ERROR) {
// We had to change the current surface and/or context, redraw everything
@@ -700,26 +681,9 @@
onPostDraw();
- if (ViewDebug.DEBUG_PROFILE_DRAWING) {
- EventLog.writeEvent(60000, SystemClock.elapsedRealtime() - startTime);
- }
-
attachInfo.mIgnoreDirtyState = false;
- final long swapBuffersStartTime;
- if (ViewDebug.DEBUG_LATENCY) {
- swapBuffersStartTime = System.nanoTime();
- }
-
sEgl.eglSwapBuffers(sEglDisplay, mEglSurface);
-
- if (ViewDebug.DEBUG_LATENCY) {
- long now = System.nanoTime();
- Log.d(LOG_TAG, "Latency: Spent "
- + ((now - swapBuffersStartTime) * 0.000001f)
- + "ms waiting for eglSwapBuffers()");
- }
-
checkEglErrors();
}
}
@@ -820,16 +784,6 @@
return ((GLES20TextureLayer) layer).getSurfaceTexture();
}
- @Override
- void updateTextureLayer(HardwareLayer layer, int width, int height, boolean isOpaque) {
- ((GLES20TextureLayer) layer).update(width, height, isOpaque);
- }
-
- @Override
- boolean copyLayer(HardwareLayer layer, Bitmap bitmap) {
- return ((GLES20Layer) layer).copyInto(bitmap);
- }
-
static HardwareRenderer create(boolean translucent) {
if (GLES20Canvas.isAvailable()) {
return new Gl20Renderer(translucent);
diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java
index de398eb..ab4aed3 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -317,7 +317,7 @@
return;
}
- mAttachInfo.mHardwareRenderer.updateTextureLayer(mLayer, getWidth(), getHeight(), mOpaque);
+ mLayer.update(getWidth(), getHeight(), mOpaque);
if (mListener != null) {
mListener.onSurfaceTextureUpdated(mSurface);
@@ -402,7 +402,7 @@
*/
public Bitmap getBitmap(Bitmap bitmap) {
if (bitmap != null && isAvailable()) {
- mAttachInfo.mHardwareRenderer.copyLayer(mLayer, bitmap);
+ mLayer.copyInto(bitmap);
}
return bitmap;
}
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 8184643..f91aeb7 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -5121,12 +5121,7 @@
mInputEventConsistencyVerifier.onTrackballEvent(event, 0);
}
- //Log.i("view", "view=" + this + ", " + event.toString());
- if (onTrackballEvent(event)) {
- return true;
- }
-
- return false;
+ return onTrackballEvent(event);
}
/**
@@ -5221,6 +5216,7 @@
break;
}
+ //noinspection SimplifiableIfStatement
if (mOnHoverListener != null && (mViewFlags & ENABLED_MASK) == ENABLED
&& mOnHoverListener.onHover(this, event)) {
return true;
@@ -5893,6 +5889,7 @@
*/
private boolean isHoverable() {
final int viewFlags = mViewFlags;
+ //noinspection SimplifiableIfStatement
if ((viewFlags & ENABLED_MASK) == DISABLED) {
return false;
}
@@ -12847,7 +12844,7 @@
* A Property wrapper around the <code>alpha</code> functionality handled by the
* {@link View#setAlpha(float)} and {@link View#getAlpha()} methods.
*/
- static Property<View, Float> ALPHA = new FloatProperty<View>("alpha") {
+ public static Property<View, Float> ALPHA = new FloatProperty<View>("alpha") {
@Override
public void setValue(View object, float value) {
object.setAlpha(value);
@@ -13573,6 +13570,12 @@
boolean mIgnoreDirtyState;
/**
+ * This flag tracks when the mIgnoreDirtyState flag is set during draw(),
+ * to avoid clearing that flag prematurely.
+ */
+ boolean mSetIgnoreDirtyState = false;
+
+ /**
* Indicates whether the view's window is currently in touch mode.
*/
boolean mInTouchMode;
diff --git a/core/java/android/view/ViewAncestor.java b/core/java/android/view/ViewAncestor.java
index ad660c1..e5d6d9f 100644
--- a/core/java/android/view/ViewAncestor.java
+++ b/core/java/android/view/ViewAncestor.java
@@ -288,10 +288,6 @@
private final int mDensity;
- // This flag tracks when the mIgnoreDirtyState flag is set during draw(), to avoid
- // clearing that flag prematurely
- private boolean mSetIgnoreDirtyState = false;
-
/**
* Consistency verifier for debugging purposes.
*/
@@ -676,7 +672,7 @@
}
}
if (!mDirty.isEmpty() && !mDirty.contains(dirty)) {
- mSetIgnoreDirtyState = true;
+ mAttachInfo.mSetIgnoreDirtyState = true;
mAttachInfo.mIgnoreDirtyState = true;
}
mDirty.union(dirty);
@@ -1882,10 +1878,10 @@
}
canvas.setScreenDensity(scalingRequired
? DisplayMetrics.DENSITY_DEVICE : 0);
- mSetIgnoreDirtyState = false;
+ mAttachInfo.mSetIgnoreDirtyState = false;
mView.draw(canvas);
} finally {
- if (!mSetIgnoreDirtyState) {
+ if (!mAttachInfo.mSetIgnoreDirtyState) {
// Only clear the flag if it was not set during the mView.draw() call
mAttachInfo.mIgnoreDirtyState = false;
}
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index b0d8cf9..563d7e4 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -57,7 +57,7 @@
LOGD("Enabling debug mode %d", mDebugLevel);
#if RENDER_LAYERS_AS_REGIONS
- LOGD("Layers will be composited as regions");
+ INIT_LOGD("Layers will be composited as regions");
#endif
}
diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml
index c650021..7aa0617 100644
--- a/tests/HwAccelerationTest/AndroidManifest.xml
+++ b/tests/HwAccelerationTest/AndroidManifest.xml
@@ -31,6 +31,15 @@
android:hardwareAccelerated="true">
<activity
+ android:name="OpaqueActivity"
+ android:label="_Opaque">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+
+ <activity
android:name="GetBitmapActivity"
android:label="_GetBitmap">
<intent-filter>
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/OpaqueActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/OpaqueActivity.java
new file mode 100644
index 0000000..af45f29
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/OpaqueActivity.java
@@ -0,0 +1,62 @@
+/*
+ * 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 com.android.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.PorterDuff;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.FrameLayout;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class OpaqueActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ final OpaqueView view = new OpaqueView(this);
+ setContentView(view, new FrameLayout.LayoutParams(100, 100, Gravity.CENTER));
+ }
+
+ public static class OpaqueView extends View {
+ public OpaqueView(Context c) {
+ super(c);
+ setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ invalidate();
+ Log.d("OpaqueView", "Invalidate");
+ }
+ });
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ canvas.drawColor(0xffff0000, PorterDuff.Mode.SRC);
+ }
+
+ @Override
+ public boolean isOpaque() {
+ return true;
+ }
+ }
+}