| // Copyright (c) 2011, 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 VM_DART_H_ |
| #define VM_DART_H_ |
| |
| #include "include/dart_api.h" |
| #include "vm/allocation.h" |
| |
| namespace dart { |
| |
| // Forward declarations. |
| class DebugInfo; |
| class Isolate; |
| class LocalHandle; |
| class RawError; |
| class ReadOnlyHandles; |
| class ThreadPool; |
| |
| class Dart : public AllStatic { |
| public: |
| static const char* InitOnce( |
| const uint8_t* vm_isolate_snapshot, |
| const uint8_t* instructions_snapshot, |
| const uint8_t* data_snapshot, |
| Dart_IsolateCreateCallback create, |
| Dart_IsolateShutdownCallback shutdown, |
| Dart_ThreadExitCallback thread_exit, |
| Dart_FileOpenCallback file_open, |
| Dart_FileReadCallback file_read, |
| Dart_FileWriteCallback file_write, |
| Dart_FileCloseCallback file_close, |
| Dart_EntropySource entropy_source, |
| Dart_GetVMServiceAssetsArchive get_service_assets); |
| static const char* Cleanup(); |
| |
| static Isolate* CreateIsolate(const char* name_prefix, |
| const Dart_IsolateFlags& api_flags); |
| static RawError* InitializeIsolate(const uint8_t* snapshot, void* data); |
| static void RunShutdownCallback(); |
| static void ShutdownIsolate(Isolate* isolate); |
| static void ShutdownIsolate(); |
| |
| static Isolate* vm_isolate() { return vm_isolate_; } |
| static ThreadPool* thread_pool() { return thread_pool_; } |
| |
| // Returns a timestamp for use in debugging output in milliseconds |
| // since start time. |
| static int64_t timestamp(); |
| |
| static void set_pprof_symbol_generator(DebugInfo* value) { |
| pprof_symbol_generator_ = value; |
| } |
| static DebugInfo* pprof_symbol_generator() { return pprof_symbol_generator_; } |
| |
| static LocalHandle* AllocateReadOnlyApiHandle(); |
| static bool IsReadOnlyApiHandle(Dart_Handle handle); |
| |
| static uword AllocateReadOnlyHandle(); |
| static bool IsReadOnlyHandle(uword address); |
| |
| static const uint8_t* instructions_snapshot_buffer() { |
| return instructions_snapshot_buffer_; |
| } |
| static void set_instructions_snapshot_buffer(const uint8_t* buffer) { |
| instructions_snapshot_buffer_ = buffer; |
| } |
| static bool IsRunningPrecompiledCode() { |
| return instructions_snapshot_buffer_ != NULL; |
| } |
| |
| static const uint8_t* data_snapshot_buffer() { |
| return data_snapshot_buffer_; |
| } |
| static void set_data_snapshot_buffer(const uint8_t* buffer) { |
| data_snapshot_buffer_ = buffer; |
| } |
| |
| static Dart_ThreadExitCallback thread_exit_callback() { |
| return thread_exit_callback_; |
| } |
| static void set_thread_exit_callback(Dart_ThreadExitCallback cback) { |
| thread_exit_callback_ = cback; |
| } |
| static void SetFileCallbacks(Dart_FileOpenCallback file_open, |
| Dart_FileReadCallback file_read, |
| Dart_FileWriteCallback file_write, |
| Dart_FileCloseCallback file_close) { |
| file_open_callback_ = file_open; |
| file_read_callback_ = file_read; |
| file_write_callback_ = file_write; |
| file_close_callback_ = file_close; |
| } |
| |
| static Dart_FileOpenCallback file_open_callback() { |
| return file_open_callback_; |
| } |
| static Dart_FileReadCallback file_read_callback() { |
| return file_read_callback_; |
| } |
| static Dart_FileWriteCallback file_write_callback() { |
| return file_write_callback_; |
| } |
| static Dart_FileCloseCallback file_close_callback() { |
| return file_close_callback_; |
| } |
| |
| static void set_entropy_source_callback(Dart_EntropySource entropy_source) { |
| entropy_source_callback_ = entropy_source; |
| } |
| static Dart_EntropySource entropy_source_callback() { |
| return entropy_source_callback_; |
| } |
| |
| private: |
| static void WaitForIsolateShutdown(); |
| |
| static Isolate* vm_isolate_; |
| static int64_t start_time_; |
| static ThreadPool* thread_pool_; |
| static DebugInfo* pprof_symbol_generator_; |
| static ReadOnlyHandles* predefined_handles_; |
| static const uint8_t* instructions_snapshot_buffer_; |
| static const uint8_t* data_snapshot_buffer_; |
| static Dart_ThreadExitCallback thread_exit_callback_; |
| static Dart_FileOpenCallback file_open_callback_; |
| static Dart_FileReadCallback file_read_callback_; |
| static Dart_FileWriteCallback file_write_callback_; |
| static Dart_FileCloseCallback file_close_callback_; |
| static Dart_EntropySource entropy_source_callback_; |
| }; |
| |
| } // namespace dart |
| |
| #endif // VM_DART_H_ |