mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Some components in the Flutter engine were derived from the forked blink codebase. While the forked components have either been removed or rewritten, the use of the blink namespace has mostly (and inconsistently) remained. This renames the blink namesapce to flutter for consistency. There are no functional changes in this patch.
180 lines
5.4 KiB
C++
180 lines
5.4 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 FLUTTER_RUNTIME_RUNTIME_CONTROLLER_H_
|
|
#define FLUTTER_RUNTIME_RUNTIME_CONTROLLER_H_
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "flutter/common/task_runners.h"
|
|
#include "flutter/flow/layers/layer_tree.h"
|
|
#include "flutter/fml/macros.h"
|
|
#include "flutter/lib/ui/io_manager.h"
|
|
#include "flutter/lib/ui/text/font_collection.h"
|
|
#include "flutter/lib/ui/ui_dart_state.h"
|
|
#include "flutter/lib/ui/window/pointer_data_packet.h"
|
|
#include "flutter/lib/ui/window/window.h"
|
|
#include "flutter/runtime/dart_vm.h"
|
|
#include "rapidjson/document.h"
|
|
#include "rapidjson/stringbuffer.h"
|
|
|
|
namespace flutter {
|
|
class Scene;
|
|
class RuntimeDelegate;
|
|
class View;
|
|
class Window;
|
|
|
|
class RuntimeController final : public WindowClient {
|
|
public:
|
|
RuntimeController(RuntimeDelegate& client,
|
|
DartVM* vm,
|
|
fml::RefPtr<const DartSnapshot> isolate_snapshot,
|
|
fml::RefPtr<const DartSnapshot> shared_snapshot,
|
|
TaskRunners task_runners,
|
|
fml::WeakPtr<SnapshotDelegate> snapshot_delegate,
|
|
fml::WeakPtr<IOManager> io_manager,
|
|
std::string advisory_script_uri,
|
|
std::string advisory_script_entrypoint,
|
|
std::function<void(int64_t)> idle_notification_callback);
|
|
|
|
~RuntimeController() override;
|
|
|
|
std::unique_ptr<RuntimeController> Clone() const;
|
|
|
|
bool SetViewportMetrics(const ViewportMetrics& metrics);
|
|
|
|
bool SetLocales(const std::vector<std::string>& locale_data);
|
|
|
|
bool SetUserSettingsData(const std::string& data);
|
|
|
|
bool SetLifecycleState(const std::string& data);
|
|
|
|
bool SetSemanticsEnabled(bool enabled);
|
|
|
|
bool SetAccessibilityFeatures(int32_t flags);
|
|
|
|
bool BeginFrame(fml::TimePoint frame_time);
|
|
|
|
bool NotifyIdle(int64_t deadline);
|
|
|
|
bool IsRootIsolateRunning() const;
|
|
|
|
bool DispatchPlatformMessage(fml::RefPtr<PlatformMessage> message);
|
|
|
|
bool DispatchPointerDataPacket(const PointerDataPacket& packet);
|
|
|
|
bool DispatchSemanticsAction(int32_t id,
|
|
SemanticsAction action,
|
|
std::vector<uint8_t> args);
|
|
|
|
Dart_Port GetMainPort();
|
|
|
|
std::string GetIsolateName();
|
|
|
|
bool HasLivePorts();
|
|
|
|
tonic::DartErrorHandleType GetLastError();
|
|
|
|
std::weak_ptr<DartIsolate> GetRootIsolate();
|
|
|
|
std::pair<bool, uint32_t> GetRootIsolateReturnCode();
|
|
|
|
private:
|
|
struct Locale {
|
|
Locale(std::string language_code_,
|
|
std::string country_code_,
|
|
std::string script_code_,
|
|
std::string variant_code_);
|
|
|
|
~Locale();
|
|
|
|
std::string language_code;
|
|
std::string country_code;
|
|
std::string script_code;
|
|
std::string variant_code;
|
|
};
|
|
|
|
// Stores data about the window to be used at startup
|
|
// as well as on hot restarts. Data kept here will persist
|
|
// after hot restart.
|
|
struct WindowData {
|
|
WindowData();
|
|
|
|
WindowData(const WindowData& other);
|
|
|
|
~WindowData();
|
|
|
|
ViewportMetrics viewport_metrics;
|
|
std::string language_code;
|
|
std::string country_code;
|
|
std::string script_code;
|
|
std::string variant_code;
|
|
std::vector<std::string> locale_data;
|
|
std::string user_settings_data = "{}";
|
|
std::string lifecycle_state;
|
|
bool semantics_enabled = false;
|
|
bool assistive_technology_enabled = false;
|
|
int32_t accessibility_feature_flags_ = 0;
|
|
};
|
|
|
|
RuntimeDelegate& client_;
|
|
DartVM* const vm_;
|
|
fml::RefPtr<const DartSnapshot> isolate_snapshot_;
|
|
fml::RefPtr<const DartSnapshot> shared_snapshot_;
|
|
TaskRunners task_runners_;
|
|
fml::WeakPtr<SnapshotDelegate> snapshot_delegate_;
|
|
fml::WeakPtr<IOManager> io_manager_;
|
|
std::string advisory_script_uri_;
|
|
std::string advisory_script_entrypoint_;
|
|
std::function<void(int64_t)> idle_notification_callback_;
|
|
WindowData window_data_;
|
|
std::weak_ptr<DartIsolate> root_isolate_;
|
|
std::pair<bool, uint32_t> root_isolate_return_code_ = {false, 0};
|
|
|
|
RuntimeController(RuntimeDelegate& client,
|
|
DartVM* vm,
|
|
fml::RefPtr<const DartSnapshot> isolate_snapshot,
|
|
fml::RefPtr<const DartSnapshot> shared_snapshot,
|
|
TaskRunners task_runners,
|
|
fml::WeakPtr<SnapshotDelegate> snapshot_delegate,
|
|
fml::WeakPtr<IOManager> io_manager,
|
|
std::string advisory_script_uri,
|
|
std::string advisory_script_entrypoint,
|
|
std::function<void(int64_t)> idle_notification_callback,
|
|
WindowData data);
|
|
|
|
Window* GetWindowIfAvailable();
|
|
|
|
bool FlushRuntimeStateToIsolate();
|
|
|
|
// |flutter::WindowClient|
|
|
std::string DefaultRouteName() override;
|
|
|
|
// |flutter::WindowClient|
|
|
void ScheduleFrame() override;
|
|
|
|
// |flutter::WindowClient|
|
|
void Render(Scene* scene) override;
|
|
|
|
// |flutter::WindowClient|
|
|
void UpdateSemantics(SemanticsUpdate* update) override;
|
|
|
|
// |flutter::WindowClient|
|
|
void HandlePlatformMessage(fml::RefPtr<PlatformMessage> message) override;
|
|
|
|
// |flutter::WindowClient|
|
|
FontCollection& GetFontCollection() override;
|
|
|
|
// |flutter::WindowClient|
|
|
void UpdateIsolateDescription(const std::string isolate_name,
|
|
int64_t isolate_port) override;
|
|
|
|
FML_DISALLOW_COPY_AND_ASSIGN(RuntimeController);
|
|
};
|
|
|
|
} // namespace flutter
|
|
|
|
#endif // FLUTTER_RUNTIME_RUNTIME_CONTROLLER_H_
|