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

Commit 969e543b authored by Chet Haase's avatar Chet Haase Committed by Android (Google) Code Review
Browse files

Merge "Make starting window hw-accelerated" into lmp-dev

parents 91b3566b 4f52b342
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -339,7 +339,8 @@ public abstract class HardwareRenderer {
     * @param attachInfo AttachInfo tied to the specified view.
     * @param callbacks Callbacks invoked when drawing happens.
     */
    abstract void draw(View view, View.AttachInfo attachInfo, HardwareDrawCallbacks callbacks);
    abstract void draw(View view, View.AttachInfo attachInfo, HardwareDrawCallbacks callbacks,
            boolean isStartingWindow);

    /**
     * Creates a new hardware layer. A hardware layer built by calling this
+12 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.view;

import android.graphics.Color;
import com.android.internal.R;

import android.content.Context;
@@ -267,7 +268,8 @@ public class ThreadedRenderer extends HardwareRenderer {
        view.mRecreateDisplayList = false;
    }

    private void updateRootDisplayList(View view, HardwareDrawCallbacks callbacks) {
    private void updateRootDisplayList(View view, HardwareDrawCallbacks callbacks,
            boolean isStartingWindow) {
        Trace.traceBegin(Trace.TRACE_TAG_VIEW, "getDisplayList");
        updateViewTreeDisplayList(view);

@@ -279,6 +281,12 @@ public class ThreadedRenderer extends HardwareRenderer {
                callbacks.onHardwarePreDraw(canvas);

                canvas.insertReorderBarrier();
                if (isStartingWindow) {
                    // Compensate for some situations in which a hw-accelerated surface
                    // will not be filled with anything by default; this is equivalent
                    // to the old behavior when the system process was not hw-accelerated
                    canvas.drawColor(Color.BLACK);
                }
                canvas.drawRenderNode(view.getDisplayList());
                canvas.insertInorderBarrier();

@@ -298,7 +306,8 @@ public class ThreadedRenderer extends HardwareRenderer {
    }

    @Override
    void draw(View view, AttachInfo attachInfo, HardwareDrawCallbacks callbacks) {
    void draw(View view, AttachInfo attachInfo, HardwareDrawCallbacks callbacks,
            boolean isStartingWindow) {
        attachInfo.mIgnoreDirtyState = true;
        long frameTimeNanos = mChoreographer.getFrameTimeNanos();
        attachInfo.mDrawingTime = frameTimeNanos / TimeUtils.NANOS_PER_MS;
@@ -308,7 +317,7 @@ public class ThreadedRenderer extends HardwareRenderer {
            recordDuration = System.nanoTime();
        }

        updateRootDisplayList(view, callbacks);
        updateRootDisplayList(view, callbacks, isStartingWindow);

        if (mProfilingEnabled) {
            recordDuration = System.nanoTime() - recordDuration;
+3 −9
Original line number Diff line number Diff line
@@ -711,17 +711,10 @@ public final class ViewRootImpl implements ViewParent,
            // can be used by code on the system process to escape that and enable
            // HW accelerated drawing.  (This is basically for the lock screen.)

            final boolean fakeHwAccelerated = (attrs.privateFlags &
                    WindowManager.LayoutParams.PRIVATE_FLAG_FAKE_HARDWARE_ACCELERATED) != 0;
            final boolean forceHwAccelerated = (attrs.privateFlags &
                    WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED) != 0;

            if (fakeHwAccelerated) {
                // This is exclusively for the preview windows the window manager
                // shows for launching applications, so they will look more like
                // the app being launched.
                mAttachInfo.mHardwareAccelerationRequested = true;
            } else if (!HardwareRenderer.sRendererDisabled
            if (!HardwareRenderer.sRendererDisabled
                    || (HardwareRenderer.sSystemRendererDisabled && forceHwAccelerated)) {
                if (mAttachInfo.mHardwareRenderer != null) {
                    mAttachInfo.mHardwareRenderer.destroy();
@@ -2486,7 +2479,8 @@ public final class ViewRootImpl implements ViewParent,
                dirty.setEmpty();

                mBlockResizeBuffer = false;
                mAttachInfo.mHardwareRenderer.draw(mView, mAttachInfo, this);
                mAttachInfo.mHardwareRenderer.draw(mView, mAttachInfo, this,
                        params.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING);
            } else {
                // If we get here with a disabled & requested hardware renderer, something went
                // wrong (an invalidate posted right before we destroyed the hardware surface
+0 −20
Original line number Diff line number Diff line
@@ -1023,26 +1023,6 @@ public interface WindowManager extends ViewManager {
        }, formatToHexString = true)
        public int flags;

        /**
         * If the window has requested hardware acceleration, but this is not
         * allowed in the process it is in, then still render it as if it is
         * hardware accelerated.  This is used for the starting preview windows
         * in the system process, which don't need to have the overhead of
         * hardware acceleration (they are just a static rendering), but should
         * be rendered as such to match the actual window of the app even if it
         * is hardware accelerated.
         * Even if the window isn't hardware accelerated, still do its rendering
         * as if it was.
         * Like {@link #FLAG_HARDWARE_ACCELERATED} except for trusted system windows
         * that need hardware acceleration (e.g. LockScreen), where hardware acceleration
         * is generally disabled. This flag must be specified in addition to 
         * {@link #FLAG_HARDWARE_ACCELERATED} to enable hardware acceleration for system
         * windows.
         * 
         * @hide
         */
        public static final int PRIVATE_FLAG_FAKE_HARDWARE_ACCELERATED = 0x00000001;

        /**
         * In the system process, we globally do not use hardware acceleration
         * because there are many threads doing UI there and they conflict.
+0 −2
Original line number Diff line number Diff line
@@ -1826,8 +1826,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            params.packageName = packageName;
            params.windowAnimations = win.getWindowStyle().getResourceId(
                    com.android.internal.R.styleable.Window_windowAnimationStyle, 0);
            params.privateFlags |=
                    WindowManager.LayoutParams.PRIVATE_FLAG_FAKE_HARDWARE_ACCELERATED;
            params.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;

            if (!compatInfo.supportsScreen()) {