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

Side by Side Diff: mojo/dart/embedder/mojo_natives.cc

Issue 1405103002: Dart: Merge message pipe query and read into one native call. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 2 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdio.h> 5 #include <stdio.h>
6 #include <string.h> 6 #include <string.h>
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 16 matching lines...) Expand all
27 V(MojoDataPipe_Create, 3) \ 27 V(MojoDataPipe_Create, 3) \
28 V(MojoDataPipe_WriteData, 4) \ 28 V(MojoDataPipe_WriteData, 4) \
29 V(MojoDataPipe_BeginWriteData, 3) \ 29 V(MojoDataPipe_BeginWriteData, 3) \
30 V(MojoDataPipe_EndWriteData, 2) \ 30 V(MojoDataPipe_EndWriteData, 2) \
31 V(MojoDataPipe_ReadData, 4) \ 31 V(MojoDataPipe_ReadData, 4) \
32 V(MojoDataPipe_BeginReadData, 3) \ 32 V(MojoDataPipe_BeginReadData, 3) \
33 V(MojoDataPipe_EndReadData, 2) \ 33 V(MojoDataPipe_EndReadData, 2) \
34 V(MojoMessagePipe_Create, 1) \ 34 V(MojoMessagePipe_Create, 1) \
35 V(MojoMessagePipe_Write, 5) \ 35 V(MojoMessagePipe_Write, 5) \
36 V(MojoMessagePipe_Read, 5) \ 36 V(MojoMessagePipe_Read, 5) \
37 V(MojoMessagePipe_QueryAndRead, 2) \
37 V(Mojo_GetTimeTicksNow, 0) \ 38 V(Mojo_GetTimeTicksNow, 0) \
38 V(MojoHandle_Close, 1) \ 39 V(MojoHandle_Close, 1) \
39 V(MojoHandle_Wait, 3) \ 40 V(MojoHandle_Wait, 3) \
40 V(MojoHandle_Register, 2) \ 41 V(MojoHandle_Register, 2) \
41 V(MojoHandle_WaitMany, 3) \ 42 V(MojoHandle_WaitMany, 3) \
42 V(MojoHandleWatcher_GrowStateArrays, 1) \ 43 V(MojoHandleWatcher_GrowStateArrays, 1) \
43 V(MojoHandleWatcher_WaitMany, 2) \ 44 V(MojoHandleWatcher_WaitMany, 2) \
44 V(MojoHandleWatcher_SendControlData, 4) \ 45 V(MojoHandleWatcher_SendControlData, 4) \
45 V(MojoHandleWatcher_RecvControlData, 1) \ 46 V(MojoHandleWatcher_RecvControlData, 1) \
46 V(MojoHandleWatcher_SetControlHandle, 1) \ 47 V(MojoHandleWatcher_SetControlHandle, 1) \
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 std::vector<uint32_t> signals; 730 std::vector<uint32_t> signals;
730 std::vector<uint32_t> out_index; 731 std::vector<uint32_t> out_index;
731 std::vector<MojoHandleSignalsState> out_signals; 732 std::vector<MojoHandleSignalsState> out_signals;
732 733
733 static MojoWaitManyState* GetInstance(); 734 static MojoWaitManyState* GetInstance();
734 735
735 private: 736 private:
736 DISALLOW_COPY_AND_ASSIGN(MojoWaitManyState); 737 DISALLOW_COPY_AND_ASSIGN(MojoWaitManyState);
737 }; 738 };
738 739
740 void MojoMessagePipe_QueryAndRead(Dart_NativeArguments arguments) {
741 int64_t dart_handle;
742 int64_t flags = 0;
743 CHECK_INTEGER_ARGUMENT(arguments, 0, &dart_handle, Null);
744 CHECK_INTEGER_ARGUMENT(arguments, 1, &flags, Null);
745
746 // Query the number of bytes and handles available.
747 uint32_t blen = 0;
748 uint32_t hlen = 0;
749 MojoResult res =
750 MojoReadMessage(static_cast<MojoHandle>(dart_handle), nullptr, &blen,
751 nullptr, &hlen, static_cast<MojoReadMessageFlags>(flags));
752
753 if ((res != MOJO_RESULT_OK) && (res != MOJO_RESULT_RESOURCE_EXHAUSTED)) {
754 Dart_Handle list = Dart_NewList(3);
755 Dart_ListSetAt(list, 0, Dart_NewInteger(res));
756 Dart_SetReturnValue(arguments, list);
757 return;
758 }
759
760 Dart_Handle data = Dart_Null();
761 if (blen > 0) {
762 data = Dart_NewTypedData(Dart_TypedData_kByteData, blen);
763 }
764
765 Dart_Handle handles = Dart_Null();
766 if (hlen > 0) {
767 handles = Dart_NewTypedData(Dart_TypedData_kUint32, hlen);
768 }
769
770 Dart_TypedData_Type typ;
771 void* bytes = nullptr;
772 intptr_t byte_data_len = 0;
773 if (blen > 0) {
774 Dart_TypedDataAcquireData(data, &typ, &bytes, &byte_data_len);
775 }
776
777 void* handle_bytes = nullptr;
778 intptr_t handle_bytes_len = 0;
779 if (hlen > 0) {
780 Dart_TypedDataAcquireData(handles, &typ, &handle_bytes, &handle_bytes_len);
781 }
782
783 res = MojoReadMessage(static_cast<MojoHandle>(dart_handle), bytes, &blen,
784 reinterpret_cast<MojoHandle*>(handle_bytes), &hlen,
785 static_cast<MojoReadMessageFlags>(flags));
786
787 if (byte_data_len > 0) {
788 Dart_TypedDataReleaseData(data);
789 }
790
791 if (handle_bytes_len > 0) {
792 Dart_TypedDataReleaseData(handles);
793 }
794
795 Dart_Handle list = Dart_NewList(3);
796 Dart_ListSetAt(list, 0, Dart_NewInteger(res));
797 Dart_ListSetAt(list, 1, data);
798 Dart_ListSetAt(list, 2, handles);
799 Dart_SetReturnValue(arguments, list);
800 }
801
739 // This global is safe because it is only accessed by the single handle watcher 802 // This global is safe because it is only accessed by the single handle watcher
740 // isolate. If multiple handle watcher isolates are ever needed, it will need 803 // isolate. If multiple handle watcher isolates are ever needed, it will need
741 // to be replicated. 804 // to be replicated.
742 MojoWaitManyState* MojoWaitManyState::GetInstance() { 805 MojoWaitManyState* MojoWaitManyState::GetInstance() {
743 static MojoWaitManyState* state = new MojoWaitManyState; 806 static MojoWaitManyState* state = new MojoWaitManyState;
744 return state; 807 return state;
745 } 808 }
746 809
747 void MojoHandleWatcher_GrowStateArrays(Dart_NativeArguments arguments) { 810 void MojoHandleWatcher_GrowStateArrays(Dart_NativeArguments arguments) {
748 int64_t new_length; 811 int64_t new_length;
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 mojo_control_handle = control_handle; 960 mojo_control_handle = control_handle;
898 Dart_SetIntegerReturnValue(arguments, static_cast<int64_t>(MOJO_RESULT_OK)); 961 Dart_SetIntegerReturnValue(arguments, static_cast<int64_t>(MOJO_RESULT_OK));
899 } 962 }
900 963
901 void MojoHandleWatcher_GetControlHandle(Dart_NativeArguments arguments) { 964 void MojoHandleWatcher_GetControlHandle(Dart_NativeArguments arguments) {
902 Dart_SetIntegerReturnValue(arguments, mojo_control_handle); 965 Dart_SetIntegerReturnValue(arguments, mojo_control_handle);
903 } 966 }
904 967
905 } // namespace dart 968 } // namespace dart
906 } // namespace mojo 969 } // namespace mojo
OLDNEW
« no previous file with comments | « examples/dart/mojo_rtt_benchmark/lib/main.dart ('k') | mojo/public/dart/mojo/lib/src/codec.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698