# 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 ""
