Loading core/java/android/view/Surface.java +2 −0 Original line number Diff line number Diff line Loading @@ -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); Loading core/jni/android_view_Surface.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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) Loading services/java/com/android/server/display/DisplayManagerService.java +42 −3 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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); Loading @@ -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. Loading Loading @@ -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); } Loading Loading @@ -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. Loading Loading @@ -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); } } services/java/com/android/server/wm/WindowStateAnimator.java +10 −1 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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)); } Loading Loading @@ -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(); Loading Loading @@ -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(); Loading Loading
core/java/android/view/Surface.java +2 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
core/jni/android_view_Surface.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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) Loading
services/java/com/android/server/display/DisplayManagerService.java +42 −3 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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); Loading @@ -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. Loading Loading @@ -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); } Loading Loading @@ -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. Loading Loading @@ -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); } }
services/java/com/android/server/wm/WindowStateAnimator.java +10 −1 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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)); } Loading Loading @@ -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(); Loading Loading @@ -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(); Loading