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

Commit 7e3d6c98 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

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

parents 2b5f91fe 61375a8b
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -339,8 +339,7 @@ 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,
            boolean isStartingWindow);
    abstract void draw(View view, View.AttachInfo attachInfo, HardwareDrawCallbacks callbacks);

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

package android.view;

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

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

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

@@ -281,12 +279,6 @@ 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();

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

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

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

        if (mProfilingEnabled) {
            recordDuration = System.nanoTime() - recordDuration;
+9 −3
Original line number Diff line number Diff line
@@ -711,10 +711,17 @@ 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 (!HardwareRenderer.sRendererDisabled
            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
                    || (HardwareRenderer.sSystemRendererDisabled && forceHwAccelerated)) {
                if (mAttachInfo.mHardwareRenderer != null) {
                    mAttachInfo.mHardwareRenderer.destroy();
@@ -2479,8 +2486,7 @@ public final class ViewRootImpl implements ViewParent,
                dirty.setEmpty();

                mBlockResizeBuffer = false;
                mAttachInfo.mHardwareRenderer.draw(mView, mAttachInfo, this,
                        params.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING);
                mAttachInfo.mHardwareRenderer.draw(mView, mAttachInfo, this);
            } else {
                // If we get here with a disabled & requested hardware renderer, something went
                // wrong (an invalidate posted right before we destroyed the hardware surface
+20 −0
Original line number Diff line number Diff line
@@ -1023,6 +1023,26 @@ 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.
+2 −0
Original line number Diff line number Diff line
@@ -1827,6 +1827,8 @@ 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()) {