# Copyright 2012 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

description     "Chromium OS debug daemon"
author          "chromium-os-dev@chromium.org"

start on started system-services
stop on stopping system-services or starting halt or starting reboot
respawn

oom score -100

pre-start script
  TRACING_FILES="buffer_size_kb set_event trace trace_clock \
                 trace_marker trace_options tracing_on"
  # Extra tracing files, required by Android in dev mode
  DEV_TRACING_FILES="options/overwrite options/print-tgid \
                 events/cpufreq_interactive/enable \
                 events/power/cpu_frequency/enable \
                 events/power/cpu_idle/enable \
                 events/power/clock_set_rate/enable \
                 events/sched/sched_switch/enable \
                 events/sched/sched_wakeup/enable"
  TRACING=/sys/kernel/tracing
  INSTANCES="drm"
  # NB: check for tracing dir in case the kernel config changes
  if [ -d "${TRACING}" ]; then
    # enable debugfs-access write access for systrace helper
    for file in $TRACING_FILES; do
      chgrp debugfs-access ${TRACING}/${file} && chmod g+w ${TRACING}/${file}
      for instance in $INSTANCES; do
        chgrp debugfs-access ${TRACING}/instances/${instance}/${file} && \
            chmod g+w ${TRACING}/instances/${instance}/${file}
      done
    done

    if [ "$(crossystem cros_debug)" = "1" ]; then
      for file in $DEV_TRACING_FILES; do
        chgrp debugfs-access ${TRACING}/${file} &&
            chmod g+w ${TRACING}/${file}
      done

      # All users can add tracing markers (required by Android)
      chmod a+w ${TRACING}/trace_marker
    fi
  fi
  # NB: only on exynos5
  MALI_HWC_ENABLE=/sys/class/misc/mali0/device/hwc_enable
  if [ -f "${MALI_HWC_ENABLE}" ]; then
    chgrp debugd ${MALI_HWC_ENABLE} && chmod g+w ${MALI_HWC_ENABLE}
  fi
  # NB: copy logs of stateful (re)creation / powerwash
  cp -aPZ --remove-destination \
     /mnt/stateful_partition/unencrypted/clobber.log \
     /mnt/stateful_partition/unencrypted/clobber-state.log \
     /mnt/stateful_partition/unencrypted/preserve/powerwash_count \
     /var/log/ || true
end script

exec /sbin/debugd

# Wait for daemon to claim its D-Bus name before transitioning to started.
post-start exec minijail0 -u chronos -g chronos /usr/bin/gdbus \
    wait --system --timeout 15 org.chromium.debugd
