Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Unified Diff: samples/android_sample/jni/vm_glue.cc

Issue 11467028: Migrate files to embedder. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review fixes Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: samples/android_sample/jni/vm_glue.cc
diff --git a/samples/android_sample/jni/vm_glue.cc b/samples/android_sample/jni/vm_glue.cc
deleted file mode 100644
index 7ab19d0e862aec4e13fb0e413276650c6cdcf5fe..0000000000000000000000000000000000000000
--- a/samples/android_sample/jni/vm_glue.cc
+++ /dev/null
@@ -1,304 +0,0 @@
-// Copyright (c) 2012, 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.
-
-#include <math.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/stat.h>
-
-#include "include/dart_api.h"
-#include "jni/android_extension.h"
-#include "jni/log.h"
-#include "jni/vm_glue.h"
-
-// snapshot_buffer points to a snapshot if we link in a snapshot otherwise
-// it is initialized to NULL.
-
-VMGlue::VMGlue(Graphics* graphics)
- : graphics_(graphics),
- isolate_(NULL),
- initialized_vm_(false),
- initialized_script_(false) {
- LOGI("Creating VMGlue");
-}
-
-int VMGlue::ErrorExit(const char* format, ...) {
- va_list arguments;
- va_start(arguments, format);
- LOGE(format, arguments);
- va_end(arguments);
- Dart_ExitScope();
- Dart_ShutdownIsolate();
- LOGE("Shutdown isolate");
- return -1;
-}
-
-Dart_Handle VMGlue::CheckError(Dart_Handle handle) {
- if (Dart_IsError(handle)) {
- LOGE("Unexpected Error Handle");
- Dart_PropagateError(handle);
- }
- return handle;
-}
-
-#define CHECK_RESULT(result) \
- if (Dart_IsError(result)) { \
- *error = strdup(Dart_GetError(result)); \
- LOGE(*error); \
- Dart_ExitScope(); \
- Dart_ShutdownIsolate(); \
- return false; \
- }
-
-Dart_Handle VMGlue::LibraryTagHandler(Dart_LibraryTag tag,
- Dart_Handle library,
- Dart_Handle urlHandle) {
- const char* url;
- Dart_StringToCString(urlHandle, &url);
- if (tag == kCanonicalizeUrl) {
- return urlHandle;
- }
- // TODO(vsm): Split this up into separate libraries for 3D, 2D,
- // Touch, Audio, etc. All builtin libraries should be handled here
- // (or moved into a snapshot).
- if (strcmp(url, "android_extension.dart") == 0) {
- Dart_Handle source = VMGlue::LoadSourceFromFile("/data/data/com.google.dartndk/app_dart/android_extension.dart");
- Dart_Handle library = CheckError(Dart_LoadLibrary(urlHandle, source));
- CheckError(Dart_SetNativeResolver(library, ResolveName));
- return library;
- }
- LOGE("UNIMPLEMENTED: load library %s\n", url);
- return NULL;
-}
-
-// Returns true on success, false on failure.
-bool VMGlue::CreateIsolateAndSetupHelper(const char* script_uri,
- const char* main,
- void* data,
- char** error) {
- LOGI("Creating isolate %s, %s", script_uri, main);
- Dart_Isolate isolate =
- Dart_CreateIsolate(script_uri, main, NULL, data, error);
- if (isolate == NULL) {
- LOGE("Couldn't create isolate: %s", error);
- return false;
- }
-
- LOGI("Entering scope");
- Dart_EnterScope();
-
- // Set up the library tag handler for this isolate.
- LOGI("Setting up library tag handler");
- Dart_Handle result = CheckError(Dart_SetLibraryTagHandler(LibraryTagHandler));
- CHECK_RESULT(result);
-
- Dart_ExitScope();
- return true;
-}
-
-bool VMGlue::CreateIsolateAndSetup(const char* script_uri,
- const char* main,
- void* data, char** error) {
- return CreateIsolateAndSetupHelper(script_uri,
- main,
- data,
- error);
-}
-
-#define VMHOSTNAME "android_dart_host"
-#define MAINSCRIPT "/data/data/com.google.dartndk/app_dart/main.dart"
-
-const char* VM_FLAGS[] = {
- "--enable_type_checks",
- "--trace_isolates",
- "--trace_natives",
-};
-
-int VMGlue::InitializeVM() {
- // We need the next call to get Dart_Initialize not to bail early.
- LOGI("Setting VM Options");
- Dart_SetVMFlags(sizeof(VM_FLAGS) / sizeof(VM_FLAGS[0]), VM_FLAGS);
-
- // Initialize the Dart VM, providing the callbacks to use for
- // creating and shutting down isolates.
- LOGI("Initializing Dart");
- if (!Dart_Initialize(CreateIsolateAndSetup,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL)) {
- LOGE("VM initialization failed\n");
- return -1;
- }
- initialized_vm_ = true;
-
- return 0;
-}
-
-Dart_Handle VMGlue::LoadSourceFromFile(const char* url) {
- FILE* file = fopen(url, "r");
- if (file == NULL) {
- LOGE("Main script not found at: %s\n", url);
- return NULL;
- }
-
- struct stat sb;
- int fd = fileno(file);
- fstat(fd, &sb);
- int length = sb.st_size;
- LOGI("Entry file %s is %d bytes.\n", url, length);
-
- char* buffer = reinterpret_cast<char *>(malloc((length + 1) * sizeof(char)));
- if (read(fd, buffer, length) < 0) {
- LOGE("Could not read script %s.\n", url);
- return NULL;
- }
- buffer[length] = 0;
- fclose(file);
-
- Dart_Handle contents = CheckError(Dart_NewStringFromCString(buffer));
- free(buffer);
- return contents;
-}
-
-int VMGlue::StartMainIsolate() {
- if (!initialized_vm_) {
- int rtn = InitializeVM();
- if (rtn != 0) return rtn;
- }
-
- // Create an isolate and loads up the application script.
- char* error = NULL;
- if (!CreateIsolateAndSetup(MAINSCRIPT, "main", NULL, &error)) {
- LOGE("CreateIsolateAndSetup: %s\n", error);
- free(error);
- return -1;
- }
- LOGI("Created isolate");
- isolate_ = Dart_CurrentIsolate();
- Dart_EnterScope();
-
- Dart_Handle url = CheckError(Dart_NewStringFromCString(MAINSCRIPT));
- Dart_Handle source = LoadSourceFromFile(MAINSCRIPT);
- CheckError(Dart_LoadScript(url, source));
-
- Dart_ExitScope();
- Dart_ExitIsolate();
- return 0;
-}
-
-int VMGlue::CallSetup() {
- if (!initialized_script_) {
- initialized_script_ = true;
- LOGI("Invoking setup");
- Dart_EnterIsolate(isolate_);
- Dart_EnterScope();
- Dart_Handle args[2];
- args[0] = CheckError(Dart_NewInteger(graphics_->width()));
- args[1] = CheckError(Dart_NewInteger(graphics_->height()));
- int rtn = Invoke("setup", 2, args);
- Dart_ExitScope();
- Dart_ExitIsolate();
- LOGI("Done setup");
- return rtn;
- }
- return 0;
-}
-
-int VMGlue::CallUpdate() {
- if (initialized_script_) {
- LOGI("Invoking update");
- Dart_EnterIsolate(isolate_);
- Dart_EnterScope();
- int rtn = Invoke("update", 0, 0);
- Dart_ExitScope();
- Dart_ExitIsolate();
- LOGI("Done update");
- return rtn;
- }
- return -1;
-}
-
-int VMGlue::OnMotionEvent(const char* pFunction, int64_t pWhen,
- float pMoveX, float pMoveY) {
- if (initialized_script_) {
- LOGI("Invoking %s", pFunction);
- Dart_EnterIsolate(isolate_);
- Dart_EnterScope();
- Dart_Handle args[3];
- args[0] = CheckError(Dart_NewInteger(pWhen));
- args[1] = CheckError(Dart_NewDouble(pMoveX));
- args[2] = CheckError(Dart_NewDouble(pMoveY));
- int rtn = Invoke(pFunction, 3, args);
- Dart_ExitScope();
- Dart_ExitIsolate();
- LOGI("Done %s", pFunction);
- return rtn;
- }
- return -1;
-}
-
-int VMGlue::OnKeyEvent(const char* function, int64_t when, int32_t flags,
- int32_t key_code, int32_t meta_state, int32_t repeat) {
- if (initialized_script_) {
- LOGI("Invoking %s", function);
- Dart_EnterIsolate(isolate_);
- Dart_EnterScope();
- Dart_Handle args[5];
- args[0] = CheckError(Dart_NewInteger(when));
- args[1] = CheckError(Dart_NewInteger(flags));
- args[2] = CheckError(Dart_NewInteger(key_code));
- args[3] = CheckError(Dart_NewInteger(meta_state));
- args[4] = CheckError(Dart_NewInteger(repeat));
- int rtn = Invoke(function, 5, args);
- Dart_ExitScope();
- Dart_ExitIsolate();
- LOGI("Done %s", function);
- return rtn;
- }
- return -1;
-}
-
-int VMGlue::Invoke(const char* function, int argc, Dart_Handle* args) {
- Dart_Handle result;
-
- LOGI("in invoke(%s)", function);
-
- // Lookup the library of the root script.
- LOGI("looking up the root library");
- Dart_Handle library = Dart_RootLibrary();
- if (Dart_IsNull(library)) {
- return ErrorExit("Unable to find root library\n");
- }
-
- // Lookup and invoke the appropriate function.
- LOGI("invoking %s", function);
- result = Dart_Invoke(library, Dart_NewStringFromCString(function), argc, args);
-
- if (Dart_IsError(result)) {
- return ErrorExit("%s\n", Dart_GetError(result));
- }
-
- // TODO(vsm): I don't think we need this.
- // Keep handling messages until the last active receive port is closed.
- LOGI("Entering Dart message loop");
- result = Dart_RunLoop();
- if (Dart_IsError(result)) {
- return ErrorExit("%s\n", Dart_GetError(result));
- }
-
- LOGI("out invoke");
- return 0;
-}
-
-void VMGlue::FinishMainIsolate() {
- LOGI("Finish main isolate");
- Dart_EnterIsolate(isolate_);
- // Shutdown the isolate.
- Dart_ShutdownIsolate();
- isolate_ = NULL;
- initialized_script_ = false;
-}
« no previous file with comments | « samples/android_sample/jni/vm_glue.h ('k') | samples/android_sample/src/com/google/dartndk/DummyActivity.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698