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