# Copyright (C) 2018 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 heapprofd /system/bin/heapprofd
    class late_start
    disabled
    socket heapprofd stream 0666 root root
    user nobody
    group nobody readproc
    # By default, this  daemon is idle. When profiling an app, we should unwind
    # as fast as possible in the interest of the app being profiled.
    writepid /dev/cpuset/foreground/tasks
    onrestart exec_background - nobody shell -- /system/bin/heapprofd --cleanup-after-crash
    # DAC_READ_SEARCH is denied by SELinux on user builds because the SELinux
    # permission is userdebug_or_eng only.
    capabilities KILL DAC_READ_SEARCH

# Allow to start a second heapprofd. We can use that one to profile the
# primary one. See src/memory/profiling/README.md.
service heapprofd_secondary /system/bin/heapprofd
    disabled
    oneshot
    socket heapprofd stream 0666 root root
    user nobody
    group nobody readproc
    # By default, this  daemon is idle. When profiling an app, we should unwind
    # as fast as possible in the interest of the app being profiled.
    writepid /dev/cpuset/foreground/tasks
    # DAC_READ_SEARCH is denied by SELinux on user builds because the SELinux
    # permission is userdebug_or_eng only.
    capabilities KILL DAC_READ_SEARCH

on property:persist.heapprofd.enable=1
    start heapprofd

on property:traced.lazy.heapprofd=1
    start heapprofd

on property:persist.heapprofd.enable="" && property:traced.lazy.heapprofd=""
    stop heapprofd

on property:persist.heapprofd.enable=0
    setprop persist.heapprofd.enable ""
