summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kean Mariotti <keanmariotti@google.com> 2024-12-13 11:08:34 +0000
committer Kean Mariotti <keanmariotti@google.com> 2024-12-13 14:07:51 +0000
commit9f337098c8bf8d0f9de474618e53f1fee2200854 (patch)
treebbe267ceada243e33c2ca9ab2f24b053411d3c52
parent57724986052b8d2b8b5f6e96085348ee2cf7eb09 (diff)
system server: configure 4 MB perfetto shmem buffer
Increase Perfetto's shmem buffer from default size (256 KB) to 4 MB to avoid crashes (too long perfetto producer stalls) caused by shmem chunks exhaustion/contention. Bug: b/382369925 Flag: android.tracing.system_server_large_perfetto_shmem_buffer Test: presubmit Change-Id: I5b6ab40cb3987a7aed7bb09801f02bea3f3962a2
-rw-r--r--core/java/android/tracing/flags.aconfig8
-rw-r--r--services/java/com/android/server/SystemServer.java7
2 files changed, 15 insertions, 0 deletions
diff --git a/core/java/android/tracing/flags.aconfig b/core/java/android/tracing/flags.aconfig
index fb1bd1703ce6..6116d599baa0 100644
--- a/core/java/android/tracing/flags.aconfig
+++ b/core/java/android/tracing/flags.aconfig
@@ -70,3 +70,11 @@ flag {
is_fixed_read_only: true
bug: "352538294"
}
+
+flag {
+ name: "system_server_large_perfetto_shmem_buffer"
+ namespace: "windowing_tools"
+ description: "Large perfetto shmem buffer"
+ is_fixed_read_only: true
+ bug: "382369925"
+}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 29e0487dad0a..6ffbe3cec101 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -91,6 +91,7 @@ import android.server.ServerProtoEnums;
import android.system.ErrnoException;
import android.system.Os;
import android.text.TextUtils;
+import android.tracing.perfetto.InitArguments;
import android.util.ArrayMap;
import android.util.DisplayMetrics;
import android.util.Dumpable;
@@ -791,6 +792,12 @@ public final class SystemServer implements Dumpable {
private void run() {
TimingsTraceAndSlog t = new TimingsTraceAndSlog();
try {
+ if (android.tracing.Flags.systemServerLargePerfettoShmemBuffer()) {
+ // Explicitly initialize a 4 MB shmem buffer for Perfetto producers (b/382369925)
+ android.tracing.perfetto.Producer.init(new InitArguments(
+ InitArguments.PERFETTO_BACKEND_SYSTEM, 4 * 1024));
+ }
+
t.traceBegin("InitBeforeStartServices");
// Record the process start information in sys props.