Files
sdk/runtime/vm/service_isolate.h
T
Vyacheslav Egorov a9ce969e53 [vm] Decouple growable_array.h and zone.h from thread.h
- Introduce a slimmed down version of thread.h, which just depends on the
Zone and StackResource.
- Introduce a layering check that would prevent the coupling in the future.

This is the first step towards decoupling compiler from runtime.

There are multiple reasons to introduce the decoupling but the main
reason currently is to introduce a controlled surface through which
compiler reaches into runtime to catch any places where runtime word size
might influence the compiler and then enable building compiler that
targets 32-bit runtime but is embedded into a 64-bit runtime.

Issue https://github.com/dart-lang/sdk/issues/31709

Change-Id: Id63ebbaddca55dd097298e51c90d957a73fa476e
Reviewed-on: https://dart-review.googlesource.com/c/87182
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-01-11 20:47:10 +00:00

90 lines
2.6 KiB
C++

// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#ifndef RUNTIME_VM_SERVICE_ISOLATE_H_
#define RUNTIME_VM_SERVICE_ISOLATE_H_
#include "include/dart_api.h"
#include "vm/allocation.h"
#include "vm/os_thread.h"
namespace dart {
class Isolate;
class ObjectPointerVisitor;
class SendPort;
class ServiceIsolate : public AllStatic {
public:
static const char* kName;
static bool NameEquals(const char* name);
static bool Exists();
static bool IsRunning();
static bool IsServiceIsolate(const Isolate* isolate);
static bool IsServiceIsolateDescendant(const Isolate* isolate);
static Dart_Port Port();
static Dart_Port WaitForLoadPort();
static Dart_Port LoadPort();
// Returns `true` if the request was sucessfully sent. If it was, the
// [reply_port] will receive a Dart_TypedData_kUint8 response json.
static bool SendServiceRpc(uint8_t* request_json,
intptr_t request_json_length,
Dart_Port reply_port);
static void Run();
static bool SendIsolateStartupMessage();
static bool SendIsolateShutdownMessage();
static void SendServiceExitMessage();
static void Shutdown();
static void BootVmServiceLibrary();
static void RequestServerInfo(const SendPort& sp);
static void ControlWebServer(const SendPort& sp, bool enable);
static void SetServerAddress(const char* address);
// Returns the server's web address or NULL if none is running.
static const char* server_address() { return server_address_; }
static void VisitObjectPointers(ObjectPointerVisitor* visitor);
private:
static void KillServiceIsolate();
protected:
static void SetServicePort(Dart_Port port);
static void SetServiceIsolate(Isolate* isolate);
static void SetLoadPort(Dart_Port port);
static void FinishedExiting();
static void FinishedInitializing();
static void MaybeMakeServiceIsolate(Isolate* isolate);
static Dart_IsolateCreateCallback create_callback() {
return create_callback_;
}
static Dart_IsolateCreateCallback create_callback_;
static Monitor* monitor_;
static bool initializing_;
static bool shutting_down_;
static Isolate* isolate_;
static Dart_Port port_;
static Dart_Port load_port_;
static Dart_Port origin_;
static char* server_address_;
friend class Dart;
friend class Isolate;
friend class RunServiceTask;
friend class ServiceIsolateNatives;
};
} // namespace dart
#endif // RUNTIME_VM_SERVICE_ISOLATE_H_