runtime_controller.h 3.3 KB
Newer Older
1 2 3 4
// Copyright 2015 The Chromium Authors. All rights reserved.
// 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

10
#include "flutter/common/task_runners.h"
11
#include "flutter/flow/layers/layer_tree.h"
12
#include "flutter/lib/ui/ui_dart_state.h"
13
#include "flutter/lib/ui/window/pointer_data_packet.h"
14
#include "flutter/lib/ui/window/window.h"
15
#include "flutter/runtime/dart_vm.h"
16
#include "lib/fxl/macros.h"
17 18

namespace blink {
19
class Scene;
20
class RuntimeDelegate;
21
class View;
22
class Window;
23

24
class RuntimeController final : public WindowClient {
25
 public:
26 27 28 29 30 31
  RuntimeController(RuntimeDelegate& client,
                    const DartVM* vm,
                    TaskRunners task_runners,
                    fml::WeakPtr<GrContext> resource_context,
                    fxl::RefPtr<flow::SkiaUnrefQueue> unref_queue);

32 33
  ~RuntimeController();

34 35 36
  std::unique_ptr<RuntimeController> Clone() const;

  bool SetViewportMetrics(const ViewportMetrics& metrics);
37

38
  bool SetLocale(const std::string& language_code,
A
Adam Barth 已提交
39
                 const std::string& country_code);
40

41 42 43 44 45 46 47
  bool SetUserSettingsData(const std::string& data);

  bool SetSemanticsEnabled(bool enabled);

  bool BeginFrame(fxl::TimePoint frame_time);

  bool NotifyIdle(int64_t deadline);
48

49 50 51 52 53
  bool DispatchPlatformMessage(fxl::RefPtr<PlatformMessage> message);

  bool DispatchPointerDataPacket(const PointerDataPacket& packet);

  bool DispatchSemanticsAction(int32_t id,
54 55
                               SemanticsAction action,
                               std::vector<uint8_t> args);
56

57
  Dart_Port GetMainPort();
58

59
  std::string GetIsolateName();
60

61
  bool HasLivePorts();
62

63
  tonic::DartErrorHandleType GetLastError();
64

65
  fml::WeakPtr<DartIsolate> GetRootIsolate();
66

67
  std::pair<bool, uint32_t> GetRootIsolateReturnCode();
68

69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
 private:
  struct WindowData {
    ViewportMetrics viewport_metrics;
    std::string language_code;
    std::string country_code;
    std::string user_settings_data = "{}";
    bool semantics_enabled = false;
  };

  RuntimeDelegate& client_;
  const DartVM* vm_;
  TaskRunners task_runners_;
  fml::WeakPtr<GrContext> resource_context_;
  fxl::RefPtr<flow::SkiaUnrefQueue> unref_queue_;
  WindowData window_data_;
  fml::WeakPtr<DartIsolate> root_isolate_;
  std::pair<bool, uint32_t> root_isolate_return_code_ = {false, 0};

  RuntimeController(RuntimeDelegate& client,
                    const DartVM* vm,
                    TaskRunners task_runners,
                    fml::WeakPtr<GrContext> resource_context,
                    fxl::RefPtr<flow::SkiaUnrefQueue> unref_queue,
                    WindowData data);

  Window* GetWindowIfAvailable();

  bool FlushRuntimeStateToIsolate();

  // |blink::WindowClient|
99
  std::string DefaultRouteName() override;
100 101

  // |blink::WindowClient|
102
  void ScheduleFrame() override;
103 104

  // |blink::WindowClient|
105
  void Render(Scene* scene) override;
106

107 108
  // |blink::WindowClient|
  void UpdateSemantics(SemanticsUpdate* update) override;
109

110 111
  // |blink::WindowClient|
  void HandlePlatformMessage(fxl::RefPtr<PlatformMessage> message) override;
112

113
  FXL_DISALLOW_COPY_AND_ASSIGN(RuntimeController);
114 115
};

A
Adam Barth 已提交
116
}  // namespace blink
117

118
#endif  // FLUTTER_RUNTIME_RUNTIME_CONTROLLER_H_