OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 #include "include/dart_api.h" | 5 #include "include/dart_api.h" |
6 #include "include/dart_mirrors_api.h" | 6 #include "include/dart_mirrors_api.h" |
7 #include "include/dart_native_api.h" | 7 #include "include/dart_native_api.h" |
8 | 8 |
9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
10 #include "lib/stacktrace.h" | 10 #include "lib/stacktrace.h" |
(...skipping 1762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1773 | 1773 |
1774 | 1774 |
1775 DART_EXPORT bool Dart_HasLivePorts() { | 1775 DART_EXPORT bool Dart_HasLivePorts() { |
1776 Isolate* isolate = Isolate::Current(); | 1776 Isolate* isolate = Isolate::Current(); |
1777 ASSERT(isolate); | 1777 ASSERT(isolate); |
1778 NoSafepointScope no_safepoint_scope; | 1778 NoSafepointScope no_safepoint_scope; |
1779 return isolate->message_handler()->HasLivePorts(); | 1779 return isolate->message_handler()->HasLivePorts(); |
1780 } | 1780 } |
1781 | 1781 |
1782 | 1782 |
1783 static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) { | 1783 static uint8_t* malloc_allocator(uint8_t* ptr, |
| 1784 intptr_t old_size, |
| 1785 intptr_t new_size) { |
1784 void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size); | 1786 void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size); |
1785 return reinterpret_cast<uint8_t*>(new_ptr); | 1787 return reinterpret_cast<uint8_t*>(new_ptr); |
1786 } | 1788 } |
1787 | 1789 |
1788 | 1790 |
| 1791 static void malloc_deallocator(uint8_t* ptr) { |
| 1792 free(reinterpret_cast<void*>(ptr)); |
| 1793 } |
| 1794 |
| 1795 |
1789 DART_EXPORT bool Dart_Post(Dart_Port port_id, Dart_Handle handle) { | 1796 DART_EXPORT bool Dart_Post(Dart_Port port_id, Dart_Handle handle) { |
1790 DARTSCOPE(Thread::Current()); | 1797 DARTSCOPE(Thread::Current()); |
1791 API_TIMELINE_DURATION; | 1798 API_TIMELINE_DURATION; |
1792 NoSafepointScope no_safepoint_scope; | 1799 NoSafepointScope no_safepoint_scope; |
1793 if (port_id == ILLEGAL_PORT) { | 1800 if (port_id == ILLEGAL_PORT) { |
1794 return false; | 1801 return false; |
1795 } | 1802 } |
1796 | 1803 |
1797 // Smis and null can be sent without serialization. | 1804 // Smis and null can be sent without serialization. |
1798 RawObject* raw_obj = Api::UnwrapHandle(handle); | 1805 RawObject* raw_obj = Api::UnwrapHandle(handle); |
1799 if (ApiObjectConverter::CanConvert(raw_obj)) { | 1806 if (ApiObjectConverter::CanConvert(raw_obj)) { |
1800 return PortMap::PostMessage( | 1807 return PortMap::PostMessage( |
1801 new Message(port_id, raw_obj, Message::kNormalPriority)); | 1808 new Message(port_id, raw_obj, Message::kNormalPriority)); |
1802 } | 1809 } |
1803 | 1810 |
1804 const Object& object = Object::Handle(Z, raw_obj); | 1811 const Object& object = Object::Handle(Z, raw_obj); |
1805 uint8_t* data = NULL; | 1812 uint8_t* data = NULL; |
1806 MessageWriter writer(&data, &allocator, false); | 1813 MessageWriter writer(&data, &malloc_allocator, &malloc_deallocator, false); |
1807 writer.WriteMessage(object); | 1814 writer.WriteMessage(object); |
1808 intptr_t len = writer.BytesWritten(); | 1815 intptr_t len = writer.BytesWritten(); |
1809 return PortMap::PostMessage( | 1816 return PortMap::PostMessage( |
1810 new Message(port_id, data, len, Message::kNormalPriority)); | 1817 new Message(port_id, data, len, Message::kNormalPriority)); |
1811 } | 1818 } |
1812 | 1819 |
1813 | 1820 |
1814 DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id) { | 1821 DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id) { |
1815 DARTSCOPE(Thread::Current()); | 1822 DARTSCOPE(Thread::Current()); |
1816 CHECK_CALLBACK_STATE(T); | 1823 CHECK_CALLBACK_STATE(T); |
(...skipping 4998 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6815 } | 6822 } |
6816 | 6823 |
6817 | 6824 |
6818 DART_EXPORT void Dart_DumpNativeStackTrace(void* context) { | 6825 DART_EXPORT void Dart_DumpNativeStackTrace(void* context) { |
6819 #ifndef PRODUCT | 6826 #ifndef PRODUCT |
6820 Profiler::DumpStackTrace(context); | 6827 Profiler::DumpStackTrace(context); |
6821 #endif | 6828 #endif |
6822 } | 6829 } |
6823 | 6830 |
6824 } // namespace dart | 6831 } // namespace dart |
OLD | NEW |