mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-07-31 13:22:46 +00:00
Reduce allocations in /sync
presence stream (#2326)
* Reduce allocations on presence * Try to reduce allocations further * Tweak `IsSharedUser` some more * Take map lock
This commit is contained in:
parent
e5e3350ce1
commit
602818460d
2 changed files with 19 additions and 14 deletions
|
@ -250,6 +250,8 @@ func (n *Notifier) OnNewPresence(
|
|||
}
|
||||
|
||||
func (n *Notifier) SharedUsers(userID string) (sharedUsers []string) {
|
||||
n.mapLock.RLock()
|
||||
defer n.mapLock.RUnlock()
|
||||
for roomID, users := range n.roomIDToJoinedUsers {
|
||||
if _, ok := users[userID]; ok {
|
||||
sharedUsers = append(sharedUsers, n.JoinedUsers(roomID)...)
|
||||
|
@ -258,6 +260,20 @@ func (n *Notifier) SharedUsers(userID string) (sharedUsers []string) {
|
|||
return sharedUsers
|
||||
}
|
||||
|
||||
func (n *Notifier) IsSharedUser(userA, userB string) bool {
|
||||
n.mapLock.RLock()
|
||||
defer n.mapLock.RUnlock()
|
||||
var okA, okB bool
|
||||
for _, users := range n.roomIDToJoinedUsers {
|
||||
_, okA = users[userA]
|
||||
_, okB = users[userB]
|
||||
if okA && okB {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// GetListener returns a UserStreamListener that can be used to wait for
|
||||
// updates for a user. Must be closed.
|
||||
// notify for anything before sincePos
|
||||
|
@ -509,6 +525,7 @@ func (s userIDSet) remove(str string) {
|
|||
}
|
||||
|
||||
func (s userIDSet) values() (vals []string) {
|
||||
vals = make([]string, 0, len(s))
|
||||
for str := range s {
|
||||
vals = append(vals, str)
|
||||
}
|
||||
|
@ -529,6 +546,7 @@ func (s peekingDeviceSet) remove(d types.PeekingDevice) {
|
|||
}
|
||||
|
||||
func (s peekingDeviceSet) values() (vals []types.PeekingDevice) {
|
||||
vals = make([]types.PeekingDevice, 0, len(s))
|
||||
for d := range s {
|
||||
vals = append(vals, d)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue