# 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.
    task_profiles ProcessCapacityHigh
    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.
    task_profiles ProcessCapacityHigh
    # 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 ""
