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.
83 lines
2.4 KiB
C++
83 lines
2.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_DART_VM_LIFECYCLE_H_
|
|
#define FLUTTER_RUNTIME_DART_VM_LIFECYCLE_H_
|
|
|
|
#include <memory>
|
|
|
|
#include "flutter/fml/macros.h"
|
|
#include "flutter/lib/ui/isolate_name_server/isolate_name_server.h"
|
|
#include "flutter/runtime/dart_vm.h"
|
|
#include "flutter/runtime/service_protocol.h"
|
|
|
|
namespace flutter {
|
|
|
|
// A strong reference to the Dart VM. There can only be one VM running in the
|
|
// process at any given time. A reference to the VM may only be obtained via the
|
|
// |Create| method. In case there is already a running instance of the VM in the
|
|
// process, a strong reference to that VM is obtained and the arguments to the
|
|
// |Create| call ignored. If there is no VM already running in the process, a VM
|
|
// is initialized in a thread safe manner and returned to the caller. The VM
|
|
// will shutdown only when all callers relinquish their references (by
|
|
// collecting their instances of this class).
|
|
//
|
|
// DartVMRef instances may be created on any thread.
|
|
class DartVMRef {
|
|
public:
|
|
FML_WARN_UNUSED_RESULT
|
|
static DartVMRef Create(Settings settings,
|
|
fml::RefPtr<DartSnapshot> vm_snapshot = nullptr,
|
|
fml::RefPtr<DartSnapshot> isolate_snapshot = nullptr,
|
|
fml::RefPtr<DartSnapshot> shared_snapshot = nullptr);
|
|
|
|
DartVMRef(DartVMRef&&);
|
|
|
|
~DartVMRef();
|
|
|
|
// This is an inherently racy way to check if a VM instance is running and
|
|
// should not be used outside of unit-tests where there is a known threading
|
|
// model.
|
|
static bool IsInstanceRunning();
|
|
|
|
static std::shared_ptr<const DartVMData> GetVMData();
|
|
|
|
static std::shared_ptr<ServiceProtocol> GetServiceProtocol();
|
|
|
|
static std::shared_ptr<IsolateNameServer> GetIsolateNameServer();
|
|
|
|
operator bool() const { return static_cast<bool>(vm_); }
|
|
|
|
DartVM* get() {
|
|
FML_DCHECK(vm_);
|
|
return vm_.get();
|
|
}
|
|
|
|
DartVM* operator->() {
|
|
FML_DCHECK(vm_);
|
|
return vm_.get();
|
|
}
|
|
|
|
DartVM* operator&() {
|
|
FML_DCHECK(vm_);
|
|
return vm_.get();
|
|
}
|
|
|
|
private:
|
|
friend class DartIsolate;
|
|
|
|
std::shared_ptr<DartVM> vm_;
|
|
|
|
DartVMRef(std::shared_ptr<DartVM> vm);
|
|
|
|
// Only used by Dart Isolate to register itself with the VM.
|
|
static DartVM* GetRunningVM();
|
|
|
|
FML_DISALLOW_COPY_AND_ASSIGN(DartVMRef);
|
|
};
|
|
|
|
} // namespace flutter
|
|
|
|
#endif // FLUTTER_RUNTIME_DART_VM_LIFECYCLE_H_
|