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

Commit af59e0e3 authored by Craig Mautner's avatar Craig Mautner Committed by Android Git Automerger
Browse files

am 7de53949: Merge "Add features to DisplayManager." into jb-mr1-dev

* commit '7de53949':
  Add features to DisplayManager.
parents 7ea016ff 7de53949
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -469,6 +469,8 @@ public class Surface implements Parcelable {
    public native   void setFlags(int flags, int mask);
    /** @hide */
    public native   void setWindowCrop(Rect crop);
    /** @hide */
    public native   void setDisplayId(int displayId);


   
+9 −0
Original line number Diff line number Diff line
@@ -717,6 +717,14 @@ static void Surface_setWindowCrop(JNIEnv* env, jobject thiz, jobject crop)
    }
}

static void Surface_setDisplayId(JNIEnv* env, jobject thiz, jint displayId)
{
    const sp<SurfaceControl>& surface(getSurfaceControl(env, thiz));
    if (surface == 0) return;

    // TODO(mathias): Everything.
}

// ----------------------------------------------------------------------------

static void Surface_copyFrom(
@@ -855,6 +863,7 @@ static JNINativeMethod gSurfaceMethods[] = {
    {"writeToParcel",       "(Landroid/os/Parcel;I)V", (void*)Surface_writeToParcel },
    {"isConsumerRunningBehind", "()Z", (void*)Surface_isConsumerRunningBehind },
    {"setWindowCrop",       "(Landroid/graphics/Rect;)V", (void*)Surface_setWindowCrop },
    {"setDisplayId",        "(I)V", (void*)Surface_setDisplayId },
};

void nativeClassInit(JNIEnv* env, jclass clazz)
+42 −3
Original line number Diff line number Diff line
@@ -62,6 +62,9 @@ public final class DisplayManagerService extends IDisplayManager.Stub {
    /** All the DisplayInfos in the system indexed by deviceId */
    private final SparseArray<DisplayInfo> mDisplayInfos = new SparseArray<DisplayInfo>();

    private final ArrayList<DisplayCallback> mCallbacks =
            new ArrayList<DisplayManagerService.DisplayCallback>();

    public DisplayManagerService() {
        mHeadless = SystemProperties.get(SYSTEM_HEADLESS).equals("1");
        registerDefaultDisplayAdapter();
@@ -131,8 +134,20 @@ public final class DisplayManagerService extends IDisplayManager.Stub {
     * @param adapter The wrapper for information associated with the physical display.
     */
    public void registerDisplayAdapter(DisplayAdapter adapter) {

        int displayId;
        DisplayCallback[] callbacks;

        synchronized (mLock) {
            int displayId = mDisplayIdSeq++;
            displayId = mDisplayIdSeq;
            do {
                // Find the next unused displayId. (Pretend like it might ever wrap around).
                mDisplayIdSeq++;
                if (mDisplayIdSeq < 0) {
                    mDisplayIdSeq = Display.DEFAULT_DISPLAY + 1;
                }
            } while (mDisplayInfos.get(mDisplayIdSeq) != null);

            adapter.setDisplayId(displayId);

            createDisplayInfoLocked(displayId, adapter);
@@ -142,6 +157,11 @@ public final class DisplayManagerService extends IDisplayManager.Stub {
            mLogicalToPhysicals.put(displayId, list);

            mDisplayAdapters.add(adapter);
            callbacks = mCallbacks.toArray(new DisplayCallback[mCallbacks.size()]);
        }

        for (int i = callbacks.length - 1; i >= 0; i--) {
            callbacks[i].displayAdded(displayId);
        }

        // TODO: Notify SurfaceFlinger of new addition.
@@ -188,7 +208,6 @@ public final class DisplayManagerService extends IDisplayManager.Stub {
                list = new ArrayList<DisplayAdapter>();
                mLogicalToPhysicals.put(displayId, list);
            }

            list.add(adapter);
            adapter.setDisplayId(displayId);
        }
@@ -219,6 +238,20 @@ public final class DisplayManagerService extends IDisplayManager.Stub {
        // TODO: Notify SurfaceFlinger of removal.
    }

    public void registerDisplayCallback(final DisplayCallback callback) {
        synchronized (mLock) {
            if (!mCallbacks.contains(callback)) {
                mCallbacks.add(callback);
            }
        }
    }

    public void unregisterDisplayCallback(final DisplayCallback callback) {
        synchronized (mLock) {
            mCallbacks.remove(callback);
        }
    }

    /**
     * Create a new logical DisplayInfo and fill it in with information from the physical display.
     * @param displayId The logical identifier.
@@ -288,11 +321,17 @@ public final class DisplayManagerService extends IDisplayManager.Stub {

        DisplayDeviceInfo info = new DisplayDeviceInfo();
        for (DisplayAdapter adapter : mDisplayAdapters) {
            pw.println("Display for adapter " + adapter.getName());
            pw.println("Display for adapter " + adapter.getName()
                + " assigned to Display " + adapter.getDisplayId());
            DisplayDevice device = adapter.getDisplayDevice();
            pw.print("  ");
            device.getInfo(info);
            pw.println(info);
        }
    }

    public interface DisplayCallback {
        public void displayAdded(int displayId);
        public void displayRemoved(int displayId);
    }
}
+10 −1
Original line number Diff line number Diff line
@@ -474,6 +474,7 @@ class WindowStateAnimator {
        private final Point mSize = new Point();
        private final Rect mWindowCrop = new Rect();
        private boolean mShown = false;
        private int mDisplayId;
        private String mName = "Not named";

        public SurfaceTrace(SurfaceSession s,
@@ -481,6 +482,7 @@ class WindowStateAnimator {
                       OutOfResourcesException {
            super(s, pid, displayId, w, h, format, flags);
            mSize.set(w, h);
            mDisplayId = displayId;
            Slog.v(SURFACE_TAG, "ctor: " + this + ". Called by "
                    + Debug.getCallers(3));
        }
@@ -547,6 +549,13 @@ class WindowStateAnimator {
                    + Debug.getCallers(3));
        }

        @Override
        public void setDisplayId(int displayId) {
            super.setDisplayId(displayId);
            mDisplayId = displayId;
            Slog.v(SURFACE_TAG, "setDisplayId: " + this + ". Called by " + Debug.getCallers(3));
        }

        @Override
        public void hide() {
            super.hide();
@@ -588,7 +597,7 @@ class WindowStateAnimator {
        @Override
        public String toString() {
            return "Surface " + Integer.toHexString(System.identityHashCode(this)) + " "
                    + mName + ": shown=" + mShown + " layer=" + mLayer
                    + mName + " (" + mDisplayId + "): shown=" + mShown + " layer=" + mLayer
                    + " alpha=" + mSurfaceTraceAlpha + " " + mPosition.x + "," + mPosition.y
                    + " " + mSize.x + "x" + mSize.y
                    + " crop=" + mWindowCrop.toShortString();