Merge \"Avoid throwing when 0 size layer requested\" into nyc-dev

am: 807989facd

Change-Id: I09c2114b0ff2aa1badb414da9b3b5cd2bbd63669
This commit is contained in:
Chris Craik
2016-07-13 23:15:35 +00:00
committed by android-build-merger
3 changed files with 7 additions and 6 deletions

View File

@@ -301,7 +301,10 @@ void RenderNode::pushLayerUpdate(TreeInfo& info) {
LayerType layerType = properties().effectiveLayerType(); LayerType layerType = properties().effectiveLayerType();
// If we are not a layer OR we cannot be rendered (eg, view was detached) // If we are not a layer OR we cannot be rendered (eg, view was detached)
// we need to destroy any Layers we may have had previously // we need to destroy any Layers we may have had previously
if (CC_LIKELY(layerType != LayerType::RenderLayer) || CC_UNLIKELY(!isRenderable())) { if (CC_LIKELY(layerType != LayerType::RenderLayer)
|| CC_UNLIKELY(!isRenderable())
|| CC_UNLIKELY(properties().getWidth() == 0)
|| CC_UNLIKELY(properties().getHeight() == 0)) {
if (CC_UNLIKELY(mLayer)) { if (CC_UNLIKELY(mLayer)) {
destroyLayer(mLayer); destroyLayer(mLayer);
mLayer = nullptr; mLayer = nullptr;

View File

@@ -611,9 +611,7 @@ public:
bool fitsOnLayer() const { bool fitsOnLayer() const {
const DeviceInfo* deviceInfo = DeviceInfo::get(); const DeviceInfo* deviceInfo = DeviceInfo::get();
return mPrimitiveFields.mWidth <= deviceInfo->maxTextureSize() return mPrimitiveFields.mWidth <= deviceInfo->maxTextureSize()
&& mPrimitiveFields.mHeight <= deviceInfo->maxTextureSize() && mPrimitiveFields.mHeight <= deviceInfo->maxTextureSize();
&& mPrimitiveFields.mWidth > 0
&& mPrimitiveFields.mHeight > 0;
} }
bool promotedToLayer() const { bool promotedToLayer() const {

View File

@@ -42,7 +42,7 @@ TEST(RenderProperties, layerValidity) {
props.setLeftTopRightBottom(0, 0, maxTextureSize + 1, maxTextureSize + 1); props.setLeftTopRightBottom(0, 0, maxTextureSize + 1, maxTextureSize + 1);
ASSERT_FALSE(props.fitsOnLayer()); ASSERT_FALSE(props.fitsOnLayer());
// Too small - can't have 0 dimen layer // Too small, but still 'fits'. Not fitting is an error case, so don't report empty as such.
props.setLeftTopRightBottom(0, 0, 100, 0); props.setLeftTopRightBottom(0, 0, 100, 0);
ASSERT_FALSE(props.fitsOnLayer()); ASSERT_TRUE(props.fitsOnLayer());
} }