Loading libs/hwui/DeferredDisplayList.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -218,7 +218,10 @@ public: // if paints are equal, then modifiers + paint attribs don't need to be compared if (op->mPaint == mOps[0].op->mPaint) return true; if (op->getPaintAlpha() != mOps[0].op->getPaintAlpha()) return false; if (PaintUtils::getAlphaDirect(op->mPaint) != PaintUtils::getAlphaDirect(mOps[0].op->mPaint)) { return false; } if (op->mPaint && mOps[0].op->mPaint && op->mPaint->getColorFilter() != mOps[0].op->mPaint->getColorFilter()) { Loading libs/hwui/DeferredLayerUpdater.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,8 @@ DeferredLayerUpdater::~DeferredLayerUpdater() { } void DeferredLayerUpdater::setPaint(const SkPaint* paint) { OpenGLRenderer::getAlphaAndModeDirect(paint, &mAlpha, &mMode); mAlpha = PaintUtils::getAlphaDirect(paint); mMode = PaintUtils::getXfermodeDirect(paint); SkColorFilter* colorFilter = (paint) ? paint->getColorFilter() : nullptr; SkRefCnt_SafeAssign(mColorFilter, colorFilter); } Loading libs/hwui/DisplayListOp.h +9 −13 Original line number Diff line number Diff line Loading @@ -172,10 +172,6 @@ public: void setQuickRejected(bool quickRejected) { mQuickRejected = quickRejected; } bool getQuickRejected() { return mQuickRejected; } inline int getPaintAlpha() const { return OpenGLRenderer::getAlphaDirect(mPaint); } virtual bool hasTextShadow() const { return false; } Loading Loading @@ -213,7 +209,7 @@ protected: if (state.mAlpha != 1.0f) return false; SkXfermode::Mode mode = OpenGLRenderer::getXfermodeDirect(mPaint); SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(mPaint); return (mode == SkXfermode::kSrcOver_Mode || mode == SkXfermode::kSrc_Mode); Loading Loading @@ -249,8 +245,8 @@ public: virtual bool getLocalBounds(Rect& localBounds) override { localBounds.set(mLocalBounds); OpenGLRenderer::TextShadow textShadow; if (OpenGLRenderer::getTextShadow(mPaint, &textShadow)) { PaintUtils::TextShadow textShadow; if (PaintUtils::getTextShadow(mPaint, &textShadow)) { Rect shadow(mLocalBounds); shadow.translate(textShadow.dx, textShadow.dx); shadow.outset(textShadow.radius); Loading Loading @@ -372,8 +368,8 @@ public: private: bool isSaveLayerAlpha() const { SkXfermode::Mode mode = OpenGLRenderer::getXfermodeDirect(mPaint); int alpha = OpenGLRenderer::getAlphaDirect(mPaint); SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(mPaint); int alpha = PaintUtils::getAlphaDirect(mPaint); return alpha < 255 && mode == SkXfermode::kSrcOver_Mode; } Loading Loading @@ -691,7 +687,7 @@ public: // TODO: support clipped bitmaps by handling them in SET_TEXTURE deferInfo.mergeable = state.mMatrix.isSimple() && state.mMatrix.positiveScale() && !state.mClipSideFlags && OpenGLRenderer::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode && PaintUtils::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode && (mBitmap->colorType() != kAlpha_8_SkColorType); } Loading Loading @@ -895,7 +891,7 @@ public: deferInfo.batchId = DeferredDisplayList::kOpBatch_Patch; deferInfo.mergeId = getAtlasEntry(renderer) ? (mergeid_t) mEntry->getMergeId() : (mergeid_t) mBitmap; deferInfo.mergeable = state.mMatrix.isPureTranslate() && OpenGLRenderer::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode; PaintUtils::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode; deferInfo.opaqueOverBounds = isOpaqueOverBounds(state) && mBitmap->isOpaque(); } Loading Loading @@ -1241,7 +1237,7 @@ public: } virtual bool hasTextShadow() const override { return OpenGLRenderer::hasTextShadow(mPaint); return PaintUtils::hasTextShadow(mPaint); } virtual void onDefer(OpenGLRenderer& renderer, DeferInfo& deferInfo, Loading Loading @@ -1330,7 +1326,7 @@ public: deferInfo.mergeable = state.mMatrix.isPureTranslate() && !hasDecorations && OpenGLRenderer::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode; && PaintUtils::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode; } virtual void applyDraw(OpenGLRenderer& renderer, Rect& dirty) override { Loading libs/hwui/Layer.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -170,7 +170,8 @@ void Layer::updateDeferred(RenderNode* renderNode, int left, int top, int right, } void Layer::setPaint(const SkPaint* paint) { OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode); alpha = PaintUtils::getAlphaDirect(paint); mode = PaintUtils::getXfermodeDirect(paint); setColorFilter((paint) ? paint->getColorFilter() : nullptr); } Loading libs/hwui/OpenGLRenderer.cpp +15 −22 Original line number Diff line number Diff line Loading @@ -540,7 +540,7 @@ int OpenGLRenderer::saveLayerDeferred(float left, float top, float right, float Rect bounds(left, top, right, bottom); Rect clip; calculateLayerBoundsAndClip(bounds, clip, true); updateSnapshotIgnoreForLayer(bounds, clip, true, getAlphaDirect(paint)); updateSnapshotIgnoreForLayer(bounds, clip, true, PaintUtils::getAlphaDirect(paint)); if (!mState.currentlyIgnored()) { writableSnapshot()->resetTransform(-bounds.left, -bounds.top, 0.0f); Loading Loading @@ -615,7 +615,7 @@ bool OpenGLRenderer::createLayer(float left, float top, float right, float botto Rect clip; Rect bounds(left, top, right, bottom); calculateLayerBoundsAndClip(bounds, clip, fboLayer); updateSnapshotIgnoreForLayer(bounds, clip, fboLayer, getAlphaDirect(paint)); updateSnapshotIgnoreForLayer(bounds, clip, fboLayer, PaintUtils::getAlphaDirect(paint)); // Bail out if we won't draw in this snapshot if (mState.currentlyIgnored()) { Loading Loading @@ -1958,8 +1958,8 @@ void OpenGLRenderer::drawTextShadow(const SkPaint* paint, const char* text, FontRenderer& fontRenderer, int alpha, float x, float y) { mCaches.textureState().activateTexture(0); TextShadow textShadow; if (!getTextShadow(paint, &textShadow)) { PaintUtils::TextShadow textShadow; if (!PaintUtils::getTextShadow(paint, &textShadow)) { LOG_ALWAYS_FATAL("failed to query shadow attributes"); } Loading Loading @@ -1987,8 +1987,10 @@ void OpenGLRenderer::drawTextShadow(const SkPaint* paint, const char* text, renderGlop(glop); } // TODO: remove this, once mState.currentlyIgnored captures snapshot alpha bool OpenGLRenderer::canSkipText(const SkPaint* paint) const { float alpha = (hasTextShadow(paint) ? 1.0f : paint->getAlpha()) * currentSnapshot()->alpha; float alpha = (PaintUtils::hasTextShadow(paint) ? 1.0f : paint->getAlpha()) * currentSnapshot()->alpha; return MathUtils::isZero(alpha) && PaintUtils::getXfermode(paint->getXfermode()) == SkXfermode::kSrcOver_Mode; } Loading Loading @@ -2017,11 +2019,10 @@ void OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count, FontRenderer& fontRenderer = mCaches.fontRenderer.getFontRenderer(); fontRenderer.setFont(paint, SkMatrix::I()); int alpha; SkXfermode::Mode mode; getAlphaAndMode(paint, &alpha, &mode); int alpha = PaintUtils::getAlphaDirect(paint) * currentSnapshot()->alpha; SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(paint); if (CC_UNLIKELY(hasTextShadow(paint))) { if (CC_UNLIKELY(PaintUtils::hasTextShadow(paint))) { drawTextShadow(paint, text, bytesCount, count, positions, fontRenderer, alpha, 0.0f, 0.0f); } Loading Loading @@ -2162,13 +2163,12 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, float y = floorf(y + transform.getTranslateY() + 0.5f); } int alpha; SkXfermode::Mode mode; getAlphaAndMode(paint, &alpha, &mode); int alpha = PaintUtils::getAlphaDirect(paint) * currentSnapshot()->alpha; SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(paint); FontRenderer& fontRenderer = mCaches.fontRenderer.getFontRenderer(); if (CC_UNLIKELY(hasTextShadow(paint))) { if (CC_UNLIKELY(PaintUtils::hasTextShadow(paint))) { fontRenderer.setFont(paint, SkMatrix::I()); drawTextShadow(paint, text, bytesCount, count, positions, fontRenderer, alpha, oldX, oldY); Loading Loading @@ -2238,9 +2238,8 @@ void OpenGLRenderer::drawTextOnPath(const char* text, int bytesCount, int count, fontRenderer.setFont(paint, SkMatrix::I()); fontRenderer.setTextureFiltering(true); int alpha; SkXfermode::Mode mode; getAlphaAndMode(paint, &alpha, &mode); int alpha = PaintUtils::getAlphaDirect(paint) * currentSnapshot()->alpha; SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(paint); TextDrawFunctor functor(this, 0.0f, 0.0f, false, alpha, mode, paint); const Rect* clip = &writableSnapshot()->getLocalClip(); Loading Loading @@ -2530,12 +2529,6 @@ void OpenGLRenderer::drawColorRect(float left, float top, float right, float bot renderGlop(glop); } void OpenGLRenderer::getAlphaAndMode(const SkPaint* paint, int* alpha, SkXfermode::Mode* mode) const { getAlphaAndModeDirect(paint, alpha, mode); *alpha *= currentSnapshot()->alpha; } float OpenGLRenderer::getLayerAlpha(const Layer* layer) const { return (layer->getAlpha() / 255.0f) * currentSnapshot()->alpha; } Loading Loading
libs/hwui/DeferredDisplayList.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -218,7 +218,10 @@ public: // if paints are equal, then modifiers + paint attribs don't need to be compared if (op->mPaint == mOps[0].op->mPaint) return true; if (op->getPaintAlpha() != mOps[0].op->getPaintAlpha()) return false; if (PaintUtils::getAlphaDirect(op->mPaint) != PaintUtils::getAlphaDirect(mOps[0].op->mPaint)) { return false; } if (op->mPaint && mOps[0].op->mPaint && op->mPaint->getColorFilter() != mOps[0].op->mPaint->getColorFilter()) { Loading
libs/hwui/DeferredLayerUpdater.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,8 @@ DeferredLayerUpdater::~DeferredLayerUpdater() { } void DeferredLayerUpdater::setPaint(const SkPaint* paint) { OpenGLRenderer::getAlphaAndModeDirect(paint, &mAlpha, &mMode); mAlpha = PaintUtils::getAlphaDirect(paint); mMode = PaintUtils::getXfermodeDirect(paint); SkColorFilter* colorFilter = (paint) ? paint->getColorFilter() : nullptr; SkRefCnt_SafeAssign(mColorFilter, colorFilter); } Loading
libs/hwui/DisplayListOp.h +9 −13 Original line number Diff line number Diff line Loading @@ -172,10 +172,6 @@ public: void setQuickRejected(bool quickRejected) { mQuickRejected = quickRejected; } bool getQuickRejected() { return mQuickRejected; } inline int getPaintAlpha() const { return OpenGLRenderer::getAlphaDirect(mPaint); } virtual bool hasTextShadow() const { return false; } Loading Loading @@ -213,7 +209,7 @@ protected: if (state.mAlpha != 1.0f) return false; SkXfermode::Mode mode = OpenGLRenderer::getXfermodeDirect(mPaint); SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(mPaint); return (mode == SkXfermode::kSrcOver_Mode || mode == SkXfermode::kSrc_Mode); Loading Loading @@ -249,8 +245,8 @@ public: virtual bool getLocalBounds(Rect& localBounds) override { localBounds.set(mLocalBounds); OpenGLRenderer::TextShadow textShadow; if (OpenGLRenderer::getTextShadow(mPaint, &textShadow)) { PaintUtils::TextShadow textShadow; if (PaintUtils::getTextShadow(mPaint, &textShadow)) { Rect shadow(mLocalBounds); shadow.translate(textShadow.dx, textShadow.dx); shadow.outset(textShadow.radius); Loading Loading @@ -372,8 +368,8 @@ public: private: bool isSaveLayerAlpha() const { SkXfermode::Mode mode = OpenGLRenderer::getXfermodeDirect(mPaint); int alpha = OpenGLRenderer::getAlphaDirect(mPaint); SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(mPaint); int alpha = PaintUtils::getAlphaDirect(mPaint); return alpha < 255 && mode == SkXfermode::kSrcOver_Mode; } Loading Loading @@ -691,7 +687,7 @@ public: // TODO: support clipped bitmaps by handling them in SET_TEXTURE deferInfo.mergeable = state.mMatrix.isSimple() && state.mMatrix.positiveScale() && !state.mClipSideFlags && OpenGLRenderer::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode && PaintUtils::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode && (mBitmap->colorType() != kAlpha_8_SkColorType); } Loading Loading @@ -895,7 +891,7 @@ public: deferInfo.batchId = DeferredDisplayList::kOpBatch_Patch; deferInfo.mergeId = getAtlasEntry(renderer) ? (mergeid_t) mEntry->getMergeId() : (mergeid_t) mBitmap; deferInfo.mergeable = state.mMatrix.isPureTranslate() && OpenGLRenderer::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode; PaintUtils::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode; deferInfo.opaqueOverBounds = isOpaqueOverBounds(state) && mBitmap->isOpaque(); } Loading Loading @@ -1241,7 +1237,7 @@ public: } virtual bool hasTextShadow() const override { return OpenGLRenderer::hasTextShadow(mPaint); return PaintUtils::hasTextShadow(mPaint); } virtual void onDefer(OpenGLRenderer& renderer, DeferInfo& deferInfo, Loading Loading @@ -1330,7 +1326,7 @@ public: deferInfo.mergeable = state.mMatrix.isPureTranslate() && !hasDecorations && OpenGLRenderer::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode; && PaintUtils::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode; } virtual void applyDraw(OpenGLRenderer& renderer, Rect& dirty) override { Loading
libs/hwui/Layer.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -170,7 +170,8 @@ void Layer::updateDeferred(RenderNode* renderNode, int left, int top, int right, } void Layer::setPaint(const SkPaint* paint) { OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode); alpha = PaintUtils::getAlphaDirect(paint); mode = PaintUtils::getXfermodeDirect(paint); setColorFilter((paint) ? paint->getColorFilter() : nullptr); } Loading
libs/hwui/OpenGLRenderer.cpp +15 −22 Original line number Diff line number Diff line Loading @@ -540,7 +540,7 @@ int OpenGLRenderer::saveLayerDeferred(float left, float top, float right, float Rect bounds(left, top, right, bottom); Rect clip; calculateLayerBoundsAndClip(bounds, clip, true); updateSnapshotIgnoreForLayer(bounds, clip, true, getAlphaDirect(paint)); updateSnapshotIgnoreForLayer(bounds, clip, true, PaintUtils::getAlphaDirect(paint)); if (!mState.currentlyIgnored()) { writableSnapshot()->resetTransform(-bounds.left, -bounds.top, 0.0f); Loading Loading @@ -615,7 +615,7 @@ bool OpenGLRenderer::createLayer(float left, float top, float right, float botto Rect clip; Rect bounds(left, top, right, bottom); calculateLayerBoundsAndClip(bounds, clip, fboLayer); updateSnapshotIgnoreForLayer(bounds, clip, fboLayer, getAlphaDirect(paint)); updateSnapshotIgnoreForLayer(bounds, clip, fboLayer, PaintUtils::getAlphaDirect(paint)); // Bail out if we won't draw in this snapshot if (mState.currentlyIgnored()) { Loading Loading @@ -1958,8 +1958,8 @@ void OpenGLRenderer::drawTextShadow(const SkPaint* paint, const char* text, FontRenderer& fontRenderer, int alpha, float x, float y) { mCaches.textureState().activateTexture(0); TextShadow textShadow; if (!getTextShadow(paint, &textShadow)) { PaintUtils::TextShadow textShadow; if (!PaintUtils::getTextShadow(paint, &textShadow)) { LOG_ALWAYS_FATAL("failed to query shadow attributes"); } Loading Loading @@ -1987,8 +1987,10 @@ void OpenGLRenderer::drawTextShadow(const SkPaint* paint, const char* text, renderGlop(glop); } // TODO: remove this, once mState.currentlyIgnored captures snapshot alpha bool OpenGLRenderer::canSkipText(const SkPaint* paint) const { float alpha = (hasTextShadow(paint) ? 1.0f : paint->getAlpha()) * currentSnapshot()->alpha; float alpha = (PaintUtils::hasTextShadow(paint) ? 1.0f : paint->getAlpha()) * currentSnapshot()->alpha; return MathUtils::isZero(alpha) && PaintUtils::getXfermode(paint->getXfermode()) == SkXfermode::kSrcOver_Mode; } Loading Loading @@ -2017,11 +2019,10 @@ void OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count, FontRenderer& fontRenderer = mCaches.fontRenderer.getFontRenderer(); fontRenderer.setFont(paint, SkMatrix::I()); int alpha; SkXfermode::Mode mode; getAlphaAndMode(paint, &alpha, &mode); int alpha = PaintUtils::getAlphaDirect(paint) * currentSnapshot()->alpha; SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(paint); if (CC_UNLIKELY(hasTextShadow(paint))) { if (CC_UNLIKELY(PaintUtils::hasTextShadow(paint))) { drawTextShadow(paint, text, bytesCount, count, positions, fontRenderer, alpha, 0.0f, 0.0f); } Loading Loading @@ -2162,13 +2163,12 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, float y = floorf(y + transform.getTranslateY() + 0.5f); } int alpha; SkXfermode::Mode mode; getAlphaAndMode(paint, &alpha, &mode); int alpha = PaintUtils::getAlphaDirect(paint) * currentSnapshot()->alpha; SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(paint); FontRenderer& fontRenderer = mCaches.fontRenderer.getFontRenderer(); if (CC_UNLIKELY(hasTextShadow(paint))) { if (CC_UNLIKELY(PaintUtils::hasTextShadow(paint))) { fontRenderer.setFont(paint, SkMatrix::I()); drawTextShadow(paint, text, bytesCount, count, positions, fontRenderer, alpha, oldX, oldY); Loading Loading @@ -2238,9 +2238,8 @@ void OpenGLRenderer::drawTextOnPath(const char* text, int bytesCount, int count, fontRenderer.setFont(paint, SkMatrix::I()); fontRenderer.setTextureFiltering(true); int alpha; SkXfermode::Mode mode; getAlphaAndMode(paint, &alpha, &mode); int alpha = PaintUtils::getAlphaDirect(paint) * currentSnapshot()->alpha; SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(paint); TextDrawFunctor functor(this, 0.0f, 0.0f, false, alpha, mode, paint); const Rect* clip = &writableSnapshot()->getLocalClip(); Loading Loading @@ -2530,12 +2529,6 @@ void OpenGLRenderer::drawColorRect(float left, float top, float right, float bot renderGlop(glop); } void OpenGLRenderer::getAlphaAndMode(const SkPaint* paint, int* alpha, SkXfermode::Mode* mode) const { getAlphaAndModeDirect(paint, alpha, mode); *alpha *= currentSnapshot()->alpha; } float OpenGLRenderer::getLayerAlpha(const Layer* layer) const { return (layer->getAlpha() / 255.0f) * currentSnapshot()->alpha; } Loading