ui_dart_state.h 3.1 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_LIB_UI_UI_DART_STATE_H_
#define FLUTTER_LIB_UI_UI_DART_STATE_H_
7

8 9
#include <memory>
#include <string>
10 11
#include <utility>

12 13 14
#include "flutter/common/settings.h"
#include "flutter/common/task_runners.h"
#include "flutter/flow/skia_gpu_object.h"
15
#include "flutter/fml/build_config.h"
16
#include "flutter/fml/memory/weak_ptr.h"
B
Ben Konyi 已提交
17
#include "flutter/lib/ui/isolate_name_server/isolate_name_server.h"
18
#include "third_party/dart/runtime/include/dart_api.h"
19
#include "third_party/skia/include/gpu/GrContext.h"
20 21 22
#include "third_party/tonic/dart_microtask_queue.h"
#include "third_party/tonic/dart_persistent_value.h"
#include "third_party/tonic/dart_state.h"
23 24

namespace blink {
25 26
class FontSelector;
class Window;
27

28
class UIDartState : public tonic::DartState {
29
 public:
30
  static UIDartState* Current();
31

32
  Dart_Port main_port() const { return main_port_; }
33

34
  const std::string& debug_name() const { return debug_name_; }
35 36 37

  const std::string& logger_prefix() const { return logger_prefix_; }

38 39
  Window* window() const { return window_.get(); }

40 41 42 43 44 45
  const TaskRunners& GetTaskRunners() const;

  void ScheduleMicrotask(Dart_Handle handle);

  void FlushMicrotasksNow();

46
  fml::RefPtr<flow::SkiaUnrefQueue> GetSkiaUnrefQueue() const;
47 48 49

  fml::WeakPtr<GrContext> GetResourceContext() const;

B
Ben Konyi 已提交
50 51
  IsolateNameServer* GetIsolateNameServer();

52 53
  tonic::DartErrorHandleType GetLastError();

54 55 56 57 58 59
  template <class T>
  static flow::SkiaGPUObject<T> CreateGPUObject(sk_sp<T> object) {
    if (!object) {
      return {};
    }
    auto state = UIDartState::Current();
60
    FML_DCHECK(state);
61 62 63 64 65 66 67 68 69
    auto queue = state->GetSkiaUnrefQueue();
    return {std::move(object), std::move(queue)};
  };

 protected:
  UIDartState(TaskRunners task_runners,
              TaskObserverAdd add_callback,
              TaskObserverRemove remove_callback,
              fml::WeakPtr<GrContext> resource_context,
70
              fml::RefPtr<flow::SkiaUnrefQueue> skia_unref_queue,
71 72
              std::string advisory_script_uri,
              std::string advisory_script_entrypoint,
B
Ben Konyi 已提交
73 74
              std::string logger_prefix,
              IsolateNameServer* isolate_name_server);
75 76 77 78 79 80 81 82

  ~UIDartState() override;

  void SetWindow(std::unique_ptr<Window> window);

  const std::string& GetAdvisoryScriptURI() const;

  const std::string& GetAdvisoryScriptEntrypoint() const;
83 84

 private:
85
  void DidSetIsolate() override;
86

87 88 89 90 91 92 93 94
  const TaskRunners task_runners_;
  const TaskObserverAdd add_callback_;
  const TaskObserverRemove remove_callback_;
  fml::WeakPtr<GrContext> resource_context_;
  const std::string advisory_script_uri_;
  const std::string advisory_script_entrypoint_;
  const std::string logger_prefix_;
  Dart_Port main_port_ = ILLEGAL_PORT;
95
  std::string debug_name_;
96
  std::unique_ptr<Window> window_;
97
  fml::RefPtr<flow::SkiaUnrefQueue> skia_unref_queue_;
98
  tonic::DartMicrotaskQueue microtask_queue_;
B
Ben Konyi 已提交
99
  IsolateNameServer* isolate_name_server_;
100 101

  void AddOrRemoveTaskObserver(bool add);
102 103 104 105
};

}  // namespace blink

106
#endif  // FLUTTER_LIB_UI_UI_DART_STATE_H_