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

Commit 0e20bd8e authored by Diego Perez's avatar Diego Perez Committed by Android (Google) Code Review
Browse files

Merge changes I60c09f33,Ie0134c2b into lmp-mr1-dev

* changes:
  Add new parameter to the render method to allow forcing a measure pass.
  Avoid caching mImage on the main render loop and use clipping.
parents 263e6dfa 8ff8de2c
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -86,11 +86,14 @@ public class BridgeRenderSession extends RenderSession {
    }

    @Override
    public Result render(long timeout) {
    public Result render(long timeout, boolean forceMeasure) {
        try {
            Bridge.prepareThread();
            mLastResult = mSession.acquire(timeout);
            if (mLastResult.isSuccess()) {
                if (forceMeasure) {
                    mSession.invalidateRenderingSize();
                }
                mLastResult = mSession.render(false /*freshRender*/);
            }
        } finally {
+17 −2
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
@@ -615,8 +616,22 @@ public class GcSnapshot {
                return;
            }

            int width = layer.getImage().getWidth();
            int height = layer.getImage().getHeight();
            int width;
            int height;
            Rectangle clipBounds = originalGraphics.getClipBounds();
            if (clipBounds != null) {
                if (clipBounds.width == 0 || clipBounds.height == 0) {
                    // Clip is 0 so no need to paint anything.
                    return;
                }
                // If we have clipBounds available, use them as they will always be
                // smaller than the full layer size.
                width = clipBounds.width;
                height = clipBounds.height;
            } else {
                width = layer.getImage().getWidth();
                height = layer.getImage().getHeight();
            }

            // Create a temporary image to which the color filter will be applied.
            BufferedImage image = new BufferedImage(width, height,
+15 −4
Original line number Diff line number Diff line
@@ -554,7 +554,14 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
                // draw the views
                // create the BufferedImage into which the layout will be rendered.
                boolean newImage = false;
                if (newRenderSize || mCanvas == null) {

                // When disableBitmapCaching is true, we do not reuse mImage and
                // we create a new one in every render.
                // This is useful when mImage is just a wrapper of Graphics2D so
                // it doesn't get cached.
                boolean disableBitmapCaching = Boolean.TRUE.equals(params.getFlag(
                    RenderParamsFlags.FLAG_KEY_DISABLE_BITMAP_CACHING));
                if (newRenderSize || mCanvas == null || disableBitmapCaching) {
                    if (params.getImageFactory() != null) {
                        mImage = params.getImageFactory().getImage(
                                mMeasuredScreenWidth,
@@ -581,8 +588,12 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
                    Bitmap bitmap = Bitmap_Delegate.createBitmap(mImage,
                            true /*isMutable*/, hardwareConfig.getDensity());

                    if (mCanvas == null) {
                        // create a Canvas around the Android bitmap
                        mCanvas = new Canvas(bitmap);
                    } else {
                        mCanvas.setBitmap(bitmap);
                    }
                    mCanvas.setDensity(hardwareConfig.getDensity().getDpiValue());
                }

@@ -1631,7 +1642,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
        return null;
    }

    private void invalidateRenderingSize() {
    public void invalidateRenderingSize() {
        mMeasuredScreenWidth = mMeasuredScreenHeight = -1;
    }