// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FLUTTER_RUNTIME_PTRACE_CHECK_H_
#define FLUTTER_RUNTIME_PTRACE_CHECK_H_

#include "flutter/common/settings.h"
#include "flutter/fml/build_config.h"

namespace flutter {

#define TRACING_CHECKS_NECESSARY    \
  OS_IOS && !TARGET_OS_SIMULATOR && \
      (FLUTTER_RUNTIME_MODE == FLUTTER_RUNTIME_MODE_DEBUG)

enum class TracingResult {
  kNotAttempted,
  kEnabled,
  kNotNecessary = kEnabled,
  kDisabled,
};

#if TRACING_CHECKS_NECESSARY
bool EnableTracingIfNecessaryImpl(const Settings& vm_settings);
TracingResult GetTracingResultImpl();
#endif  // TRACING_CHECKS_NECESSARY

//------------------------------------------------------------------------------
/// @brief      Enables tracing in the process so that JIT mode VMs may be
///             launched. Explicitly enabling tracing is not required on all
///             platforms. On platforms where it is not required, calling this
///             method will return true. If tracing is required but cannot be
///             enabled, it is the responsibility of the caller to display the
///             appropriate error message to the user as subsequent attempts to
///             launch the VM in JIT mode will cause process termination.
///
///             This method may be called multiple times and will return the
///             same result. There are no threading restrictions.
///
/// @param[in]  vm_settings  The settings used to launch the VM.
///
/// @return     If tracing was enabled.
///
inline bool EnableTracingIfNecessary(const Settings& vm_settings) {
#if TRACING_CHECKS_NECESSARY
  return EnableTracingIfNecessaryImpl(vm_settings);
#else   // TRACING_CHECKS_NECESSARY
  return true;
#endif  // TRACING_CHECKS_NECESSARY
}

//------------------------------------------------------------------------------
/// @brief      Returns if a tracing check has been performed and its result. To
///             enable tracing, the Settings object used to launch the VM is
///             required. Components may want to display messages based on the
///             result of a previous tracing check without actually having the
///             settings object. This accessor can be used instead.
///
/// @return     The tracing result.
///
inline TracingResult GetTracingResult() {
#if TRACING_CHECKS_NECESSARY
  return GetTracingResultImpl();
#else   // TRACING_CHECKS_NECESSARY
  return TracingResult::kNotNecessary;
#endif  // TRACING_CHECKS_NECESSARY
}

}  // namespace flutter

#endif  // FLUTTER_RUNTIME_PTRACE_CHECK_H_
