Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99745f1d authored by Pablo Gamito's avatar Pablo Gamito Committed by Android (Google) Code Review
Browse files

Merge "Support command to enable logcat protologging in PerfettoProtoLogImpl" into main

parents eec4fd6a 3f73a1c1
Loading
Loading
Loading
Loading
+43 −34
Original line number Diff line number Diff line
@@ -466,40 +466,6 @@ public class PerfettoProtoLogImpl implements IProtoLog {
        return internMap.get(string);
    }

    /**
     * Responds to a shell command.
     */
    public int onShellCommand(ShellCommand shell) {
        PrintWriter pw = shell.getOutPrintWriter();
        String cmd = shell.getNextArg();
        if (cmd == null) {
            return unknownCommand(pw);
        }
        ArrayList<String> args = new ArrayList<>();
        String arg;
        while ((arg = shell.getNextArg()) != null) {
            args.add(arg);
        }
        final ILogger logger = (msg) -> logAndPrintln(pw, msg);
        String[] groups = args.toArray(new String[args.size()]);
        switch (cmd) {
            case "enable-text":
                return this.startLoggingToLogcat(groups, logger);
            case "disable-text":
                return this.stopLoggingToLogcat(groups, logger);
            default:
                return unknownCommand(pw);
        }
    }

    private int unknownCommand(PrintWriter pw) {
        pw.println("Unknown command");
        pw.println("Window manager logging options:");
        pw.println("  enable-text [group...]: Enable logcat logging for given groups");
        pw.println("  disable-text [group...]: Disable logcat logging for given groups");
        return -1;
    }

    /**
     * Returns {@code true} iff logging to proto is enabled.
     */
@@ -559,6 +525,49 @@ public class PerfettoProtoLogImpl implements IProtoLog {
        return 0;
    }

    /**
     * Responds to a shell command.
     */
    public int onShellCommand(ShellCommand shell) {
        PrintWriter pw = shell.getOutPrintWriter();
        String cmd = shell.getNextArg();
        if (cmd == null) {
            return unknownCommand(pw);
        }
        ArrayList<String> args = new ArrayList<>();
        String arg;
        while ((arg = shell.getNextArg()) != null) {
            args.add(arg);
        }
        final ILogger logger = (msg) -> logAndPrintln(pw, msg);
        String[] groups = args.toArray(new String[0]);
        switch (cmd) {
            case "start", "stop" -> {
                pw.println("Command not supported. "
                        + "Please start and stop ProtoLog tracing with Perfetto.");
                return -1;
            }
            case "enable-text" -> {
                mViewerConfigReader.loadViewerConfig(logger);
                return setTextLogging(true, logger, groups);
            }
            case "disable-text" -> {
                return setTextLogging(false, logger, groups);
            }
            default -> {
                return unknownCommand(pw);
            }
        }
    }

    private int unknownCommand(PrintWriter pw) {
        pw.println("Unknown command");
        pw.println("Window manager logging options:");
        pw.println("  enable-text [group...]: Enable logcat logging for given groups");
        pw.println("  disable-text [group...]: Disable logcat logging for given groups");
        return -1;
    }

    static void logAndPrintln(@Nullable PrintWriter pw, String msg) {
        Slog.i(LOG_TAG, msg);
        if (pw != null) {
+9 −4
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import android.view.ViewDebug;

import com.android.internal.os.ByteTransferPipe;
import com.android.internal.protolog.LegacyProtoLogImpl;
import com.android.internal.protolog.PerfettoProtoLogImpl;
import com.android.internal.protolog.common.IProtoLog;
import com.android.internal.protolog.common.ProtoLog;
import com.android.server.IoThread;
@@ -111,8 +112,13 @@ public class WindowManagerShellCommand extends ShellCommand {
                case "logging":
                    IProtoLog instance = ProtoLog.getSingleInstance();
                    int result = 0;
                    if (instance instanceof LegacyProtoLogImpl
                            || instance instanceof PerfettoProtoLogImpl) {
                        if (instance instanceof LegacyProtoLogImpl) {
                            result = ((LegacyProtoLogImpl) instance).onShellCommand(this);
                        } else {
                            result = ((PerfettoProtoLogImpl) instance).onShellCommand(this);
                        }
                        if (result != 0) {
                            pw.println("Not handled, please use "
                                    + "`adb shell dumpsys activity service SystemUIService "
@@ -120,8 +126,7 @@ public class WindowManagerShellCommand extends ShellCommand {
                        }
                    } else {
                        result = -1;
                        pw.println("Command not supported. "
                                + "Only supported when using legacy ProtoLog.");
                        pw.println("ProtoLog impl doesn't support handling commands");
                    }
                    return result;
                case "user-rotation":