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:
Neil Alexander 2022-04-06 13:31:44 +01:00 committed by GitHub
parent e5e3350ce1
commit 602818460d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 14 deletions

View file

@ -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)
}