Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee37ab8d authored by Xavier Ducrohet's avatar Xavier Ducrohet Committed by Android (Google) Code Review
Browse files

Merge "LayoutLib: properly erase the bitmap when rendering a new session." into honeycomb

parents 93257271 5a82d8c5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -304,7 +304,7 @@ public final class Bridge extends com.android.ide.common.rendering.api.Bridge {
                if (lastResult.isSuccess()) {
                    lastResult = scene.inflate();
                    if (lastResult.isSuccess()) {
                        lastResult = scene.render();
                        lastResult = scene.render(true /*freshRender*/);
                    }
                }
            } finally {
+1 −1
Original line number Diff line number Diff line
@@ -108,7 +108,7 @@ public class BridgeRenderSession extends RenderSession {
            Bridge.prepareThread();
            mLastResult = mSession.acquire(timeout);
            if (mLastResult.isSuccess()) {
                mLastResult = mSession.render();
                mLastResult = mSession.render(false /*freshRender*/);
            }
        } finally {
            mSession.release();
+1 −1
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ public abstract class AnimationThread extends Thread {
                    }

                    bundle.mTarget.handleMessage(bundle.mMessage);
                    if (mSession.render().isSuccess()) {
                    if (mSession.render(false /*freshRender*/).isSuccess()) {
                        mListener.onNewFrame(session);
                    }
                } finally {
+23 −5
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ import android.widget.TabHost;
import android.widget.TabWidget;
import android.widget.TabHost.TabSpec;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
@@ -385,13 +386,17 @@ public class RenderSessionImpl extends FrameworkResourceIdProvider {
     * <p>
     * {@link #acquire(long)} must have been called before this.
     *
     * @param freshRender whether the render is a new one and should erase the existing bitmap (in
     *      the case where bitmaps are reused). This is typically needed when not playing
     *      animations.)
     *
     * @throws IllegalStateException if the current context is different than the one owned by
     *      the scene, or if {@link #acquire(long)} was not called.
     *
     * @see SceneParams#getRenderingMode()
     * @see LayoutScene#render(long)
     */
    public Result render() {
    public Result render(boolean freshRender) {
        checkLock();

        try {
@@ -450,6 +455,7 @@ public class RenderSessionImpl extends FrameworkResourceIdProvider {

            // draw the views
            // create the BufferedImage into which the layout will be rendered.
            boolean newImage = false;
            if (newRenderSize || mCanvas == null) {
                if (mParams.getImageFactory() != null) {
                    mImage = mParams.getImageFactory().getImage(mMeasuredScreenWidth,
@@ -457,11 +463,15 @@ public class RenderSessionImpl extends FrameworkResourceIdProvider {
                } else {
                    mImage = new BufferedImage(mMeasuredScreenWidth,
                            mMeasuredScreenHeight - mScreenOffset, BufferedImage.TYPE_INT_ARGB);
                    newImage = true;
                }

                if (mParams.isBgColorOverridden()) {
                    // since we override the content, it's the same as if it was a new image.
                    newImage = true;
                    Graphics2D gc = mImage.createGraphics();
                    gc.setColor(new Color(mParams.getOverrideBgColor(), true));
                    gc.setComposite(AlphaComposite.Src);
                    gc.fillRect(0, 0, mMeasuredScreenWidth, mMeasuredScreenHeight - mScreenOffset);
                    gc.dispose();
                }
@@ -476,6 +486,14 @@ public class RenderSessionImpl extends FrameworkResourceIdProvider {
                mCanvas.setDensity(mParams.getDensity());
            }

            if (freshRender && newImage == false) {
                Graphics2D gc = mImage.createGraphics();
                gc.setColor(new Color(0x00000000, true));
                gc.setComposite(AlphaComposite.Src);
                gc.fillRect(0, 0, mMeasuredScreenWidth, mMeasuredScreenHeight - mScreenOffset);
                gc.dispose();
            }

            mViewRoot.draw(mCanvas);

            mViewInfoList = visitAllChildren((ViewGroup)mViewRoot, mContext);
@@ -600,7 +618,7 @@ public class RenderSessionImpl extends FrameworkResourceIdProvider {
            return result;
        }

        result = render();
        result = render(false /*freshRender*/);
        if (result.isSuccess()) {
            result = result.getCopyWithData(child);
        }
@@ -678,7 +696,7 @@ public class RenderSessionImpl extends FrameworkResourceIdProvider {
                        }

                        try {
                            result = render();
                            result = render(false /*freshRender*/);
                            if (result.isSuccess()) {
                                listener.onNewFrame(RenderSessionImpl.this.getSession());
                            }
@@ -734,7 +752,7 @@ public class RenderSessionImpl extends FrameworkResourceIdProvider {
            return result;
        }

        result = render();
        result = render(false /*freshRender*/);
        if (layoutParams != null && result.isSuccess()) {
            result = result.getCopyWithData(layoutParams);
        }
@@ -866,7 +884,7 @@ public class RenderSessionImpl extends FrameworkResourceIdProvider {
            return result;
        }

        return render();
        return render(false /*freshRender*/);
    }

    /**