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

* commit '7de53949bc89e1e79ed63d730beaa49f838038b6':
  Add features to DisplayManager.
This commit is contained in:
Craig Mautner
2012-08-03 08:28:00 -07:00
committed by Android Git Automerger
4 changed files with 63 additions and 4 deletions

View File

@@ -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);

View File

@@ -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)

View File

@@ -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);
}
}

View File

@@ -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();