mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-01 03:03:10 -06:00
Try to reduce allocations further
This commit is contained in:
parent
ca73cf09b3
commit
e6f72a8870
|
|
@ -258,6 +258,17 @@ func (n *Notifier) SharedUsers(userID string) (sharedUsers []string) {
|
|||
return sharedUsers
|
||||
}
|
||||
|
||||
func (n *Notifier) IsSharedUser(userA, userB string) 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
|
||||
|
|
|
|||
|
|
@ -64,17 +64,6 @@ func (p *PresenceStreamProvider) IncrementalSync(
|
|||
return to
|
||||
}
|
||||
|
||||
// get all joined users
|
||||
// TODO: SharedUsers might get out of sync
|
||||
sharedUsers := p.notifier.SharedUsers(req.Device.UserID)
|
||||
|
||||
// convert array to a map for easier checking if a user exists
|
||||
sharedUsersMap := make(map[string]bool, len(sharedUsers))
|
||||
sharedUsersMap[req.Device.UserID] = true
|
||||
for i := range sharedUsers {
|
||||
sharedUsersMap[sharedUsers[i]] = true
|
||||
}
|
||||
|
||||
// add newly joined rooms user presences
|
||||
newlyJoined := joinedRooms(req.Response, req.Device.UserID)
|
||||
if len(newlyJoined) > 0 {
|
||||
|
|
@ -87,7 +76,6 @@ func (p *PresenceStreamProvider) IncrementalSync(
|
|||
for _, roomID := range newlyJoined {
|
||||
roomUsers := p.notifier.JoinedUsers(roomID)
|
||||
for i := range roomUsers {
|
||||
sharedUsersMap[roomUsers[i]] = true
|
||||
// we already got a presence from this user
|
||||
if _, ok := presences[roomUsers[i]]; ok {
|
||||
continue
|
||||
|
|
@ -108,7 +96,7 @@ func (p *PresenceStreamProvider) IncrementalSync(
|
|||
for i := range presences {
|
||||
presence := presences[i]
|
||||
// Ignore users we don't share a room with
|
||||
if !sharedUsersMap[presence.UserID] {
|
||||
if req.Device.UserID != presence.UserID && !p.notifier.IsSharedUser(req.Device.UserID, presence.UserID) {
|
||||
continue
|
||||
}
|
||||
cacheKey := req.Device.UserID + req.Device.ID + presence.UserID
|
||||
|
|
|
|||
Loading…
Reference in a new issue