android_system_property data source.
This is a fork of initial_screen_state but with the ability to
configure which properties we want in the config rather than
having them hard coded.
Bug: 238063699
Change-Id: I633f9173274227bce9c09371c2379a8ff8a3c0b7
diff --git a/Android.bp b/Android.bp
index 43d54b8..4864060 100644
--- a/Android.bp
+++ b/Android.bp
@@ -548,6 +548,7 @@
":perfetto_src_protozero_protozero",
":perfetto_src_traced_probes_android_game_intervention_list_android_game_intervention_list",
":perfetto_src_traced_probes_android_log_android_log",
+ ":perfetto_src_traced_probes_android_system_property_android_system_property",
":perfetto_src_traced_probes_common_common",
":perfetto_src_traced_probes_data_source",
":perfetto_src_traced_probes_filesystem_filesystem",
@@ -1140,6 +1141,7 @@
":perfetto_src_protozero_protozero",
":perfetto_src_traced_probes_android_game_intervention_list_android_game_intervention_list",
":perfetto_src_traced_probes_android_log_android_log",
+ ":perfetto_src_traced_probes_android_system_property_android_system_property",
":perfetto_src_traced_probes_common_common",
":perfetto_src_traced_probes_data_source",
":perfetto_src_traced_probes_filesystem_filesystem",
@@ -1416,6 +1418,7 @@
":perfetto_src_protozero_protozero",
":perfetto_src_traced_probes_android_game_intervention_list_android_game_intervention_list",
":perfetto_src_traced_probes_android_log_android_log",
+ ":perfetto_src_traced_probes_android_system_property_android_system_property",
":perfetto_src_traced_probes_common_common",
":perfetto_src_traced_probes_data_source",
":perfetto_src_traced_probes_filesystem_filesystem",
@@ -1919,6 +1922,7 @@
":perfetto_src_trace_processor_views_views",
":perfetto_src_traced_probes_android_game_intervention_list_android_game_intervention_list",
":perfetto_src_traced_probes_android_log_android_log",
+ ":perfetto_src_traced_probes_android_system_property_android_system_property",
":perfetto_src_traced_probes_common_common",
":perfetto_src_traced_probes_data_source",
":perfetto_src_traced_probes_filesystem_filesystem",
@@ -2391,6 +2395,7 @@
"protos/perfetto/config/android/android_game_intervention_list_config.proto",
"protos/perfetto/config/android/android_log_config.proto",
"protos/perfetto/config/android/android_polled_state_config.proto",
+ "protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
],
tools: [
@@ -2402,6 +2407,7 @@
"external/perfetto/protos/perfetto/config/android/android_game_intervention_list_config.gen.cc",
"external/perfetto/protos/perfetto/config/android/android_log_config.gen.cc",
"external/perfetto/protos/perfetto/config/android/android_polled_state_config.gen.cc",
+ "external/perfetto/protos/perfetto/config/android/android_system_property_config.gen.cc",
"external/perfetto/protos/perfetto/config/android/packages_list_config.gen.cc",
],
}
@@ -2413,6 +2419,7 @@
"protos/perfetto/config/android/android_game_intervention_list_config.proto",
"protos/perfetto/config/android/android_log_config.proto",
"protos/perfetto/config/android/android_polled_state_config.proto",
+ "protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
],
tools: [
@@ -2424,6 +2431,7 @@
"external/perfetto/protos/perfetto/config/android/android_game_intervention_list_config.gen.h",
"external/perfetto/protos/perfetto/config/android/android_log_config.gen.h",
"external/perfetto/protos/perfetto/config/android/android_polled_state_config.gen.h",
+ "external/perfetto/protos/perfetto/config/android/android_system_property_config.gen.h",
"external/perfetto/protos/perfetto/config/android/packages_list_config.gen.h",
],
export_include_dirs: [
@@ -2439,6 +2447,7 @@
"protos/perfetto/config/android/android_game_intervention_list_config.proto",
"protos/perfetto/config/android/android_log_config.proto",
"protos/perfetto/config/android/android_polled_state_config.proto",
+ "protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
],
tools: [
@@ -2449,6 +2458,7 @@
"external/perfetto/protos/perfetto/config/android/android_game_intervention_list_config.pb.cc",
"external/perfetto/protos/perfetto/config/android/android_log_config.pb.cc",
"external/perfetto/protos/perfetto/config/android/android_polled_state_config.pb.cc",
+ "external/perfetto/protos/perfetto/config/android/android_system_property_config.pb.cc",
"external/perfetto/protos/perfetto/config/android/packages_list_config.pb.cc",
],
}
@@ -2460,6 +2470,7 @@
"protos/perfetto/config/android/android_game_intervention_list_config.proto",
"protos/perfetto/config/android/android_log_config.proto",
"protos/perfetto/config/android/android_polled_state_config.proto",
+ "protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
],
tools: [
@@ -2470,6 +2481,7 @@
"external/perfetto/protos/perfetto/config/android/android_game_intervention_list_config.pb.h",
"external/perfetto/protos/perfetto/config/android/android_log_config.pb.h",
"external/perfetto/protos/perfetto/config/android/android_polled_state_config.pb.h",
+ "external/perfetto/protos/perfetto/config/android/android_system_property_config.pb.h",
"external/perfetto/protos/perfetto/config/android/packages_list_config.pb.h",
],
export_include_dirs: [
@@ -2485,6 +2497,7 @@
"protos/perfetto/config/android/android_game_intervention_list_config.proto",
"protos/perfetto/config/android/android_log_config.proto",
"protos/perfetto/config/android/android_polled_state_config.proto",
+ "protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
],
tools: [
@@ -2496,6 +2509,7 @@
"external/perfetto/protos/perfetto/config/android/android_game_intervention_list_config.pbzero.cc",
"external/perfetto/protos/perfetto/config/android/android_log_config.pbzero.cc",
"external/perfetto/protos/perfetto/config/android/android_polled_state_config.pbzero.cc",
+ "external/perfetto/protos/perfetto/config/android/android_system_property_config.pbzero.cc",
"external/perfetto/protos/perfetto/config/android/packages_list_config.pbzero.cc",
],
}
@@ -2507,6 +2521,7 @@
"protos/perfetto/config/android/android_game_intervention_list_config.proto",
"protos/perfetto/config/android/android_log_config.proto",
"protos/perfetto/config/android/android_polled_state_config.proto",
+ "protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
],
tools: [
@@ -2518,6 +2533,7 @@
"external/perfetto/protos/perfetto/config/android/android_game_intervention_list_config.pbzero.h",
"external/perfetto/protos/perfetto/config/android/android_log_config.pbzero.h",
"external/perfetto/protos/perfetto/config/android/android_polled_state_config.pbzero.h",
+ "external/perfetto/protos/perfetto/config/android/android_system_property_config.pbzero.h",
"external/perfetto/protos/perfetto/config/android/packages_list_config.pbzero.h",
],
export_include_dirs: [
@@ -2605,6 +2621,7 @@
"protos/perfetto/config/android/android_game_intervention_list_config.proto",
"protos/perfetto/config/android/android_log_config.proto",
"protos/perfetto/config/android/android_polled_state_config.proto",
+ "protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
"protos/perfetto/config/chrome/chrome_config.proto",
"protos/perfetto/config/data_source_config.proto",
@@ -4100,6 +4117,7 @@
srcs: [
"protos/perfetto/trace/android/android_game_intervention_list.proto",
"protos/perfetto/trace/android/android_log.proto",
+ "protos/perfetto/trace/android/android_system_property.proto",
"protos/perfetto/trace/android/camera_event.proto",
"protos/perfetto/trace/android/frame_timeline_event.proto",
"protos/perfetto/trace/android/gpu_mem_event.proto",
@@ -4115,6 +4133,7 @@
out: [
"external/perfetto/protos/perfetto/trace/android/android_game_intervention_list.gen.cc",
"external/perfetto/protos/perfetto/trace/android/android_log.gen.cc",
+ "external/perfetto/protos/perfetto/trace/android/android_system_property.gen.cc",
"external/perfetto/protos/perfetto/trace/android/camera_event.gen.cc",
"external/perfetto/protos/perfetto/trace/android/frame_timeline_event.gen.cc",
"external/perfetto/protos/perfetto/trace/android/gpu_mem_event.gen.cc",
@@ -4130,6 +4149,7 @@
srcs: [
"protos/perfetto/trace/android/android_game_intervention_list.proto",
"protos/perfetto/trace/android/android_log.proto",
+ "protos/perfetto/trace/android/android_system_property.proto",
"protos/perfetto/trace/android/camera_event.proto",
"protos/perfetto/trace/android/frame_timeline_event.proto",
"protos/perfetto/trace/android/gpu_mem_event.proto",
@@ -4145,6 +4165,7 @@
out: [
"external/perfetto/protos/perfetto/trace/android/android_game_intervention_list.gen.h",
"external/perfetto/protos/perfetto/trace/android/android_log.gen.h",
+ "external/perfetto/protos/perfetto/trace/android/android_system_property.gen.h",
"external/perfetto/protos/perfetto/trace/android/camera_event.gen.h",
"external/perfetto/protos/perfetto/trace/android/frame_timeline_event.gen.h",
"external/perfetto/protos/perfetto/trace/android/gpu_mem_event.gen.h",
@@ -4164,6 +4185,7 @@
srcs: [
"protos/perfetto/trace/android/android_game_intervention_list.proto",
"protos/perfetto/trace/android/android_log.proto",
+ "protos/perfetto/trace/android/android_system_property.proto",
"protos/perfetto/trace/android/camera_event.proto",
"protos/perfetto/trace/android/frame_timeline_event.proto",
"protos/perfetto/trace/android/gpu_mem_event.proto",
@@ -4178,6 +4200,7 @@
out: [
"external/perfetto/protos/perfetto/trace/android/android_game_intervention_list.pb.cc",
"external/perfetto/protos/perfetto/trace/android/android_log.pb.cc",
+ "external/perfetto/protos/perfetto/trace/android/android_system_property.pb.cc",
"external/perfetto/protos/perfetto/trace/android/camera_event.pb.cc",
"external/perfetto/protos/perfetto/trace/android/frame_timeline_event.pb.cc",
"external/perfetto/protos/perfetto/trace/android/gpu_mem_event.pb.cc",
@@ -4193,6 +4216,7 @@
srcs: [
"protos/perfetto/trace/android/android_game_intervention_list.proto",
"protos/perfetto/trace/android/android_log.proto",
+ "protos/perfetto/trace/android/android_system_property.proto",
"protos/perfetto/trace/android/camera_event.proto",
"protos/perfetto/trace/android/frame_timeline_event.proto",
"protos/perfetto/trace/android/gpu_mem_event.proto",
@@ -4207,6 +4231,7 @@
out: [
"external/perfetto/protos/perfetto/trace/android/android_game_intervention_list.pb.h",
"external/perfetto/protos/perfetto/trace/android/android_log.pb.h",
+ "external/perfetto/protos/perfetto/trace/android/android_system_property.pb.h",
"external/perfetto/protos/perfetto/trace/android/camera_event.pb.h",
"external/perfetto/protos/perfetto/trace/android/frame_timeline_event.pb.h",
"external/perfetto/protos/perfetto/trace/android/gpu_mem_event.pb.h",
@@ -4226,6 +4251,7 @@
srcs: [
"protos/perfetto/trace/android/android_game_intervention_list.proto",
"protos/perfetto/trace/android/android_log.proto",
+ "protos/perfetto/trace/android/android_system_property.proto",
"protos/perfetto/trace/android/camera_event.proto",
"protos/perfetto/trace/android/frame_timeline_event.proto",
"protos/perfetto/trace/android/gpu_mem_event.proto",
@@ -4241,6 +4267,7 @@
out: [
"external/perfetto/protos/perfetto/trace/android/android_game_intervention_list.pbzero.cc",
"external/perfetto/protos/perfetto/trace/android/android_log.pbzero.cc",
+ "external/perfetto/protos/perfetto/trace/android/android_system_property.pbzero.cc",
"external/perfetto/protos/perfetto/trace/android/camera_event.pbzero.cc",
"external/perfetto/protos/perfetto/trace/android/frame_timeline_event.pbzero.cc",
"external/perfetto/protos/perfetto/trace/android/gpu_mem_event.pbzero.cc",
@@ -4256,6 +4283,7 @@
srcs: [
"protos/perfetto/trace/android/android_game_intervention_list.proto",
"protos/perfetto/trace/android/android_log.proto",
+ "protos/perfetto/trace/android/android_system_property.proto",
"protos/perfetto/trace/android/camera_event.proto",
"protos/perfetto/trace/android/frame_timeline_event.proto",
"protos/perfetto/trace/android/gpu_mem_event.proto",
@@ -4271,6 +4299,7 @@
out: [
"external/perfetto/protos/perfetto/trace/android/android_game_intervention_list.pbzero.h",
"external/perfetto/protos/perfetto/trace/android/android_log.pbzero.h",
+ "external/perfetto/protos/perfetto/trace/android/android_system_property.pbzero.h",
"external/perfetto/protos/perfetto/trace/android/camera_event.pbzero.h",
"external/perfetto/protos/perfetto/trace/android/frame_timeline_event.pbzero.h",
"external/perfetto/protos/perfetto/trace/android/gpu_mem_event.pbzero.h",
@@ -4437,6 +4466,7 @@
"protos/perfetto/config/android/android_game_intervention_list_config.proto",
"protos/perfetto/config/android/android_log_config.proto",
"protos/perfetto/config/android/android_polled_state_config.proto",
+ "protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
"protos/perfetto/config/chrome/chrome_config.proto",
"protos/perfetto/config/data_source_config.proto",
@@ -4460,6 +4490,7 @@
"protos/perfetto/config/track_event/track_event_config.proto",
"protos/perfetto/trace/android/android_game_intervention_list.proto",
"protos/perfetto/trace/android/android_log.proto",
+ "protos/perfetto/trace/android/android_system_property.proto",
"protos/perfetto/trace/android/camera_event.proto",
"protos/perfetto/trace/android/frame_timeline_event.proto",
"protos/perfetto/trace/android/gpu_mem_event.proto",
@@ -9347,6 +9378,22 @@
],
}
+// GN: //src/traced/probes/android_system_property:android_system_property
+filegroup {
+ name: "perfetto_src_traced_probes_android_system_property_android_system_property",
+ srcs: [
+ "src/traced/probes/android_system_property/android_system_property_data_source.cc",
+ ],
+}
+
+// GN: //src/traced/probes/android_system_property:unittests
+filegroup {
+ name: "perfetto_src_traced_probes_android_system_property_unittests",
+ srcs: [
+ "src/traced/probes/android_system_property/android_system_property_data_source_unittest.cc",
+ ],
+}
+
// GN: //src/traced/probes/common:common
filegroup {
name: "perfetto_src_traced_probes_common_common",
@@ -10007,6 +10054,7 @@
"protos/perfetto/config/android/android_game_intervention_list_config.proto",
"protos/perfetto/config/android/android_log_config.proto",
"protos/perfetto/config/android/android_polled_state_config.proto",
+ "protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
"protos/perfetto/config/chrome/chrome_config.proto",
"protos/perfetto/config/data_source_config.proto",
@@ -10030,6 +10078,7 @@
"protos/perfetto/config/track_event/track_event_config.proto",
"protos/perfetto/trace/android/android_game_intervention_list.proto",
"protos/perfetto/trace/android/android_log.proto",
+ "protos/perfetto/trace/android/android_system_property.proto",
"protos/perfetto/trace/android/camera_event.proto",
"protos/perfetto/trace/android/frame_timeline_event.proto",
"protos/perfetto/trace/android/gpu_mem_event.proto",
@@ -10504,6 +10553,8 @@
":perfetto_src_traced_probes_android_game_intervention_list_unittests",
":perfetto_src_traced_probes_android_log_android_log",
":perfetto_src_traced_probes_android_log_unittests",
+ ":perfetto_src_traced_probes_android_system_property_android_system_property",
+ ":perfetto_src_traced_probes_android_system_property_unittests",
":perfetto_src_traced_probes_common_common",
":perfetto_src_traced_probes_common_test_support",
":perfetto_src_traced_probes_common_unittests",
diff --git a/BUILD b/BUILD
index 48b45b6..9013777 100644
--- a/BUILD
+++ b/BUILD
@@ -234,6 +234,7 @@
":src_protozero_filtering_message_filter",
":src_traced_probes_android_game_intervention_list_android_game_intervention_list",
":src_traced_probes_android_log_android_log",
+ ":src_traced_probes_android_system_property_android_system_property",
":src_traced_probes_common_common",
":src_traced_probes_data_source",
":src_traced_probes_filesystem_filesystem",
@@ -1770,6 +1771,15 @@
],
)
+# GN target: //src/traced/probes/android_system_property:android_system_property
+perfetto_filegroup(
+ name = "src_traced_probes_android_system_property_android_system_property",
+ srcs = [
+ "src/traced/probes/android_system_property/android_system_property_data_source.cc",
+ "src/traced/probes/android_system_property/android_system_property_data_source.h",
+ ],
+)
+
# GN target: //src/traced/probes/common:common
perfetto_filegroup(
name = "src_traced_probes_common_common",
@@ -2448,6 +2458,7 @@
"protos/perfetto/config/android/android_game_intervention_list_config.proto",
"protos/perfetto/config/android/android_log_config.proto",
"protos/perfetto/config/android/android_polled_state_config.proto",
+ "protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
],
visibility = [
@@ -3060,6 +3071,7 @@
srcs = [
"protos/perfetto/trace/android/android_game_intervention_list.proto",
"protos/perfetto/trace/android/android_log.proto",
+ "protos/perfetto/trace/android/android_system_property.proto",
"protos/perfetto/trace/android/camera_event.proto",
"protos/perfetto/trace/android/frame_timeline_event.proto",
"protos/perfetto/trace/android/gpu_mem_event.proto",
diff --git a/protos/perfetto/config/android/BUILD.gn b/protos/perfetto/config/android/BUILD.gn
index c0ff7ee..0a0bb9a 100644
--- a/protos/perfetto/config/android/BUILD.gn
+++ b/protos/perfetto/config/android/BUILD.gn
@@ -21,6 +21,7 @@
"android_game_intervention_list_config.proto",
"android_log_config.proto",
"android_polled_state_config.proto",
+ "android_system_property_config.proto",
"packages_list_config.proto",
]
}
diff --git a/protos/perfetto/config/android/android_polled_state_config.proto b/protos/perfetto/config/android/android_polled_state_config.proto
index bd32c2c..21e25c2 100644
--- a/protos/perfetto/config/android/android_polled_state_config.proto
+++ b/protos/perfetto/config/android/android_polled_state_config.proto
@@ -18,7 +18,8 @@
package perfetto.protos;
-// Data source that polls for display state.
+// Data source that polls for display state. This should only be used for
+// backward-compatibility; AndroidSystemPropertyConfig should be preferred.
message AndroidPolledStateConfig {
// Frequency of polling. If absent the state will be recorded once, at the
// start of the trace.
diff --git a/protos/perfetto/config/android/android_system_property_config.proto b/protos/perfetto/config/android/android_system_property_config.proto
new file mode 100644
index 0000000..fbf1062
--- /dev/null
+++ b/protos/perfetto/config/android/android_system_property_config.proto
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2022 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.
+ */
+
+syntax = "proto2";
+
+package perfetto.protos;
+
+// Data source that polls for system properties.
+message AndroidSystemPropertyConfig {
+ // Frequency of polling. If absent the state will be recorded once, at the
+ // start of the trace.
+ // This is required to be > 100ms to avoid excessive CPU usage.
+ optional uint32 poll_ms = 1;
+
+ // Properties to poll. All property names must start with "debug.tracing.".
+ repeated string property_name = 2;
+}
diff --git a/protos/perfetto/config/data_source_config.proto b/protos/perfetto/config/data_source_config.proto
index 495fb50..1a2aa97 100644
--- a/protos/perfetto/config/data_source_config.proto
+++ b/protos/perfetto/config/data_source_config.proto
@@ -21,6 +21,7 @@
import "protos/perfetto/config/android/android_game_intervention_list_config.proto";
import "protos/perfetto/config/android/android_log_config.proto";
import "protos/perfetto/config/android/android_polled_state_config.proto";
+import "protos/perfetto/config/android/android_system_property_config.proto";
import "protos/perfetto/config/android/packages_list_config.proto";
import "protos/perfetto/config/chrome/chrome_config.proto";
import "protos/perfetto/config/ftrace/ftrace_config.proto";
@@ -39,7 +40,7 @@
import "protos/perfetto/config/track_event/track_event_config.proto";
// The configuration that is passed to each data source when starting tracing.
-// Next id: 118
+// Next id: 119
message DataSourceConfig {
enum SessionInitiator {
SESSION_INITIATOR_UNSPECIFIED = 0;
@@ -129,6 +130,9 @@
// Data source name: android.polled_state
optional AndroidPolledStateConfig android_polled_state_config = 114
[lazy = true];
+ // Data source name: android.system_property
+ optional AndroidSystemPropertyConfig android_system_property_config = 118
+ [lazy = true];
// Data source name: android.statsd
optional StatsdTracingConfig statsd_tracing_config = 117 [lazy = true];
diff --git a/protos/perfetto/config/perfetto_config.proto b/protos/perfetto/config/perfetto_config.proto
index bff715e..5499a9a 100644
--- a/protos/perfetto/config/perfetto_config.proto
+++ b/protos/perfetto/config/perfetto_config.proto
@@ -393,7 +393,8 @@
// Begin of protos/perfetto/config/android/android_polled_state_config.proto
-// Data source that polls for display state.
+// Data source that polls for display state. This should only be used for
+// backward-compatibility; AndroidSystemPropertyConfig should be preferred.
message AndroidPolledStateConfig {
// Frequency of polling. If absent the state will be recorded once, at the
// start of the trace.
@@ -403,6 +404,21 @@
// End of protos/perfetto/config/android/android_polled_state_config.proto
+// Begin of protos/perfetto/config/android/android_system_property_config.proto
+
+// Data source that polls for system properties.
+message AndroidSystemPropertyConfig {
+ // Frequency of polling. If absent the state will be recorded once, at the
+ // start of the trace.
+ // This is required to be > 100ms to avoid excessive CPU usage.
+ optional uint32 poll_ms = 1;
+
+ // Properties to poll. All property names must start with "debug.tracing.".
+ repeated string property_name = 2;
+}
+
+// End of protos/perfetto/config/android/android_system_property_config.proto
+
// Begin of protos/perfetto/config/android/packages_list_config.proto
// Data source that lists details (such as version code) about packages on an
@@ -2201,7 +2217,7 @@
// Begin of protos/perfetto/config/data_source_config.proto
// The configuration that is passed to each data source when starting tracing.
-// Next id: 118
+// Next id: 119
message DataSourceConfig {
enum SessionInitiator {
SESSION_INITIATOR_UNSPECIFIED = 0;
@@ -2291,6 +2307,9 @@
// Data source name: android.polled_state
optional AndroidPolledStateConfig android_polled_state_config = 114
[lazy = true];
+ // Data source name: android.system_property
+ optional AndroidSystemPropertyConfig android_system_property_config = 118
+ [lazy = true];
// Data source name: android.statsd
optional StatsdTracingConfig statsd_tracing_config = 117 [lazy = true];
diff --git a/protos/perfetto/trace/android/BUILD.gn b/protos/perfetto/trace/android/BUILD.gn
index 856e7f5..12d69c1 100644
--- a/protos/perfetto/trace/android/BUILD.gn
+++ b/protos/perfetto/trace/android/BUILD.gn
@@ -20,6 +20,7 @@
sources = [
"android_game_intervention_list.proto",
"android_log.proto",
+ "android_system_property.proto",
"camera_event.proto",
"frame_timeline_event.proto",
"gpu_mem_event.proto",
diff --git a/protos/perfetto/trace/android/android_system_property.proto b/protos/perfetto/trace/android/android_system_property.proto
new file mode 100644
index 0000000..5f5ada1
--- /dev/null
+++ b/protos/perfetto/trace/android/android_system_property.proto
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2022 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.
+ */
+
+syntax = "proto2";
+package perfetto.protos;
+
+message AndroidSystemProperty {
+ message PropertyValue {
+ optional string name = 1;
+ optional string value = 2;
+ }
+
+ repeated PropertyValue values = 1;
+}
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto
index 2989ec8..53e39b9 100644
--- a/protos/perfetto/trace/perfetto_trace.proto
+++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -393,7 +393,8 @@
// Begin of protos/perfetto/config/android/android_polled_state_config.proto
-// Data source that polls for display state.
+// Data source that polls for display state. This should only be used for
+// backward-compatibility; AndroidSystemPropertyConfig should be preferred.
message AndroidPolledStateConfig {
// Frequency of polling. If absent the state will be recorded once, at the
// start of the trace.
@@ -403,6 +404,21 @@
// End of protos/perfetto/config/android/android_polled_state_config.proto
+// Begin of protos/perfetto/config/android/android_system_property_config.proto
+
+// Data source that polls for system properties.
+message AndroidSystemPropertyConfig {
+ // Frequency of polling. If absent the state will be recorded once, at the
+ // start of the trace.
+ // This is required to be > 100ms to avoid excessive CPU usage.
+ optional uint32 poll_ms = 1;
+
+ // Properties to poll. All property names must start with "debug.tracing.".
+ repeated string property_name = 2;
+}
+
+// End of protos/perfetto/config/android/android_system_property_config.proto
+
// Begin of protos/perfetto/config/android/packages_list_config.proto
// Data source that lists details (such as version code) about packages on an
@@ -2201,7 +2217,7 @@
// Begin of protos/perfetto/config/data_source_config.proto
// The configuration that is passed to each data source when starting tracing.
-// Next id: 118
+// Next id: 119
message DataSourceConfig {
enum SessionInitiator {
SESSION_INITIATOR_UNSPECIFIED = 0;
@@ -2291,6 +2307,9 @@
// Data source name: android.polled_state
optional AndroidPolledStateConfig android_polled_state_config = 114
[lazy = true];
+ // Data source name: android.system_property
+ optional AndroidSystemPropertyConfig android_system_property_config = 118
+ [lazy = true];
// Data source name: android.statsd
optional StatsdTracingConfig statsd_tracing_config = 117 [lazy = true];
@@ -3073,6 +3092,19 @@
// End of protos/perfetto/trace/android/android_log.proto
+// Begin of protos/perfetto/trace/android/android_system_property.proto
+
+message AndroidSystemProperty {
+ message PropertyValue {
+ optional string name = 1;
+ optional string value = 2;
+ }
+
+ repeated PropertyValue values = 1;
+}
+
+// End of protos/perfetto/trace/android/android_system_property.proto
+
// Begin of protos/perfetto/trace/android/camera_event.proto
// A profiling event corresponding to a single camera frame. This message
@@ -10837,7 +10869,7 @@
// See the [Buffers and Dataflow](/docs/concepts/buffers.md) doc for details.
//
// Next reserved id: 14 (up to 15).
-// Next id: 85.
+// Next id: 86.
message TracePacket {
// The timestamp of the TracePacket.
// By default this timestamps refers to the trace clock (CLOCK_BOOTTIME on
@@ -10904,6 +10936,7 @@
TranslationTable translation_table = 82;
AndroidGameInterventionList android_game_intervention_list = 83;
StatsdAtom statsd_atom = 84;
+ AndroidSystemProperty android_system_property = 86;
// Only used in profile packets.
ProfiledFrameSymbols profiled_frame_symbols = 55;
diff --git a/protos/perfetto/trace/trace_packet.proto b/protos/perfetto/trace/trace_packet.proto
index 6bd4e4a..53732c8 100644
--- a/protos/perfetto/trace/trace_packet.proto
+++ b/protos/perfetto/trace/trace_packet.proto
@@ -21,6 +21,7 @@
import "protos/perfetto/trace/extension_descriptor.proto";
import "protos/perfetto/trace/android/android_game_intervention_list.proto";
import "protos/perfetto/trace/android/android_log.proto";
+import "protos/perfetto/trace/android/android_system_property.proto";
import "protos/perfetto/trace/android/camera_event.proto";
import "protos/perfetto/trace/android/frame_timeline_event.proto";
import "protos/perfetto/trace/android/gpu_mem_event.proto";
@@ -89,7 +90,7 @@
// See the [Buffers and Dataflow](/docs/concepts/buffers.md) doc for details.
//
// Next reserved id: 14 (up to 15).
-// Next id: 85.
+// Next id: 86.
message TracePacket {
// The timestamp of the TracePacket.
// By default this timestamps refers to the trace clock (CLOCK_BOOTTIME on
@@ -156,6 +157,7 @@
TranslationTable translation_table = 82;
AndroidGameInterventionList android_game_intervention_list = 83;
StatsdAtom statsd_atom = 84;
+ AndroidSystemProperty android_system_property = 86;
// Only used in profile packets.
ProfiledFrameSymbols profiled_frame_symbols = 55;
diff --git a/src/traced/probes/BUILD.gn b/src/traced/probes/BUILD.gn
index 48f01e5..2d025a9 100644
--- a/src/traced/probes/BUILD.gn
+++ b/src/traced/probes/BUILD.gn
@@ -60,6 +60,7 @@
"../../tracing/ipc/producer",
"android_game_intervention_list",
"android_log",
+ "android_system_property",
"common",
"filesystem",
"initial_display_state",
@@ -100,6 +101,7 @@
"../../tracing/test:test_support",
"android_game_intervention_list:unittests",
"android_log:unittests",
+ "android_system_property:unittests",
"common:unittests",
"filesystem:unittests",
"ftrace:unittests",
diff --git a/src/traced/probes/android_system_property/BUILD.gn b/src/traced/probes/android_system_property/BUILD.gn
new file mode 100644
index 0000000..201961f
--- /dev/null
+++ b/src/traced/probes/android_system_property/BUILD.gn
@@ -0,0 +1,48 @@
+# Copyright (C) 2022 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.
+
+import("../../../../gn/test.gni")
+
+source_set("android_system_property") {
+ public_deps = [ "../../../tracing/core" ]
+ deps = [
+ "..:data_source",
+ "../../../../gn:default_deps",
+ "../../../../include/perfetto/ext/traced",
+ "../../../../protos/perfetto/config/android:zero",
+ "../../../../protos/perfetto/trace:zero",
+ "../../../../protos/perfetto/trace/android:zero",
+ "../../../base",
+ "../common",
+ ]
+ sources = [
+ "android_system_property_data_source.cc",
+ "android_system_property_data_source.h",
+ ]
+}
+
+perfetto_unittest_source_set("unittests") {
+ testonly = true
+ deps = [
+ ":android_system_property",
+ "../../../../gn:default_deps",
+ "../../../../gn:gtest_and_gmock",
+ "../../../../protos/perfetto/config/android:cpp",
+ "../../../../protos/perfetto/trace/android:cpp",
+ "../../../../src/base:test_support",
+ "../../../../src/tracing/test:test_support",
+ "../common:test_support",
+ ]
+ sources = [ "android_system_property_data_source_unittest.cc" ]
+}
diff --git a/src/traced/probes/android_system_property/android_system_property_data_source.cc b/src/traced/probes/android_system_property/android_system_property_data_source.cc
new file mode 100644
index 0000000..650aa46
--- /dev/null
+++ b/src/traced/probes/android_system_property/android_system_property_data_source.cc
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2022 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.
+ */
+
+#include "src/traced/probes/android_system_property/android_system_property_data_source.h"
+
+#include "perfetto/base/task_runner.h"
+#include "perfetto/base/time.h"
+#include "perfetto/ext/base/android_utils.h"
+#include "perfetto/ext/base/optional.h"
+#include "perfetto/ext/base/string_utils.h"
+#include "perfetto/tracing/core/data_source_config.h"
+
+#include "protos/perfetto/config/android/android_system_property_config.pbzero.h"
+#include "protos/perfetto/trace/android/android_system_property.pbzero.h"
+#include "protos/perfetto/trace/trace_packet.pbzero.h"
+
+namespace perfetto {
+
+// static
+const AndroidSystemPropertyDataSource::Descriptor
+ AndroidSystemPropertyDataSource::descriptor = {
+ /* name */ "android.system_property",
+ /* flags */ Descriptor::kFlagsNone,
+ /*fill_descriptor_func*/ nullptr,
+};
+
+constexpr const char* REQUIRED_NAME_PREFIX = "debug.tracing.";
+
+AndroidSystemPropertyDataSource::AndroidSystemPropertyDataSource(
+ base::TaskRunner* task_runner,
+ const DataSourceConfig& ds_config,
+ TracingSessionID session_id,
+ std::unique_ptr<TraceWriter> writer)
+ : ProbesDataSource(session_id, &descriptor),
+ task_runner_(task_runner),
+ writer_(std::move(writer)),
+ weak_factory_(this) {
+ protos::pbzero::AndroidSystemPropertyConfig::Decoder cfg(
+ ds_config.android_system_property_config_raw());
+ poll_period_ms_ = cfg.poll_ms();
+ if (poll_period_ms_ > 0 && poll_period_ms_ < 100) {
+ PERFETTO_ILOG("poll_ms %" PRIu32
+ " is less than minimum of 100ms. Increasing to 100ms.",
+ poll_period_ms_);
+ poll_period_ms_ = 100;
+ }
+ for (auto name_chars = cfg.property_name(); name_chars; ++name_chars) {
+ auto name = (*name_chars).ToStdString();
+ if (base::StartsWith(name, REQUIRED_NAME_PREFIX)) {
+ property_names_.push_back(name);
+ } else {
+ PERFETTO_ELOG("Property %s lacks required prefix %s", name.c_str(),
+ REQUIRED_NAME_PREFIX);
+ }
+ }
+}
+
+void AndroidSystemPropertyDataSource::Start() {
+ Tick();
+}
+
+base::WeakPtr<AndroidSystemPropertyDataSource>
+AndroidSystemPropertyDataSource::GetWeakPtr() const {
+ return weak_factory_.GetWeakPtr();
+}
+
+void AndroidSystemPropertyDataSource::Tick() {
+ if (poll_period_ms_) {
+ auto weak_this = GetWeakPtr();
+
+ uint32_t delay_ms =
+ poll_period_ms_ -
+ static_cast<uint32_t>(base::GetWallTimeMs().count() % poll_period_ms_);
+ task_runner_->PostDelayedTask(
+ [weak_this]() -> void {
+ if (weak_this) {
+ weak_this->Tick();
+ }
+ },
+ delay_ms);
+ }
+ WriteState();
+}
+
+void AndroidSystemPropertyDataSource::WriteState() {
+ auto packet = writer_->NewTracePacket();
+ packet->set_timestamp(static_cast<uint64_t>(base::GetBootTimeNs().count()));
+ auto* properties = packet->set_android_system_property();
+ for (const auto& name : property_names_) {
+ const base::Optional<std::string> value = ReadProperty(name);
+ if (value) {
+ auto* property = properties->add_values();
+ property->set_name(name);
+ property->set_value(*value);
+ }
+ }
+ packet->Finalize();
+}
+
+#if PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID)
+const base::Optional<std::string> AndroidSystemPropertyDataSource::ReadProperty(
+ const std::string& name) {
+ std::string value = base::GetAndroidProp(name.c_str());
+ if (value.empty()) {
+ PERFETTO_LOG("Unable to read %s", name.c_str());
+ return base::nullopt;
+ }
+ return base::make_optional(value);
+}
+#else
+const base::Optional<std::string> AndroidSystemPropertyDataSource::ReadProperty(
+ const std::string&) {
+ PERFETTO_ELOG("Android System Properties only supported on Android.");
+ return base::nullopt;
+}
+#endif
+
+void AndroidSystemPropertyDataSource::Flush(FlushRequestID,
+ std::function<void()> callback) {
+ writer_->Flush(callback);
+}
+
+} // namespace perfetto
diff --git a/src/traced/probes/android_system_property/android_system_property_data_source.h b/src/traced/probes/android_system_property/android_system_property_data_source.h
new file mode 100644
index 0000000..ec7db0e
--- /dev/null
+++ b/src/traced/probes/android_system_property/android_system_property_data_source.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2022 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.
+ */
+
+#ifndef SRC_TRACED_PROBES_ANDROID_SYSTEM_PROPERTY_ANDROID_SYSTEM_PROPERTY_DATA_SOURCE_H_
+#define SRC_TRACED_PROBES_ANDROID_SYSTEM_PROPERTY_ANDROID_SYSTEM_PROPERTY_DATA_SOURCE_H_
+
+#include <memory>
+#include <vector>
+
+#include "perfetto/ext/base/optional.h"
+#include "perfetto/ext/base/weak_ptr.h"
+#include "perfetto/ext/tracing/core/trace_writer.h"
+#include "src/traced/probes/probes_data_source.h"
+
+namespace perfetto {
+
+namespace base {
+class TaskRunner;
+}
+
+class AndroidSystemPropertyDataSource : public ProbesDataSource {
+ public:
+ static const ProbesDataSource::Descriptor descriptor;
+
+ AndroidSystemPropertyDataSource(base::TaskRunner* task_runner,
+ const DataSourceConfig& ds_config,
+ TracingSessionID session_id,
+ std::unique_ptr<TraceWriter> writer);
+
+ // ProbesDataSource implementation.
+ void Start() override;
+ void Flush(FlushRequestID, std::function<void()> callback) override;
+
+ // Virtual for testing.
+ virtual const base::Optional<std::string> ReadProperty(
+ const std::string& name);
+
+ private:
+ void Tick();
+ base::WeakPtr<AndroidSystemPropertyDataSource> GetWeakPtr() const;
+ void WriteState();
+
+ base::TaskRunner* const task_runner_;
+ std::unique_ptr<TraceWriter> writer_;
+ uint32_t poll_period_ms_ = 0;
+ std::vector<std::string> property_names_;
+ base::WeakPtrFactory<AndroidSystemPropertyDataSource>
+ weak_factory_; // Keep last.
+};
+
+} // namespace perfetto
+
+#endif // SRC_TRACED_PROBES_ANDROID_SYSTEM_PROPERTY_ANDROID_SYSTEM_PROPERTY_DATA_SOURCE_H_
diff --git a/src/traced/probes/android_system_property/android_system_property_data_source_unittest.cc b/src/traced/probes/android_system_property/android_system_property_data_source_unittest.cc
new file mode 100644
index 0000000..89d89e6
--- /dev/null
+++ b/src/traced/probes/android_system_property/android_system_property_data_source_unittest.cc
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2022 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.
+ */
+
+#include "src/traced/probes/android_system_property/android_system_property_data_source.h"
+#include "perfetto/tracing/core/data_source_config.h"
+#include "src/base/test/test_task_runner.h"
+#include "src/tracing/core/trace_writer_for_testing.h"
+#include "test/gtest_and_gmock.h"
+
+#include "protos/perfetto/config/android/android_system_property_config.gen.h"
+#include "protos/perfetto/trace/android/android_system_property.gen.h"
+#include "protos/perfetto/trace/trace_packet.gen.h"
+
+using ::perfetto::protos::gen::AndroidSystemPropertyConfig;
+
+using ::testing::AnyOf;
+using ::testing::ElementsAre;
+using ::testing::Return;
+
+namespace perfetto {
+namespace {
+
+class TestAndroidSystemPropertyDataSource
+ : public AndroidSystemPropertyDataSource {
+ public:
+ TestAndroidSystemPropertyDataSource(base::TaskRunner* task_runner,
+ const DataSourceConfig& config,
+ std::unique_ptr<TraceWriter> writer)
+ : AndroidSystemPropertyDataSource(task_runner,
+ config,
+ /* session_id */ 0,
+ std::move(writer)) {}
+
+ MOCK_METHOD1(ReadProperty,
+ const base::Optional<std::string>(const std::string&));
+};
+
+class AndroidSystemPropertyDataSourceTest : public ::testing::Test {
+ protected:
+ std::unique_ptr<TestAndroidSystemPropertyDataSource>
+ CreateAndroidSystemPropertyDataSource(const DataSourceConfig& config) {
+ auto writer =
+ std::unique_ptr<TraceWriterForTesting>(new TraceWriterForTesting());
+ writer_raw_ = writer.get();
+ auto instance = std::unique_ptr<TestAndroidSystemPropertyDataSource>(
+ new TestAndroidSystemPropertyDataSource(&task_runner_, config,
+ std::move(writer)));
+ return instance;
+ }
+
+ base::TestTaskRunner task_runner_;
+ TraceWriterForTesting* writer_raw_ = nullptr;
+};
+
+DataSourceConfig BuildConfig(const std::vector<std::string>& property_names) {
+ DataSourceConfig ds_config;
+ AndroidSystemPropertyConfig cfg;
+ for (auto name : property_names) {
+ cfg.add_property_name(name);
+ }
+ ds_config.set_android_system_property_config_raw(cfg.SerializeAsString());
+ return ds_config;
+}
+
+TEST_F(AndroidSystemPropertyDataSourceTest, Success) {
+ auto data_source = CreateAndroidSystemPropertyDataSource(BuildConfig(
+ {"debug.tracing.screen_state", "debug.tracing.screen_brightness"}));
+ EXPECT_CALL(*data_source, ReadProperty("debug.tracing.screen_state"))
+ .WillOnce(Return(base::make_optional("2")));
+ EXPECT_CALL(*data_source, ReadProperty("debug.tracing.screen_brightness"))
+ .WillOnce(Return(base::make_optional("0.123456")));
+ data_source->Start();
+
+ protos::gen::TracePacket packet = writer_raw_->GetOnlyTracePacket();
+ EXPECT_TRUE(packet.has_android_system_property());
+ auto properties = packet.android_system_property();
+ EXPECT_EQ(properties.values_size(), 2);
+
+ EXPECT_EQ(properties.values()[0].name(), "debug.tracing.screen_state");
+ EXPECT_EQ(properties.values()[0].value(), "2");
+ EXPECT_EQ(properties.values()[1].name(), "debug.tracing.screen_brightness");
+ EXPECT_EQ(properties.values()[1].value(), "0.123456");
+}
+
+TEST_F(AndroidSystemPropertyDataSourceTest, NotPermitted) {
+ auto data_source = CreateAndroidSystemPropertyDataSource(
+ BuildConfig({"something.with.wrong.prefix"}));
+ EXPECT_CALL(*data_source, ReadProperty("something.with.wrong.prefix"))
+ .Times(0);
+ data_source->Start();
+
+ protos::gen::TracePacket packet = writer_raw_->GetOnlyTracePacket();
+ EXPECT_TRUE(packet.has_android_system_property());
+ auto properties = packet.android_system_property();
+ EXPECT_EQ(properties.values_size(), 0);
+}
+
+TEST_F(AndroidSystemPropertyDataSourceTest, Failure) {
+ auto data_source = CreateAndroidSystemPropertyDataSource(BuildConfig(
+ {"debug.tracing.screen_state", "debug.tracing.screen_brightness"}));
+ EXPECT_CALL(*data_source, ReadProperty("debug.tracing.screen_state"))
+ .WillOnce(Return(base::nullopt));
+ EXPECT_CALL(*data_source, ReadProperty("debug.tracing.screen_brightness"))
+ .WillOnce(Return(base::nullopt));
+ data_source->Start();
+
+ protos::gen::TracePacket packet = writer_raw_->GetOnlyTracePacket();
+ auto properties = packet.android_system_property();
+ EXPECT_EQ(properties.values_size(), 0);
+}
+
+// TODO(simonmacm) test poll_ms
+} // namespace
+} // namespace perfetto
diff --git a/src/traced/probes/probes_producer.cc b/src/traced/probes/probes_producer.cc
index 91483fc..dfbf533 100644
--- a/src/traced/probes/probes_producer.cc
+++ b/src/traced/probes/probes_producer.cc
@@ -37,6 +37,7 @@
#include "src/android_stats/statsd_logging_helper.h"
#include "src/traced/probes/android_game_intervention_list/android_game_intervention_list_data_source.h"
#include "src/traced/probes/android_log/android_log_data_source.h"
+#include "src/traced/probes/android_system_property/android_system_property_data_source.h"
#include "src/traced/probes/common/cpu_freq_info.h"
#include "src/traced/probes/filesystem/inode_file_data_source.h"
#include "src/traced/probes/ftrace/ftrace_data_source.h"
@@ -274,6 +275,17 @@
endpoint_->CreateTraceWriter(buffer_id)));
}
+template <>
+std::unique_ptr<ProbesDataSource>
+ProbesProducer::CreateDSInstance<AndroidSystemPropertyDataSource>(
+ TracingSessionID session_id,
+ const DataSourceConfig& config) {
+ auto buffer_id = static_cast<BufferID>(config.target_buffer());
+ return std::unique_ptr<ProbesDataSource>(new AndroidSystemPropertyDataSource(
+ task_runner_, config, session_id,
+ endpoint_->CreateTraceWriter(buffer_id)));
+}
+
// Another anonymous namespace. This cannot be moved into the anonymous
// namespace on top (it would fail to compile), because the CreateDSInstance
// methods need to be fully declared before.
@@ -296,6 +308,7 @@
Ds<AndroidGameInterventionListDataSource>(),
Ds<AndroidLogDataSource>(),
Ds<AndroidPowerDataSource>(),
+ Ds<AndroidSystemPropertyDataSource>(),
Ds<FtraceDataSource>(),
Ds<InitialDisplayStateDataSource>(),
Ds<InodeFileDataSource>(),