Skip to content

Commit

Permalink
Improve new IoOwn logging
Browse files Browse the repository at this point in the history
Avoid allocating the new string on every dereference
  • Loading branch information
jasnell committed Apr 18, 2024
1 parent aec53dc commit 03caf07
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions src/workerd/io/io-own.h
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ class IoOwn {

kj::Own<const DeleteQueue> deleteQueue;
SpecificOwnedObject<T>* item;
kj::String typeName;

IoOwn(kj::Own<const DeleteQueue> deleteQueue,
SpecificOwnedObject<T>* item)
Expand All @@ -217,7 +218,8 @@ template <typename T>
class IoPtr {
public:
IoPtr(const IoPtr& other)
: deleteQueue(kj::atomicAddRef(*other.deleteQueue)), ptr(other.ptr) {}
: deleteQueue(kj::atomicAddRef(*other.deleteQueue)), ptr(other.ptr),
typeName(jsg::typeName(typeid(T))) {}
IoPtr(IoPtr&& other) = default;

T* operator->();
Expand All @@ -230,16 +232,19 @@ class IoPtr {

kj::Own<const DeleteQueue> deleteQueue;
T* ptr;
kj::String typeName;

IoPtr(kj::Own<const DeleteQueue> deleteQueue,
T* ptr)
: deleteQueue(kj::mv(deleteQueue)), ptr(ptr) {}
: deleteQueue(kj::mv(deleteQueue)), ptr(ptr),
typeName(jsg::typeName(typeid(T))) {}
};

template <typename T>
IoOwn<T>::IoOwn(IoOwn&& other)
: deleteQueue(kj::mv(other.deleteQueue)),
item(other.item) {
item(other.item),
typeName(jsg::typeName(typeid(T))) {
other.item = nullptr;
}

Expand Down Expand Up @@ -288,15 +293,13 @@ IoPtr<T>& IoPtr<T>::operator=(decltype(nullptr)) {

template <typename T>
inline T* IoOwn<T>::operator->() {
auto type = jsg::typeName(typeid(T));
DeleteQueue::checkFarGet(deleteQueue, type);
DeleteQueue::checkFarGet(deleteQueue, typeName);
return item->ptr;
}

template <typename T>
inline IoOwn<T>::operator kj::Own<T>() && {
auto type = jsg::typeName(typeid(T));
DeleteQueue::checkFarGet(deleteQueue, type);
DeleteQueue::checkFarGet(deleteQueue, typeName);
auto result = kj::mv(item->ptr);
OwnedObjectList::unlink(*item);
item = nullptr;
Expand All @@ -306,8 +309,7 @@ inline IoOwn<T>::operator kj::Own<T>() && {

template <typename T>
inline T* IoPtr<T>::operator->() {
auto type = jsg::typeName(typeid(T));
DeleteQueue::checkFarGet(deleteQueue, type);
DeleteQueue::checkFarGet(deleteQueue, typeName);
return ptr;
}

Expand Down

0 comments on commit 03caf07

Please sign in to comment.