diff options
author | Chris Craik <ccraik@google.com> | 2014-07-23 00:37:07 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-07-23 00:37:07 +0000 |
commit | 35763b1c0b3b26231d8b12329e435b1395bf4be2 (patch) | |
tree | 459b560e6c196b302e9b2f33ec9960b9666a4d37 /libs/hwui | |
parent | e40a8685ec09230511ee0ff82014ff9cc49e1fec (diff) | |
parent | 3a35c79230f052712b314d595ad0c57f86ad7f06 (diff) | |
download | frameworks_base-35763b1c0b3b26231d8b12329e435b1395bf4be2.zip frameworks_base-35763b1c0b3b26231d8b12329e435b1395bf4be2.tar.gz frameworks_base-35763b1c0b3b26231d8b12329e435b1395bf4be2.tar.bz2 |
am 1f9b1c74: am d93bb9e1: Merge "Make setter methods on Outline call setEmpty() based on params" into lmp-dev
* commit '1f9b1c74aad278704920e8181c31229dd05bb49b':
Make setter methods on Outline call setEmpty() based on params
Diffstat (limited to 'libs/hwui')
-rw-r--r-- | libs/hwui/Outline.h | 18 | ||||
-rw-r--r-- | libs/hwui/RenderNode.cpp | 19 |
2 files changed, 25 insertions, 12 deletions
diff --git a/libs/hwui/Outline.h b/libs/hwui/Outline.h index 024bdfd..83426e8 100644 --- a/libs/hwui/Outline.h +++ b/libs/hwui/Outline.h @@ -49,15 +49,20 @@ public: mBounds.set(outline->getBounds()); } - bool isEmpty() const { - return mType == kOutlineType_None; + void setEmpty() { + mType = kOutlineType_Empty; + mPath.reset(); } - void setEmpty() { + void setNone() { mType = kOutlineType_None; mPath.reset(); } + bool isEmpty() const { + return mType == kOutlineType_Empty; + } + void setShouldClip(bool clip) { mShouldClip = clip; } @@ -81,7 +86,7 @@ public: } const SkPath* getPath() const { - if (mType == kOutlineType_None) return NULL; + if (mType == kOutlineType_None || mType == kOutlineType_Empty) return NULL; return &mPath; } @@ -89,8 +94,9 @@ public: private: enum OutlineType { kOutlineType_None = 0, - kOutlineType_ConvexPath = 1, - kOutlineType_RoundRect = 2 + kOutlineType_Empty = 1, + kOutlineType_ConvexPath = 2, + kOutlineType_RoundRect = 3 }; bool mShouldClip; diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index fe03806..3eb779f 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -581,7 +581,7 @@ void RenderNode::buildZSortedChildList(Vector<ZDrawRenderNodeOpPair>& zTranslate template <class T> void RenderNode::issueDrawShadowOperation(const Matrix4& transformFromParent, T& handler) { - if (properties().getAlpha() <= 0.0f || properties().getOutline().isEmpty()) return; + if (properties().getAlpha() <= 0.0f || !properties().getOutline().getPath()) return; mat4 shadowMatrixXY(transformFromParent); applyViewPropertyTransforms(shadowMatrixXY); @@ -776,16 +776,23 @@ void RenderNode::issueOperationsOfProjectedChildren(OpenGLRenderer& renderer, T& */ template <class T> void RenderNode::issueOperations(OpenGLRenderer& renderer, T& handler) { + const int level = handler.level(); + if (mDisplayListData->isEmpty()) { + DISPLAY_LIST_LOGD("%*sEmpty display list (%p, %s)", level * 2, "", this, getName()); + return; + } + const bool drawLayer = (mLayer && (&renderer != mLayer->renderer)); // If we are updating the contents of mLayer, we don't want to apply any of // the RenderNode's properties to this issueOperations pass. Those will all // be applied when the layer is drawn, aka when this is true. const bool useViewProperties = (!mLayer || drawLayer); - - const int level = handler.level(); - if (mDisplayListData->isEmpty() || (useViewProperties && properties().getAlpha() <= 0)) { - DISPLAY_LIST_LOGD("%*sEmpty display list (%p, %s)", level * 2, "", this, getName()); - return; + if (useViewProperties) { + const Outline& outline = properties().getOutline(); + if (properties().getAlpha() <= 0 || (outline.getShouldClip() && outline.isEmpty())) { + DISPLAY_LIST_LOGD("%*sRejected display list (%p, %s)", level * 2, "", this, getName()); + return; + } } handler.startMark(getName()); |