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

Commit 6014caf1 authored by Hongwei Wang's avatar Hongwei Wang
Browse files

Move ProtoLog to shared place

Designed to work with both WM and WM-Shell
- source code is moved to com.android.internal.protolog, on contrast,
  com.android.internal.logging is mainly used for uieventlogger
- the protolog-lib is defined in frameworks/base/Android.bp, similar to
  uieventloggerlib as well
- to include protolog, reference what's in services/core/Android.bp

See also go/protolog-migration-s

Bug: 161561475
Test: atest ProtoLogImplTest \
            ProtoLogViewerConfigReaderTest \
            WmTests:ProtoLogIntegrationTest \
            LogDataTypeTest \
            protologtool-tests
Change-Id: I249a5675527d54778ac01529b4cb39fb09cb5d59
parent a1086706
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -1415,3 +1415,30 @@ filegroup {
    name: "framework-telephony-jarjar-rules",
    srcs: ["telephony/framework-telephony-jarjar-rules.txt"],
}

// protolog start
filegroup {
    name: "protolog-common-src",
    srcs: [
        "core/java/com/android/internal/protolog/common/**/*.java",
    ],
}

java_library {
    name: "protolog-lib",
    platform_apis: true,
    srcs: [
        "core/java/com/android/internal/protolog/ProtoLogImpl.java",
        "core/java/com/android/internal/protolog/ProtoLogViewerConfigReader.java",
        ":protolog-common-src",
    ],
}

java_library {
    name: "protolog-groups",
    srcs: [
        "core/java/com/android/internal/protolog/ProtoLogGroup.java",
        ":protolog-common-src",
    ],
}
// protolog end
+3 −15
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
@@ -14,11 +14,9 @@
 * limitations under the License.
 */

package com.android.server.wm;
package com.android.internal.protolog;

import com.android.internal.annotations.VisibleForTesting;
import com.android.server.protolog.common.IProtoLogGroup;
import com.android.server.protolog.common.ProtoLog;
import com.android.internal.protolog.common.IProtoLogGroup;

