| // 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 \ |
| FML_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_ |