runtime_controller.h 5.8 KB
Newer Older
M
Michael Goderbauer 已提交
1
// Copyright 2013 The Flutter Authors. All rights reserved.
2 3 4
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5 6
#ifndef FLUTTER_RUNTIME_RUNTIME_CONTROLLER_H_
#define FLUTTER_RUNTIME_RUNTIME_CONTROLLER_H_
7 8

#include <memory>
9
#include <vector>
10

11
#include "flutter/common/task_runners.h"
12
#include "flutter/flow/layers/layer_tree.h"
13
#include "flutter/fml/macros.h"
14
#include "flutter/lib/ui/io_manager.h"
15
#include "flutter/lib/ui/text/font_collection.h"
16
#include "flutter/lib/ui/ui_dart_state.h"
17
#include "flutter/lib/ui/window/pointer_data_packet.h"
18
#include "flutter/lib/ui/window/window.h"
19
#include "flutter/runtime/dart_vm.h"
20 21
#include "rapidjson/document.h"
#include "rapidjson/stringbuffer.h"
22

23
namespace flutter {
24
class Scene;
25
class RuntimeDelegate;
26
class View;
27
class Window;
28

29
class RuntimeController final : public WindowClient {
30
 public:
31
  RuntimeController(RuntimeDelegate& client,
B
Ben Konyi 已提交
32
                    DartVM* vm,
33 34
                    fml::RefPtr<const DartSnapshot> isolate_snapshot,
                    fml::RefPtr<const DartSnapshot> shared_snapshot,
35
                    TaskRunners task_runners,
36
                    fml::WeakPtr<IOManager> io_manager,
37
                    fml::WeakPtr<ImageDecoder> iamge_decoder,
38
                    std::string advisory_script_uri,
39
                    std::string advisory_script_entrypoint,
40 41 42
                    std::function<void(int64_t)> idle_notification_callback,
                    fml::closure isolate_create_callback,
                    fml::closure isolate_shutdown_callback);
43

44
  ~RuntimeController() override;
45

46 47 48
  std::unique_ptr<RuntimeController> Clone() const;

  bool SetViewportMetrics(const ViewportMetrics& metrics);
49

50
  bool SetLocales(const std::vector<std::string>& locale_data);
51

52 53
  bool SetUserSettingsData(const std::string& data);

54 55
  bool SetLifecycleState(const std::string& data);

56 57
  bool SetSemanticsEnabled(bool enabled);

58
  bool SetAccessibilityFeatures(int32_t flags);
59

60
  bool BeginFrame(fml::TimePoint frame_time);
61

62 63
  bool ReportTimings(std::vector<int64_t> timings);

64
  bool NotifyIdle(int64_t deadline);
65

66 67
  bool IsRootIsolateRunning() const;

68
  bool DispatchPlatformMessage(fml::RefPtr<PlatformMessage> message);
69 70 71 72

  bool DispatchPointerDataPacket(const PointerDataPacket& packet);

  bool DispatchSemanticsAction(int32_t id,
73 74
                               SemanticsAction action,
                               std::vector<uint8_t> args);
75

76
  Dart_Port GetMainPort();
77

78
  std::string GetIsolateName();
79

80
  bool HasLivePorts();
81

82
  tonic::DartErrorHandleType GetLastError();
83

84
  std::weak_ptr<DartIsolate> GetRootIsolate();
85

86
  std::pair<bool, uint32_t> GetRootIsolateReturnCode();
87

88
 private:
89 90 91 92
  struct Locale {
    Locale(std::string language_code_,
           std::string country_code_,
           std::string script_code_,
93 94 95
           std::string variant_code_);

    ~Locale();
96 97 98 99 100 101 102

    std::string language_code;
    std::string country_code;
    std::string script_code;
    std::string variant_code;
  };

103 104 105
  // Stores data about the window to be used at startup
  // as well as on hot restarts. Data kept here will persist
  // after hot restart.
106
  struct WindowData {
107 108 109 110 111 112
    WindowData();

    WindowData(const WindowData& other);

    ~WindowData();

113 114 115
    ViewportMetrics viewport_metrics;
    std::string language_code;
    std::string country_code;
116 117
    std::string script_code;
    std::string variant_code;
118
    std::vector<std::string> locale_data;
119
    std::string user_settings_data = "{}";
120
    std::string lifecycle_state;
121
    bool semantics_enabled = false;
122
    bool assistive_technology_enabled = false;
123
    int32_t accessibility_feature_flags_ = 0;
124 125 126
  };

  RuntimeDelegate& client_;
B
Ben Konyi 已提交
127
  DartVM* const vm_;
128 129
  fml::RefPtr<const DartSnapshot> isolate_snapshot_;
  fml::RefPtr<const DartSnapshot> shared_snapshot_;
130
  TaskRunners task_runners_;
131
  fml::WeakPtr<IOManager> io_manager_;
132
  fml::WeakPtr<ImageDecoder> image_decoder_;
133 134
  std::string advisory_script_uri_;
  std::string advisory_script_entrypoint_;
135
  std::function<void(int64_t)> idle_notification_callback_;
136
  WindowData window_data_;
137
  std::weak_ptr<DartIsolate> root_isolate_;
138
  std::pair<bool, uint32_t> root_isolate_return_code_ = {false, 0};
139 140
  const fml::closure isolate_create_callback_;
  const fml::closure isolate_shutdown_callback_;
141 142

  RuntimeController(RuntimeDelegate& client,
B
Ben Konyi 已提交
143
                    DartVM* vm,
144 145
                    fml::RefPtr<const DartSnapshot> isolate_snapshot,
                    fml::RefPtr<const DartSnapshot> shared_snapshot,
146
                    TaskRunners task_runners,
147
                    fml::WeakPtr<IOManager> io_manager,
148
                    fml::WeakPtr<ImageDecoder> image_decoder,
149 150
                    std::string advisory_script_uri,
                    std::string advisory_script_entrypoint,
151
                    std::function<void(int64_t)> idle_notification_callback,
152 153 154
                    WindowData data,
                    fml::closure isolate_create_callback,
                    fml::closure isolate_shutdown_callback);
155 156 157 158 159

  Window* GetWindowIfAvailable();

  bool FlushRuntimeStateToIsolate();

160
  // |WindowClient|
161
  std::string DefaultRouteName() override;
162

163
  // |WindowClient|
164
  void ScheduleFrame() override;
165

166
  // |WindowClient|
167
  void Render(Scene* scene) override;
168

169
  // |WindowClient|
170
  void UpdateSemantics(SemanticsUpdate* update) override;
171

172
  // |WindowClient|
173
  void HandlePlatformMessage(fml::RefPtr<PlatformMessage> message) override;
174

175
  // |WindowClient|
176
  FontCollection& GetFontCollection() override;
177

178
  // |WindowClient|
179 180
  void UpdateIsolateDescription(const std::string isolate_name,
                                int64_t isolate_port) override;
181

182 183 184
  // |WindowClient|
  void SetNeedsReportTimings(bool value) override;

185
  FML_DISALLOW_COPY_AND_ASSIGN(RuntimeController);
186 187
};

188
}  // namespace flutter
189

190
#endif  // FLUTTER_RUNTIME_RUNTIME_CONTROLLER_H_