Index: runtime/include/dart_native_api.h |
=================================================================== |
--- runtime/include/dart_native_api.h (revision 0) |
+++ runtime/include/dart_native_api.h (revision 0) |
@@ -0,0 +1,193 @@ |
+/* |
+ * 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 INCLUDE_DART_NATIVE_API_H_ |
+#define INCLUDE_DART_NATIVE_API_H_ |
+ |
+#include "include/dart_api.h" |
+ |
+/* |
+ * ========================================== |
+ * Message sending/receiving from native code |
+ * ========================================== |
+ */ |
+ |
+/** |
+ * A Dart_CObject is used for representing Dart objects as native C |
+ * data outside the Dart heap. These objects are totally detached from |
+ * the Dart heap. Only a subset of the Dart objects have a |
+ * representation as a Dart_CObject. |
+ * |
+ * The string encoding in the 'value.as_string' is UTF-8. |
+ * |
+ * All the different types from dart:typed_data are exposed as type |
+ * kTypedData. The specific type from dart:typed_data is in the type |
+ * field of the as_typed_data structure. The length in the |
+ * as_typed_data structure is always in bytes. |
+ */ |
+typedef enum { |
+ Dart_CObject_kNull = 0, |
+ Dart_CObject_kBool, |
+ Dart_CObject_kInt32, |
+ Dart_CObject_kInt64, |
+ Dart_CObject_kBigint, |
+ Dart_CObject_kDouble, |
+ Dart_CObject_kString, |
+ Dart_CObject_kArray, |
+ Dart_CObject_kTypedData, |
+ Dart_CObject_kExternalTypedData, |
+ Dart_CObject_kUnsupported, |
+ Dart_CObject_kNumberOfTypes |
+} Dart_CObject_Type; |
+ |
+typedef struct _Dart_CObject { |
+ Dart_CObject_Type type; |
+ union { |
+ bool as_bool; |
+ int32_t as_int32; |
+ int64_t as_int64; |
+ double as_double; |
+ char* as_string; |
+ char* as_bigint; |
+ struct { |
+ int length; |
+ struct _Dart_CObject** values; |
+ } as_array; |
+ struct { |
+ Dart_TypedData_Type type; |
+ int length; |
+ uint8_t* values; |
+ } as_typed_data; |
+ struct { |
+ Dart_TypedData_Type type; |
+ int length; |
+ uint8_t* data; |
+ void* peer; |
+ Dart_WeakPersistentHandleFinalizer callback; |
+ } as_external_typed_data; |
+ } value; |
+} Dart_CObject; |
+ |
+/** |
+ * Posts a message on some port. The message will contain the |
+ * Dart_CObject object graph rooted in 'message'. |
+ * |
+ * While the message is being sent the state of the graph of |
+ * Dart_CObject structures rooted in 'message' should not be accessed, |
+ * as the message generation will make temporary modifications to the |
+ * data. When the message has been sent the graph will be fully |
+ * restored. |
+ * |
+ * \param port_id The destination port. |
+ * \param message The message to send. |
+ * |
+ * \return True if the message was posted. |
+ */ |
+DART_EXPORT bool Dart_PostCObject(Dart_Port port_id, Dart_CObject* message); |
+ |
+/** |
+ * A native message handler. |
+ * |
+ * This handler is associated with a native port by calling |
+ * Dart_NewNativePort. |
+ * |
+ * The message received is decoded into the message structure. The |
+ * lifetime of the message data is controlled by the caller. All the |
+ * data references from the message are allocated by the caller and |
+ * will be reclaimed when returning to it. |
+ */ |
+ |
+typedef void (*Dart_NativeMessageHandler)(Dart_Port dest_port_id, |
+Dart_Port reply_port_id, |
+Dart_CObject* message); |
+ |
+/** |
+ * Creates a new native port. When messages are received on this |
+ * native port, then they will be dispatched to the provided native |
+ * message handler. |
+ * |
+ * \param name The name of this port in debugging messages. |
+ * \param handler The C handler to run when messages arrive on the port. |
+ * \param handle_concurrently Is it okay to process requests on this |
+ * native port concurrently? |
+ * |
+ * \return If successful, returns the port id for the native port. In |
+ * case of error, returns ILLEGAL_PORT. |
+ */ |
+DART_EXPORT Dart_Port Dart_NewNativePort(const char* name, |
+ Dart_NativeMessageHandler handler, |
+ bool handle_concurrently); |
+/* TODO(turnidge): Currently handle_concurrently is ignored. */ |
+ |
+/** |
+ * Closes the native port with the given id. |
+ * |
+ * The port must have been allocated by a call to Dart_NewNativePort. |
+ * |
+ * \param native_port_id The id of the native port to close. |
+ * |
+ * \return Returns true if the port was closed successfully. |
+ */ |
+DART_EXPORT bool Dart_CloseNativePort(Dart_Port native_port_id); |
+ |
+ |
+/* |
+ * ================= |
+ * Profiling support |
+ * ================= |
+ */ |
+ |
+/* External pprof support for gathering and dumping symbolic |
+ * information that can be used for better profile reports for |
+ * dynamically generated code. */ |
+DART_EXPORT void Dart_InitPprofSupport(); |
+DART_EXPORT void Dart_GetPprofSymbolInfo(void** buffer, int* buffer_size); |
+ |
+/* Support for generating symbol maps for use by the Linux perf tool. */ |
+DART_EXPORT void Dart_InitPerfEventsSupport(void* perf_events_file); |
+ |
+ |
+/* |
+ * ============= |
+ * Heap Profiler |
+ * ============= |
+ */ |
+ |
+/** |
+ * Generates a heap profile. |
+ * |
+ * \param callback A function pointer that will be repeatedly invoked |
+ * with heap profile data. |
+ * \param stream A pointer that will be passed to the callback. This |
+ * is a convenient way to provide an open stream to the callback. |
+ * |
+ * \return Success if the heap profile is successful. |
+ */ |
+DART_EXPORT Dart_Handle Dart_HeapProfile(Dart_FileWriteCallback callback, |
+ void* stream); |
+ |
+ |
+/* |
+ * ================== |
+ * Verification Tools |
+ * ================== |
+ */ |
+ |
+/** |
+ * Forces all loaded classes and functions to be compiled eagerly in |
+ * the current isolate.. |
+ * |
+ * TODO(turnidge): Document. |
+ */ |
+DART_EXPORT Dart_Handle Dart_CompileAll(); |
+ |
+/** |
+ * Check that all function fingerprints are OK. |
+ * |
+ */ |
+DART_EXPORT Dart_Handle Dart_CheckFunctionFingerprints(); |
+ |
+#endif /* INCLUDE_DART_NATIVE_API_H_ */ /* NOLINT */ |