2929#include " permission/permission.h"
3030#include " req_wrap-inl.h"
3131#include " util-inl.h"
32+ #include " v8-fast-api-calls.h"
3233
3334namespace node {
3435
@@ -38,6 +39,7 @@ using v8::ArrayBuffer;
3839using v8::BackingStore;
3940using v8::BackingStoreInitializationMode;
4041using v8::Boolean;
42+ using v8::CFunction;
4143using v8::Context;
4244using v8::DontDelete;
4345using v8::FunctionCallbackInfo;
@@ -48,6 +50,7 @@ using v8::Isolate;
4850using v8::Local;
4951using v8::MaybeLocal;
5052using v8::Object;
53+ using v8::ObjectTemplate;
5154using v8::PropertyAttribute;
5255using v8::ReadOnly;
5356using v8::Signature;
@@ -74,6 +77,11 @@ void SetLibuvInt32(const FunctionCallbackInfo<Value>& args) {
7477}
7578} // namespace
7679
80+ static CFunction fast_get_send_queue_size_ (
81+ CFunction::Make (&UDPWrap::FastGetSendQueueSize));
82+ static CFunction fast_get_send_queue_count_ (
83+ CFunction::Make (&UDPWrap::FastGetSendQueueCount));
84+
7785class SendWrap : public ReqWrap <uv_udp_send_t > {
7886 public:
7987 SendWrap (Environment* env, Local<Object> req_wrap_obj, bool have_callback);
@@ -215,9 +223,20 @@ void UDPWrap::Initialize(Local<Object> target,
215223 isolate, t, " setBroadcast" , SetLibuvInt32<uv_udp_set_broadcast>);
216224 SetProtoMethod (isolate, t, " setTTL" , SetLibuvInt32<uv_udp_set_ttl>);
217225 SetProtoMethod (isolate, t, " bufferSize" , BufferSize);
218- SetProtoMethodNoSideEffect (isolate, t, " getSendQueueSize" , GetSendQueueSize);
219- SetProtoMethodNoSideEffect (
220- isolate, t, " getSendQueueCount" , GetSendQueueCount);
226+
227+ Local<ObjectTemplate> instance = t->InstanceTemplate ();
228+
229+ SetFastMethodNoSideEffect (isolate,
230+ instance,
231+ " getSendQueueSize" ,
232+ GetSendQueueSize,
233+ &fast_get_send_queue_size_);
234+
235+ SetFastMethodNoSideEffect (isolate,
236+ instance,
237+ " getSendQueueCount" ,
238+ GetSendQueueCount,
239+ &fast_get_send_queue_count_);
221240
222241 t->Inherit (HandleWrap::GetConstructorTemplate (env));
223242
@@ -266,6 +285,8 @@ void UDPWrap::RegisterExternalReferences(ExternalReferenceRegistry* registry) {
266285 registry->Register (BufferSize);
267286 registry->Register (GetSendQueueSize);
268287 registry->Register (GetSendQueueCount);
288+ registry->Register (fast_get_send_queue_size_);
289+ registry->Register (fast_get_send_queue_count_);
269290}
270291
271292void UDPWrap::New (const FunctionCallbackInfo<Value>& args) {
@@ -668,6 +689,19 @@ ReqWrap<uv_udp_send_t>* UDPWrap::CreateSendWrap(size_t msg_size) {
668689 return req_wrap;
669690}
670691
692+ double UDPWrap::FastGetSendQueueSize (Local<Value> receiver) {
693+ UDPWrap* wrap = BaseObject::Unwrap<UDPWrap>(receiver.As <Object>());
694+ if (wrap == nullptr ) return static_cast <double >(UV_EBADF);
695+ return static_cast <double >(
696+ uv_udp_get_send_queue_size (wrap->GetLibuvHandle ()));
697+ }
698+
699+ double UDPWrap::FastGetSendQueueCount (Local<Value> receiver) {
700+ UDPWrap* wrap = BaseObject::Unwrap<UDPWrap>(receiver.As <Object>());
701+ if (wrap == nullptr ) return static_cast <double >(UV_EBADF);
702+ return static_cast <double >(
703+ uv_udp_get_send_queue_count (wrap->GetLibuvHandle ()));
704+ }
671705
672706void UDPWrap::Send (const FunctionCallbackInfo<Value>& args) {
673707 DoSend (args, AF_INET);
0 commit comments