/**
 * Defines logging groups for ProtoLog.
@@ -118,16 +116,6 @@ public enum ProtoLogGroup implements IProtoLogGroup {
        this.mLogToLogcat = logToLogcat;
    }

    /**
     * Test function for automated integration tests. Can be also called manually from adb shell.
     */
    @VisibleForTesting
    public static void testProtoLog() {
        ProtoLog.e(ProtoLogGroup.TEST_GROUP,
                "Test completed successfully: %b %d %o %x %e %g %f %% %s.",
                true, 1, 2, 3, 0.4, 0.5, 0.6, "ok");
    }

    private static class Consts {
        private static final String TAG_WM = "WindowManager";

+19 −22
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
@@ -14,20 +14,20 @@
 * limitations under the License.
 */

package com.android.server.protolog;

import static com.android.server.protolog.ProtoLogFileProto.LOG;
import static com.android.server.protolog.ProtoLogFileProto.MAGIC_NUMBER;
import static com.android.server.protolog.ProtoLogFileProto.MAGIC_NUMBER_H;
import static com.android.server.protolog.ProtoLogFileProto.MAGIC_NUMBER_L;
import static com.android.server.protolog.ProtoLogFileProto.REAL_TIME_TO_ELAPSED_TIME_OFFSET_MILLIS;
import static com.android.server.protolog.ProtoLogFileProto.VERSION;
import static com.android.server.protolog.ProtoLogMessage.BOOLEAN_PARAMS;
import static com.android.server.protolog.ProtoLogMessage.DOUBLE_PARAMS;
import static com.android.server.protolog.ProtoLogMessage.ELAPSED_REALTIME_NANOS;
import static com.android.server.protolog.ProtoLogMessage.MESSAGE_HASH;
import static com.android.server.protolog.ProtoLogMessage.SINT64_PARAMS;
import static com.android.server.protolog.ProtoLogMessage.STR_PARAMS;
package com.android.internal.protolog;

import static com.android.internal.protolog.ProtoLogFileProto.LOG;
import static com.android.internal.protolog.ProtoLogFileProto.MAGIC_NUMBER;
import static com.android.internal.protolog.ProtoLogFileProto.MAGIC_NUMBER_H;
import static com.android.internal.protolog.ProtoLogFileProto.MAGIC_NUMBER_L;
import static com.android.internal.protolog.ProtoLogFileProto.REAL_TIME_TO_ELAPSED_TIME_OFFSET_MILLIS;
import static com.android.internal.protolog.ProtoLogFileProto.VERSION;
import static com.android.internal.protolog.ProtoLogMessage.BOOLEAN_PARAMS;
import static com.android.internal.protolog.ProtoLogMessage.DOUBLE_PARAMS;
import static com.android.internal.protolog.ProtoLogMessage.ELAPSED_REALTIME_NANOS;
import static com.android.internal.protolog.ProtoLogMessage.MESSAGE_HASH;
import static com.android.internal.protolog.ProtoLogMessage.SINT64_PARAMS;
import static com.android.internal.protolog.ProtoLogMessage.STR_PARAMS;

import android.annotation.Nullable;
import android.os.ShellCommand;
@@ -36,10 +36,9 @@ import android.util.Slog;
import android.util.proto.ProtoOutputStream;

import com.android.internal.annotations.VisibleForTesting;
import com.android.server.protolog.common.IProtoLogGroup;
import com.android.server.protolog.common.LogDataType;
import com.android.internal.protolog.common.IProtoLogGroup;
import com.android.internal.protolog.common.LogDataType;
import com.android.internal.util.TraceBuffer;
import com.android.server.wm.ProtoLogGroup;

import java.io.File;
import java.io.IOException;
@@ -62,7 +61,7 @@ public class ProtoLogImpl {
     * Must be invoked after every action that could change the result of {@link #isEnabled}, eg.
     * starting / stopping proto log, or enabling / disabling log groups.
     */
    static Runnable sCacheUpdater = () -> { };
    public static Runnable sCacheUpdater = () -> { };

    private static void addLogGroupEnum(IProtoLogGroup[] config) {
        for (IProtoLogGroup group : config) {
@@ -289,9 +288,7 @@ public class ProtoLogImpl {
        }
    }


    @VisibleForTesting
    ProtoLogImpl(File file, int bufferCapacity, ProtoLogViewerConfigReader viewerConfig) {
    public ProtoLogImpl(File file, int bufferCapacity, ProtoLogViewerConfigReader viewerConfig) {
        mLogFile = file;
        mBuffer = new TraceBuffer(bufferCapacity);
        mViewerConfig = viewerConfig;
+8 −9
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
@@ -14,9 +14,7 @@
 * limitations under the License.
 */

package com.android.server.protolog;

import static com.android.server.protolog.ProtoLogImpl.logAndPrintln;
package com.android.internal.protolog;

import org.json.JSONException;
import org.json.JSONObject;
@@ -80,16 +78,17 @@ public class ProtoLogViewerConfigReader {
                    // Not a messageHash - skip it
                }
            }
            logAndPrintln(pw, "Loaded " + mLogMessageMap.size() + " log definitions from "
                    + viewerConfigFilename);
            ProtoLogImpl.logAndPrintln(pw, "Loaded " + mLogMessageMap.size()
                    + " log definitions from " + viewerConfigFilename);
        } catch (FileNotFoundException e) {
            logAndPrintln(pw, "Unable to load log definitions: File "
            ProtoLogImpl.logAndPrintln(pw, "Unable to load log definitions: File "
                    + viewerConfigFilename + " not found." + e);
        } catch (IOException e) {
            logAndPrintln(pw, "Unable to load log definitions: IOException while reading "
            ProtoLogImpl.logAndPrintln(pw,
                    "Unable to load log definitions: IOException while reading "
                    + viewerConfigFilename + ". " + e);
        } catch (JSONException e) {
            logAndPrintln(pw,
            ProtoLogImpl.logAndPrintln(pw,
                    "Unable to load log definitions: JSON parsing exception while reading "
                            + viewerConfigFilename + ". " + e);
        }
+2 −2
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 The Android Open Source Project
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
 * limitations under the License.
 */

package com.android.server.protolog.common;
package com.android.internal.protolog.common;

/**
 * Error while converting a bitmask representing a list of LogDataTypes.
Loading