From e3c2b790fd4329494979bd27be7fa162600f1436 Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Mon, 11 Nov 2024 15:45:19 +0000 Subject: [performance] minimise log field allocations (#3529) * when appending log field only do so by minimal amount * move slice utils to separate package to fix import cycle, add GrowJust() and AppendJust() functions * fix GrowJust() not returning slice of same length * improved xslices tests * make AppendJust() test check for slice contents, fix AppendJust() final copying behaviour * add a +1 with field growth to try minimise allocation for log 'msg' field --- internal/processing/account/alias.go | 6 +++--- internal/processing/status/create.go | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'internal/processing') diff --git a/internal/processing/account/alias.go b/internal/processing/account/alias.go index a11be0305..d7d4cf547 100644 --- a/internal/processing/account/alias.go +++ b/internal/processing/account/alias.go @@ -27,7 +27,7 @@ import ( apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" - "github.com/superseriousbusiness/gotosocial/internal/util" + "github.com/superseriousbusiness/gotosocial/internal/util/xslices" ) func (p *Processor) Alias( @@ -137,8 +137,8 @@ func (p *Processor) Alias( // Dedupe URIs + accounts, in case someone // provided both an account URL and an // account URI above, for the same account. - account.AlsoKnownAsURIs = util.Deduplicate(account.AlsoKnownAsURIs) - account.AlsoKnownAs = util.DeduplicateFunc( + account.AlsoKnownAsURIs = xslices.Deduplicate(account.AlsoKnownAsURIs) + account.AlsoKnownAs = xslices.DeduplicateFunc( account.AlsoKnownAs, func(a *gtsmodel.Account) string { return a.URI diff --git a/internal/processing/status/create.go b/internal/processing/status/create.go index 55a78610f..fbc2dadf7 100644 --- a/internal/processing/status/create.go +++ b/internal/processing/status/create.go @@ -36,6 +36,7 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/typeutils" "github.com/superseriousbusiness/gotosocial/internal/uris" "github.com/superseriousbusiness/gotosocial/internal/util" + "github.com/superseriousbusiness/gotosocial/internal/util/xslices" ) // Create processes the given form to create a new status, returning the api model representation of that status if it's OK. @@ -536,9 +537,9 @@ func (p *Processor) processContent(ctx context.Context, parseMention gtsmodel.Pa } // Gather all the database IDs from each of the gathered status mentions, tags, and emojis. - status.MentionIDs = util.Gather(nil, status.Mentions, func(mention *gtsmodel.Mention) string { return mention.ID }) - status.TagIDs = util.Gather(nil, status.Tags, func(tag *gtsmodel.Tag) string { return tag.ID }) - status.EmojiIDs = util.Gather(nil, status.Emojis, func(emoji *gtsmodel.Emoji) string { return emoji.ID }) + status.MentionIDs = xslices.Gather(nil, status.Mentions, func(mention *gtsmodel.Mention) string { return mention.ID }) + status.TagIDs = xslices.Gather(nil, status.Tags, func(tag *gtsmodel.Tag) string { return tag.ID }) + status.EmojiIDs = xslices.Gather(nil, status.Emojis, func(emoji *gtsmodel.Emoji) string { return emoji.ID }) if status.ContentWarning != "" && len(status.AttachmentIDs) > 0 { // If a content-warning is set, and -- cgit v1.2.3