Search in sources :

Example 21 with TransferPipe

use of com.android.internal.os.TransferPipe in project android_frameworks_base by DirtyUnicorns.

the class ActivityStackSupervisor method dumpHistoryList.

static boolean dumpHistoryList(FileDescriptor fd, PrintWriter pw, List<ActivityRecord> list, String prefix, String label, boolean complete, boolean brief, boolean client, String dumpPackage, boolean needNL, String header1, String header2) {
    TaskRecord lastTask = null;
    String innerPrefix = null;
    String[] args = null;
    boolean printed = false;
    for (int i = list.size() - 1; i >= 0; i--) {
        final ActivityRecord r = list.get(i);
        if (dumpPackage != null && !dumpPackage.equals(r.packageName)) {
            continue;
        }
        if (innerPrefix == null) {
            innerPrefix = prefix + "      ";
            args = new String[0];
        }
        printed = true;
        final boolean full = !brief && (complete || !r.isInHistory());
        if (needNL) {
            pw.println("");
            needNL = false;
        }
        if (header1 != null) {
            pw.println(header1);
            header1 = null;
        }
        if (header2 != null) {
            pw.println(header2);
            header2 = null;
        }
        if (lastTask != r.task) {
            lastTask = r.task;
            pw.print(prefix);
            pw.print(full ? "* " : "  ");
            pw.println(lastTask);
            if (full) {
                lastTask.dump(pw, prefix + "  ");
            } else if (complete) {
                // Complete + brief == give a summary.  Isn't that obvious?!?
                if (lastTask.intent != null) {
                    pw.print(prefix);
                    pw.print("  ");
                    pw.println(lastTask.intent.toInsecureStringWithClip());
                }
            }
        }
        pw.print(prefix);
        pw.print(full ? "  * " : "    ");
        pw.print(label);
        pw.print(" #");
        pw.print(i);
        pw.print(": ");
        pw.println(r);
        if (full) {
            r.dump(pw, innerPrefix);
        } else if (complete) {
            // Complete + brief == give a summary.  Isn't that obvious?!?
            pw.print(innerPrefix);
            pw.println(r.intent.toInsecureString());
            if (r.app != null) {
                pw.print(innerPrefix);
                pw.println(r.app);
            }
        }
        if (client && r.app != null && r.app.thread != null) {
            // flush anything that is already in the PrintWriter since the thread is going
            // to write to the file descriptor directly
            pw.flush();
            try {
                TransferPipe tp = new TransferPipe();
                try {
                    r.app.thread.dumpActivity(tp.getWriteFd().getFileDescriptor(), r.appToken, innerPrefix, args);
                    // Short timeout, since blocking here can
                    // deadlock with the application.
                    tp.go(fd, 2000);
                } finally {
                    tp.kill();
                }
            } catch (IOException e) {
                pw.println(innerPrefix + "Failure while dumping the activity: " + e);
            } catch (RemoteException e) {
                pw.println(innerPrefix + "Got a RemoteException while dumping the activity");
            }
            needNL = true;
        }
    }
    return printed;
}
Also used : IOException(java.io.IOException) RemoteException(android.os.RemoteException) TransferPipe(com.android.internal.os.TransferPipe)

Example 22 with TransferPipe

use of com.android.internal.os.TransferPipe in project android_frameworks_base by AOSPA.

the class ProviderMap method dumpProvider.

/**
     * Invokes IApplicationThread.dumpProvider() on the thread of the specified provider if
     * there is a thread associated with the provider.
     */
private void dumpProvider(String prefix, FileDescriptor fd, PrintWriter pw, final ContentProviderRecord r, String[] args, boolean dumpAll) {
    String innerPrefix = prefix + "  ";
    synchronized (mAm) {
        pw.print(prefix);
        pw.print("PROVIDER ");
        pw.print(r);
        pw.print(" pid=");
        if (r.proc != null)
            pw.println(r.proc.pid);
        else
            pw.println("(not running)");
        if (dumpAll) {
            r.dump(pw, innerPrefix, true);
        }
    }
    if (r.proc != null && r.proc.thread != null) {
        pw.println("    Client:");
        pw.flush();
        try {
            TransferPipe tp = new TransferPipe();
            try {
                r.proc.thread.dumpProvider(tp.getWriteFd().getFileDescriptor(), r.provider.asBinder(), args);
                tp.setBufferPrefix("      ");
                // Short timeout, since blocking here can
                // deadlock with the application.
                tp.go(fd, 2000);
            } finally {
                tp.kill();
            }
        } catch (IOException ex) {
            pw.println("      Failure while dumping the provider: " + ex);
        } catch (RemoteException ex) {
            pw.println("      Got a RemoteException while dumping the service");
        }
    }
}
Also used : IOException(java.io.IOException) RemoteException(android.os.RemoteException) TransferPipe(com.android.internal.os.TransferPipe)

