blob: cb56496b9f70799ac9b5743adabb47a74b4209ec [file] [log] [blame]
// Copyright 2016 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.
#include "tonic/dart_vm.h"
#include "base/logging.h"
#include "tonic/dart_debugger.h"
namespace tonic {
static char* dart_vm_error_ = NULL;
DartVM::Config::Config() {
vm_isolate_snapshot = nullptr;
instructions_snapshot = nullptr;
create = nullptr;
interrupt = nullptr;
unhandled_exception = nullptr;
shutdown = nullptr;
file_open = nullptr;
file_read = nullptr;
file_write = nullptr;
file_close = nullptr;
entropy_source = nullptr;
get_service_assets = nullptr;
}
bool DartVM::Initialize(const Config& config,
const std::vector<const char*>& flags) {
CHECK(dart_vm_error_ == NULL);
// Set the flags before calling Dart_Initialize.
if (!Dart_SetVMFlags(flags.size(), const_cast<const char**>(flags.data()))) {
dart_vm_error_ = strdup("Error in Dart_SetVMFlags.");
LOG(ERROR) << "Dart_SetVMFlags: " << dart_vm_error_;
return false;
}
// Initialize debugger before calling Dart_Initialize.
DartDebugger::InitDebugger();
dart_vm_error_ = Dart_Initialize(config.vm_isolate_snapshot,
config.instructions_snapshot,
config.create,
config.interrupt,
config.unhandled_exception,
config.shutdown,
config.file_open,
config.file_read,
config.file_write,
config.file_close,
config.entropy_source,
config.get_service_assets);
if (dart_vm_error_ != NULL) {
LOG(ERROR) << "Dart_Initialize: " << dart_vm_error_;
}
return dart_vm_error_ == NULL;
}
bool DartVM::Cleanup() {
CHECK(dart_vm_error_ == NULL);
dart_vm_error_ = Dart_Cleanup();
if (dart_vm_error_ != NULL) {
LOG(ERROR) << "Dart_Cleanup: " << dart_vm_error_;
}
return dart_vm_error_ == NULL;
}
const char* DartVM::error() {
CHECK(dart_vm_error_ != NULL);
return dart_vm_error_;
}
} // namespace tonic