# 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

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