fix: cache NVIDIA WOFF2 font descriptors to prevent app hangs - #9
Open
sentry[bot] wants to merge 1 commit into
Open
fix: cache NVIDIA WOFF2 font descriptors to prevent app hangs#9sentry[bot] wants to merge 1 commit into
sentry[bot] wants to merge 1 commit into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR addresses an app hanging issue (OPENNOW-MAC-20) caused by repeated, synchronous WOFF2 font decoding on the main thread.
Problem:
SwiftUI view body re-evaluations, frequently triggered by rapid GraphQL polling, would repeatedly call
OpenNOWNVIDIAFont.loadDescriptor(named:). This function, in turn, calledCTFontManagerCreateFontDescriptorsFromURLon.woff2font files without any caching. WOFF2 decoding involves expensive, synchronous brotli decompression and TTF conversion, blocking the main thread for extended periods and leading to app hangs.Solution:
Implemented a static, thread-safe cache (
descriptorCache) withinOpenNOWNVIDIAFontto storeCTFontDescriptorresults. TheloadDescriptorfunction now:nilresult for a non-existent font) is found, it's returned immediately.CTFontManagerCreateFontDescriptorsFromURLcall.nil) in the cache before releasing the lock and returning.This ensures that each font is decoded and converted only once during the app's lifetime, significantly reducing main thread blocking and eliminating the app hang.
Fixes OPENNOW-MAC-20