| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 4b7d836 commit f335910
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -23,12 +23,10 @@ using v8::Isolate; | |||
| 23 | 23 | using v8::Local; | |
| 24 | 24 | using v8::LocalVector; | |
| 25 | 25 | using v8::MaybeLocal; | |
| 26 | - using v8::NewStringType; | ||
| 27 | 26 | using v8::Object; | |
| 28 | 27 | using v8::ObjectTemplate; | |
| 29 | 28 | using v8::Promise; | |
| 30 | 29 | using v8::PropertyAttribute; | |
| 31 | - using v8::String; | ||
| 32 | 30 | using v8::Value; | |
| 33 | 31 | ||
| 34 | 32 | // Reject two promises and return `false` on failure. | |
@@ -51,19 +49,26 @@ Lock::Lock(Environment* env, | |||
| 51 | 49 | released_promise_.Reset(env_->isolate(), released); | |
| 52 | 50 | } | |
| 53 | 51 | ||
| 52 | + void Lock::MemoryInfo(node::MemoryTracker* tracker) const { | ||
| 53 | + tracker->TrackFieldWithSize("name", name_.size()); | ||
| 54 | + tracker->TrackField("client_id", client_id_); | ||
| 55 | + tracker->TrackField("waiting_promise", waiting_promise_); | ||
| 56 | + tracker->TrackField("released_promise", released_promise_); | ||
| 57 | + } | ||
| 58 | + | ||
| 54 | 59 | LockRequest::LockRequest(Environment* env, | |
| 55 | 60 | Local<Promise::Resolver> waiting, | |
| 56 | 61 | Local<Promise::Resolver> released, | |
| 57 | 62 | Local<Function> callback, | |
| 58 | 63 | const std::u16string& name, | |
| 59 | 64 | Lock::Mode mode, | |
| 60 | - const std::string& client_id, | ||
| 65 | + std::string client_id, | ||
| 61 | 66 | bool steal, | |
| 62 | 67 | bool if_available) | |
| 63 | 68 | : env_(env), | |
| 64 | 69 | name_(name), | |
| 65 | 70 | mode_(mode), | |
| 66 | - client_id_(client_id), | ||
| 71 | + client_id_(std::move(client_id)), | ||
| 67 | 72 | steal_(steal), | |
| 68 | 73 | if_available_(if_available) { | |
| 69 | 74 | waiting_promise_.Reset(env_->isolate(), waiting); | |
@@ -85,6 +90,7 @@ Local<DictionaryTemplate> GetLockInfoTemplate(Environment* env) { | |||
| 85 | 90 | return tmpl; | |
| 86 | 91 | } | |
| 87 | 92 | ||
| 93 | + // The request here can be either a Lock or a LockRequest. | ||
| 88 | 94 | static MaybeLocal<Object> CreateLockInfoObject(Environment* env, | |
| 89 | 95 | const auto& request) { | |
| 90 | 96 | auto tmpl = GetLockInfoTemplate(env); | |
@@ -573,22 +579,13 @@ void LockManager::Request(const FunctionCallbackInfo<Value>& args) { | |||
| 573 | 579 | CHECK(args[4]->IsBoolean()); // ifAvailable | |
| 574 | 580 | CHECK(args[5]->IsFunction()); // callback | |
| 575 | 581 | ||
| 576 | - Local<String> resource_name_str = args[0].As<String>(); | ||
| 577 | - TwoByteValue resource_name_utf16(isolate, resource_name_str); | ||
| 578 | - std::u16string resource_name( | ||
| 579 | - reinterpret_cast<const char16_t*>(*resource_name_utf16), | ||
| 580 | - resource_name_utf16.length()); | ||
| 581 | - String::Utf8Value client_id_utf8(isolate, args[1]); | ||
| 582 | - std::string client_id(*client_id_utf8); | ||
| 583 | - String::Utf8Value mode_utf8(isolate, args[2]); | ||
| 584 | - std::string mode_str(*mode_utf8); | ||
| 582 | + TwoByteValue resource_name(isolate, args[0]); | ||
| 583 | + Utf8Value client_id(isolate, args[1]); | ||
| 584 | + Utf8Value mode(isolate, args[2]); | ||
| 585 | 585 | bool steal = args[3]->BooleanValue(isolate); | |
| 586 | 586 | bool if_available = args[4]->BooleanValue(isolate); | |
| 587 | 587 | Local<Function> callback = args[5].As<Function>(); | |
| 588 | 588 | ||
| 589 | - Lock::Mode lock_mode = | ||
| 590 | - mode_str == "shared" ? Lock::Mode::Shared : Lock::Mode::Exclusive; | ||
| 591 | - | ||
| 592 | 589 | Local<Promise::Resolver> waiting_promise; | |
| 593 | 590 | Local<Promise::Resolver> released_promise; | |
| 594 | 591 | ||
@@ -611,15 +608,17 @@ void LockManager::Request(const FunctionCallbackInfo<Value>& args) { | |||
| 611 | 608 | env->AddCleanupHook(LockManager::OnEnvironmentCleanup, env); | |
| 612 | 609 | } | |
| 613 | 610 | ||
| 614 | - auto lock_request = std::make_unique<LockRequest>(env, | ||
| 615 | - waiting_promise, | ||
| 616 | - released_promise, | ||
| 617 | - callback, | ||
| 618 | - resource_name, | ||
| 619 | - lock_mode, | ||
| 620 | - client_id, | ||
| 621 | - steal, | ||
| 622 | - if_available); | ||
| 611 | + auto lock_request = std::make_unique<LockRequest>( | ||
| 612 | + env, | ||
| 613 | + waiting_promise, | ||
| 614 | + released_promise, | ||
| 615 | + callback, | ||
| 616 | + resource_name.ToU16String(), | ||
| 617 | + mode.ToStringView() == "shared" ? Lock::Mode::Shared | ||
| 618 | + : Lock::Mode::Exclusive, | ||
| 619 | + client_id.ToString(), | ||
| 620 | + steal, | ||
| 621 | + if_available); | ||
| 623 | 622 | // Steal requests get priority by going to front of queue | |
| 624 | 623 | if (steal) { | |
| 625 | 624 | manager->pending_queue_.emplace_front(std::move(lock_request)); | |
@@ -842,6 +841,10 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) { | |||
| 842 | 841 | registry->Register(OnIfAvailableReject); | |
| 843 | 842 | } | |
| 844 | 843 | ||
| 844 | + void LockHolder::MemoryInfo(node::MemoryTracker* tracker) const { | ||
| 845 | + tracker->TrackField("lock", lock_); | ||
| 846 | + } | ||
| 847 | + | ||
| 845 | 848 | BaseObjectPtr<LockHolder> LockHolder::Create(Environment* env, | |
| 846 | 849 | std::shared_ptr<Lock> lock) { | |
| 847 | 850 | Local<Object> obj; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -15,7 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | 16 | namespace node::worker::locks { | |
| 17 | 17 | ||
| 18 | - class Lock final { | ||
| 18 | + class Lock final : public MemoryRetainer { | ||
| 19 | 19 | public: | |
| 20 | 20 | enum class Mode { Shared, Exclusive }; | |
| 21 | 21 | ||
@@ -53,6 +53,10 @@ class Lock final { | |||
| 53 | 53 | return released_promise_.Get(env_->isolate()); | |
| 54 | 54 | } | |
| 55 | 55 | ||
| 56 | + void MemoryInfo(node::MemoryTracker* tracker) const override; | ||
| 57 | + SET_MEMORY_INFO_NAME(Lock) | ||
| 58 | + SET_SELF_SIZE(Lock) | ||
| 59 | + | ||
| 56 | 60 | private: | |
| 57 | 61 | Environment* env_; | |
| 58 | 62 | std::u16string name_; | |
@@ -79,7 +83,7 @@ class LockHolder final : public BaseObject { | |||
| 79 | 83 | ||
| 80 | 84 | std::shared_ptr<Lock> lock() const { return lock_; } | |
| 81 | 85 | ||
| 82 | - SET_NO_MEMORY_INFO() | ||
| 86 | + void MemoryInfo(node::MemoryTracker* tracker) const override; | ||
| 83 | 87 | SET_MEMORY_INFO_NAME(LockHolder) | |
| 84 | 88 | SET_SELF_SIZE(LockHolder) | |
| 85 | 89 | ||
@@ -101,7 +105,7 @@ class LockRequest final { | |||
| 101 | 105 | v8::Local<v8::Function> callback, | |
| 102 | 106 | const std::u16string& name, | |
| 103 | 107 | Lock::Mode mode, | |
| 104 | - const std::string& client_id, | ||
| 108 | + std::string client_id, | ||
| 105 | 109 | bool steal, | |
| 106 | 110 | bool if_available); | |
| 107 | 111 | ~LockRequest() = default; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -562,6 +562,15 @@ class Utf8Value : public MaybeStackBuffer<char> { | |||
| 562 | 562 | class TwoByteValue : public MaybeStackBuffer<uint16_t> { | |
| 563 | 563 | public: | |
| 564 | 564 | explicit TwoByteValue(v8::Isolate* isolate, v8::Local<v8::Value> value); | |
| 565 | + | ||
| 566 | + inline std::u16string ToU16String() const { | ||
| 567 | + return std::u16string(reinterpret_cast<const char16_t*>(out()), length()); | ||
| 568 | + } | ||
| 569 | + | ||
| 570 | + inline std::u16string_view ToU16StringView() const { | ||
| 571 | + return std::u16string_view(reinterpret_cast<const char16_t*>(out()), | ||
| 572 | + length()); | ||
| 573 | + } | ||
| 565 | 574 | }; | |
| 566 | 575 | ||
| 567 | 576 | class BufferValue : public MaybeStackBuffer<char> { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments