Merge "Invalidate display lists immediately when views are removed/added quickly" into jb-dev

This commit is contained in:
Romain Guy
2012-05-08 14:52:48 -07:00
committed by Android (Google) Code Review
2 changed files with 20 additions and 8 deletions

View File

@@ -11096,22 +11096,30 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
if ((mPrivateFlags & REQUEST_TRANSPARENT_REGIONS) != 0) {
mParent.requestTransparentRegion(this);
}
if ((mPrivateFlags & AWAKEN_SCROLL_BARS_ON_ATTACH) != 0) {
initialAwakenScrollBars();
mPrivateFlags &= ~AWAKEN_SCROLL_BARS_ON_ATTACH;
}
jumpDrawablesToCurrentState();
// Order is important here: LayoutDirection MUST be resolved before Padding
// and TextDirection
resolveLayoutDirection();
resolvePadding();
resolveTextDirection();
resolveTextAlignment();
clearAccessibilityFocus();
if (isFocused()) {
InputMethodManager imm = InputMethodManager.peekInstance();
imm.focusIn(this);
}
if (mAttachInfo != null && mDisplayList != null) {
mAttachInfo.mViewRootImpl.dequeueDisplayList(mDisplayList);
}
}
/**
@@ -11332,7 +11340,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
if (mAttachInfo != null) {
if (mDisplayList != null) {
mAttachInfo.mViewRootImpl.invalidateDisplayList(mDisplayList);
mAttachInfo.mViewRootImpl.enqueueDisplayList(mDisplayList);
}
mAttachInfo.mViewRootImpl.cancelInvalidate(this);
} else {
@@ -12026,7 +12034,6 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
boolean caching = false;
final HardwareCanvas canvas = displayList.start();
int restoreCount = 0;
int width = mRight - mLeft;
int height = mBottom - mTop;
@@ -12659,10 +12666,6 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
return more;
}
void setDisplayListProperties() {
setDisplayListProperties(mDisplayList);
}
/**
* This method is called by getDisplayList() when a display list is created or re-rendered.
* It sets or resets the current value of all properties on that display list (resetting is

View File

@@ -4412,14 +4412,23 @@ public final class ViewRootImpl implements ViewParent,
mInvalidateOnAnimationRunnable.addViewRect(info);
}
public void invalidateDisplayList(DisplayList displayList) {
public void enqueueDisplayList(DisplayList displayList) {
mDisplayLists.add(displayList);
mHandler.removeMessages(MSG_INVALIDATE_DISPLAY_LIST);
Message msg = mHandler.obtainMessage(MSG_INVALIDATE_DISPLAY_LIST);
mHandler.sendMessage(msg);
}
public void dequeueDisplayList(DisplayList displayList) {
if (mDisplayLists.remove(displayList)) {
displayList.invalidate();
if (mDisplayLists.size() == 0) {
mHandler.removeMessages(MSG_INVALIDATE_DISPLAY_LIST);
}
}
}
public void cancelInvalidate(View view) {
mHandler.removeMessages(MSG_INVALIDATE, view);
// fixme: might leak the AttachInfo.InvalidateInfo objects instead of returning