gotosocial/internal
kim c8a4ce9a88 [performance] use our own typed value context types for Value() key checking to improve performance (#4316)
Replaces our gtscontext package context.Context handling with our own typed contexts instead of `context.WithValue()`.

I wrote a quick benchmark consisting of (printlns to stop the compiler optimizing instructions away):
```golang
func BenchmarkContexts(b *testing.B) {
	var receiving *gtsmodel.Account
	var requesting *gtsmodel.Account
	var otherIRIs []*url.URL

	b.RunParallel(func(pb *testing.PB) {
		for pb.Next() {
			ctx := context.Background()

			ctx = gtscontext.SetBarebones(ctx)
			ctx = gtscontext.SetFastFail(ctx)
			ctx = gtscontext.SetDryRun(ctx)
			ctx = gtscontext.SetReceivingAccount(ctx, receiving)
			ctx = gtscontext.SetRequestingAccount(ctx, requesting)
			ctx = gtscontext.SetOtherIRIs(ctx, otherIRIs)

			if !gtscontext.Barebones(ctx) {
				println("oh no!")
			}

			if !gtscontext.IsFastfail(ctx) {
				println("oh no!")
			}

			if !gtscontext.DryRun(ctx) {
				println("oh no!")
			}

			if gtscontext.ReceivingAccount(ctx) != nil {
				println("oh no!")
			}

			if gtscontext.RequestingAccount(ctx) != nil {
				println("oh no!")
			}

			if len(gtscontext.OtherIRIs(ctx)) > 0 {
				println("oh no!")
			}
		}
	})
}
```

Before results:
```shell
kim @ ~/Projects/main/gts.4
--> go test -v -run=none -bench=.* -benchmem ./internal/gtscontext/ -count=5
goos: linux
goarch: amd64
pkg: code.superseriousbusiness.org/gotosocial/internal/gtscontext
cpu: AMD Ryzen 7 7840U w/ Radeon  780M Graphics
BenchmarkContexts
BenchmarkContexts-16            19050348                61.73 ns/op          288 B/op          6 allocs/op
BenchmarkContexts-16            18245772                61.71 ns/op          288 B/op          6 allocs/op
BenchmarkContexts-16            18853680                61.80 ns/op          288 B/op          6 allocs/op
BenchmarkContexts-16            18561621                62.67 ns/op          288 B/op          6 allocs/op
BenchmarkContexts-16            17819241                62.89 ns/op          288 B/op          6 allocs/op
PASS
ok      code.superseriousbusiness.org/gotosocial/internal/gtscontext    6.112s
```

After results:
```shell
kim @ ~/Projects/main/gts.4
--> go test -v -run=none -bench=.* -benchmem ./internal/gtscontext/ -count=5
goos: linux
goarch: amd64
pkg: code.superseriousbusiness.org/gotosocial/internal/gtscontext
cpu: AMD Ryzen 7 7840U w/ Radeon  780M Graphics
BenchmarkContexts
BenchmarkContexts-16            28038618                41.67 ns/op          144 B/op          6 allocs/op
BenchmarkContexts-16            26537552                42.50 ns/op          144 B/op          6 allocs/op
BenchmarkContexts-16            26720542                42.39 ns/op          144 B/op          6 allocs/op
BenchmarkContexts-16            27408031                43.15 ns/op          144 B/op          6 allocs/op
BenchmarkContexts-16            25597026                44.02 ns/op          144 B/op          6 allocs/op
PASS
ok      code.superseriousbusiness.org/gotosocial/internal/gtscontext    5.997s
```

Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4316
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
2025-07-09 01:38:33 +02:00
..
admin [chore] Upgrade to Go 1.24 (#4187) 2025-05-22 12:26:11 +02:00
ap [feature] Support incoming avatar/header descriptions (#4275) 2025-06-19 15:10:41 +02:00
api [chore] move status filtering from type converter (#4306) 2025-07-04 15:30:39 +02:00
cache [performance] add statusfilter cache to cache calculated status filtering results (#4303) 2025-07-01 16:00:04 +02:00
cleaner [chore] move s3 storage key prefixing into the storage library itself (#4246) 2025-06-06 16:35:39 +02:00
config [performance] add statusfilter cache to cache calculated status filtering results (#4303) 2025-07-01 16:00:04 +02:00
db [bugfix] fix issues with postgres array serialization (#4295) 2025-06-26 14:17:47 +02:00
email [feature] Move to code.superseriousbusiness.org 2025-04-26 15:38:43 +02:00
federation [bugfix] fix status.Local sometimes being nil (#4285) 2025-06-21 12:03:35 +02:00
filter [chore] move status filtering from type converter (#4306) 2025-07-04 15:30:39 +02:00
gtscontext [performance] use our own typed value context types for Value() key checking to improve performance (#4316) 2025-07-09 01:38:33 +02:00
gtserror [performance] filter model and database table improvements (#4277) 2025-06-24 17:24:34 +02:00
gtsmodel [performance] filter model and database table improvements (#4277) 2025-06-24 17:24:34 +02:00
headerfilter [feature] request blocking by http headers (#2409) 2023-12-18 14:18:25 +00:00
httpclient [feature] Move to code.superseriousbusiness.org 2025-04-26 15:38:43 +02:00
id [feature] Move to code.superseriousbusiness.org 2025-04-26 15:38:43 +02:00
iotools [performance] update storage backend and make use of seek syscall when available (#2924) 2024-05-22 11:46:24 +02:00
language [feature] support nested configuration files, and setting ALL configuration variables by CLI and env (#4109) 2025-05-06 15:51:45 +00:00
log [feature] Move to code.superseriousbusiness.org 2025-04-26 15:38:43 +02:00
media [performance] use faster pixel format matching function (#4271) 2025-06-14 12:27:53 +02:00
messages [feature] Move to code.superseriousbusiness.org 2025-04-26 15:38:43 +02:00
middleware [bugfix] process account delete synchronously to prevent OOM (#4260) 2025-06-11 11:38:10 +02:00
oauth [bugfix] Assume default code challenge method of s256 (#4241) 2025-06-05 11:29:36 +02:00
observability [bugfix] broken nootel function signatures (#4142) 2025-05-06 13:26:20 +00:00
oidc [feature] Move to code.superseriousbusiness.org 2025-04-26 15:38:43 +02:00
paging [bugfix] ensure timeline limit query is respected (#4141) 2025-05-06 13:30:23 +00:00
processing [chore] update error message (#4311) 2025-07-06 13:11:18 +02:00
queue [performance] update go-structr and go-mutexes with memory usage improvements (#2909) 2024-05-13 08:05:46 +00:00
regexes feat: Relax URL matching (#3925) 2025-03-24 14:13:32 +01:00
router [feature] configurable maximum thumbnail dimensions (#4258) 2025-06-10 15:43:31 +02:00
scheduler [feature] add support for polls + receiving federated status edits (#2330) 2023-11-08 14:32:17 +00:00
state [feature] Move to code.superseriousbusiness.org 2025-04-26 15:38:43 +02:00
storage [feature] configurable maximum thumbnail dimensions (#4258) 2025-06-10 15:43:31 +02:00
stream [feature] Conversations API (#3013) 2024-07-23 20:44:31 +01:00
subscriptions [feature] Handle retractions of domain permission subscription entries (#4261) 2025-06-15 12:36:51 +02:00
text [feature] Allow anchor href to work for footnotes, use ID prefix to avoid clashes (#4298) 2025-06-30 12:56:50 +02:00
trans [chore] Upgrade to Go 1.24 (#4187) 2025-05-22 12:26:11 +02:00
transport [bugfix] fix status.Local sometimes being nil (#4285) 2025-06-21 12:03:35 +02:00
typeutils [chore] move status filtering from type converter (#4306) 2025-07-04 15:30:39 +02:00
uris [feature] Move to code.superseriousbusiness.org 2025-04-26 15:38:43 +02:00
util [bugfix] process account delete synchronously to prevent OOM (#4260) 2025-06-11 11:38:10 +02:00
validate [feature] Configurable max profile fields (#4175) 2025-05-14 13:25:21 +00:00
web [feature] Allow exposing allows, implement /api/v1/domain_blocks and /api/v1/domain_allows (#4169) 2025-05-20 11:47:40 +02:00
webpush [chore] move status filtering from type converter (#4306) 2025-07-04 15:30:39 +02:00
workers [feature] Move to code.superseriousbusiness.org 2025-04-26 15:38:43 +02:00