diff --git a/services/core/java/com/android/server/LogMteState.java b/services/core/java/com/android/server/LogMteState.java new file mode 100644 index 0000000000000..410dd8339b30d --- /dev/null +++ b/services/core/java/com/android/server/LogMteState.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2023 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server; + +import android.app.StatsManager; +import android.content.Context; +import android.util.StatsEvent; + +import com.android.internal.os.BackgroundThread; +import com.android.internal.os.Zygote; +import com.android.internal.util.FrameworkStatsLog; + +import java.util.List; + +public class LogMteState { + public static void register(Context context) { + context.getSystemService(StatsManager.class) + .setPullAtomCallback( + FrameworkStatsLog.MTE_STATE, + null, // use default PullAtomMetadata values + BackgroundThread.getExecutor(), + new StatsManager.StatsPullAtomCallback() { + @Override + public int onPullAtom(int atomTag, List data) { + if (atomTag != FrameworkStatsLog.MTE_STATE) { + throw new UnsupportedOperationException( + "Unknown tagId=" + atomTag); + } + data.add( + FrameworkStatsLog.buildStatsEvent( + FrameworkStatsLog.MTE_STATE, + Zygote.nativeSupportsMemoryTagging() + ? FrameworkStatsLog.MTE_STATE__STATE__ON + : FrameworkStatsLog.MTE_STATE__STATE__OFF)); + return StatsManager.PULL_SUCCESS; + } + }); + } +} diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 850b5b686efe0..edfe95efe7f97 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -2739,6 +2739,14 @@ public final class SystemServer implements Dumpable { } t.traceEnd(); + t.traceBegin("RegisterLogMteState"); + try { + LogMteState.register(context); + } catch (Throwable e) { + reportWtf("RegisterLogMteState", e); + } + t.traceEnd(); + // Emit any pending system_server WTFs synchronized (SystemService.class) { if (sPendingWtfs != null) {