# 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 readtracefs
    capabilities KILL DAC_READ_SEARCH
    task_profiles ProcessCapacityHigh
    shared_kallsyms

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