summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Romain Guy <romainguy@google.com> 2011-01-17 14:42:41 -0800
committer Romain Guy <romainguy@google.com> 2011-01-17 14:42:41 -0800
commitd6cd572df8067c40b3e0e7e74e58cdb456b33e92 (patch)
treebb0ed888ea6af5780ad0b92c397297ebf4a579b8
parent73fddbae964ee41895c8218454d0ed7fd71d6913 (diff)
Improve hardware layers rendering speed when setting a View's alpha.
Change-Id: Ib1275677f531c60d9919978c5538c663fdb823b5
-rw-r--r--core/java/android/view/View.java17
-rw-r--r--core/java/android/view/ViewGroup.java13
-rw-r--r--tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java2
3 files changed, 21 insertions, 11 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index f05ef8c588cd..53fc0c0ff112 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -7905,7 +7905,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
+ "LAYER_TYPE_SOFTWARE or LAYER_TYPE_HARDWARE");
}
- if (layerType == mLayerType) return;
+ if (layerType == mLayerType) {
+ if (layerType != LAYER_TYPE_NONE && paint != mLayerPaint) {
+ mLayerPaint = paint == null ? new Paint() : paint;
+ if (mParent instanceof ViewGroup) {
+ ((ViewGroup) mParent).invalidate();
+ }
+ invalidate();
+ }
+ return;
+ }
// Destroy any previous software drawing cache if needed
switch (mLayerType) {
@@ -7931,9 +7940,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
}
mLayerType = layerType;
- mLayerPaint = mLayerType == LAYER_TYPE_NONE ? null : paint;
+ mLayerPaint = mLayerType == LAYER_TYPE_NONE ? null : (paint == null ? new Paint() : paint);
- // TODO: Make sure we invalidate the parent's display list
+ if (mParent instanceof ViewGroup) {
+ ((ViewGroup) mParent).invalidate();
+ }
invalidate();
}
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index f6b6778ea555..d1781cc0d96c 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -2398,16 +2398,15 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
layerType != LAYER_TYPE_NONE) {
layerFlags |= Canvas.CLIP_TO_LAYER_SAVE_FLAG;
}
- if (layerType != LAYER_TYPE_NONE && child.mLayerPaint != null) {
+ if (layerType != LAYER_TYPE_NONE) {
child.mLayerPaint.setAlpha(multipliedAlpha);
} else {
canvas.saveLayerAlpha(sx, sy, sx + cr - cl, sy + cb - ct,
multipliedAlpha, layerFlags);
- layerSaved = true;
}
} else {
// Alpha is handled by the child directly, clobber the layer's alpha
- if (layerType != LAYER_TYPE_NONE && child.mLayerPaint != null) {
+ if (layerType != LAYER_TYPE_NONE) {
child.mLayerPaint.setAlpha(255);
}
child.mPrivateFlags |= ALPHA_SET;
@@ -2433,7 +2432,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
if (hasNoCache) {
boolean layerRendered = false;
- if (!layerSaved && layerType == LAYER_TYPE_HARDWARE) {
+ if (layerType == LAYER_TYPE_HARDWARE) {
final HardwareLayer layer = child.getHardwareLayer(canvas);
if (layer != null && layer.isValid()) {
((HardwareCanvas) canvas).drawHardwareLayer(layer, 0, 0, child.mLayerPaint);
@@ -2465,7 +2464,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
child.mPrivateFlags &= ~DIRTY_MASK;
Paint cachePaint;
- if (layerType == LAYER_TYPE_NONE || child.mLayerPaint == null) {
+ if (layerType == LAYER_TYPE_NONE) {
cachePaint = mCachePaint;
if (alpha < 1.0f) {
cachePaint.setAlpha((int) (alpha * 255));
@@ -2476,9 +2475,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
}
} else {
cachePaint = child.mLayerPaint;
- if (alpha < 1.0f) {
- cachePaint.setAlpha((int) (alpha * 255));
- }
+ cachePaint.setAlpha((int) (alpha * 255));
}
canvas.drawBitmap(cache, 0.0f, 0.0f, cachePaint);
}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java
index a0b1d782d723..e795f02a224d 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ViewLayersActivity2.java
@@ -38,6 +38,8 @@ public class ViewLayersActivity2 extends Activity {
setupList(R.id.list1);
setupList(R.id.list2);
setupList(R.id.list3);
+
+ findViewById(R.id.list1).setAlpha(0.7f);
}
private void setupList(int listId) {