diff options
| -rw-r--r-- | core/java/android/view/ViewDebug.java | 32 | ||||
| -rw-r--r-- | services/java/com/android/server/WindowManagerService.java | 15 |
2 files changed, 32 insertions, 15 deletions
diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java index 402443c..7b6991f 100644 --- a/core/java/android/view/ViewDebug.java +++ b/core/java/android/view/ViewDebug.java @@ -1138,22 +1138,24 @@ public class ViewDebug { final View captureView = findView(root, parameter); Bitmap b = performViewCapture(captureView, false); - - if (b != null) { - BufferedOutputStream out = null; - try { - out = new BufferedOutputStream(clientStream, 32 * 1024); - b.compress(Bitmap.CompressFormat.PNG, 100, out); - out.flush(); - } finally { - if (out != null) { - out.close(); - } - b.recycle(); - } - } else { + + if (b == null) { Log.w("View", "Failed to create capture bitmap!"); - clientStream.close(); + // Send an empty one so that it doesn't get stuck waiting for + // something. + b = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); + } + + BufferedOutputStream out = null; + try { + out = new BufferedOutputStream(clientStream, 32 * 1024); + b.compress(Bitmap.CompressFormat.PNG, 100, out); + out.flush(); + } finally { + if (out != null) { + out.close(); + } + b.recycle(); } } diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java index 421d1c4..9b9d950 100644 --- a/services/java/com/android/server/WindowManagerService.java +++ b/services/java/com/android/server/WindowManagerService.java @@ -4808,6 +4808,8 @@ public class WindowManagerService extends IWindowManager.Stub Parcel data = null; Parcel reply = null; + BufferedWriter out = null; + // Any uncaught exception will crash the system process try { // Find the hashcode of the window @@ -4845,6 +4847,12 @@ public class WindowManagerService extends IWindowManager.Stub reply.readException(); + if (!client.isOutputShutdown()) { + out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream())); + out.write("DONE\n"); + out.flush(); + } + } catch (Exception e) { Slog.w(TAG, "Could not send command " + command + " with parameters " + parameters, e); success = false; @@ -4855,6 +4863,13 @@ public class WindowManagerService extends IWindowManager.Stub if (reply != null) { reply.recycle(); } + if (out != null) { + try { + out.close(); + } catch (IOException e) { + + } + } } return success; |
