-
Notifications
You must be signed in to change notification settings - Fork 368
/
perfetto.rc
186 lines (156 loc) · 7.94 KB
/
perfetto.rc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# Copyright (C) 2017 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.
service traced /system/bin/traced
class late_start
disabled
socket traced_consumer stream 0666 root root
socket traced_producer stream 0666 root root
user nobody
group nobody
task_profiles ProcessCapacityHigh
service traced_probes /system/bin/traced_probes
class late_start
disabled
user nobody
# Despite the "log" group below, traced_probes is allowed to read log
# only on userdebug/eng via selinux (see traced_probes.te).
group nobody readproc log readtracefs
task_profiles ProcessCapacityHigh
# Clean up procfs configuration even if traced_probes crashes
# unexpectedly.
onrestart exec_background - nobody shell -- /system/bin/traced_probes --cleanup-after-crash
file /dev/kmsg w
capabilities DAC_READ_SEARCH
on property:persist.device_config.global_settings.sys_traced=1
setprop persist.traced.enable 1
on property:persist.device_config.global_settings.sys_traced=0
setprop persist.traced.enable 0
on property:debug.atrace.user_initiated=1
stop traced_probes
on property:persist.traced.enable=1 && property:debug.atrace.user_initiated=""
start traced_probes
on property:persist.traced.enable=1
# Trace files need to be:
# - Written by either uid:shell or uid:statsd.
# - Read by shell and incidentd.
mkdir /data/misc/perfetto-traces 0773 root shell
# Traces in this directory are only accessed by dumpstate (read+unlink) and
# by the bug reporting UI (ls+getattr).
mkdir /data/misc/perfetto-traces/bugreport 0773 root shell
# Traces in this directory are only accessed by system server
mkdir /data/misc/perfetto-traces/profiling 0777 root shell
# This directory allows shell to save configs file in a place where the
# perfetto cmdline client can read then. /data/local/tmp/ isn't safe because
# too many other domains can write into that. See b/170404111.
mkdir /data/misc/perfetto-configs 0775 root shell
start traced
start traced_probes
on property:persist.traced.enable=0
stop traced
stop traced_probes
# Reset the Perfetto guard rail state on boot:
on post-fs-data
rm /data/misc/perfetto-traces/.guardraildata
#############################################################################
# mm_events - Arms a perfetto trace config that is triggered
# on memory pressure (kmem_activity trigger)
#############################################################################
service mm_events /system/bin/mm_events
class late_start
disabled
oneshot
user nobody
group nobody
on property:persist.mm_events.enabled=true && property:persist.traced.enable=1
restart mm_events # Restart to reset backoff interval
on property:persist.mm_events.enabled=false
stop mm_events
#############################################################################
# perfetto_trace_on_boot - Starts a perfetto trace on boot
#############################################################################
#
# There are two separate actions (a trigger action and a start action) to make
# sure that perfetto_trace_on_boot is started only once on boot (otherwise,
# whenever persist.debug.perfetto.boottrace=1 is set, perfetto_trace_on_boot
# would start immediately).
#
# persist.debug.perfetto.boottrace=1 can be manually set after boot (to record
# a trace on the next reboot) and we don't want to immediately start a trace
# when setting the debug property. So we turn "ro.persistent_properties.ready"
# into a trigger, and then check whether we should start tracing when the
# trigger fires.
on perfetto_maybe_trace_on_boot && property:persist.debug.perfetto.boottrace=1 && property:persist.traced.enable=1
setprop persist.debug.perfetto.boottrace ""
rm /data/misc/perfetto-traces/boottrace.perfetto-trace
# Set by traced after listen()ing on the consumer socket. Without this,
# perfetto could try to connect to traced before traced is ready to listen.
wait_for_prop sys.trace.traced_started 1
start perfetto_trace_on_boot
on property:ro.persistent_properties.ready=true
trigger perfetto_maybe_trace_on_boot
service perfetto_trace_on_boot /system/bin/perfetto -c /data/misc/perfetto-configs/boottrace.pbtxt --txt -o /data/misc/perfetto-traces/boottrace.perfetto-trace
disabled
gentle_kill
oneshot
user shell
group nobody
# This is meant to stop the boot tracing.
# To use this, add a trigger with mode STOP_TRACING in the configuration used in perfetto_trace_on_boot.
# Then create a new config which contains `activate_triggers: <trigger name>` where <trigger name> is
# the name specified in configuration used in perfetto_trace_on_boot.
on property:sys.boot_completed=1 && property:init.svc.perfetto_trace_on_boot=running
exec -- /system/bin/perfetto -c /data/misc/perfetto-configs/stopboottracetrigger.pbtxt --txt
# Forcefully enable select userspace (atrace) tracing categories early into the
# userspace boot. This is primarily for capturing zygote events without waiting
# for perfetto daemons or the /data partition.
on late-init && property:ro.boot.fastboot.boottrace=enabled
setprop debug.atrace.tags.enableflags 802922
# disable on boot complete when using textual ftrace tracing without perfetto.
on property:sys.boot_completed=1 && property:ro.boot.fastboot.boottrace=enabled && property:init.svc.perfetto_trace_on_boot=
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
##############################################################################
# perfetto_persistent_sysui_tracing_for_bugreport - Keeps a persistent active
# tracing session, for debugging purposes
##############################################################################
on property:persist.debug.perfetto.persistent_sysui_tracing_for_bugreport=1 && property:persist.traced.enable=1 && property:ro.debuggable=1
# Set by traced after listen()ing on the consumer socket. Without this,
# perfetto could try to connect to traced before traced is ready to listen.
wait_for_prop sys.trace.traced_started 1
start perfetto_persistent_sysui_tracing_for_bugreport
# If something disables traced, we don't want init to respawn the service (that will fail) continuously.
on property:persist.traced.enable=0
stop perfetto_persistent_sysui_tracing_for_bugreport
on property:persist.debug.perfetto.persistent_sysui_tracing_for_bugreport=0
setprop persist.debug.perfetto.persistent_sysui_tracing_for_bugreport ""
on property:persist.debug.perfetto.persistent_sysui_tracing_for_bugreport=""
stop perfetto_persistent_sysui_tracing_for_bugreport
service perfetto_persistent_sysui_tracing_for_bugreport /system/bin/perfetto -c /system/etc/perfetto/persistent_cfg.pbtxt --txt -o /dev/null
disabled
timeout_period 86400
restart_period 60
user nobody
group nobody