| // 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_DART_VM_DATA_H_ |
| #define FLUTTER_RUNTIME_DART_VM_DATA_H_ |
| |
| #include "flutter/fml/macros.h" |
| #include "flutter/runtime/dart_snapshot.h" |
| |
| namespace flutter { |
| |
| //------------------------------------------------------------------------------ |
| /// @brief Provides thread-safe access to data that is necessary to |
| /// bootstrap a new Dart VM instance. All snapshots referenced by |
| /// this object are read-only. |
| /// |
| class DartVMData { |
| public: |
| //---------------------------------------------------------------------------- |
| /// @brief Creates a new instance of `DartVMData`. Both the VM and |
| /// isolate snapshot members are optional and may be `nullptr`. If |
| /// `nullptr`, the snapshot resolvers present in the settings |
| /// object are used to infer the snapshots. If the snapshots |
| /// cannot be inferred from the settings object, this method |
| /// return `nullptr`. |
| /// |
| /// @param[in] settings The settings used to infer the VM and |
| /// isolate snapshots if they are not provided |
| /// directly. |
| /// @param[in] vm_snapshot The VM snapshot or `nullptr`. |
| /// @param[in] isolate_snapshot The isolate snapshot or `nullptr`. |
| /// |
| /// @return A new instance of VM data that can be used to bootstrap a Dart |
| /// VM. `nullptr` if the snapshots are not provided and cannot be |
| /// inferred from the settings object. |
| /// |
| static std::shared_ptr<const DartVMData> Create( |
| const Settings& settings, |
| fml::RefPtr<const DartSnapshot> vm_snapshot, |
| fml::RefPtr<const DartSnapshot> isolate_snapshot); |
| |
| //---------------------------------------------------------------------------- |
| /// @brief Collect the DartVMData instance. |
| /// |
| ~DartVMData(); |
| |
| //---------------------------------------------------------------------------- |
| /// @brief The settings object from which the Dart snapshots were |
| /// inferred. |
| /// |
| /// @return The settings. |
| /// |
| const Settings& GetSettings() const; |
| |
| //---------------------------------------------------------------------------- |
| /// @brief Gets the VM snapshot. This can be in the call to bootstrap |
| /// the Dart VM via `Dart_Initialize`. |
| /// |
| /// @return The VM snapshot. |
| /// |
| const DartSnapshot& GetVMSnapshot() const; |
| |
| //---------------------------------------------------------------------------- |
| /// @brief Get the isolate snapshot necessary to launch isolates in the |
| /// Dart VM. The Dart VM instance in which these isolates are |
| /// launched must be the same as the VM created using snapshot |
| /// accessed via `GetVMSnapshot`. |
| /// |
| /// @return The isolate snapshot. |
| /// |
| fml::RefPtr<const DartSnapshot> GetIsolateSnapshot() const; |
| |
| //---------------------------------------------------------------------------- |
| /// @brief Get the isolate snapshot used to launch the service isolate |
| /// in the Dart VM. |
| /// |
| /// @return The service isolate snapshot. |
| /// |
| fml::RefPtr<const DartSnapshot> GetServiceIsolateSnapshot() const; |
| |
| //---------------------------------------------------------------------------- |
| /// @brief Returns whether the service isolate snapshot requires null |
| /// safety in the Dart_IsolateFlags used to create the isolate. |
| /// |
| /// @return True if the snapshot requires null safety. |
| /// |
| bool GetServiceIsolateSnapshotNullSafety() const; |
| |
| private: |
| const Settings settings_; |
| const fml::RefPtr<const DartSnapshot> vm_snapshot_; |
| const fml::RefPtr<const DartSnapshot> isolate_snapshot_; |
| const fml::RefPtr<const DartSnapshot> service_isolate_snapshot_; |
| |
| DartVMData(const Settings& settings, |
| fml::RefPtr<const DartSnapshot> vm_snapshot, |
| fml::RefPtr<const DartSnapshot> isolate_snapshot, |
| fml::RefPtr<const DartSnapshot> service_isolate_snapshot); |
| |
| FML_DISALLOW_COPY_AND_ASSIGN(DartVMData); |
| }; |
| |
| } // namespace flutter |
| |
| #endif // FLUTTER_RUNTIME_DART_VM_DATA_H_ |