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

Side by Side Diff: runtime/include/dart_api.h

Issue 2622053002: Refactor snapshots pieces to include a section for loading instructions into the heap of a regular … (Closed)
Patch Set: . Created 3 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 unified diff | Download patch
« no previous file with comments | « runtime/bin/vmservice_dartium.cc ('k') | runtime/lib/isolate.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 2 * Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
3 * for details. All rights reserved. Use of this source code is governed by a 3 * for details. All rights reserved. Use of this source code is governed by a
4 * BSD-style license that can be found in the LICENSE file. 4 * BSD-style license that can be found in the LICENSE file.
5 */ 5 */
6 6
7 #ifndef RUNTIME_INCLUDE_DART_API_H_ 7 #ifndef RUNTIME_INCLUDE_DART_API_H_
8 #define RUNTIME_INCLUDE_DART_API_H_ 8 #define RUNTIME_INCLUDE_DART_API_H_
9 9
10 /** \mainpage Dart Embedding API Reference 10 /** \mainpage Dart Embedding API Reference
(...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 * 766 *
767 * \return The embedder must return a handle to a Uint8List containing an 767 * \return The embedder must return a handle to a Uint8List containing an
768 * uncompressed tar archive or null. 768 * uncompressed tar archive or null.
769 */ 769 */
770 typedef Dart_Handle (*Dart_GetVMServiceAssetsArchive)(); 770 typedef Dart_Handle (*Dart_GetVMServiceAssetsArchive)();
771 771
772 /** 772 /**
773 * The current version of the Dart_InitializeFlags. Should be incremented every 773 * The current version of the Dart_InitializeFlags. Should be incremented every
774 * time Dart_InitializeFlags changes in a binary incompatible way. 774 * time Dart_InitializeFlags changes in a binary incompatible way.
775 */ 775 */
776 #define DART_INITIALIZE_PARAMS_CURRENT_VERSION (0x00000001) 776 #define DART_INITIALIZE_PARAMS_CURRENT_VERSION (0x00000002)
777 777
778 /** 778 /**
779 * Describes how to initialize the VM. Used with Dart_Initialize. 779 * Describes how to initialize the VM. Used with Dart_Initialize.
780 * 780 *
781 * \param version Identifies the version of the struct used by the client. 781 * \param version Identifies the version of the struct used by the client.
782 * should be initialized to DART_INITIALIZE_PARAMS_CURRENT_VERSION. 782 * should be initialized to DART_INITIALIZE_PARAMS_CURRENT_VERSION.
783 * \param vm_isolate_snapshot A buffer containing a snapshot of the VM isolate 783 * \param vm_isolate_snapshot A buffer containing a snapshot of the VM isolate
784 * or NULL if no snapshot is provided. 784 * or NULL if no snapshot is provided.
785 * \param instructions_snapshot A buffer containing a snapshot of precompiled 785 * \param instructions_snapshot A buffer containing a snapshot of precompiled
786 * instructions, or NULL if no snapshot is provided. 786 * instructions, or NULL if no snapshot is provided.
787 * \param create A function to be called during isolate creation. 787 * \param create A function to be called during isolate creation.
788 * See Dart_IsolateCreateCallback. 788 * See Dart_IsolateCreateCallback.
789 * \param shutdown A function to be called when an isolate is shutdown. 789 * \param shutdown A function to be called when an isolate is shutdown.
790 * See Dart_IsolateShutdownCallback. 790 * See Dart_IsolateShutdownCallback.
791 * \param get_service_assets A function to be called by the service isolate when 791 * \param get_service_assets A function to be called by the service isolate when
792 * it requires the vmservice assets archive. 792 * it requires the vmservice assets archive.
793 * See Dart_GetVMServiceAssetsArchive. 793 * See Dart_GetVMServiceAssetsArchive.
794 */ 794 */
795 typedef struct { 795 typedef struct {
796 int32_t version; 796 int32_t version;
797 const uint8_t* vm_isolate_snapshot; 797 const uint8_t* vm_snapshot_data;
798 const uint8_t* instructions_snapshot; 798 const uint8_t* vm_snapshot_instructions;
799 const uint8_t* data_snapshot;
800 Dart_IsolateCreateCallback create; 799 Dart_IsolateCreateCallback create;
801 Dart_IsolateShutdownCallback shutdown; 800 Dart_IsolateShutdownCallback shutdown;
802 Dart_ThreadExitCallback thread_exit; 801 Dart_ThreadExitCallback thread_exit;
803 Dart_FileOpenCallback file_open; 802 Dart_FileOpenCallback file_open;
804 Dart_FileReadCallback file_read; 803 Dart_FileReadCallback file_read;
805 Dart_FileWriteCallback file_write; 804 Dart_FileWriteCallback file_write;
806 Dart_FileCloseCallback file_close; 805 Dart_FileCloseCallback file_close;
807 Dart_EntropySource entropy_source; 806 Dart_EntropySource entropy_source;
808 Dart_GetVMServiceAssetsArchive get_service_assets; 807 Dart_GetVMServiceAssetsArchive get_service_assets;
809 } Dart_InitializeParams; 808 } Dart_InitializeParams;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 * isolate will be started using that snapshot data. Requires a core snapshot or 856 * isolate will be started using that snapshot data. Requires a core snapshot or
858 * an app snapshot created by Dart_CreateSnapshot or 857 * an app snapshot created by Dart_CreateSnapshot or
859 * Dart_CreatePrecompiledSnapshot* from a VM with the same version. 858 * Dart_CreatePrecompiledSnapshot* from a VM with the same version.
860 * 859 *
861 * Requires there to be no current isolate. 860 * Requires there to be no current isolate.
862 * 861 *
863 * \param script_uri The name of the script this isolate will load. 862 * \param script_uri The name of the script this isolate will load.
864 * Provided only for advisory purposes to improve debugging messages. 863 * Provided only for advisory purposes to improve debugging messages.
865 * \param main The name of the main entry point this isolate will run. 864 * \param main The name of the main entry point this isolate will run.
866 * Provided only for advisory purposes to improve debugging messages. 865 * Provided only for advisory purposes to improve debugging messages.
867 * \param snapshot A buffer containing a snapshot of the isolate or 866 * \param isolate_snapshot_data
868 * NULL if no snapshot is provided. 867 * \param isolate_snapshot_instructions Buffers containing a snapshot of the
868 * isolate or NULL if no snapshot is provided.
869 * \param flags Pointer to VM specific flags or NULL for default flags. 869 * \param flags Pointer to VM specific flags or NULL for default flags.
870 * \param callback_data Embedder data. This data will be passed to 870 * \param callback_data Embedder data. This data will be passed to
871 * the Dart_IsolateCreateCallback when new isolates are spawned from 871 * the Dart_IsolateCreateCallback when new isolates are spawned from
872 * this parent isolate. 872 * this parent isolate.
873 * \param error DOCUMENT 873 * \param error DOCUMENT
874 * 874 *
875 * \return The new isolate is returned. May be NULL if an error 875 * \return The new isolate is returned. May be NULL if an error
876 * occurs during isolate initialization. 876 * occurs during isolate initialization.
877 */ 877 */
878 DART_EXPORT Dart_Isolate Dart_CreateIsolate(const char* script_uri, 878 DART_EXPORT Dart_Isolate
879 const char* main, 879 Dart_CreateIsolate(const char* script_uri,
880 const uint8_t* snapshot, 880 const char* main,
881 Dart_IsolateFlags* flags, 881 const uint8_t* isolate_snapshot_data,
882 void* callback_data, 882 const uint8_t* isolate_snapshot_instructions,
883 char** error); 883 Dart_IsolateFlags* flags,
884 void* callback_data,
885 char** error);
884 /* TODO(turnidge): Document behavior when there is already a current 886 /* TODO(turnidge): Document behavior when there is already a current
885 * isolate. */ 887 * isolate. */
886 888
887 /** 889 /**
888 * Creates a new isolate from a Dart Kernel file. The new isolate 890 * Creates a new isolate from a Dart Kernel file. The new isolate
889 * becomes the current isolate. 891 * becomes the current isolate.
890 * 892 *
891 * Requires there to be no current isolate. 893 * Requires there to be no current isolate.
892 * 894 *
893 * After this call, the `kernel_program` needs to be supplied to a call to 895 * After this call, the `kernel_program` needs to be supplied to a call to
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1002 * Requires there to be a current isolate. 1004 * Requires there to be a current isolate.
1003 * 1005 *
1004 * \param buffer Returns a pointer to a buffer containing the 1006 * \param buffer Returns a pointer to a buffer containing the
1005 * snapshot. This buffer is scope allocated and is only valid 1007 * snapshot. This buffer is scope allocated and is only valid
1006 * until the next call to Dart_ExitScope. 1008 * until the next call to Dart_ExitScope.
1007 * \param size Returns the size of the buffer. 1009 * \param size Returns the size of the buffer.
1008 * 1010 *
1009 * \return A valid handle if no error occurs during the operation. 1011 * \return A valid handle if no error occurs during the operation.
1010 */ 1012 */
1011 DART_EXPORT Dart_Handle 1013 DART_EXPORT Dart_Handle
1012 Dart_CreateSnapshot(uint8_t** vm_isolate_snapshot_buffer, 1014 Dart_CreateSnapshot(uint8_t** vm_snapshot_data_buffer,
1013 intptr_t* vm_isolate_snapshot_size, 1015 intptr_t* vm_snapshot_data_size,
1014 uint8_t** isolate_snapshot_buffer, 1016 uint8_t** isolate_snapshot_data_buffer,
1015 intptr_t* isolate_snapshot_size); 1017 intptr_t* isolate_snapshot_data_size);
1016 1018
1017 /** 1019 /**
1018 * Creates a snapshot of the application script loaded in the isolate. 1020 * Creates a snapshot of the application script loaded in the isolate.
1019 * 1021 *
1020 * A script snapshot can be used for implementing fast startup of applications 1022 * A script snapshot can be used for implementing fast startup of applications
1021 * (skips the script tokenizing and parsing process). A Snapshot of the script 1023 * (skips the script tokenizing and parsing process). A Snapshot of the script
1022 * can only be created before any dart code has executed. 1024 * can only be created before any dart code has executed.
1023 * 1025 *
1024 * Requires there to be a current isolate which already has loaded script. 1026 * Requires there to be a current isolate which already has loaded script.
1025 * 1027 *
1026 * \param buffer Returns a pointer to a buffer containing 1028 * \param buffer Returns a pointer to a buffer containing
1027 * the snapshot. This buffer is scope allocated and is only valid 1029 * the snapshot. This buffer is scope allocated and is only valid
1028 * until the next call to Dart_ExitScope. 1030 * until the next call to Dart_ExitScope.
1029 * \param size Returns the size of the buffer. 1031 * \param size Returns the size of the buffer.
1030 * 1032 *
1031 * \return A valid handle if no error occurs during the operation. 1033 * \return A valid handle if no error occurs during the operation.
1032 */ 1034 */
1033 DART_EXPORT Dart_Handle Dart_CreateScriptSnapshot(uint8_t** buffer, 1035 DART_EXPORT Dart_Handle
1034 intptr_t* size); 1036 Dart_CreateScriptSnapshot(uint8_t** script_snapshot_buffer,
1037 intptr_t* script_snapshot_size);
1035 1038
1036 /** 1039 /**
1037 * Schedules an interrupt for the specified isolate. 1040 * Schedules an interrupt for the specified isolate.
1038 * 1041 *
1039 * When the isolate is interrupted, the isolate interrupt callback 1042 * When the isolate is interrupted, the isolate interrupt callback
1040 * will be invoked with 'isolate' as the current isolate (see 1043 * will be invoked with 'isolate' as the current isolate (see
1041 * Dart_SetIsolateEventHandler). 1044 * Dart_SetIsolateEventHandler).
1042 * 1045 *
1043 * \param isolate The isolate to be interrupted. 1046 * \param isolate The isolate to be interrupted.
1044 */ 1047 */
(...skipping 1787 matching lines...) Expand 10 before | Expand all | Expand 10 after
2832 * Loads the root script for current isolate from a script snapshot. The 2835 * Loads the root script for current isolate from a script snapshot. The
2833 * snapshot must have been created by Dart_CreateScriptSnapshot from a VM with 2836 * snapshot must have been created by Dart_CreateScriptSnapshot from a VM with
2834 * the same version. 2837 * the same version.
2835 * 2838 *
2836 * \param buffer A buffer which contains a snapshot of the script. 2839 * \param buffer A buffer which contains a snapshot of the script.
2837 * \param buffer_len Length of the passed in buffer. 2840 * \param buffer_len Length of the passed in buffer.
2838 * 2841 *
2839 * \return If no error occurs, the Library object corresponding to the root 2842 * \return If no error occurs, the Library object corresponding to the root
2840 * script is returned. Otherwise an error handle is returned. 2843 * script is returned. Otherwise an error handle is returned.
2841 */ 2844 */
2842 DART_EXPORT Dart_Handle Dart_LoadScriptFromSnapshot(const uint8_t* buffer, 2845 DART_EXPORT Dart_Handle
2843 intptr_t buffer_len); 2846 Dart_LoadScriptFromSnapshot(const uint8_t* script_snapshot_buffer,
2847 intptr_t script_snapshot_size);
2844 2848
2845 /** 2849 /**
2846 * Loads a dart application via an in-memory kernel program. 2850 * Loads a dart application via an in-memory kernel program.
2847 * 2851 *
2848 * \param kernel_program The kernel program obtained via 2852 * \param kernel_program The kernel program obtained via
2849 * `Dart_ReadKernelBinary`. 2853 * `Dart_ReadKernelBinary`.
2850 * 2854 *
2851 * The VM will take ownership of the `kernel_program` object. 2855 * The VM will take ownership of the `kernel_program` object.
2852 * 2856 *
2853 * \return If no error occurs, the Library object corresponding to the root 2857 * \return If no error occurs, the Library object corresponding to the root
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
3211 Dart_Precompile(Dart_QualifiedFunctionName entry_points[], 3215 Dart_Precompile(Dart_QualifiedFunctionName entry_points[],
3212 uint8_t* jit_feedback, 3216 uint8_t* jit_feedback,
3213 intptr_t jit_feedback_length); 3217 intptr_t jit_feedback_length);
3214 3218
3215 3219
3216 /** 3220 /**
3217 * Creates a precompiled snapshot. 3221 * Creates a precompiled snapshot.
3218 * - A root library must have been loaded. 3222 * - A root library must have been loaded.
3219 * - Dart_Precompile must have been called. 3223 * - Dart_Precompile must have been called.
3220 * 3224 *
3221 * Outputs an assembly file defining the symbols kVmIsolateSnapshot, 3225 * Outputs an assembly file defining the symbols
3222 * kIsolateSnapshot, kInstructionsSnapshot and kDataSnapshot. The assembly 3226 * - kDartVmSnapshotData
3223 * should be compiled as a static or shared library and linked or loaded by the 3227 * - kDartVmSnapshotInstructions
3224 * embedder. 3228 * - kDartIsolateSnapshotData
3229 * - kDartIsolateSnapshotInstructions
3230 *
3231 * The assembly should be compiled as a static or shared library and linked or
3232 * loaded by the embedder.
3225 * Running this snapshot requires a VM compiled with DART_PRECOMPILED_SNAPSHOT. 3233 * Running this snapshot requires a VM compiled with DART_PRECOMPILED_SNAPSHOT.
3226 * The kVmIsolateSnapshot, kInstructionsSnapshot and kDataSnapshot should be 3234 * The kDartVmSnapshotData and kDartVmSnapshotInstructions should be passed to
3227 * passed as arguments to Dart_Initialize. The kIsolateSnapshot snapshot should 3235 * Dart_Initialize. The kDartIsolateSnapshotData and
3228 * be passed to Dart_CreateIsolate. 3236 * kDartIsoalteSnapshotInstructions should be passed to Dart_CreateIsolate.
3229 * 3237 *
3230 * The buffers are scope allocated and are only valid until the next call to 3238 * The buffers are scope allocated and are only valid until the next call to
3231 * Dart_ExitScope. 3239 * Dart_ExitScope.
3232 * 3240 *
3233 * \return A valid handle if no error occurs during the operation. 3241 * \return A valid handle if no error occurs during the operation.
3234 */ 3242 */
3235 DART_EXPORT Dart_Handle 3243 DART_EXPORT Dart_Handle
3236 Dart_CreateAppAOTSnapshotAsAssembly(uint8_t** assembly_buffer, 3244 Dart_CreateAppAOTSnapshotAsAssembly(uint8_t** assembly_buffer,
3237 intptr_t* assembly_size); 3245 intptr_t* assembly_size);
3238 3246
3239 3247
3240 /** 3248 /**
3241 * Same as Dart_CreateAppAOTSnapshotAsAssembly, except all the pieces are 3249 * Same as Dart_CreateAppAOTSnapshotAsAssembly, except all the pieces are
3242 * provided directly as bytes that the embedder can load with mmap. The 3250 * provided directly as bytes that the embedder can load with mmap. The
3243 * instructions piece must be loaded with read and execute permissions; the 3251 * instructions pieces must be loaded with read and execute permissions; the
3244 * other pieces may be loaded as read-only. 3252 * other pieces may be loaded as read-only.
3245 */ 3253 */
3246 DART_EXPORT Dart_Handle 3254 DART_EXPORT Dart_Handle
3247 Dart_CreateAppAOTSnapshotAsBlobs(uint8_t** vm_isolate_snapshot_buffer, 3255 Dart_CreateAppAOTSnapshotAsBlobs(uint8_t** vm_snapshot_data_buffer,
3248 intptr_t* vm_isolate_snapshot_size, 3256 intptr_t* vm_snapshot_data_size,
3249 uint8_t** isolate_snapshot_buffer, 3257 uint8_t** vm_snapshot_instructions_buffer,
3250 intptr_t* isolate_snapshot_size, 3258 intptr_t* vm_snapshot_instructions_size,
3251 uint8_t** instructions_blob_buffer, 3259 uint8_t** isolate_snapshot_data_buffer,
3252 intptr_t* instructions_blob_size, 3260 intptr_t* isolate_snapshot_data_size,
3253 uint8_t** rodata_blob_buffer, 3261 uint8_t** isolate_snapshot_instructions_buffer,
3254 intptr_t* rodata_blob_size); 3262 intptr_t* isolate_snapshot_instructions_size);
3255 3263
3256 3264
3257 /** 3265 /**
3258 * Creates a snapshot that caches unoptimized code and type feedback for faster 3266 * Creates a snapshot that caches compiled code and type feedback for faster
3259 * startup and quicker warmup in a subsequent process. 3267 * startup and quicker warmup in a subsequent process.
3260 * 3268 *
3261 * Outputs a snapshot in four pieces. The vm isolate snapshot, 3269 * Outputs a snapshot in two pieces. The pieces should be passed to
3262 * instructions_blob and rodata_blob should be passed as arguments to 3270 * Dart_CreateIsolate in a VM using the same VM snapshot pieces used in the
3263 * Dart_Initialize. The isolate snapshot should be passed to 3271 * current VM. The instructions piece must be loaded with read and execute
3264 * Dart_CreateIsolate. The instructions piece must be loaded with execute 3272 * permissions; the data piece may be loaded as read-only.
3265 * permissions; the other pieces may loaded as read-only.
3266 * 3273 *
3267 * - Requires the VM to have been started with --load-deferred-eagerly. 3274 * - Requires the VM to have been started with --load-deferred-eagerly.
3268 * - Requires the VM to have not been started with --precompilation. 3275 * - Requires the VM to have not been started with --precompilation.
3269 * - Not supported when targeting IA32. 3276 * - Not supported when targeting IA32 or DBC.
3270 * - The VM writing the snapshot and the VM reading the snapshot must be the 3277 * - The VM writing the snapshot and the VM reading the snapshot must be the
3271 * same version, must be built in the same DEBUG/RELEASE/PRODUCT mode, must 3278 * same version, must be built in the same DEBUG/RELEASE/PRODUCT mode, must
3272 * be targeting the same architecture, and must both be in checked mode or 3279 * be targeting the same architecture, and must both be in checked mode or
3273 * both in unchecked mode. 3280 * both in unchecked mode.
3274 * 3281 *
3275 * The buffers are scope allocated and are only valid until the next call to 3282 * The buffers are scope allocated and are only valid until the next call to
3276 * Dart_ExitScope. 3283 * Dart_ExitScope.
3277 * 3284 *
3278 * \return A valid handle if no error occurs during the operation. 3285 * \return A valid handle if no error occurs during the operation.
3279 */ 3286 */
3280 DART_EXPORT Dart_Handle 3287 DART_EXPORT Dart_Handle
3281 Dart_CreateAppJITSnapshotAsBlobs(uint8_t** isolate_snapshot_buffer, 3288 Dart_CreateAppJITSnapshotAsBlobs(uint8_t** isolate_snapshot_data_buffer,
3282 intptr_t* isolate_snapshot_size, 3289 intptr_t* isolate_snapshot_data_size,
3283 uint8_t** instructions_blob_buffer, 3290 uint8_t** isolate_snapshot_instructions_buffer,
3284 intptr_t* instructions_blob_size, 3291 intptr_t* isolate_snapshot_instructions_size);
3285 uint8_t** rodata_blob_buffer,
3286 intptr_t* rodata_blob_size);
3287 3292
3288 3293
3289 /** 3294 /**
3290 * Returns whether the VM only supports running from precompiled snapshots and 3295 * Returns whether the VM only supports running from precompiled snapshots and
3291 * not from any other kind of snapshot or from source (that is, the VM was 3296 * not from any other kind of snapshot or from source (that is, the VM was
3292 * compiled with DART_PRECOMPILED_RUNTIME). 3297 * compiled with DART_PRECOMPILED_RUNTIME).
3293 */ 3298 */
3294 DART_EXPORT bool Dart_IsPrecompiledRuntime(); 3299 DART_EXPORT bool Dart_IsPrecompiledRuntime();
3295 3300
3296 3301
3297 /** 3302 /**
3298 * Print a native stack trace. Used for crash handling. 3303 * Print a native stack trace. Used for crash handling.
3299 */ 3304 */
3300 DART_EXPORT void Dart_DumpNativeStackTrace(void* context); 3305 DART_EXPORT void Dart_DumpNativeStackTrace(void* context);
3301 3306
3302 #endif /* INCLUDE_DART_API_H_ */ /* NOLINT */ 3307 #endif /* INCLUDE_DART_API_H_ */ /* NOLINT */
OLDNEW
« no previous file with comments | « runtime/bin/vmservice_dartium.cc ('k') | runtime/lib/isolate.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698