| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef VM_DART_API_MESSAGE_H_ | 5 #ifndef VM_DART_API_MESSAGE_H_ |
| 6 #define VM_DART_API_MESSAGE_H_ | 6 #define VM_DART_API_MESSAGE_H_ |
| 7 | 7 |
| 8 #include "include/dart_native_api.h" | 8 #include "include/dart_native_api.h" |
| 9 #include "vm/dart_api_state.h" | 9 #include "vm/dart_api_state.h" |
| 10 #include "vm/snapshot.h" | 10 #include "vm/snapshot.h" |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 | 39 |
| 40 | 40 |
| 41 // Reads a message snapshot into a C structure. | 41 // Reads a message snapshot into a C structure. |
| 42 class ApiMessageReader : public BaseReader { | 42 class ApiMessageReader : public BaseReader { |
| 43 public: | 43 public: |
| 44 // The allocator passed is used to allocate memory for the C structure used | 44 // The allocator passed is used to allocate memory for the C structure used |
| 45 // to represent the message snapshot. This allocator must keep track of the | 45 // to represent the message snapshot. This allocator must keep track of the |
| 46 // memory allocated as there is no way to run through the resulting C | 46 // memory allocated as there is no way to run through the resulting C |
| 47 // structure and free the individual pieces. Using a zone based allocator is | 47 // structure and free the individual pieces. Using a zone based allocator is |
| 48 // recommended. | 48 // recommended. |
| 49 ApiMessageReader(const uint8_t* buffer, intptr_t length, ReAlloc alloc); | 49 ApiMessageReader(const uint8_t* buffer, |
| 50 intptr_t length, |
| 51 ReAlloc alloc, |
| 52 bool use_vm_isolate_snapshot = true); |
| 50 ~ApiMessageReader() { } | 53 ~ApiMessageReader() { } |
| 51 | 54 |
| 52 Dart_CObject* ReadMessage(); | 55 Dart_CObject* ReadMessage(); |
| 53 | 56 |
| 54 private: | 57 private: |
| 55 class BackRefNode { | 58 class BackRefNode { |
| 56 public: | 59 public: |
| 57 BackRefNode(Dart_CObject* reference, DeserializeState state) | 60 BackRefNode(Dart_CObject* reference, DeserializeState state) |
| 58 : reference_(reference), state_(state) {} | 61 : reference_(reference), state_(state) {} |
| 59 Dart_CObject* reference() const { return reference_; } | 62 Dart_CObject* reference() const { return reference_; } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 87 Dart_CObject* AllocateDartCObjectBigint(); | 90 Dart_CObject* AllocateDartCObjectBigint(); |
| 88 // Allocates a Dart_CObject object for a double. | 91 // Allocates a Dart_CObject object for a double. |
| 89 Dart_CObject* AllocateDartCObjectDouble(double value); | 92 Dart_CObject* AllocateDartCObjectDouble(double value); |
| 90 // Allocates a Dart_CObject object for string data. | 93 // Allocates a Dart_CObject object for string data. |
| 91 Dart_CObject* AllocateDartCObjectString(intptr_t length); | 94 Dart_CObject* AllocateDartCObjectString(intptr_t length); |
| 92 // Allocates a C Dart_CObject object for a typed data. | 95 // Allocates a C Dart_CObject object for a typed data. |
| 93 Dart_CObject* AllocateDartCObjectTypedData( | 96 Dart_CObject* AllocateDartCObjectTypedData( |
| 94 Dart_TypedData_Type type, intptr_t length); | 97 Dart_TypedData_Type type, intptr_t length); |
| 95 // Allocates a C array of Dart_CObject objects. | 98 // Allocates a C array of Dart_CObject objects. |
| 96 Dart_CObject* AllocateDartCObjectArray(intptr_t length); | 99 Dart_CObject* AllocateDartCObjectArray(intptr_t length); |
| 100 // Allocate a C Dart_CObject object for a VM isolate object. |
| 101 Dart_CObject* AllocateDartCObjectVmIsolateObj(intptr_t id); |
| 97 // Allocates a Dart_CObject_Internal object with the specified type. | 102 // Allocates a Dart_CObject_Internal object with the specified type. |
| 98 Dart_CObject_Internal* AllocateDartCObjectInternal( | 103 Dart_CObject_Internal* AllocateDartCObjectInternal( |
| 99 Dart_CObject_Internal::Type type); | 104 Dart_CObject_Internal::Type type); |
| 100 // Allocates a Dart_CObject_Internal object for a class object. | 105 // Allocates a Dart_CObject_Internal object for a class object. |
| 101 Dart_CObject_Internal* AllocateDartCObjectClass(); | 106 Dart_CObject_Internal* AllocateDartCObjectClass(); |
| 102 // Allocates a backwards reference node. | 107 // Allocates a backwards reference node. |
| 103 BackRefNode* AllocateBackRefNode(Dart_CObject* ref, DeserializeState state); | 108 BackRefNode* AllocateBackRefNode(Dart_CObject* ref, DeserializeState state); |
| 104 | 109 |
| 105 void Init(); | 110 void Init(); |
| 106 | 111 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 120 // Get an object from the backward references list. | 125 // Get an object from the backward references list. |
| 121 Dart_CObject* GetBackRef(intptr_t id); | 126 Dart_CObject* GetBackRef(intptr_t id); |
| 122 | 127 |
| 123 intptr_t NextAvailableObjectId() const; | 128 intptr_t NextAvailableObjectId() const; |
| 124 | 129 |
| 125 Dart_CObject_Internal* AsInternal(Dart_CObject* object) { | 130 Dart_CObject_Internal* AsInternal(Dart_CObject* object) { |
| 126 ASSERT(object->type >= Dart_CObject_kNumberOfTypes); | 131 ASSERT(object->type >= Dart_CObject_kNumberOfTypes); |
| 127 return reinterpret_cast<Dart_CObject_Internal*>(object); | 132 return reinterpret_cast<Dart_CObject_Internal*>(object); |
| 128 } | 133 } |
| 129 | 134 |
| 135 RawObject* VmIsolateSnapshotObject(intptr_t index) const { |
| 136 return Object::vm_isolate_snapshot_object_table().At(index); |
| 137 } |
| 138 |
| 139 Dart_CObject* CreateDartCObjectString(RawObject* raw); |
| 140 |
| 130 // Allocation of the structures for the decoded message happens | 141 // Allocation of the structures for the decoded message happens |
| 131 // either in the supplied zone or using the supplied allocation | 142 // either in the supplied zone or using the supplied allocation |
| 132 // function. | 143 // function. |
| 133 ReAlloc alloc_; | 144 ReAlloc alloc_; |
| 134 ApiGrowableArray<BackRefNode*> backward_references_; | 145 ApiGrowableArray<BackRefNode*> backward_references_; |
| 135 Dart_CObject** vm_symbol_references_; | 146 Dart_CObject** vm_symbol_references_; |
| 147 intptr_t max_vm_isolate_object_id_; |
| 136 | 148 |
| 137 Dart_CObject type_arguments_marker; | 149 Dart_CObject type_arguments_marker; |
| 138 Dart_CObject dynamic_type_marker; | 150 Dart_CObject dynamic_type_marker; |
| 139 static _Dart_CObject* singleton_uint32_typed_data_; | 151 static _Dart_CObject* singleton_uint32_typed_data_; |
| 140 }; | 152 }; |
| 141 | 153 |
| 142 | 154 |
| 143 class ApiMessageWriter : public BaseWriter { | 155 class ApiMessageWriter : public BaseWriter { |
| 144 public: | 156 public: |
| 145 static const intptr_t kInitialSize = 512; | 157 static const intptr_t kInitialSize = 512; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 void WriteInlinedHeader(Dart_CObject* object); | 192 void WriteInlinedHeader(Dart_CObject* object); |
| 181 bool WriteCObject(Dart_CObject* object); | 193 bool WriteCObject(Dart_CObject* object); |
| 182 bool WriteCObjectRef(Dart_CObject* object); | 194 bool WriteCObjectRef(Dart_CObject* object); |
| 183 bool WriteForwardedCObject(Dart_CObject* object); | 195 bool WriteForwardedCObject(Dart_CObject* object); |
| 184 bool WriteCObjectInlined(Dart_CObject* object, Dart_CObject_Type type); | 196 bool WriteCObjectInlined(Dart_CObject* object, Dart_CObject_Type type); |
| 185 | 197 |
| 186 intptr_t object_id_; | 198 intptr_t object_id_; |
| 187 Dart_CObject** forward_list_; | 199 Dart_CObject** forward_list_; |
| 188 intptr_t forward_list_length_; | 200 intptr_t forward_list_length_; |
| 189 intptr_t forward_id_; | 201 intptr_t forward_id_; |
| 202 intptr_t max_vm_isolate_object_id_; |
| 190 | 203 |
| 191 DISALLOW_COPY_AND_ASSIGN(ApiMessageWriter); | 204 DISALLOW_COPY_AND_ASSIGN(ApiMessageWriter); |
| 192 }; | 205 }; |
| 193 | 206 |
| 194 } // namespace dart | 207 } // namespace dart |
| 195 | 208 |
| 196 #endif // VM_DART_API_MESSAGE_H_ | 209 #endif // VM_DART_API_MESSAGE_H_ |
| OLD | NEW |