| // Copyright 2020 The Chromium 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 BASE_MAC_ROSETTA_H_ |
| #define BASE_MAC_ROSETTA_H_ |
| |
| #include <vector> |
| |
| #include "base/base_export.h" |
| #include "base/callback.h" |
| #include "base/strings/string16.h" |
| #include "build/build_config.h" |
| |
| namespace base { |
| |
| class FilePath; |
| |
| namespace mac { |
| |
| #if defined(ARCH_CPU_X86_64) |
| |
| // Returns true if the current process is being translated by Rosetta. |
| bool ProcessIsTranslated(); |
| |
| #endif // ARCH_CPU_X86_64 |
| |
| #if defined(ARCH_CPU_ARM64) |
| |
| // Returns true if Rosetta is installed and available to translate x86_64 code. |
| BASE_EXPORT bool IsRosettaInstalled(); |
| |
| // Prompt the user to allow for the installation of Rosetta. `callback` is |
| // called with the result of the Rosetta installation. The UI is presented to |
| // the user in a dialog with the `title_text` and `body_text`. Its thread-safety |
| // is not known; call it from the main thread and the callback will happen on |
| // the main thread as well. |
| enum class RosettaInstallationResult { |
| kFailedToAccessSPI, |
| kAlreadyInstalled, |
| kInstallationFailure, |
| kInstallationSuccess, |
| }; |
| BASE_EXPORT void RequestRosettaInstallation( |
| const string16& title_text, |
| const string16& body_text, |
| OnceCallback<void(RosettaInstallationResult)> callback); |
| |
| #endif // ARCH_CPU_ARM64 |
| |
| // Requests an ahead-of-time translation of the binaries with paths given in |
| // `binaries`. Returns the success value (true == success, false == failure) |
| // indicated by the underlying call. |
| // |
| // Observed behavior about Rosetta AOT translation: |
| // - If a binary was already translated, it will not be translated again. |
| // - The call blocks and waits for the completion of the translation. Do not |
| // call this on the main thread. |
| BASE_EXPORT bool RequestRosettaAheadOfTimeTranslation( |
| const std::vector<FilePath>& binaries); |
| |
| } // namespace mac |
| } // namespace base |
| |
| #endif // BASE_MAC_ROSETTA_H_ |