aboutsummaryrefslogtreecommitdiff
path: root/perfetto.rc
blob: 3f1801da0c6c6ace8fb608d9a27bdd8685a9366e (plain)
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 0773 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