ui_dart_state.h 3.2 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 15
#include "flutter/common/settings.h"
#include "flutter/common/task_runners.h"
#include "flutter/flow/skia_gpu_object.h"
#include "flutter/fml/memory/weak_ptr.h"
A
Adam Barth 已提交
16
#include "flutter/sky/engine/wtf/RefPtr.h"
17
#include "lib/fxl/build_config.h"
18
#include "lib/tonic/dart_microtask_queue.h"
19
#include "lib/tonic/dart_persistent_value.h"
20
#include "lib/tonic/dart_state.h"
21
#include "third_party/dart/runtime/include/dart_api.h"
22
#include "third_party/skia/include/gpu/GrContext.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 40
  Window* window() const { return window_.get(); }

  void set_font_selector(PassRefPtr<FontSelector> selector);
41

42
  PassRefPtr<FontSelector> font_selector();
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85

  bool use_blink() const { return use_blink_; }

  const TaskRunners& GetTaskRunners() const;

  void ScheduleMicrotask(Dart_Handle handle);

  void FlushMicrotasksNow();

  fxl::RefPtr<flow::SkiaUnrefQueue> GetSkiaUnrefQueue() const;

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

  template <class T>
  static flow::SkiaGPUObject<T> CreateGPUObject(sk_sp<T> object) {
    if (!object) {
      return {};
    }
    auto state = UIDartState::Current();
    FXL_DCHECK(state);
    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,
              fxl::RefPtr<flow::SkiaUnrefQueue> skia_unref_queue,
              std::string advisory_script_uri,
              std::string advisory_script_entrypoint,
              std::string logger_prefix);

  ~UIDartState() override;

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

  void set_use_blink(bool use_blink) { use_blink_ = use_blink; }

  const std::string& GetAdvisoryScriptURI() const;

  const std::string& GetAdvisoryScriptEntrypoint() const;
86 87

 private:
88
  void DidSetIsolate() override;
89

90 91 92 93 94 95 96 97
  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;
98
  std::string debug_name_;
99
  std::unique_ptr<Window> window_;
A
Adam Barth 已提交
100
  RefPtr<FontSelector> font_selector_;
101 102 103 104 105 106 107
  fxl::RefPtr<flow::SkiaUnrefQueue> skia_unref_queue_;
  tonic::DartMicrotaskQueue microtask_queue_;
  fml::WeakPtrFactory<UIDartState> weak_factory_;

  void AddOrRemoveTaskObserver(bool add);

  bool use_blink_ = false;
108 109 110 111
};

}  // namespace blink

112
#endif  // FLUTTER_LIB_UI_UI_DART_STATE_H_