summaryrefslogtreecommitdiffstats
path: root/core/java/android/widget/TextView.java
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2012-02-16 19:24:51 -0800
committerRomain Guy <romainguy@google.com>2012-02-17 13:10:00 -0800
commit33f6beb10f98e8ba96250e284876d607055d278d (patch)
tree215fc7d5624b6b41a018374f5d19f7dac84cf72b /core/java/android/widget/TextView.java
parent445c83c7755fae179cf3328e89307e2775e97a5e (diff)
downloadframeworks_base-33f6beb10f98e8ba96250e284876d607055d278d.zip
frameworks_base-33f6beb10f98e8ba96250e284876d607055d278d.tar.gz
frameworks_base-33f6beb10f98e8ba96250e284876d607055d278d.tar.bz2
Record possible clip rejects when recording display lists
This optimization allows us to quickly skip operations that lie entirely outside of the known bounds of a display list. Because of ViewGroup.setClipChildren, we must keep the operations recorded in the display list. setClipChildren(false) is however a very uncommon operation and we will therefore often benefit from this new optimization. Change-Id: I0942c864e55298e6dccd9977d15adefbce3ba3ad
Diffstat (limited to 'core/java/android/widget/TextView.java')
-rw-r--r--core/java/android/widget/TextView.java8
1 files changed, 6 insertions, 2 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 7db8a1e..d29dc2e 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -5016,15 +5016,19 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
hardwareCanvas.setViewport(width, height);
// The dirty rect should always be null for a display list
hardwareCanvas.onPreDraw(null);
+ hardwareCanvas.translate(-mScrollX, -mScrollY);
layout.draw(hardwareCanvas, highlight, mHighlightPaint, cursorOffsetVertical);
+ hardwareCanvas.translate(mScrollX, mScrollY);
} finally {
hardwareCanvas.onPostDraw();
mTextDisplayList.end();
mTextDisplayListIsValid = true;
}
}
- ((HardwareCanvas) canvas).drawDisplayList(mTextDisplayList,
- mScrollX + width, mScrollY + height, null);
+ canvas.translate(mScrollX, mScrollY);
+ ((HardwareCanvas) canvas).drawDisplayList(mTextDisplayList, width, height, null,
+ DisplayList.FLAG_CLIP_CHILDREN);
+ canvas.translate(-mScrollX, -mScrollY);
} else {
layout.draw(canvas, highlight, mHighlightPaint, cursorOffsetVertical);
}