summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Jeon <kevinjeon@google.com>2024-04-26 16:50:19 -0400
committerKevin Jeon <kevinjeon@google.com>2024-04-30 17:11:59 -0400
commita1eabd0510fa70712442c71fb83f0f90a1a70d65 (patch)
tree6c74d325ab15ac325ba4523873664055d1e8416d
parent747f20d6a525a4214b53ecada9b1965c8f0534d2 (diff)
downloadTraceur-a1eabd0510fa70712442c71fb83f0f90a1a70d65.tar.gz
Add preset trace configs
This change adds PresetTraceConfigs, which contains the set of atrace categories and other trace options (app tracing, long traces, bug report attachment, etc) used for tracing presets. Test: Collect traces using these presets and confirm that the trace info shows the expected config. Bug: 306420759 Change-Id: I56e7207569094a4625c7836cb833642735416908
-rw-r--r--src/com/android/traceur/MainFragment.java4
-rw-r--r--src/com/android/traceur/Receiver.java24
-rw-r--r--src_common/com/android/traceur/PresetTraceConfigs.java194
-rw-r--r--src_common/com/android/traceur/TraceUtils.java37
4 files changed, 234 insertions, 25 deletions
diff --git a/src/com/android/traceur/MainFragment.java b/src/com/android/traceur/MainFragment.java
index e314f23a..536e7dda 100644
--- a/src/com/android/traceur/MainFragment.java
+++ b/src/com/android/traceur/MainFragment.java
@@ -375,7 +375,7 @@ public class MainFragment extends PreferenceFragment {
mTags.setEntries(entries.toArray(new String[0]));
mTags.setEntryValues(values.toArray(new String[0]));
if (restoreDefaultTags || !mPrefs.contains(context.getString(R.string.pref_key_tags))) {
- mTags.setValues(Receiver.getDefaultTagList());
+ mTags.setValues(PresetTraceConfigs.getDefaultTags());
}
mHeapDumpProcesses.setEntries(sortedProcesses.toArray(new String[0]));
mHeapDumpProcesses.setEntryValues(sortedProcesses.toArray(new String[0]));
@@ -408,7 +408,7 @@ public class MainFragment extends PreferenceFragment {
Locale.getDefault());
Map<String, Object> arguments = new HashMap<>();
arguments.put("count", categories.size());
- mTags.setSummary(Receiver.getDefaultTagList().equals(categories)
+ mTags.setSummary(PresetTraceConfigs.getDefaultTags().equals(categories)
? context.getString(R.string.default_categories)
: msgFormat.format(arguments));
diff --git a/src/com/android/traceur/Receiver.java b/src/com/android/traceur/Receiver.java
index 39ff6adb..0ff7e421 100644
--- a/src/com/android/traceur/Receiver.java
+++ b/src/com/android/traceur/Receiver.java
@@ -55,20 +55,11 @@ public class Receiver extends BroadcastReceiver {
public static final String NOTIFICATION_CHANNEL_TRACING = "trace-is-being-recorded";
public static final String NOTIFICATION_CHANNEL_OTHER = "system-tracing";
- private static final List<String> DEFAULT_TRACE_TAGS = Arrays.asList(
- "aidl", "am", "binder_driver", "camera", "dalvik", "disk", "freq",
- "gfx", "hal", "idle", "input", "memory", "memreclaim", "network", "power",
- "res", "sched", "ss", "sync", "thermal", "view", "webview", "wm", "workq");
- private static final List<String> USER_BUILD_DISABLED_TRACE_TAGS = Arrays.asList(
- "workq", "sync"
- );
-
private static final String TAG = "Traceur";
private static final String BETTERBUG_PACKAGE_NAME =
"com.google.android.apps.internal.betterbug";
- private static Set<String> mDefaultTagList = null;
private static ContentObserver mDeveloperOptionsObserver;
@Override
@@ -351,7 +342,7 @@ public class Receiver extends BroadcastReceiver {
public static Set<String> getActiveTags(Context context, SharedPreferences prefs, boolean onlyAvailable) {
Set<String> tags = prefs.getStringSet(context.getString(R.string.pref_key_tags),
- getDefaultTagList());
+ PresetTraceConfigs.getDefaultTags());
Set<String> available = TraceUtils.listCategories().keySet();
if (onlyAvailable) {
@@ -364,7 +355,7 @@ public class Receiver extends BroadcastReceiver {
public static Set<String> getActiveUnavailableTags(Context context, SharedPreferences prefs) {
Set<String> tags = prefs.getStringSet(context.getString(R.string.pref_key_tags),
- getDefaultTagList());
+ PresetTraceConfigs.getDefaultTags());
Set<String> available = TraceUtils.listCategories().keySet();
tags.removeAll(available);
@@ -373,17 +364,6 @@ public class Receiver extends BroadcastReceiver {
return tags;
}
- public static Set<String> getDefaultTagList() {
- if (mDefaultTagList == null) {
- mDefaultTagList = new ArraySet<String>(DEFAULT_TRACE_TAGS);
- if (Build.TYPE.equals("user")) {
- mDefaultTagList.removeAll(USER_BUILD_DISABLED_TRACE_TAGS);
- }
- }
-
- return mDefaultTagList;
- }
-
public static boolean isTraceurAllowed(Context context) {
boolean developerOptionsEnabled = Settings.Global.getInt(context.getContentResolver(),
Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
diff --git a/src_common/com/android/traceur/PresetTraceConfigs.java b/src_common/com/android/traceur/PresetTraceConfigs.java
new file mode 100644
index 00000000..e083db9e
--- /dev/null
+++ b/src_common/com/android/traceur/PresetTraceConfigs.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (C) 2024 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.traceur;
+
+import android.os.Build;
+import android.util.ArraySet;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+public class PresetTraceConfigs {
+
+ private static final List<String> DEFAULT_TRACE_TAGS = Arrays.asList(
+ "aidl", "am", "binder_driver", "camera", "dalvik", "disk", "freq",
+ "gfx", "hal", "idle", "input", "memory", "memreclaim", "network", "power",
+ "res", "sched", "ss", "sync", "thermal", "view", "webview", "wm", "workq");
+
+ private static final List<String> PERFORMANCE_TRACE_TAGS = DEFAULT_TRACE_TAGS;
+ private static final List<String> UI_TRACE_TAGS = DEFAULT_TRACE_TAGS;
+
+ private static final List<String> THERMAL_TRACE_TAGS = Arrays.asList(
+ "aidl", "am", "binder_driver", "camera", "dalvik", "disk", "freq",
+ "gfx", "hal", "idle", "input", "memory", "memreclaim", "network", "power",
+ "res", "sched", "ss", "sync", "thermal", "thermal_tj", "view", "webview",
+ "wm", "workq");
+
+ private static final List<String> BATTERY_TRACE_TAGS = Arrays.asList(
+ "aidl", "am", "binder_driver", "network", "nnapi",
+ "pm", "power", "ss", "thermal", "wm");
+
+ private static final List<String> USER_BUILD_DISABLED_TRACE_TAGS = Arrays.asList(
+ "workq", "sync");
+
+ private static Set<String> mDefaultTagList = null;
+ private static Set<String> mPerformanceTagList = null;
+ private static Set<String> mBatteryTagList = null;
+ private static Set<String> mThermalTagList = null;
+ private static Set<String> mUiTagList = null;
+
+ public static Set<String> getDefaultTags() {
+ if (mDefaultTagList == null) {
+ mDefaultTagList = new ArraySet<String>(DEFAULT_TRACE_TAGS);
+ updateTagsIfUserBuild(mDefaultTagList);
+ }
+ return mDefaultTagList;
+ }
+
+ public static Set<String> getPerformanceTags() {
+ if (mPerformanceTagList == null) {
+ mPerformanceTagList = new ArraySet<String>(PERFORMANCE_TRACE_TAGS);
+ updateTagsIfUserBuild(mPerformanceTagList);
+ }
+ return mPerformanceTagList;
+ }
+
+ public static Set<String> getBatteryTags() {
+ if (mBatteryTagList == null) {
+ mBatteryTagList = new ArraySet<String>(BATTERY_TRACE_TAGS);
+ updateTagsIfUserBuild(mBatteryTagList);
+ }
+ return mBatteryTagList;
+ }
+
+ public static Set<String> getThermalTags() {
+ if (mThermalTagList == null) {
+ mThermalTagList = new ArraySet<String>(THERMAL_TRACE_TAGS);
+ updateTagsIfUserBuild(mThermalTagList);
+ }
+ return mThermalTagList;
+ }
+
+ public static Set<String> getUiTags() {
+ if (mUiTagList == null) {
+ mUiTagList = new ArraySet<String>(UI_TRACE_TAGS);
+ updateTagsIfUserBuild(mUiTagList);
+ }
+ return mUiTagList;
+ }
+
+ private static void updateTagsIfUserBuild(Collection<String> tags) {
+ if (Build.TYPE.equals("user")) {
+ tags.removeAll(USER_BUILD_DISABLED_TRACE_TAGS);
+ }
+ }
+
+ static class TraceOptions {
+ final int bufferSizeKb;
+ final boolean winscope;
+ final boolean apps;
+ final boolean longTrace;
+ final boolean attachToBugreport;
+ final int maxLongTraceSizeMb;
+ final int maxLongTraceDurationMinutes;
+
+ TraceOptions(int bufferSizeKb, boolean winscope, boolean apps, boolean longTrace,
+ boolean attachToBugreport, int maxLongTraceSizeMb,
+ int maxLongTraceDurationMinutes) {
+ this.bufferSizeKb = bufferSizeKb;
+ this.winscope = winscope;
+ this.apps = apps;
+ this.longTrace = longTrace;
+ this.attachToBugreport = attachToBugreport;
+ this.maxLongTraceSizeMb = maxLongTraceSizeMb;
+ this.maxLongTraceDurationMinutes = maxLongTraceDurationMinutes;
+ }
+ }
+
+ // Keep in sync with default sizes and durations in buffer_sizes.xml.
+ private static final int DEFAULT_BUFFER_SIZE_KB = 16384;
+ private static final int DEFAULT_MAX_LONG_TRACE_SIZE_MB = 10240;
+ private static final int DEFAULT_MAX_LONG_TRACE_DURATION_MINUTES = 30;
+
+ private static final TraceOptions DEFAULT_TRACE_OPTIONS =
+ new TraceOptions(DEFAULT_BUFFER_SIZE_KB,
+ /* winscope */ false,
+ /* apps */ true,
+ /* longTrace */ false,
+ /* attachToBugreport */ true,
+ DEFAULT_MAX_LONG_TRACE_SIZE_MB,
+ DEFAULT_MAX_LONG_TRACE_DURATION_MINUTES);
+
+ private static final TraceOptions PERFORMANCE_TRACE_OPTIONS =
+ new TraceOptions(DEFAULT_BUFFER_SIZE_KB,
+ /* winscope */ false,
+ /* apps */ true,
+ /* longTrace */ false,
+ /* attachToBugreport */ true,
+ DEFAULT_MAX_LONG_TRACE_SIZE_MB,
+ DEFAULT_MAX_LONG_TRACE_DURATION_MINUTES);
+
+ private static final TraceOptions BATTERY_TRACE_OPTIONS =
+ new TraceOptions(DEFAULT_BUFFER_SIZE_KB,
+ /* winscope */ false,
+ /* apps */ false,
+ /* longTrace */ true,
+ /* attachToBugreport */ true,
+ DEFAULT_MAX_LONG_TRACE_SIZE_MB,
+ DEFAULT_MAX_LONG_TRACE_DURATION_MINUTES);
+
+ private static final TraceOptions THERMAL_TRACE_OPTIONS =
+ new TraceOptions(DEFAULT_BUFFER_SIZE_KB,
+ /* winscope */ false,
+ /* apps */ true,
+ /* longTrace */ true,
+ /* attachToBugreport */ true,
+ DEFAULT_MAX_LONG_TRACE_SIZE_MB,
+ DEFAULT_MAX_LONG_TRACE_DURATION_MINUTES);
+
+ private static final TraceOptions UI_TRACE_OPTIONS =
+ new TraceOptions(DEFAULT_BUFFER_SIZE_KB,
+ /* winscope */ true,
+ /* apps */ true,
+ /* longTrace */ true,
+ /* attachToBugreport */ true,
+ DEFAULT_MAX_LONG_TRACE_SIZE_MB,
+ DEFAULT_MAX_LONG_TRACE_DURATION_MINUTES);
+
+ public static TraceOptions getDefaultOptions() {
+ return DEFAULT_TRACE_OPTIONS;
+ }
+
+ public static TraceOptions getPerformanceOptions() {
+ return PERFORMANCE_TRACE_OPTIONS;
+ }
+
+ public static TraceOptions getBatteryOptions() {
+ return BATTERY_TRACE_OPTIONS;
+ }
+
+ public static TraceOptions getThermalOptions() {
+ return THERMAL_TRACE_OPTIONS;
+ }
+
+ public static TraceOptions getUiOptions() {
+ return UI_TRACE_OPTIONS;
+ }
+
+}
diff --git a/src_common/com/android/traceur/TraceUtils.java b/src_common/com/android/traceur/TraceUtils.java
index 9942efb3..68e371bd 100644
--- a/src_common/com/android/traceur/TraceUtils.java
+++ b/src_common/com/android/traceur/TraceUtils.java
@@ -62,7 +62,42 @@ public class TraceUtils {
private static final Runtime RUNTIME = Runtime.getRuntime();
public enum RecordingType {
- UNKNOWN, TRACE, STACK_SAMPLES, HEAP_DUMP
+ UNKNOWN, TRACE, STACK_SAMPLES, HEAP_DUMP
+ }
+
+ public enum PresetTraceType {
+ UNSET, PERFORMANCE, BATTERY, THERMAL, UI
+ }
+
+ public static boolean presetTraceStart(ContentResolver contentResolver, PresetTraceType type) {
+ Set<String> tags;
+ PresetTraceConfigs.TraceOptions options;
+ Log.v(TAG, "Using preset of type " + type.toString());
+ switch (type) {
+ case PERFORMANCE:
+ tags = PresetTraceConfigs.getPerformanceTags();
+ options = PresetTraceConfigs.getPerformanceOptions();
+ break;
+ case BATTERY:
+ tags = PresetTraceConfigs.getBatteryTags();
+ options = PresetTraceConfigs.getBatteryOptions();
+ break;
+ case THERMAL:
+ tags = PresetTraceConfigs.getThermalTags();
+ options = PresetTraceConfigs.getThermalOptions();
+ break;
+ case UI:
+ tags = PresetTraceConfigs.getUiTags();
+ options = PresetTraceConfigs.getUiOptions();
+ break;
+ case UNSET:
+ default:
+ tags = PresetTraceConfigs.getDefaultTags();
+ options = PresetTraceConfigs.getDefaultOptions();
+ }
+ return traceStart(contentResolver, tags, options.bufferSizeKb, options.winscope,
+ options.apps, options.longTrace, options.attachToBugreport,
+ options.maxLongTraceSizeMb, options.maxLongTraceDurationMinutes);
}
public static boolean traceStart(ContentResolver contentResolver, TraceConfig config,