# Copyright (C) 2020 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. # Notes: # * socket used for receiving /proc/pid/{maps,mem} file descriptors # * readproc group to stat(/proc/pid) to find out UID of processes, and read # /proc/pid/cmdline. # * KILL capability for sending BIONIC_SIGNAL_PROFILER. # * DAC_READ_SEARCH capability for stack unwinding and on-device symbolization (requires # opening libraries/executables for sections not already mapped in). # * foreground task group as unwinding based on minidebug info is a heavyweight action. service traced_perf /system/bin/traced_perf class late_start disabled socket traced_perf stream 0666 root root user nobody group nobody readproc capabilities KILL DAC_READ_SEARCH writepid /dev/cpuset/foreground/tasks # Daemon run state: # * initially off # * |persist.traced_perf.enable| forces daemon to run unconditionally # * if kernel doesn't have perf_event_open LSM hooks, daemon is stopped # * otherwise, follow |traced.lazy.traced_perf| as an on-demand service on property:persist.traced_perf.enable=1 start traced_perf on property:persist.traced_perf.enable="" && property:sys.init.perf_lsm_hooks="" stop traced_perf on property:persist.traced_perf.enable="" && property:sys.init.perf_lsm_hooks=1 && property:traced.lazy.traced_perf=1 start traced_perf on property:persist.traced_perf.enable="" && property:sys.init.perf_lsm_hooks=1 && property:traced.lazy.traced_perf="" stop traced_perf on property:persist.traced_perf.enable=0 setprop persist.traced_perf.enable ""