Merge "Move dump() to dumpAsync(), more oneway calls."
This commit is contained in:
committed by
Android (Google) Code Review
commit
c4f65e0da8
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.internal.os;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
@@ -32,13 +33,13 @@ import android.util.Slog;
|
||||
/**
|
||||
* Helper for transferring data through a pipe from a client app.
|
||||
*/
|
||||
public final class TransferPipe implements Runnable {
|
||||
public final class TransferPipe implements Runnable, Closeable {
|
||||
static final String TAG = "TransferPipe";
|
||||
static final boolean DEBUG = false;
|
||||
|
||||
static final long DEFAULT_TIMEOUT = 5000; // 5 seconds
|
||||
|
||||
final Thread mThread;;
|
||||
final Thread mThread;
|
||||
final ParcelFileDescriptor[] mFds;
|
||||
|
||||
FileDescriptor mOutFd;
|
||||
@@ -54,8 +55,13 @@ public final class TransferPipe implements Runnable {
|
||||
}
|
||||
|
||||
public TransferPipe() throws IOException {
|
||||
this(null);
|
||||
}
|
||||
|
||||
public TransferPipe(String bufferPrefix) throws IOException {
|
||||
mThread = new Thread(this, "TransferPipe");
|
||||
mFds = ParcelFileDescriptor.createPipe();
|
||||
mBufferPrefix = bufferPrefix;
|
||||
}
|
||||
|
||||
ParcelFileDescriptor getReadFd() {
|
||||
@@ -70,6 +76,11 @@ public final class TransferPipe implements Runnable {
|
||||
mBufferPrefix = prefix;
|
||||
}
|
||||
|
||||
public static void dumpAsync(IBinder binder, FileDescriptor out, String[] args)
|
||||
throws IOException, RemoteException {
|
||||
goDump(binder, out, args);
|
||||
}
|
||||
|
||||
static void go(Caller caller, IInterface iface, FileDescriptor out,
|
||||
String prefix, String[] args) throws IOException, RemoteException {
|
||||
go(caller, iface, out, prefix, args, DEFAULT_TIMEOUT);
|
||||
@@ -86,12 +97,9 @@ public final class TransferPipe implements Runnable {
|
||||
return;
|
||||
}
|
||||
|
||||
TransferPipe tp = new TransferPipe();
|
||||
try {
|
||||
try (TransferPipe tp = new TransferPipe()) {
|
||||
caller.go(iface, tp.getWriteFd().getFileDescriptor(), prefix, args);
|
||||
tp.go(out, timeout);
|
||||
} finally {
|
||||
tp.kill();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,12 +119,9 @@ public final class TransferPipe implements Runnable {
|
||||
return;
|
||||
}
|
||||
|
||||
TransferPipe tp = new TransferPipe();
|
||||
try {
|
||||
try (TransferPipe tp = new TransferPipe()) {
|
||||
binder.dumpAsync(tp.getWriteFd().getFileDescriptor(), args);
|
||||
tp.go(out, timeout);
|
||||
} finally {
|
||||
tp.kill();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,6 +178,11 @@ public final class TransferPipe implements Runnable {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
kill();
|
||||
}
|
||||
|
||||
public void kill() {
|
||||
synchronized (this) {
|
||||
closeFd(0);
|
||||
|
||||
@@ -22,11 +22,11 @@ import android.hardware.location.IFusedLocationHardware;
|
||||
* Interface definition for Location providers that require FLP services.
|
||||
* @hide
|
||||
*/
|
||||
interface IFusedProvider {
|
||||
oneway interface IFusedProvider {
|
||||
/**
|
||||
* Provides access to a FusedLocationHardware instance needed for the provider to work.
|
||||
*
|
||||
* @param instance The FusedLocationHardware available for the provider to use.
|
||||
*/
|
||||
void onFusedLocationHardwareChange(in IFusedLocationHardware instance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ import com.android.internal.inputmethod.InputMethodUtils;
|
||||
import com.android.internal.inputmethod.InputMethodUtils.InputMethodSettings;
|
||||
import com.android.internal.os.HandlerCaller;
|
||||
import com.android.internal.os.SomeArgs;
|
||||
import com.android.internal.os.TransferPipe;
|
||||
import com.android.internal.util.FastXmlSerializer;
|
||||
import com.android.internal.view.IInputContext;
|
||||
import com.android.internal.view.IInputMethod;
|
||||
@@ -4041,9 +4042,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
if (client != null) {
|
||||
pw.flush();
|
||||
try {
|
||||
client.client.asBinder().dump(fd, args);
|
||||
} catch (RemoteException e) {
|
||||
p.println("Input method client dead: " + e);
|
||||
TransferPipe.dumpAsync(client.client.asBinder(), fd, args);
|
||||
} catch (IOException | RemoteException e) {
|
||||
p.println("Failed to dump input method client: " + e);
|
||||
}
|
||||
} else {
|
||||
p.println("No input method client.");
|
||||
@@ -4057,9 +4058,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
p.println(" ");
|
||||
pw.flush();
|
||||
try {
|
||||
focusedWindowClient.client.asBinder().dump(fd, args);
|
||||
} catch (RemoteException e) {
|
||||
p.println("Input method client in focused window dead: " + e);
|
||||
TransferPipe.dumpAsync(focusedWindowClient.client.asBinder(), fd, args);
|
||||
} catch (IOException | RemoteException e) {
|
||||
p.println("Failed to dump input method client in focused window: " + e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4067,9 +4068,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
if (method != null) {
|
||||
pw.flush();
|
||||
try {
|
||||
method.asBinder().dump(fd, args);
|
||||
} catch (RemoteException e) {
|
||||
p.println("Input method service dead: " + e);
|
||||
TransferPipe.dumpAsync(method.asBinder(), fd, args);
|
||||
} catch (IOException | RemoteException e) {
|
||||
p.println("Failed to dump input method service: " + e);
|
||||
}
|
||||
} else {
|
||||
p.println("No input method service.");
|
||||
|
||||
@@ -42,8 +42,10 @@ import android.util.Log;
|
||||
import com.android.internal.R;
|
||||
import com.android.internal.annotations.GuardedBy;
|
||||
import com.android.internal.content.PackageMonitor;
|
||||
import com.android.internal.os.TransferPipe;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
@@ -418,12 +420,9 @@ public class NetworkScoreService extends INetworkScoreService.Stub {
|
||||
|
||||
for (INetworkScoreCache scoreCache : getScoreCaches()) {
|
||||
try {
|
||||
scoreCache.asBinder().dump(fd, args);
|
||||
} catch (RemoteException e) {
|
||||
writer.println("Unable to dump score cache");
|
||||
if (Log.isLoggable(TAG, Log.VERBOSE)) {
|
||||
Log.v(TAG, "Unable to dump score cache", e);
|
||||
}
|
||||
TransferPipe.dumpAsync(scoreCache.asBinder(), fd, args);
|
||||
} catch (IOException | RemoteException e) {
|
||||
writer.println("Failed to dump score cache: " + e);
|
||||
}
|
||||
}
|
||||
if (mServiceConnection != null) {
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.server.location;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
|
||||
import android.content.Context;
|
||||
@@ -30,6 +31,7 @@ import android.util.Log;
|
||||
import com.android.internal.location.ProviderProperties;
|
||||
import com.android.internal.location.ILocationProvider;
|
||||
import com.android.internal.location.ProviderRequest;
|
||||
import com.android.internal.os.TransferPipe;
|
||||
import com.android.server.LocationManagerService;
|
||||
import com.android.server.ServiceWatcher;
|
||||
|
||||
@@ -230,14 +232,9 @@ public class LocationProviderProxy implements LocationProviderInterface {
|
||||
pw.flush();
|
||||
|
||||
try {
|
||||
service.asBinder().dump(fd, args);
|
||||
} catch (RemoteException e) {
|
||||
pw.println("service down (RemoteException)");
|
||||
Log.w(TAG, e);
|
||||
} catch (Exception e) {
|
||||
pw.println("service down (Exception)");
|
||||
// never let remote service crash system server
|
||||
Log.e(TAG, "Exception from " + mServiceWatcher.getBestPackageName(), e);
|
||||
TransferPipe.dumpAsync(service.asBinder(), fd, args);
|
||||
} catch (IOException | RemoteException e) {
|
||||
pw.println("Failed to dump location provider: " + e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,10 @@ import android.os.SystemClock;
|
||||
import android.os.UserHandle;
|
||||
import android.util.TimedRemoteCaller;
|
||||
|
||||
import com.android.internal.os.TransferPipe;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -102,13 +105,11 @@ final class EphemeralResolverConnection {
|
||||
.append((mRemoteInstance != null) ? "true" : "false").println();
|
||||
|
||||
pw.flush();
|
||||
|
||||
try {
|
||||
getRemoteInstanceLazy().asBinder().dump(fd, new String[] { prefix });
|
||||
} catch (TimeoutException te) {
|
||||
/* ignore */
|
||||
} catch (RemoteException re) {
|
||||
/* ignore */
|
||||
TransferPipe.dumpAsync(getRemoteInstanceLazy().asBinder(), fd,
|
||||
new String[] { prefix });
|
||||
} catch (IOException | TimeoutException | RemoteException e) {
|
||||
pw.println("Failed to dump remote instance: " + e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,9 +43,12 @@ import android.printservice.PrintService;
|
||||
import android.util.Slog;
|
||||
import android.util.TimedRemoteCaller;
|
||||
|
||||
import com.android.internal.os.TransferPipe;
|
||||
|
||||
import libcore.io.IoUtils;
|
||||
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.List;
|
||||
@@ -572,13 +575,11 @@ final class RemotePrintSpooler {
|
||||
.append((mRemoteInstance != null) ? "true" : "false").println();
|
||||
|
||||
pw.flush();
|
||||
|
||||
try {
|
||||
getRemoteInstanceLazy().asBinder().dump(fd, new String[]{prefix});
|
||||
} catch (TimeoutException te) {
|
||||
/* ignore */
|
||||
} catch (RemoteException re) {
|
||||
/* ignore */
|
||||
TransferPipe.dumpAsync(getRemoteInstanceLazy().asBinder(), fd,
|
||||
new String[] { prefix });
|
||||
} catch (IOException | TimeoutException | RemoteException e) {
|
||||
pw.println("Failed to dump remote instance: " + e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user