// 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 Create( const Settings& settings, fml::RefPtr vm_snapshot, fml::RefPtr 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 GetIsolateSnapshot() const; //---------------------------------------------------------------------------- /// @brief Get the isolate snapshot used to launch the service isolate /// in the Dart VM. /// /// @return The service isolate snapshot. /// fml::RefPtr 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 vm_snapshot_; const fml::RefPtr isolate_snapshot_; const fml::RefPtr service_isolate_snapshot_; DartVMData(const Settings& settings, fml::RefPtr vm_snapshot, fml::RefPtr isolate_snapshot, fml::RefPtr service_isolate_snapshot); FML_DISALLOW_COPY_AND_ASSIGN(DartVMData); }; } // namespace flutter #endif // FLUTTER_RUNTIME_DART_VM_DATA_H_