Merge "Call setSize to sync Surface to SurfaceFlinger. DO NOT MERGE" into jb-mr1.1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
203f69f099
@ -225,6 +225,9 @@ public class Surface implements Parcelable {
|
|||||||
// non compatibility mode.
|
// non compatibility mode.
|
||||||
private Matrix mCompatibleMatrix;
|
private Matrix mCompatibleMatrix;
|
||||||
|
|
||||||
|
private int mWidth;
|
||||||
|
private int mHeight;
|
||||||
|
|
||||||
private native void nativeCreate(SurfaceSession session, String name,
|
private native void nativeCreate(SurfaceSession session, String name,
|
||||||
int w, int h, int format, int flags)
|
int w, int h, int format, int flags)
|
||||||
throws OutOfResourcesException;
|
throws OutOfResourcesException;
|
||||||
@ -330,6 +333,8 @@ public class Surface implements Parcelable {
|
|||||||
checkHeadless();
|
checkHeadless();
|
||||||
|
|
||||||
mName = name;
|
mName = name;
|
||||||
|
mWidth = w;
|
||||||
|
mHeight = h;
|
||||||
nativeCreate(session, name, w, h, format, flags);
|
nativeCreate(session, name, w, h, format, flags);
|
||||||
|
|
||||||
mCloseGuard.open("release");
|
mCloseGuard.open("release");
|
||||||
@ -538,7 +543,7 @@ public class Surface implements Parcelable {
|
|||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
public void setPosition(int x, int y) {
|
public void setPosition(int x, int y) {
|
||||||
nativeSetPosition((float)x, (float)y);
|
nativeSetPosition(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@ -548,9 +553,21 @@ public class Surface implements Parcelable {
|
|||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
public void setSize(int w, int h) {
|
public void setSize(int w, int h) {
|
||||||
|
mWidth = w;
|
||||||
|
mHeight = h;
|
||||||
nativeSetSize(w, h);
|
nativeSetSize(w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public int getWidth() {
|
||||||
|
return mWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
public int getHeight() {
|
||||||
|
return mHeight;
|
||||||
|
}
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
public void hide() {
|
public void hide() {
|
||||||
nativeSetFlags(SURFACE_HIDDEN, SURFACE_HIDDEN);
|
nativeSetFlags(SURFACE_HIDDEN, SURFACE_HIDDEN);
|
||||||
|
@ -12327,7 +12327,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
|||||||
}
|
}
|
||||||
newConfig.seq = mConfigurationSeq;
|
newConfig.seq = mConfigurationSeq;
|
||||||
mConfiguration = newConfig;
|
mConfiguration = newConfig;
|
||||||
Slog.i(TAG, "Config changed: " + newConfig);
|
Slog.i(TAG, "Config changes=" + Integer.toHexString(changes) + " " + newConfig);
|
||||||
|
|
||||||
final Configuration configCopy = new Configuration(mConfiguration);
|
final Configuration configCopy = new Configuration(mConfiguration);
|
||||||
|
|
||||||
|
@ -5800,6 +5800,8 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
// Figure out the part of the screen that is actually the app.
|
// Figure out the part of the screen that is actually the app.
|
||||||
boolean including = false;
|
boolean including = false;
|
||||||
final WindowList windows = displayContent.getWindowList();
|
final WindowList windows = displayContent.getWindowList();
|
||||||
|
try {
|
||||||
|
Surface.openTransaction();
|
||||||
for (int i = windows.size() - 1; i >= 0; i--) {
|
for (int i = windows.size() - 1; i >= 0; i--) {
|
||||||
WindowState ws = windows.get(i);
|
WindowState ws = windows.get(i);
|
||||||
if (!ws.mHasSurface) {
|
if (!ws.mHasSurface) {
|
||||||
@ -5828,8 +5830,17 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
// window.
|
// window.
|
||||||
including = !ws.mIsImWindow && !ws.isFullscreen(dw, dh);
|
including = !ws.mIsImWindow && !ws.isFullscreen(dw, dh);
|
||||||
|
|
||||||
if (maxLayer < ws.mWinAnimator.mSurfaceLayer) {
|
final WindowStateAnimator winAnimator = ws.mWinAnimator;
|
||||||
maxLayer = ws.mWinAnimator.mSurfaceLayer;
|
|
||||||
|
// The setSize() method causes all previous Surface transactions to sync to
|
||||||
|
// the SurfaceFlinger. This will force any outstanding setLayer calls to be
|
||||||
|
// synced as well for screen capture. Without this we can get black bitmaps.
|
||||||
|
Surface surface = winAnimator.mSurface;
|
||||||
|
surface.setSize(surface.getWidth(), surface.getHeight());
|
||||||
|
|
||||||
|
|
||||||
|
if (maxLayer < winAnimator.mSurfaceLayer) {
|
||||||
|
maxLayer = winAnimator.mSurfaceLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't include wallpaper in bounds calculation
|
// Don't include wallpaper in bounds calculation
|
||||||
@ -5843,7 +5854,10 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
frame.union(left, top, right, bottom);
|
frame.union(left, top, right, bottom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} finally {
|
||||||
|
Surface.closeTransaction();
|
||||||
Binder.restoreCallingIdentity(ident);
|
Binder.restoreCallingIdentity(ident);
|
||||||
|
}
|
||||||
|
|
||||||
// Constrain frame to the screen size.
|
// Constrain frame to the screen size.
|
||||||
frame.intersect(0, 0, dw, dh);
|
frame.intersect(0, 0, dw, dh);
|
||||||
|
Reference in New Issue
Block a user