Example 23 with TransferPipe

use of com.android.internal.os.TransferPipe in project android_frameworks_base by AOSPA.

the class ActivityManager method dumpService.

private static void dumpService(PrintWriter pw, FileDescriptor fd, String name, String[] args) {
    pw.print("DUMP OF SERVICE ");
    pw.print(name);
    pw.println(":");
    IBinder service = ServiceManager.checkService(name);
    if (service == null) {
        pw.println("  (Service not found)");
        return;
    }
    TransferPipe tp = null;
    try {
        pw.flush();
        tp = new TransferPipe();
        tp.setBufferPrefix("  ");
        service.dumpAsync(tp.getWriteFd().getFileDescriptor(), args);
        tp.go(fd, 10000);
    } catch (Throwable e) {
        if (tp != null) {
            tp.kill();
        }
        pw.println("Failure dumping service:");
        e.printStackTrace(pw);
    }
}
Also used : IBinder(android.os.IBinder) TransferPipe(com.android.internal.os.TransferPipe)

Example 24 with TransferPipe

use of com.android.internal.os.TransferPipe in project android_frameworks_base by AOSPA.

the class ActiveServices method dumpService.

/**
     * Invokes IApplicationThread.dumpService() on the thread of the specified service if
     * there is a thread associated with the service.
     */
private void dumpService(String prefix, FileDescriptor fd, PrintWriter pw, final ServiceRecord r, String[] args, boolean dumpAll) {
    String innerPrefix = prefix + "  ";
    synchronized (mAm) {
        pw.print(prefix);
        pw.print("SERVICE ");
        pw.print(r.shortName);
        pw.print(" ");
        pw.print(Integer.toHexString(System.identityHashCode(r)));
        pw.print(" pid=");
        if (r.app != null)
            pw.println(r.app.pid);
        else
            pw.println("(not running)");
        if (dumpAll) {
            r.dump(pw, innerPrefix);
        }
    }
    if (r.app != null && r.app.thread != null) {
        pw.print(prefix);
        pw.println("  Client:");
        pw.flush();
        try {
            TransferPipe tp = new TransferPipe();
            try {
                r.app.thread.dumpService(tp.getWriteFd().getFileDescriptor(), r, args);
                tp.setBufferPrefix(prefix + "    ");
                tp.go(fd);
            } finally {
                tp.kill();
            }
        } catch (IOException e) {
            pw.println(prefix + "    Failure while dumping the service: " + e);
        } catch (RemoteException e) {
            pw.println(prefix + "    Got a RemoteException while dumping the service");
        }
    }
}
Also used : IOException(java.io.IOException) RemoteException(android.os.RemoteException) TransferPipe(com.android.internal.os.TransferPipe)

Example 25 with TransferPipe

use of com.android.internal.os.TransferPipe in project android_frameworks_base by ResurrectionRemix.

the class ActiveServices method dumpService.

/**
     * Invokes IApplicationThread.dumpService() on the thread of the specified service if
     * there is a thread associated with the service.
     */
private void dumpService(String prefix, FileDescriptor fd, PrintWriter pw, final ServiceRecord r, String[] args, boolean dumpAll) {
    String innerPrefix = prefix + "  ";
    synchronized (mAm) {
        pw.print(prefix);
        pw.print("SERVICE ");
        pw.print(r.shortName);
        pw.print(" ");
        pw.print(Integer.toHexString(System.identityHashCode(r)));
        pw.print(" pid=");
        if (r.app != null)
            pw.println(r.app.pid);
        else
            pw.println("(not running)");
        if (dumpAll) {
            r.dump(pw, innerPrefix);
        }
    }
    if (r.app != null && r.app.thread != null) {
        pw.print(prefix);
        pw.println("  Client:");
        pw.flush();
        try {
            TransferPipe tp = new TransferPipe();
            try {
                r.app.thread.dumpService(tp.getWriteFd().getFileDescriptor(), r, args);
                tp.setBufferPrefix(prefix + "    ");
                tp.go(fd);
            } finally {
                tp.kill();
            }
        } catch (IOException e) {
            pw.println(prefix + "    Failure while dumping the service: " + e);
        } catch (RemoteException e) {
            pw.println(prefix + "    Got a RemoteException while dumping the service");
        }
    }
}
Also used : IOException(java.io.IOException) RemoteException(android.os.RemoteException) TransferPipe(com.android.internal.os.TransferPipe)

Aggregations

TransferPipe (com.android.internal.os.TransferPipe)28 RemoteException (android.os.RemoteException)23 IOException (java.io.IOException)23 IBinder (android.os.IBinder)5 Point (android.graphics.Point)4 FastPrintWriter (com.android.internal.util.FastPrintWriter)2 FileOutputStream (java.io.FileOutputStream)2 PrintWriter (java.io.PrintWriter)2