mirror of
https://github.com/encounter/engine.git
synced 2026-03-30 11:09:55 -07:00
43fa420b04
* Make IOManager own resource context
179 lines
5.6 KiB
C++
179 lines
5.6 KiB
C++
// 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 SHELL_COMMON_ENGINE_H_
|
|
#define SHELL_COMMON_ENGINE_H_
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
#include "flutter/assets/asset_manager.h"
|
|
#include "flutter/common/task_runners.h"
|
|
#include "flutter/fml/macros.h"
|
|
#include "flutter/fml/memory/weak_ptr.h"
|
|
#include "flutter/lib/ui/semantics/custom_accessibility_action.h"
|
|
#include "flutter/lib/ui/semantics/semantics_node.h"
|
|
#include "flutter/lib/ui/snapshot_delegate.h"
|
|
#include "flutter/lib/ui/text/font_collection.h"
|
|
#include "flutter/lib/ui/window/platform_message.h"
|
|
#include "flutter/lib/ui/window/viewport_metrics.h"
|
|
#include "flutter/runtime/dart_vm.h"
|
|
#include "flutter/runtime/runtime_controller.h"
|
|
#include "flutter/runtime/runtime_delegate.h"
|
|
#include "flutter/shell/common/animator.h"
|
|
#include "flutter/shell/common/io_manager.h"
|
|
#include "flutter/shell/common/rasterizer.h"
|
|
#include "flutter/shell/common/run_configuration.h"
|
|
#include "third_party/skia/include/core/SkPicture.h"
|
|
|
|
namespace shell {
|
|
|
|
class Engine final : public blink::RuntimeDelegate {
|
|
public:
|
|
// Used by Engine::Run
|
|
enum class RunStatus {
|
|
Success, // Successful call to Run()
|
|
FailureAlreadyRunning, // Isolate was already running; may not be
|
|
// considered a failure by callers
|
|
Failure, // Isolate could not be started or other unspecified failure
|
|
};
|
|
|
|
class Delegate {
|
|
public:
|
|
virtual void OnEngineUpdateSemantics(
|
|
blink::SemanticsNodeUpdates update,
|
|
blink::CustomAccessibilityActionUpdates actions) = 0;
|
|
|
|
virtual void OnEngineHandlePlatformMessage(
|
|
fml::RefPtr<blink::PlatformMessage> message) = 0;
|
|
|
|
virtual void OnPreEngineRestart() = 0;
|
|
|
|
virtual void UpdateIsolateDescription(const std::string isolate_name,
|
|
int64_t isolate_port) = 0;
|
|
};
|
|
|
|
Engine(Delegate& delegate,
|
|
blink::DartVM& vm,
|
|
fml::RefPtr<blink::DartSnapshot> isolate_snapshot,
|
|
fml::RefPtr<blink::DartSnapshot> shared_snapshot,
|
|
blink::TaskRunners task_runners,
|
|
blink::Settings settings,
|
|
std::unique_ptr<Animator> animator,
|
|
fml::WeakPtr<blink::SnapshotDelegate> snapshot_delegate,
|
|
fml::WeakPtr<blink::IOManager> io_manager);
|
|
|
|
~Engine() override;
|
|
|
|
float GetDisplayRefreshRate() const;
|
|
|
|
fml::WeakPtr<Engine> GetWeakPtr() const;
|
|
|
|
FML_WARN_UNUSED_RESULT
|
|
RunStatus Run(RunConfiguration configuration);
|
|
|
|
// Used to "cold reload" a running application where the shell (along with the
|
|
// platform view and its rasterizer bindings) remains the same but the root
|
|
// isolate is torn down and restarted with the new configuration. Only used in
|
|
// the development workflow.
|
|
FML_WARN_UNUSED_RESULT
|
|
bool Restart(RunConfiguration configuration);
|
|
|
|
bool UpdateAssetManager(std::shared_ptr<blink::AssetManager> asset_manager);
|
|
|
|
void BeginFrame(fml::TimePoint frame_time);
|
|
|
|
void NotifyIdle(int64_t deadline);
|
|
|
|
Dart_Port GetUIIsolateMainPort();
|
|
|
|
std::string GetUIIsolateName();
|
|
|
|
bool UIIsolateHasLivePorts();
|
|
|
|
tonic::DartErrorHandleType GetUIIsolateLastError();
|
|
|
|
std::pair<bool, uint32_t> GetUIIsolateReturnCode();
|
|
|
|
void OnOutputSurfaceCreated();
|
|
|
|
void OnOutputSurfaceDestroyed();
|
|
|
|
void SetViewportMetrics(const blink::ViewportMetrics& metrics);
|
|
|
|
void DispatchPlatformMessage(fml::RefPtr<blink::PlatformMessage> message);
|
|
|
|
void DispatchPointerDataPacket(const blink::PointerDataPacket& packet);
|
|
|
|
void DispatchSemanticsAction(int id,
|
|
blink::SemanticsAction action,
|
|
std::vector<uint8_t> args);
|
|
|
|
void SetSemanticsEnabled(bool enabled);
|
|
|
|
void SetAccessibilityFeatures(int32_t flags);
|
|
|
|
void ScheduleFrame(bool regenerate_layer_tree = true) override;
|
|
|
|
// |blink::RuntimeDelegate|
|
|
blink::FontCollection& GetFontCollection() override;
|
|
|
|
private:
|
|
Engine::Delegate& delegate_;
|
|
const blink::Settings settings_;
|
|
std::unique_ptr<Animator> animator_;
|
|
std::unique_ptr<blink::RuntimeController> runtime_controller_;
|
|
std::string initial_route_;
|
|
blink::ViewportMetrics viewport_metrics_;
|
|
std::shared_ptr<blink::AssetManager> asset_manager_;
|
|
bool activity_running_;
|
|
bool have_surface_;
|
|
blink::FontCollection font_collection_;
|
|
fml::WeakPtrFactory<Engine> weak_factory_;
|
|
|
|
// |blink::RuntimeDelegate|
|
|
std::string DefaultRouteName() override;
|
|
|
|
// |blink::RuntimeDelegate|
|
|
void Render(std::unique_ptr<flow::LayerTree> layer_tree) override;
|
|
|
|
// |blink::RuntimeDelegate|
|
|
void UpdateSemantics(
|
|
blink::SemanticsNodeUpdates update,
|
|
blink::CustomAccessibilityActionUpdates actions) override;
|
|
|
|
// |blink::RuntimeDelegate|
|
|
void HandlePlatformMessage(
|
|
fml::RefPtr<blink::PlatformMessage> message) override;
|
|
|
|
// |blink::RuntimeDelegate|
|
|
void UpdateIsolateDescription(const std::string isolate_name,
|
|
int64_t isolate_port) override;
|
|
|
|
void StopAnimator();
|
|
|
|
void StartAnimatorIfPossible();
|
|
|
|
bool HandleLifecyclePlatformMessage(blink::PlatformMessage* message);
|
|
|
|
bool HandleNavigationPlatformMessage(
|
|
fml::RefPtr<blink::PlatformMessage> message);
|
|
|
|
bool HandleLocalizationPlatformMessage(blink::PlatformMessage* message);
|
|
|
|
void HandleSettingsPlatformMessage(blink::PlatformMessage* message);
|
|
|
|
void HandleAssetPlatformMessage(fml::RefPtr<blink::PlatformMessage> message);
|
|
|
|
bool GetAssetAsBuffer(const std::string& name, std::vector<uint8_t>* data);
|
|
|
|
RunStatus PrepareAndLaunchIsolate(RunConfiguration configuration);
|
|
|
|
FML_DISALLOW_COPY_AND_ASSIGN(Engine);
|
|
};
|
|
|
|
} // namespace shell
|
|
|
|
#endif // SHELL_COMMON_ENGINE_H_
|