Skip to content

Commit

Permalink
Merge changes from topic "nscobie-android.track_event_sysprop_guard-c…
Browse files Browse the repository at this point in the history
…ode" into main

* changes:
  Add logic to handle android.sdk_sysprop_guard in traced
  Add android.sdk_sysprop_guard data source
  • Loading branch information
nscobie authored and Gerrit Code Review committed Aug 11, 2023
2 parents 6eda209 + 11cbee2 commit 3ab8661
Show file tree
Hide file tree
Showing 12 changed files with 506 additions and 3 deletions.
15 changes: 15 additions & 0 deletions Android.bp
Original file line number Diff line number Diff line change
Expand Up @@ -2645,6 +2645,7 @@ genrule {
"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_sdk_sysprop_guard_config.proto",
"protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/network_trace_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
Expand All @@ -2660,6 +2661,7 @@ genrule {
"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_sdk_sysprop_guard_config.gen.cc",
"external/perfetto/protos/perfetto/config/android/android_system_property_config.gen.cc",
"external/perfetto/protos/perfetto/config/android/network_trace_config.gen.cc",
"external/perfetto/protos/perfetto/config/android/packages_list_config.gen.cc",
Expand All @@ -2675,6 +2677,7 @@ genrule {
"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_sdk_sysprop_guard_config.proto",
"protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/network_trace_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
Expand All @@ -2690,6 +2693,7 @@ genrule {
"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_sdk_sysprop_guard_config.gen.h",
"external/perfetto/protos/perfetto/config/android/android_system_property_config.gen.h",
"external/perfetto/protos/perfetto/config/android/network_trace_config.gen.h",
"external/perfetto/protos/perfetto/config/android/packages_list_config.gen.h",
Expand All @@ -2709,6 +2713,7 @@ genrule {
"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_sdk_sysprop_guard_config.proto",
"protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/network_trace_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
Expand All @@ -2723,6 +2728,7 @@ genrule {
"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_sdk_sysprop_guard_config.pb.cc",
"external/perfetto/protos/perfetto/config/android/android_system_property_config.pb.cc",
"external/perfetto/protos/perfetto/config/android/network_trace_config.pb.cc",
"external/perfetto/protos/perfetto/config/android/packages_list_config.pb.cc",
Expand All @@ -2738,6 +2744,7 @@ genrule {
"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_sdk_sysprop_guard_config.proto",
"protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/network_trace_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
Expand All @@ -2752,6 +2759,7 @@ genrule {
"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_sdk_sysprop_guard_config.pb.h",
"external/perfetto/protos/perfetto/config/android/android_system_property_config.pb.h",
"external/perfetto/protos/perfetto/config/android/network_trace_config.pb.h",
"external/perfetto/protos/perfetto/config/android/packages_list_config.pb.h",
Expand All @@ -2771,6 +2779,7 @@ genrule {
"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_sdk_sysprop_guard_config.proto",
"protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/network_trace_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
Expand All @@ -2786,6 +2795,7 @@ genrule {
"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_sdk_sysprop_guard_config.pbzero.cc",
"external/perfetto/protos/perfetto/config/android/android_system_property_config.pbzero.cc",
"external/perfetto/protos/perfetto/config/android/network_trace_config.pbzero.cc",
"external/perfetto/protos/perfetto/config/android/packages_list_config.pbzero.cc",
Expand All @@ -2801,6 +2811,7 @@ genrule {
"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_sdk_sysprop_guard_config.proto",
"protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/network_trace_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
Expand All @@ -2816,6 +2827,7 @@ genrule {
"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_sdk_sysprop_guard_config.pbzero.h",
"external/perfetto/protos/perfetto/config/android/android_system_property_config.pbzero.h",
"external/perfetto/protos/perfetto/config/android/network_trace_config.pbzero.h",
"external/perfetto/protos/perfetto/config/android/packages_list_config.pbzero.h",
Expand Down Expand Up @@ -2911,6 +2923,7 @@ genrule {
"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_sdk_sysprop_guard_config.proto",
"protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/network_trace_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
Expand Down Expand Up @@ -5020,6 +5033,7 @@ genrule {
"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_sdk_sysprop_guard_config.proto",
"protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/network_trace_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
Expand Down Expand Up @@ -11809,6 +11823,7 @@ java_library {
"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_sdk_sysprop_guard_config.proto",
"protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/network_trace_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
Expand Down
1 change: 1 addition & 0 deletions BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -3528,6 +3528,7 @@ perfetto_proto_library(
"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_sdk_sysprop_guard_config.proto",
"protos/perfetto/config/android/android_system_property_config.proto",
"protos/perfetto/config/android/network_trace_config.proto",
"protos/perfetto/config/android/packages_list_config.proto",
Expand Down
12 changes: 12 additions & 0 deletions perfetto.rc
Original file line number Diff line number Diff line change
Expand Up @@ -141,3 +141,15 @@ on property:sys.boot_completed=1 && property:ro.boot.fastboot.boottrace=enabled
setprop debug.atrace.tags.enableflags 0
write /sys/kernel/debug/tracing/tracing_on 0
write /sys/kernel/tracing/tracing_on 0

# These must be set as soon as possible for processes guarded by
# android.sdk_sysprop_guard to find and cache the memory locations of
# where these sysprops are stored, particularly SurfaceFlinger which starts
# very early.
# TODO(b/281329340): remove this when no longer needed.
on init
setprop debug.perfetto.sdk_sysprop_guard_generation 0
setprop debug.hwui.skia_tracing_enabled false
setprop debug.hwui.skia_use_perfetto_track_events false
setprop debug.renderengine.skia_tracing_enabled false
setprop debug.renderengine.skia_use_perfetto_track_events false
1 change: 1 addition & 0 deletions protos/perfetto/config/android/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ perfetto_proto_library("@TYPE@") {
"android_game_intervention_list_config.proto",
"android_log_config.proto",
"android_polled_state_config.proto",
"android_sdk_sysprop_guard_config.proto",
"android_system_property_config.proto",
"network_trace_config.proto",
"packages_list_config.proto",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
* 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.
*/

syntax = "proto2";

package perfetto.protos;

// Data source that controls the system properties used to guard initialization
// of track_event producers (i.e. Skia) in apps using HWUI, and certain
// processes like SurfaceFlinger.
//
// This data source only tells Skia to initialized the Perfetto SDK and start
// routing data to the Track Event system instead of ATrace. For those events
// to actually show up in a trace, the track_event data source must be used as
// well. The Perfetto SDK cannot be de-initialized, so some long-lived apps and
// processes may need to be restarted for Skia to revert to using ATrace if
// Track Events are no longer desired.
//
// In addition to switching Skia to use Perfetto's track_event data source,
// this "guard" also controls Skia's "broad tracing", which removes Skia's
// internal tracing constraints and allows the track_event config to specify
// which categories should be traced. Filtering to the "skia.always" category
// *tag* in a track_event config can be used to re-enable the standard
// constraints typically used with ATrace.
//
// Data source name: android.sdk_sysprop_guard
// Introduced in Android 14 (U) QPR1.
// Next id: 4
message AndroidSdkSyspropGuardConfig {
// If true, configures SurfaceFlinger to initialize Skia's Perfetto
// integration with the track_event data source in RenderEngine.
// If false or omitted, the simpler ATrace fallback is used.
//
// NOTE: once enabled, Skia will only revert to ATrace if SurfaceFlinger is
// restarted.
//
// Specifically this sets the following system properties:
// - debug.renderengine.skia_tracing_enabled
// - debug.renderengine.skia_use_perfetto_track_events
//
// Does not affect actual track_event data *collection*, which must be
// configured seperately.
optional bool surfaceflinger_skia_track_events = 1;

// If true, configures HWUI apps to initialize Skia's Perfetto integration
// with the track_event data source. hwui_package_name_filter
// can be used to control which apps are affected.
// If false or omitted, the simpler ATrace fallback is used.
//
// NOTE: once enabled, Skia will only revert to ATrace if the app is
// restarted.
//
// ATTENTION: affects ALL HWUI APPS if hwui_package_name_filter is not set!
// If filtering is NOT set, this controls these GLOBAL system properties:
// - debug.hwui.skia_tracing_enabled
// - debug.hwui.skia_use_perfetto_track_events
// If filtering IS set, this controls these APP-SPECIFIC system properties,
// for each package listed in the filter:
// - debug.hwui.skia_tracing_enabled.<package.name>
// - debug.hwui.skia_use_perfetto_track_events.<package.name>
//
// Does not affect actual track_event data *collection*, which must be
// configured seperately.
optional bool hwui_skia_track_events = 2;

// If non-empty, hwui_skia_track_events applies to only the packages listed.
// Otherwise, hwui_skia_track_events applies globally to all HWUI apps.
repeated string hwui_package_name_filter = 3;
}
8 changes: 7 additions & 1 deletion protos/perfetto/config/data_source_config.proto
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import "protos/perfetto/config/android/android_game_intervention_list_config.pro
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/android_sdk_sysprop_guard_config.proto";
import "protos/perfetto/config/android/network_trace_config.proto";
import "protos/perfetto/config/android/packages_list_config.proto";
import "protos/perfetto/config/android/surfaceflinger_layers_config.proto";
Expand All @@ -44,7 +45,7 @@ import "protos/perfetto/config/track_event/track_event_config.proto";
import "protos/perfetto/config/system_info/system_info.proto";

// The configuration that is passed to each data source when starting tracing.
// Next id: 124
// Next id: 125
message DataSourceConfig {
enum SessionInitiator {
SESSION_INITIATOR_UNSPECIFIED = 0;
Expand Down Expand Up @@ -175,6 +176,11 @@ message DataSourceConfig {
optional SurfaceFlingerTransactionsConfig surfaceflinger_transactions_config =
123 [lazy = true];

// Data source name: android.sdk_sysprop_guard
// Introduced in Android 14 (U) QPR1.
optional AndroidSdkSyspropGuardConfig android_sdk_sysprop_guard_config = 124
[lazy = true];

// This is a fallback mechanism to send a free-form text config to the
// producer. In theory this should never be needed. All the code that
// is part of the platform (i.e. traced service) is supposed to *not* truncate
Expand Down
Loading

0 comments on commit 3ab8661

Please sign in to comment.