Micro-optimize GlyphKey Context

Use fast hash function on key for better distribution.

Direct compare glyph in eql to avoid Packed.from() if not neccessary.

16% -> 6.4% reduction during profiling runs.
pull/8536/head
Jesse Miller 2025-09-05 13:34:10 -06:00
parent 0333a6f1d2
commit 8824256059
1 changed files with 3 additions and 2 deletions

View File

@ -332,11 +332,12 @@ const GlyphKey = struct {
const Context = struct { const Context = struct {
pub fn hash(_: Context, key: GlyphKey) u64 { pub fn hash(_: Context, key: GlyphKey) u64 {
return @bitCast(Packed.from(key)); const packed_key = Packed.from(key);
return std.hash.CityHash64.hash(std.mem.asBytes(&packed_key));
} }
pub fn eql(_: Context, a: GlyphKey, b: GlyphKey) bool { pub fn eql(_: Context, a: GlyphKey, b: GlyphKey) bool {
return Packed.from(a) == Packed.from(b); return a.glyph == b.glyph and Packed.from(a) == Packed.from(b);
} }
}; };