5#ifndef FLUTTER_SHELL_COMMON_ENGINE_H_
6#define FLUTTER_SHELL_COMMON_ENGINE_H_
198 std::unique_ptr<PlatformMessage>
message) = 0;
238 int64_t isolate_port) = 0;
280 virtual std::unique_ptr<std::vector<std::string>>
282 const std::vector<std::string>& supported_locale_data) = 0;
314 virtual const std::shared_ptr<PlatformMessageHandler>&
348 int configuration_id)
const = 0;
366 const std::shared_ptr<fml::ConcurrentTaskRunner>&
367 image_decoder_task_runner,
370 std::unique_ptr<Animator> animator,
372 const std::shared_ptr<FontCollection>& font_collection,
373 std::unique_ptr<RuntimeController> runtime_controller,
374 const std::shared_ptr<fml::SyncSwitch>& gpu_disabled_switch);
425 std::unique_ptr<Animator> animator,
429 const std::shared_ptr<fml::SyncSwitch>& gpu_disabled_switch,
430 const std::shared_future<impeller::RuntimeStageBackend>&
431 runtime_stage_backend);
442 std::unique_ptr<Engine>
Spawn(
446 std::unique_ptr<Animator> animator,
447 const std::string& initial_route,
450 const std::shared_ptr<fml::SyncSwitch>& gpu_disabled_switch)
const;
757 std::function<
void(
bool added)>
callback);
830 uint64_t trace_flow_id);
907 uint64_t trace_flow_id)
override;
975 intptr_t loading_unit_id,
976 std::unique_ptr<const fml::Mapping> snapshot_data,
977 std::unique_ptr<const fml::Mapping> snapshot_instructions);
1002 const std::string& error_message,
1009 return runtime_controller_.get();
1027 std::string DefaultRouteName()
override;
1031 std::unique_ptr<flutter::LayerTree> layer_tree,
1032 float device_pixel_ratio)
override;
1035 void UpdateSemantics(int64_t
view_id,
1040 void SetApplicationLocale(std::string locale)
override;
1043 void SetSemanticsTreeEnabled(
bool enabled)
override;
1046 void HandlePlatformMessage(std::unique_ptr<PlatformMessage>
message)
override;
1049 void OnRootIsolateCreated()
override;
1052 void UpdateIsolateDescription(
const std::string isolate_name,
1053 int64_t isolate_port)
override;
1056 std::unique_ptr<std::vector<std::string>> ComputePlatformResolvedLocale(
1057 const std::vector<std::string>& supported_locale_data)
override;
1060 void RequestDartDeferredLibrary(intptr_t loading_unit_id)
override;
1063 std::weak_ptr<PlatformMessageHandler> GetPlatformMessageHandler()
1067 void SendChannelUpdate(std::string
name,
bool listening)
override;
1070 double GetScaledFontSize(
double unscaled_font_size,
1071 int configuration_id)
const override;
1076 void SetNeedsReportTimings(
bool value)
override;
1080 bool HandleNavigationPlatformMessage(
1081 std::unique_ptr<PlatformMessage>
message);
1087 void HandleAssetPlatformMessage(std::unique_ptr<PlatformMessage>
message);
1089 bool GetAssetAsBuffer(
const std::string&
name, std::vector<uint8_t>*
data);
1101 std::unique_ptr<PointerDataDispatcher> pointer_data_dispatcher_;
1103 std::string last_entry_point_;
1104 std::string last_entry_point_library_;
1105 std::vector<std::string> last_entry_point_args_;
1106 std::optional<int64_t> last_engine_id_;
1107 std::string initial_route_;
1108 std::shared_ptr<AssetManager> asset_manager_;
1109 std::shared_ptr<FontCollection> font_collection_;
1110 std::shared_ptr<NativeAssetsManager> native_assets_manager_;
1111 const std::unique_ptr<ImageDecoder> image_decoder_;
Describes a running instance of the Dart VM. There may only be one running instance of the Dart VM in...
While the engine operates entirely on the UI task runner, it needs the capabilities of the other comp...
virtual fml::TimePoint GetCurrentTimePoint()=0
Returns the current fml::TimePoint. This method is primarily provided to allow tests to control Any m...
virtual double GetScaledFontSize(double unscaled_font_size, int configuration_id) const =0
Synchronously invokes platform-specific APIs to apply the system text scaling on the given unscaled f...
virtual void UpdateIsolateDescription(const std::string isolate_name, int64_t isolate_port)=0
Notifies the shell of the name of the root isolate and its port when that isolate is launched,...
virtual std::unique_ptr< std::vector< std::string > > ComputePlatformResolvedLocale(const std::vector< std::string > &supported_locale_data)=0
Directly invokes platform-specific APIs to compute the locale the platform would have natively resolv...
virtual void OnEngineSetApplicationLocale(std::string locale)=0
Framework sets the application locale.
virtual void OnEngineSetSemanticsTreeEnabled(bool enabled)=0
When the Framework starts or stops generating semantics tree, this new information needs to be convey...
virtual void OnPreEngineRestart()=0
Notifies the delegate that the root isolate of the application is about to be discarded and a new iso...
virtual void OnEngineChannelUpdate(std::string name, bool listening)=0
Invoked when a listener is registered on a platform channel.
virtual void OnEngineHandlePlatformMessage(std::unique_ptr< PlatformMessage > message)=0
When the Flutter application has a message to send to the underlying platform, the message needs to b...
virtual const std::shared_ptr< PlatformMessageHandler > & GetPlatformMessageHandler() const =0
Returns the delegate object that handles PlatformMessage's from Flutter to the host platform (and its...
virtual void SetNeedsReportTimings(bool needs_reporting)=0
Notifies the shell that the application has an opinion about whether its frame timings need to be rep...
virtual void OnEngineUpdateSemantics(int64_t view_id, SemanticsNodeUpdates updates, CustomAccessibilityActionUpdates actions)=0
When the accessibility tree has been updated by the Flutter application, this new information needs t...
virtual void RequestViewFocusChange(const ViewFocusChangeRequest &request)=0
Notifies the client that the Flutter view focus state has changed and the platform view should be upd...
virtual void OnRootIsolateCreated()=0
Notifies the shell that the root isolate is created. Currently, this information is to add to the ser...
virtual void RequestDartDeferredLibrary(intptr_t loading_unit_id)=0
Invoked when the Dart VM requests that a deferred library be loaded. Notifies the engine that the def...
void SetAccessibilityFeatures(int32_t flags)
Notifies the engine that the embedder has expressed an opinion about where the flags to set on the ac...
void FlushMicrotaskQueue()
Flushes the microtask queue of the root isolate.
void SetupDefaultFontManager()
Setup default font manager according to specific platform.
bool RemoveView(int64_t view_id)
Notify the Flutter application that a view is no longer available.
fml::TaskRunnerAffineWeakPtr< ImageDecoder > GetImageDecoderWeakPtr()
void NotifyIdle(fml::TimeDelta deadline)
Notifies the engine that the UI task runner is not expected to undertake a new frame workload till a ...
void SetViewportMetrics(int64_t view_id, const ViewportMetrics &metrics)
Updates the viewport metrics for a view. The viewport metrics detail the size of the rendering viewpo...
void ReportTimings(std::vector< int64_t > timings)
Dart code cannot fully measure the time it takes for a specific frame to be rendered....
void DispatchSemanticsAction(int64_t view_id, int node_id, SemanticsAction action, fml::MallocMapping args)
Notifies the engine that the embedder encountered an accessibility related action on the specified no...
void OnAllViewsRendered() override
fml::TaskRunnerAffineWeakPtr< ImageGeneratorRegistry > GetImageGeneratorRegistry()
Get the ImageGeneratorRegistry associated with the current engine.
void ShutdownPlatformIsolates()
Shuts down all registered platform isolates. Must be called from the platform thread.
void SetDisplays(const std::vector< DisplayData > &displays)
Updates the display metrics for the currently running Flutter application.
const std::weak_ptr< VsyncWaiter > GetVsyncWaiter() const
void BeginFrame(fml::TimePoint frame_time, uint64_t frame_number)
Notifies the engine that it is time to begin working on a new frame previously scheduled via a call t...
tonic::DartErrorHandleType GetUIIsolateLastError()
Errors that are unhandled on the Dart message loop are kept for further inspection till the next unha...
FontCollection & GetFontCollection() override
std::shared_ptr< AssetManager > GetAssetManager() override
RunStatus Run(RunConfiguration configuration)
Moves the root isolate to the DartIsolate::Phase::Running phase on a successful call to this method.
std::string GetUIIsolateName()
Gets the debug name of the root isolate. By default, the debug name of the isolate is derived from it...
~Engine() override
Destroys the engine engine. Called by the shell on the UI task runner. The running root isolate is te...
const std::string & GetLastEntrypointLibrary() const
Get the last Entrypoint Library that was used in the RunConfiguration when |EngineRun| was called.
bool UpdateAssetManager(const std::shared_ptr< AssetManager > &asset_manager)
Updates the asset manager referenced by the root isolate of a Flutter application....
Dart_Port GetUIIsolateMainPort()
Gets the main port of the root isolate. Since the isolate is created immediately in the constructor o...
void DispatchPointerDataPacket(std::unique_ptr< PointerDataPacket > packet, uint64_t trace_flow_id)
Notifies the engine that the embedder has sent it a pointer data packet. A pointer data packet may co...
void LoadDartDeferredLibraryError(intptr_t loading_unit_id, const std::string &error_message, bool transient)
Indicates to the dart VM that the request to load a deferred library with the specified loading unit ...
void LoadDartDeferredLibrary(intptr_t loading_unit_id, std::unique_ptr< const fml::Mapping > snapshot_data, std::unique_ptr< const fml::Mapping > snapshot_instructions)
Loads the Dart shared library into the Dart VM. When the Dart library is loaded successfully,...
void AddView(int64_t view_id, const ViewportMetrics &view_metrics, std::function< void(bool added)> callback)
Notify the Flutter application that a new view is available.
void DoDispatchPacket(std::unique_ptr< PointerDataPacket > packet, uint64_t trace_flow_id) override
bool UIIsolateHasLivePorts()
It is an unexpected challenge to determine when a Dart application is "done". The application cannot ...
const std::string & GetLastEntrypoint() const
Get the last Entrypoint that was used in the RunConfiguration when |EngineRun| was called.
std::optional< int64_t > GetLastEngineId() const
Get the last Engine Id that was used in the RunConfiguration when |EngineRun| was called.
fml::TaskRunnerAffineWeakPtr< Engine > GetWeakPtr() const
RunStatus
Indicates the result of the call to Engine::Run.
bool Restart(RunConfiguration configuration)
Tears down an existing root isolate, reuses the components of that isolate and attempts to launch a n...
bool UIIsolateHasPendingMicrotasks()
Another signal of liveness is the presence of microtasks that have been queued by the application but...
const std::vector< std::string > & GetLastEntrypointArgs() const
Get the last Entrypoint Arguments that was used in the RunConfiguration when |EngineRun| was called....
std::unique_ptr< Engine > Spawn(Delegate &delegate, const PointerDataDispatcherMaker &dispatcher_maker, const Settings &settings, std::unique_ptr< Animator > animator, const std::string &initial_route, const fml::WeakPtr< IOManager > &io_manager, fml::TaskRunnerAffineWeakPtr< SnapshotDelegate > snapshot_delegate, const std::shared_ptr< fml::SyncSwitch > &gpu_disabled_switch) const
Create a Engine that shares as many resources as possible with the calling Engine such that together ...
const std::string & InitialRoute() const
Getter for the initial route. This can be set with a platform message.
void SetSemanticsEnabled(bool enabled)
Notifies the engine that the embedder has expressed an opinion about whether the accessibility tree s...
void DispatchPlatformMessage(std::unique_ptr< PlatformMessage > message)
Notifies the engine that the embedder has sent it a message. This call originates in the platform vie...
const RuntimeController * GetRuntimeController() const
Accessor for the RuntimeController.
std::optional< uint32_t > GetUIIsolateReturnCode()
As described in the discussion for UIIsolateHasLivePorts, the "done-ness" of a Dart application is tr...
void ScheduleSecondaryVsyncCallback(uintptr_t id, const fml::closure &callback) override
Schedule a secondary callback to be executed right after the main VsyncWaiter::AsyncWaitForVsync call...
bool SendViewFocusEvent(const ViewFocusEvent &event)
Notify the Flutter application that the focus state of a native view has changed.
Keeps a priority-ordered registry of image generator builders to be used when decoding images....
The interface for Engine to implement.
Specifies all the configuration required by the runtime library to launch the root isolate....
A Mapping like NonOwnedMapping, but uses Free as its release proc.
std::unique_ptr< RuntimeController > runtime_controller_
TaskRunners task_runners_
std::unique_ptr< Animator > animator_
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
G_BEGIN_DECLS GBytes * message
G_BEGIN_DECLS FlutterViewId view_id
FlutterDesktopBinaryReply callback
#define FML_DISALLOW_COPY_AND_ASSIGN(TypeName)
std::unordered_map< int32_t, SemanticsNode > SemanticsNodeUpdates
std::unordered_map< int32_t, CustomAccessibilityAction > CustomAccessibilityActionUpdates
std::function< std::unique_ptr< PointerDataDispatcher >(PointerDataDispatcher::Delegate &)> PointerDataDispatcherMaker
Signature for constructing PointerDataDispatcher.
DEF_SWITCHES_START aot vmservice shared library name
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
std::function< void()> closure