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 5506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5517 Dart_Handle state = Api::CheckAndFinalizePendingClasses(T); | 5517 Dart_Handle state = Api::CheckAndFinalizePendingClasses(T); |
5518 if (::Dart_IsError(state)) { | 5518 if (::Dart_IsError(state)) { |
5519 return state; | 5519 return state; |
5520 } | 5520 } |
5521 | 5521 |
5522 // Now that the newly loaded classes are finalized, notify the debugger | 5522 // Now that the newly loaded classes are finalized, notify the debugger |
5523 // that new code has been loaded. If there are latent breakpoints in | 5523 // that new code has been loaded. If there are latent breakpoints in |
5524 // the new code, the debugger convert them to unresolved source breakpoints. | 5524 // the new code, the debugger convert them to unresolved source breakpoints. |
5525 // The code that completes the futures (invoked below) may call into the | 5525 // The code that completes the futures (invoked below) may call into the |
5526 // newly loaded code and trigger one of these breakpoints. | 5526 // newly loaded code and trigger one of these breakpoints. |
5527 I->debugger()->NotifyDoneLoading(); | 5527 if (FLAG_support_debugger) { |
| 5528 I->debugger()->NotifyDoneLoading(); |
| 5529 } |
5528 | 5530 |
5529 if (FLAG_enable_mirrors) { | 5531 if (FLAG_enable_mirrors) { |
5530 // Notify mirrors that MirrorSystem.libraries needs to be recomputed. | 5532 // Notify mirrors that MirrorSystem.libraries needs to be recomputed. |
5531 const Library& libmirrors = Library::Handle(Z, Library::MirrorsLibrary()); | 5533 const Library& libmirrors = Library::Handle(Z, Library::MirrorsLibrary()); |
5532 const Field& dirty_bit = Field::Handle(Z, | 5534 const Field& dirty_bit = Field::Handle(Z, |
5533 libmirrors.LookupLocalField(String::Handle(String::New("dirty")))); | 5535 libmirrors.LookupLocalField(String::Handle(String::New("dirty")))); |
5534 ASSERT(!dirty_bit.IsNull() && dirty_bit.is_static()); | 5536 ASSERT(!dirty_bit.IsNull() && dirty_bit.is_static()); |
5535 dirty_bit.SetStaticValue(Bool::True()); | 5537 dirty_bit.SetStaticValue(Bool::True()); |
5536 } | 5538 } |
5537 | 5539 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5625 | 5627 |
5626 DART_EXPORT Dart_Port Dart_ServiceWaitForLoadPort() { | 5628 DART_EXPORT Dart_Port Dart_ServiceWaitForLoadPort() { |
5627 return ServiceIsolate::WaitForLoadPort(); | 5629 return ServiceIsolate::WaitForLoadPort(); |
5628 } | 5630 } |
5629 | 5631 |
5630 | 5632 |
5631 DART_EXPORT void Dart_RegisterIsolateServiceRequestCallback( | 5633 DART_EXPORT void Dart_RegisterIsolateServiceRequestCallback( |
5632 const char* name, | 5634 const char* name, |
5633 Dart_ServiceRequestCallback callback, | 5635 Dart_ServiceRequestCallback callback, |
5634 void* user_data) { | 5636 void* user_data) { |
5635 Service::RegisterIsolateEmbedderCallback(name, callback, user_data); | 5637 if (FLAG_support_service) { |
| 5638 Service::RegisterIsolateEmbedderCallback(name, callback, user_data); |
| 5639 } |
5636 } | 5640 } |
5637 | 5641 |
5638 | 5642 |
5639 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( | 5643 DART_EXPORT void Dart_RegisterRootServiceRequestCallback( |
5640 const char* name, | 5644 const char* name, |
5641 Dart_ServiceRequestCallback callback, | 5645 Dart_ServiceRequestCallback callback, |
5642 void* user_data) { | 5646 void* user_data) { |
5643 Service::RegisterRootEmbedderCallback(name, callback, user_data); | 5647 if (FLAG_support_service) { |
| 5648 Service::RegisterRootEmbedderCallback(name, callback, user_data); |
| 5649 } |
5644 } | 5650 } |
5645 | 5651 |
5646 | 5652 |
5647 DART_EXPORT Dart_Handle Dart_SetServiceStreamCallbacks( | 5653 DART_EXPORT Dart_Handle Dart_SetServiceStreamCallbacks( |
5648 Dart_ServiceStreamListenCallback listen_callback, | 5654 Dart_ServiceStreamListenCallback listen_callback, |
5649 Dart_ServiceStreamCancelCallback cancel_callback) { | 5655 Dart_ServiceStreamCancelCallback cancel_callback) { |
| 5656 if (!FLAG_support_service) { |
| 5657 return Api::Success(); |
| 5658 } |
5650 if (listen_callback != NULL) { | 5659 if (listen_callback != NULL) { |
5651 if (Service::stream_listen_callback() != NULL) { | 5660 if (Service::stream_listen_callback() != NULL) { |
5652 return Api::NewError( | 5661 return Api::NewError( |
5653 "%s permits only one listen callback to be registered, please " | 5662 "%s permits only one listen callback to be registered, please " |
5654 "remove the existing callback and then add this callback", | 5663 "remove the existing callback and then add this callback", |
5655 CURRENT_FUNC); | 5664 CURRENT_FUNC); |
5656 } | 5665 } |
5657 } else { | 5666 } else { |
5658 if (Service::stream_listen_callback() == NULL) { | 5667 if (Service::stream_listen_callback() == NULL) { |
5659 return Api::NewError( | 5668 return Api::NewError( |
(...skipping 17 matching lines...) Expand all Loading... |
5677 } | 5686 } |
5678 Service::SetEmbedderStreamCallbacks(listen_callback, cancel_callback); | 5687 Service::SetEmbedderStreamCallbacks(listen_callback, cancel_callback); |
5679 return Api::Success(); | 5688 return Api::Success(); |
5680 } | 5689 } |
5681 | 5690 |
5682 | 5691 |
5683 DART_EXPORT Dart_Handle Dart_ServiceSendDataEvent(const char* stream_id, | 5692 DART_EXPORT Dart_Handle Dart_ServiceSendDataEvent(const char* stream_id, |
5684 const char* event_kind, | 5693 const char* event_kind, |
5685 const uint8_t* bytes, | 5694 const uint8_t* bytes, |
5686 intptr_t bytes_length) { | 5695 intptr_t bytes_length) { |
| 5696 #ifdef PRODUCT |
| 5697 return Api::Success(); |
| 5698 #else |
5687 DARTSCOPE(Thread::Current()); | 5699 DARTSCOPE(Thread::Current()); |
5688 Isolate* I = T->isolate(); | 5700 Isolate* I = T->isolate(); |
5689 if (stream_id == NULL) { | 5701 if (stream_id == NULL) { |
5690 RETURN_NULL_ERROR(stream_id); | 5702 RETURN_NULL_ERROR(stream_id); |
5691 } | 5703 } |
5692 if (event_kind == NULL) { | 5704 if (event_kind == NULL) { |
5693 RETURN_NULL_ERROR(event_kind); | 5705 RETURN_NULL_ERROR(event_kind); |
5694 } | 5706 } |
5695 if (bytes == NULL) { | 5707 if (bytes == NULL) { |
5696 RETURN_NULL_ERROR(bytes); | 5708 RETURN_NULL_ERROR(bytes); |
5697 } | 5709 } |
5698 if (bytes_length < 0) { | 5710 if (bytes_length < 0) { |
5699 return Api::NewError("%s expects argument 'bytes_length' to be >= 0.", | 5711 return Api::NewError("%s expects argument 'bytes_length' to be >= 0.", |
5700 CURRENT_FUNC); | 5712 CURRENT_FUNC); |
5701 } | 5713 } |
5702 Service::SendEmbedderEvent(I, stream_id, event_kind, | 5714 Service::SendEmbedderEvent(I, stream_id, event_kind, |
5703 bytes, bytes_length); | 5715 bytes, bytes_length); |
5704 return Api::Success(); | 5716 return Api::Success(); |
| 5717 #endif // PRODUCT |
5705 } | 5718 } |
5706 | 5719 |
5707 | 5720 |
5708 DART_EXPORT int64_t Dart_TimelineGetMicros() { | 5721 DART_EXPORT int64_t Dart_TimelineGetMicros() { |
5709 return OS::GetCurrentMonotonicMicros(); | 5722 return OS::GetCurrentMonotonicMicros(); |
5710 } | 5723 } |
5711 | 5724 |
5712 | 5725 |
5713 DART_EXPORT void Dart_TimelineSetRecordedStreams(int64_t stream_mask) { | 5726 DART_EXPORT void Dart_TimelineSetRecordedStreams(int64_t stream_mask) { |
5714 Isolate* isolate = Isolate::Current(); | 5727 Isolate* isolate = Isolate::Current(); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5852 free(output); | 5865 free(output); |
5853 | 5866 |
5854 // Finish the stream. | 5867 // Finish the stream. |
5855 FinishStreamToConsumer(consumer, user_data, "timeline"); | 5868 FinishStreamToConsumer(consumer, user_data, "timeline"); |
5856 return true; | 5869 return true; |
5857 } | 5870 } |
5858 | 5871 |
5859 | 5872 |
5860 DART_EXPORT bool Dart_TimelineGetTrace(Dart_StreamConsumer consumer, | 5873 DART_EXPORT bool Dart_TimelineGetTrace(Dart_StreamConsumer consumer, |
5861 void* user_data) { | 5874 void* user_data) { |
| 5875 if (!FLAG_support_timeline) { |
| 5876 return false; |
| 5877 } |
5862 Isolate* isolate = Isolate::Current(); | 5878 Isolate* isolate = Isolate::Current(); |
5863 CHECK_ISOLATE(isolate); | 5879 CHECK_ISOLATE(isolate); |
5864 if (consumer == NULL) { | 5880 if (consumer == NULL) { |
5865 return false; | 5881 return false; |
5866 } | 5882 } |
5867 TimelineEventRecorder* timeline_recorder = Timeline::recorder(); | 5883 TimelineEventRecorder* timeline_recorder = Timeline::recorder(); |
5868 if (timeline_recorder == NULL) { | 5884 if (timeline_recorder == NULL) { |
5869 // Nothing has been recorded. | 5885 // Nothing has been recorded. |
5870 return false; | 5886 return false; |
5871 } | 5887 } |
5872 Thread* T = Thread::Current(); | 5888 Thread* T = Thread::Current(); |
5873 StackZone zone(T); | 5889 StackZone zone(T); |
5874 Timeline::ReclaimCachedBlocksFromThreads(); | 5890 Timeline::ReclaimCachedBlocksFromThreads(); |
5875 JSONStream js; | 5891 JSONStream js; |
5876 IsolateTimelineEventFilter filter(isolate->main_port()); | 5892 IsolateTimelineEventFilter filter(isolate->main_port()); |
5877 timeline_recorder->PrintTraceEvent(&js, &filter); | 5893 timeline_recorder->PrintTraceEvent(&js, &filter); |
5878 return StreamTraceEvents(consumer, user_data, &js); | 5894 return StreamTraceEvents(consumer, user_data, &js); |
5879 } | 5895 } |
5880 | 5896 |
5881 | 5897 |
5882 DART_EXPORT bool Dart_GlobalTimelineGetTrace(Dart_StreamConsumer consumer, | 5898 DART_EXPORT bool Dart_GlobalTimelineGetTrace(Dart_StreamConsumer consumer, |
5883 void* user_data) { | 5899 void* user_data) { |
| 5900 if (!FLAG_support_timeline) { |
| 5901 return false; |
| 5902 } |
5884 // To support various embedders, it must be possible to call this function | 5903 // To support various embedders, it must be possible to call this function |
5885 // from a thread for which we have not entered an Isolate and set up a Thread | 5904 // from a thread for which we have not entered an Isolate and set up a Thread |
5886 // TLS object. Therefore, a Zone may not be available, a StackZone cannot be | 5905 // TLS object. Therefore, a Zone may not be available, a StackZone cannot be |
5887 // created, and no ZoneAllocated objects can be allocated. | 5906 // created, and no ZoneAllocated objects can be allocated. |
5888 if (consumer == NULL) { | 5907 if (consumer == NULL) { |
5889 return false; | 5908 return false; |
5890 } | 5909 } |
5891 TimelineEventRecorder* timeline_recorder = Timeline::recorder(); | 5910 TimelineEventRecorder* timeline_recorder = Timeline::recorder(); |
5892 if (timeline_recorder == NULL) { | 5911 if (timeline_recorder == NULL) { |
5893 // Nothing has been recorded. | 5912 // Nothing has been recorded. |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6104 return Api::Success(); | 6123 return Api::Success(); |
6105 } | 6124 } |
6106 #endif // DART_PRECOMPILER | 6125 #endif // DART_PRECOMPILER |
6107 | 6126 |
6108 | 6127 |
6109 DART_EXPORT bool Dart_IsRunningPrecompiledCode() { | 6128 DART_EXPORT bool Dart_IsRunningPrecompiledCode() { |
6110 return Dart::IsRunningPrecompiledCode(); | 6129 return Dart::IsRunningPrecompiledCode(); |
6111 } | 6130 } |
6112 | 6131 |
6113 } // namespace dart | 6132 } // namespace dart |
OLD | NEW |