Extended Audio Cache Import Optimization - log5r/simple-media-player GitHub Wiki
æ¡åŒµé³å£°ã®åãèŸŒã¿æ€èšŒãšPCMãã£ãã·ã¥çæ
2026-10-03ãIssue #13 ã®ä¿®æ£ã§ç¢ºèªããåå ãèšèšãæž¬å®æ¹æ³ãèšé²ããã察象圢åŒã¯WMAãWavPackãMonkey's AudioãMusepackã倿Žåã®ãœãŒã¹ã¯ 90557a1f14fbf269ebbee1a0100b620d4737afd8ãä¿®æ£ã³ããã㯠4494b07ã
åãèŸŒã¿æã®æžã蟌ã¿
倿Žåã¯ãåã蟌ã¿ã®åŠ¥åœæ§ç¢ºèªã§ ExtendedAudioSource.readableURL ãåŒã³ãå
šé³å£°ãCAFãžæžããŠããããã£ãã·ã¥å®¹éãè¶
ããäžæ¬åã蟌ã¿ã§ã¯ãåæã«åã蟌ãã æ²ã®CAFãåŸç¶ã®åã蟌ã¿ã§åé€ãããåååçã§åãPCMãããäžåºŠæžãã44.1 kHzã»ã¹ãã¬ãªã»32 bitã®4åé³å£°ã¯1æ²çŽ80.7 MiBã3000æ²ã§çŽ236.6 GiBãšããèšç®ã«ãªããããã®èŠæš¡ã®å®ãã¡ã€ã«æžã蟌ã¿ã¯æž¬å®ããŠããªãã
ä¿®æ£åŸã¯ãåã蟌ã¿çšã® validate ãå
šé³å£°ããã³ãŒãããŠãµã³ãã«ãç Žæ£ãããåºå圢åŒããšã«å¿
èŠæã«ããããŒã ãã®CAFãäœæããŠä»å ãµã€ãºã枬ãããã®å€ãåå©çšãããPCMãµã³ãã«ã¯ãã®æž¬å®ã«ãæžããªããåçãé³éæ£èŠåã鳿¥œè§£æã倿æžãåºãã ãããå¿
èŠã«ãªã£ãæç¹ã§CAFãçæãããPR #20ã®ã¬ãã¥ãŒä¿®æ£åŸã®API㯠readableFile ã§ãããåŸè¿°ã®èªã¿åãçšãã³ãã«ãè¿ãã忬ã®ã³ããŒãã¿ã°ã®ååŸãã©ã€ãã©ãªç»é²ãå
ãã¡ã€ã«æžãåºãã¯åŸæ¥ã®ä¿åå
ã䜿ããå
šé³å£°ã®æ€èšŒãæ®ãããããã³ãŒãã®CPUæéã¯åŒãç¶ãå¿
èŠãšãªãã
çµç«¯ãŸã§ã®æ€èšŒ
åã蟌ã¿çšã®ç Žæ£åŠçãšCAFæžã蟌ã¿ã¯ãåããã³ãŒããŒåæåãšãã¬ãŒã æ€èšŒã䜿ããSFBAudioEngineã§ã¯ãåºåãããã¡ã®ç¢ºä¿ã环ç©ãµã€ãºäžéã«å ããæ¢ç¥ã®å®£èšãã¬ãŒã æ°ãšå®éã®åºåãã¬ãŒã æ°ãäžèŽããããšã確èªãããæ¡çšããWavPackãã³ãŒããŒã¯ WavpackUnpackSamples ã0ãè¿ããšçµç«¯ãšããŠæ±ããããå
é ãèªããã ãã®çãç Žæå
¥åãæåãšããªãããã«ãã¬ãŒã æ°ã®æ¯èŒãå¿
èŠãšãªãã
WMAã¯FFmpegBuild 3.6.0ã«å«ãŸããFFmpeg n8.1.3ã䜿ããéåžžãã±ããã®åºåãåŠçããåŸãNULLãã±ãããéããavcodec_receive_frame ã AVERROR_EOF ãè¿ããŸã§æåºãããçµç«¯ã§åããŠå±ããã¬ãŒã ãéåžžãã¬ãŒã ãšåãåæåãšæ€èšŒãéããéäžã®åºåããã£ãŠããçµç«¯ã®ãã³ãŒããŒãšã©ãŒããã£ã³ã»ã«ã容éè¶
éãããã°æåã«ããªããå¥çŽã¯æ¡çšçã® avcodec.h ãšå梱ããããŒã確èªããã
4 GiBå¢çã®æ€èšŒ
PCMãæžããªãæ€èšŒãžåé¢ãããšãé³å£°ãµã³ãã«ã ãã4 GiB以å ã§ãCAFã®ããããŒãå ããå šäœã4 GiBãè¶ ããå¢çãçããããããæŸçœ®ãããšãåã蟌ã¿ã¯æåããåååçã®ãã£ãã·ã¥çæã§å®¹éè¶ éã«ãªãã
æ€èšŒãšãã£ãã·ã¥çæã¯ãåãåºå圢åŒã®ããããŒãµã€ãºã枬ãå
±éåŠçã䜿ããPCMã®çޝç©ãµã€ãºã«ãã®ä»å ãµã€ãºãå«ããŠå€å®ãããCAFã®ããããŒãµã€ãºãåºå®å€ã«ãããAVAudioFile ã§ããããŒã ãã®ãã¡ã€ã«ãäœã£ãŠå®æž¬ãããçµæã¯åœ¢åŒããšã«åå©çšããäžæãã¡ã€ã«ã¯åé€ãããåãèŸŒã¿æã«ã¯PCMãã£ãã·ã¥ãé³å£°ãµã³ãã«ã®ãã¡ã€ã«åºåãäœããªããããã®æåã®ããããŒæž¬å®ã«ã¯å°éã®ãã£ã¹ã¯æžã蟌ã¿ãããã
ãã£ãã·ã¥ã®æä»ç¯å²ãšåé€
倿Žåã®ãã£ãã·ã¥ããã¯ã¯å šãã¡ã€ã«ã§å ±éã§ãããæ å ±èªã¿åããå šãã³ãŒããCAFæžã蟌ã¿ãå ¬éã容é調æŽãéããŠä¿æãããŠããããã®ãããå¥ã®æ²ã®ãã£ãã·ã¥ã宿æžã¿ã§ããåã蟌ã¿äžã®ãã³ãŒãã®çµäºãåŸ ã€ã
ä¿®æ£åŸã¯ãä¿åå URLããšã«èŠæ±ç¶æ ãæã¡ãåã忬ãžã®èŠæ±ã ããå®è¡äžã®å€æãåŸ ã€ãå šãã³ãŒããšäžæCAFæžã蟌ã¿ã§ã¯ããã¯ãä¿æããªãããã£ãã·ã¥ç¢ºèªã宿CAFã®å ¬éã容é調æŽã ããæä»åºéã§è¡ããåãä¿åå ã®åŸ æ©äžããåŒã³åºãå ã®ãã£ã³ã»ã«ã確èªããã容éäžéã®èšç®ã¯å®æCAFã ãã察象ã«ãã䞊è¡çæäžã®äžæCAFãåé€ããªããPR #20ã®ã¬ãã¥ãŒä¿®æ£åŸã¯ãæŸæ£ãããäžæCAFã®ååãè¡ãã
å ¬éæã«ã¯ãèŠæ±ãç¡å¹åãããŠããªãããšãšã忬ã®ãã¹ã»ãµã€ãºã»æŽæ°æ¥æããç®åºããè奿 å ±ãå€ãã£ãŠããªãããšãå確èªãããé ç®åé€ã§ã¯åæ¬ãæ¶ãåã«èŠæ±ãç¡å¹åãããã®åŸã®ãã£ãã·ã¥åé€ãå¥ã¿ã¹ã¯ã§è¡ãããã£ã³ã»ã«èŠæ±ã ãã§é å»¶çµæãé²ãèšèšã«ã¯ããŠããªããåçæºåã§ã¯åŸæ¥ã®èªã¿èŸŒã¿äžä»£ãšèŠæ±IDãè§£æã§ã¯äžä»£IDã確èªããã
容éè¶ éãããã®æ¯èŒ
å®ãã³ãŒããŒãšã¢ããªã®åŠçãæœåºããŠã³ã³ãã€ã«ããWMAãWavPackãAPEãMusepackã25ä»¶ãã€ãåèš100ä»¶åŠçãããWMA/WavPackã¯æ¢åã®1ç§ãã¹ã鳿ºãAPEã¯0.3ç§ã®ãã¹ã鳿ºãMusepackã¯æ¢åWAVããçæãããç°ãªããã¹ã«ã³ããŒãããã£ãã·ã¥ããŒã®äžèŽã§åŠçãçç¥ãããªãããã«ããã
枬å®çšã³ããŒã ããã£ãã·ã¥å šäœã®äžéã512 KiBãžçž®å°ããä¿åå ãäžæãã£ã¬ã¯ããªãžå€æŽããã倿Žåã®CAFåèšã¯çŽ11.4 MiBã§ã容éãçŽ23åè¶ ããã補åã®äžéã¯1ä»¶4 GiBãå šäœ8 GiBã®ãŸãŸã倿Žåãšå€æŽåŸã亀äºã«3åå®è¡ããäžå€®å€ãæ¯èŒãããæºåçšã³ããŒãMusepackçæãã¡ã¿ããŒã¿ã®éçŽãããŒã¿ããŒã¹ç»é²ã¯èšæž¬ã«å«ããªãã
| åãèŸŒã¿æã®æ€èšŒ100ä»¶ | 倿Žå | 倿ŽåŸ |
|---|---|---|
| CAFã®è«çæžã蟌ã¿é | 11,986,900 B | 0 B |
| ããã»ã¹ã®ãã£ã¹ã¯æžã蟌ã¿ã«ãŠã³ã¿ãŒå¢å | 12,185,600 B | 12,288 B |
| æ€èšŒçµäºæã«æ®ããã£ãã·ã¥ | 479,476 B | 0 B |
| çµéæéã®äžå€®å€ | 0.300 s | 0.142 s |
| CPUæéã®äžå€®å€ïŒuser + systemïŒ | 0.225 s | 0.138 s |
倿ŽåŸã®12,288 Bã®æžã蟌ã¿ã¯ããã®ãããã§äœ¿ãåºå圢åŒã®ããããŒã ããæž¬å®ããåã§ãããPCMæžã蟌ã¿ãšå®æãã£ãã·ã¥ã¯ãšãã«0 Bã
容éè¶ éã§å€æŽåã®æåã®æ²ãéé¿æžã¿ãšãªãããããã®æ²ã®åçæºåãå¥ã«èšæž¬ãããäž¡æ¹ãšã176,128 Bã®CAFãæ°ããçæãã43,008ãã¬ãŒã ãèªã¿åãããæºåæéã®äžå€®å€ã¯å€æŽå1.67 msã倿ŽåŸ3.55 msãåã蟌ã¿åŸã®åçæºåã¯ã倿Žåã倿ŽåŸããã³ãŒããå¿ èŠãšãªãæ¡ä»¶ã§ããã
枬å®ã¯Apple Siliconã®macOS 27ã§å®è¡ãããçµéæéã«ã¯OSã®èæ¯è² è·ãå«ãããã®æž¬å®ã§ã¯ã3000æ²ã®ã¢ããªå
šäœã®åãèŸŒã¿æéã8 GiBãè¶
ããå®ãã£ãã·ã¥ã宿©ã®ãã©ãã·ã¥æžã蟌ã¿éã黿± æ¶è²»ã¯ç¢ºèªããŠããªããããã»ã¹ã«ãŠã³ã¿ãŒã¯macOSã® proc_pid_rusage ã® ri_diskio_byteswritten ã§ãããSSDå
éšã®æžã蟌ã¿éã§ã¯ãªãã
åçŸçšã¹ã¯ãªããã¯ã¢ããªãªããžããªã® scripts/benchmark-extended-audio-cache.sh ãš scripts/ExtendedAudioCacheBenchmark.swiftãmacOS Debugãã«ãåŸã«æ¬¡ã®ã³ãã³ããå®è¡ãããè©³çŽ°çµæãšæž¬å®å¯Ÿè±¡ãœãŒã¹ã®ããã·ã¥ã¯ããã®Wikiã® benchmarks/extended-audio-cache-2026-10-03/ ã«ä¿åããã
bash scripts/benchmark-extended-audio-cache.sh 90557a1f14fbf269ebbee1a0100b620d4737afd8
æ©èœã»ç«¶åã®ç¢ºèª
- æ¡åŒµåœ¢åŒã®åã蟌ã¿ã§PCMãã£ãã·ã¥ãäœãããå ãã¡ã€ã«æžãåºããšã¿ã°ååŸãç¶æããã
- ãã³ãŒããæå³çã«ä¿çããæ²Aãããéã«ã宿æžã¿ã®å¥æ²Bãèªã¿åºããããšããä¿çã®è§£é€åã®å®äºã§ç¢ºèªããã
- åãä¿åå ã®åæèŠæ±ã1åã®å€æãžéçŽããåŸ æ©åŽã®ãã£ã³ã»ã«ã倿倱æåŸã®å詊è¡ãé ç®åé€åŸã®é å»¶å®äºã確èªããã
- ãã£ãã·ã¥å®¹éãå°ãããã詊éšã§ãå®æçµæã®å®¹é調æŽãšäžŠè¡äœæäžã®äžæCAFã®ä¿æã確èªããã
- çå°ºWMAãç Žæã»åãè©°ããå ¥åããã£ã³ã»ã«ãçµç«¯ã§å€±æãããã³ãŒããŒã1ä»¶ã®äžéãè¶ ããå ¥åã確èªããã
Xcode 27ã§æ¬¡ã®ãã¹ããæåãããmacOSã¯å šåäœãã¹ããiOSã·ãã¥ã¬ãŒã¿ãŒã¯å€æŽã«é¢é£ãã4ã¹ã€ãŒãã察象ã«ããã
| å®è¡å | çµæ |
|---|---|
| macOS 27 | 441ãã¹ãã70ã¹ã€ãŒãæå |
| iPhone 18 Pro / iOS 27 Simulator | 29ãã¹ãã4ã¹ã€ãŒãæå |
| iPad Pro 11ã€ã³ãïŒM5ïŒ/ iOS 27 Simulator | 29ãã¹ãã4ã¹ã€ãŒãæå |
| SwiftLint 0.65.1 | æ°èŠéåãªããæ¢åã®èŠå43ä»¶ |
åäœãã¹ãã®åå®è¡ã¯ãmacOSã§ã¯ -only-testing:SimpleMediaPlayerTestsãiOS Simulatorã§ã¯æ¬¡ã®4ã¹ã€ãŒããæå®ãããExtendedAudioValidationTests ã«ã¯ãå®éã®CAFãµã€ãºãšåãäžéã§ã¯æåãã1 Bå°ããäžéã§ã¯æ€èšŒãšå€æã®äž¡æ¹ã倱æãã詊éšãå«ãã
xcodebuild -project SimpleMediaPlayer.xcodeproj -scheme SimpleMediaPlayer \
-destination 'platform=iOS Simulator,name=iPhone 18 Pro,OS=27.0' \
-parallel-testing-enabled NO \
-only-testing:SimpleMediaPlayerTests/ExtendedAudioSourceTests \
-only-testing:SimpleMediaPlayerTests/ExtendedAudioValidationTests \
-only-testing:SimpleMediaPlayerTests/ExtendedAudioCacheTests \
-only-testing:SimpleMediaPlayerTests/ExtendedAudioImportPlaybackTests test
iPadã¯å®è¡å
ã iPad Pro 11-inch (M5) ã«çœ®ãæãããåãæçµãã«ãã䜿ãå Žå㯠test-without-building ã§å®è¡ããã
3ç°å¢ãã¹ãŠã§ã256åã®ç°ãªãWavPackãã¡ã€ã«ãå®éã« LibraryService ãžåã蟌ã¿ãªãããå¥ã®ãã£ãã·ã¥æžã¿WMAã AudioEngineService ã§åçãã詊éšãæåãããLibraryService.isImporting ãtrueã®éã«ãé³å£°ãšã³ãžã³ã®è§£æçšãã¬ãŒã ãåä¿¡ããåçæéãé²ãããšã確èªãããããã«ããããã£ãã·ã¥URLã®ååŸã ãã§å¿çæ§ã確èªãããšã¯ããŠããªãã
iPhone/iPad宿©ã®é³åãã黿± æ¶è²»ã¯æªæ€èšŒãã·ãã¥ã¬ãŒã¿ãŒã®çµæã¯å®æ©ã®é³å£°åºåå質ãä¿èšŒããªãã
PR #20ã®ã¬ãã¥ãŒã§ç¢ºèªããç«¶åãšäžæãã¡ã€ã«
ã¬ãã¥ãŒä¿®æ£ã®ã¢ããªã³ããã㯠ba9b596ã以äžã¯ãã®ã³ãããã®èšèšãšæ€èšŒçµæã§ããã
2026-10-03ãPR #20 ã®2ä»¶ã®ææã確èªããã©ã¡ããä¿®æ£ãããè¿åŽæžã¿CAFã®ä¿è·ã«é¢ããææã§ã¯ãURLãè¿ããçŽåŸã«èŠæ±ã®å©çšæ°ã0ã«ãªããããåŒã³åºãå
ã AVAudioFile ãéãåã«å¥ã®å€æã容é調æŽãå®è¡ãããã®CAFãåé€ã§ãããç°åžžçµäºæã®äžæCAFã«é¢ããææã§ã¯ãé ãäžæãã¡ã€ã«ã容é調æŽããåžžã«é€å€ãããããååã®ã¢ããªå®è¡ã§æ®ã£ã .partial.caf ãååãããªãã£ãã
èªã¿åãAPIã¯URLã ããè¿ãæ¹åŒãããURLãšè§£æŸæäœãæã€ ReadableFile ãè¿ãæ¹åŒãžå€æŽããããã³ãã«ãä¿æããéã¯èŠæ±ã®å©çšæ°ãç¶æãã容é調æŽã®å¯Ÿè±¡ããå€ããåçã¯èªã¿èŸŒã¿èŠæ±ãšåçäžã®ãã¡ã€ã«ãé³éè§£æãšå€ææžãåºãã¯èªã¿åãã®å®äºã鳿¥œè§£æã¯é
å»¶èªã¿åããè¡ãã¢ã»ãããšè§£æã»ãã·ã§ã³ã®å®äºãŸã§ä¿æãããæç€ºçãªè§£æŸã¯è€æ°ååŒãã§ã1åã ãå©çšæ°ãæžãããè§£æŸãå¿ããå Žåã¯ãã³ãã«ã®ç Žæ£æã«è§£æŸããã
åŒã³åºãå ã§ã¯ãåçæºåã®æ¡çšã»æåŠã»ãã£ã³ã»ã«ã«å¿ããŠãã³ãã«ãç§»åãŸãã¯è§£æŸããã忢ãšäžæåæ¢ã¯èªã¿èŸŒã¿æžã¿ã®ãã¡ã€ã«ãä¿æãããšã³ãžã³ã®çµäºã§ã¯è§£æŸããããšã³ãžã³ãäœãçŽãå Žåã¯å床èªã¿åãçšãã³ãã«ãååŸãããã©ã€ãã©ãªé ç®ã®å逿äœã§ã¯ãåçã®ã¯ãªã¢ãé³éæ£èŠåç¶æ ã®ãªã»ããã鳿¥œè§£æã®ãã£ã³ã»ã«ãè¡ããåæçãªé³éè§£æãšå€ææžãåºãã®èªã¿åãæéãéåæã®é³æ¥œè§£æã«ãããã¢ã»ããã®å©çšæéãä¿æåºéã«å«ããã
远å ã¬ãã¥ãŒã§ã¯ãMainActorããåŒã¶ãã³ãã«è§£æŸãšã©ã€ãã©ãªé ç®ã®åé€ã確èªããã容é調æŽã ããããã¯ã°ã©ãŠã³ãåããŠãããã®åã«åãç¶æ ããã¯ãååŸãããšãããã¯ã°ã©ãŠã³ãã®å ¬éã»å®¹é調æŽãä¿æããããã¯ãåŸ ã€ãããã§ãèŠæ±ã®å©çšæ°ãšç¡å¹åã管çããç¶æ ããã¯ãšãã¯ãŒã«ãŒã®ãã£ãã·ã¥I/OãçŽååãããã¡ã€ã«æäœããã¯ãåããããã³ãã«è§£æŸã®åŠçå šäœã¯ä¿å®ãã¥ãŒãžæå ¥ããUIããã®åé€èŠæ±ã¯çãç¶æ æŽæ°ãæžãŸããŠãã¡ã€ã«æäœãä¿å®ãã¥ãŒãžæž¡ããå ¬éãšå®¹é調æŽãI/Oäžã§ãããããã®æäœããã®çµäºãåæçã«åŸ ããªãèšèšãšããã
å©çšäžã®CAFã ãã§8 GiBãè¶ ããå Žåã¯ãäžæçãªå®¹éè¶ éã蚱容ãããæåŸã®å©çšè ããã³ãã«ãè§£æŸãããšãããã¯ã°ã©ãŠã³ãã®ä¿å®ãã¥ãŒã§åã³å®¹éã調æŽãããã©ã€ãã©ãªé ç®ãæç€ºçã«åé€ããåŠçã¯ãã®ä¿è·ã®å¯Ÿè±¡å€ã§ãããä¿çäžã®å€æãç¡å¹åããŠçŸåšã®CAFãåé€ãããä¿å®ãã¥ãŒã®åé€èŠæ±ã«ã¯äžä»£ãä»ããåãä¿åå ãžæ°ããªèªã¿åãèŠæ±ãå ¥ã£ãå Žåã¯æ§äžä»£ã®åé€ã倱å¹ããããããã«ãããé ããŠåããåé€ãæ°ããCAFãæ¶ããªãã
äžæCAFã¯ãçŸè¡ããã»ã¹ã§æžã蟌ã¿äžã®URLãèŠæ±ãšã¯å¥ã«èšé²ãããèŠæ±ãç¡å¹åãããŠããã³ãŒããŒããŸã çµäºããŠããªãå Žåãããããããã®èšé²ã¯ãã³ãŒããŒã®åŸåŠçãŸã§ä¿æããããã£ãã·ã¥ã®ååŸãšå®¹é調æŽã§ã¯ .partial.caf ã®ãã¡æžã蟌ã¿äžã§ãªããã®ãåé€ããçŸè¡ãã³ãŒããŒã®ãã¡ã€ã«ãæ®ããéåžžçµäºã倱æããã£ã³ã»ã«ã§ã¯åŸæ¥ã©ãããã³ãŒããŒã®åŸåŠçãäžæCAFãåé€ããã
macOSã§ã¯ãåãäžæãã£ã¬ã¯ããªã« /var/... ãš /private/var/... ã®äž¡æ¹ã§ã¢ã¯ã»ã¹ã§ãããèŠæ±ãä¿æããURLãšãã¡ã€ã«åæãè¿ãURLã®è¡šèšãç°ãªããšãå©çšäžã®CAFãäžæCAFãåããã¡ã€ã«ãšããŠå€å®ã§ããªãå Žåããã£ãã容é調æŽãšäžæCAFååã§ã¯ãåæçµæã®ãã¡ã€ã«åãå
¥åãã£ã¬ã¯ããªãžä»ãçŽããŠURLãæ¯èŒãããUIåŽã®æ£èŠåã®ããã«æ°ããªãã¡ã€ã«å±æ§ååŸãå¢ããããNSTemporaryDirectory() ãè¿ãURLã§ããã³ãã«ã®ä¿è·ãæç«ããããšã確èªããã
| çºçæ¡ä»¶ | åçŸãšç¢ºèªæ¹æ³ |
|---|---|
| ååŸåŸã»ãã¡ã€ã«ãéãåã®å®¹éèª¿æŽ | leasePreservesEntryBetweenAcquisitionAndOpen ã§äžéã1 Bã«ããæ²Aã®ãã³ãã«ååŸåŸã«æ²Bãå
¬éããŠããAãéããæ°èŠå€æãšãã£ãã·ã¥ãããã®äž¡æ¹ã§èªããããšã確èªããã |
| å ±æãã2人ã®å©çšè ã®çæ¹ãè§£æŸ | oneReaderReleasingDoesNotUnpinAnotherReader ã§çæ¹ã®è§£æŸåŸã«ä¿å®ãã¥ãŒãå®äºãããããçæ¹ãèªããããšã確èªãããæåŸã®è§£æŸåŸã«ã¯åé€ãããã |
| ãã£ãã·ã¥ãããæã«æ®ã£ãŠããäžæCAF | cacheHitRemovesAbandonedPartialFiles ã§æŸæ£ããã .partial.caf ã眮ããå倿ããã«ååãããããšãšç¡é¢ä¿ãªé ãCAFãæ®ãããšã確èªããã |
| ç¡å¹åæžã¿ãã³ãŒããŒãäžæCAFãžæžã蟌ã¿äž | invalidatedDecoderTemporaryIsPreservedUntilItFinishes ã§å€æãä¿çããŠç¡å¹åãã奿²ãå
¬éãããä¿çäžã¯äžæCAFãæ®ãã倿çµäºæã«å
¬éãæåŠããŠååããã |
| äžæCAFã®ç§»ååŸã«åæ¬ãå€ãã | sourceChangeAfterMoveRejectsPublishedEntry ã§ç§»ååã®åæ¬ç¢ºèªã¯æåããç§»ååŸã®ç¢ºèªã¯å€±æããããèŠæ±ããã£ã³ã»ã«æ±ãã«ããç§»åæžã¿ã®CAFãšäžæãã¡ã€ã«ãæ®ããªãããšã確èªããã |
| åé€ã¿ã¹ã¯ããå ã«æ°äžä»£ã®å€æãå®äº | delayedRemovalDoesNotDeleteNewGeneration ã§ä¿å®ãã¥ãŒã忢ããåé€èŠæ±åŸã«åãä¿åå
ãžæ°ããªCAFãäœãããã¥ãŒã®åéåŸãæ°ããCAFãèªããããšã確èªããã |
| ãã£ãã·ã¥I/Oãä¿çäžã®MainActoræäœ | uiReleaseAndRemovalDoNotWaitForFilesystemValidation ã§ã¯ãŒã«ãŒã®åæ¬ç¢ºèªãä¿çããMainActorãããã³ãã«ãè§£æŸããŠåé€èŠæ±ãåºããä¿çè§£é€åã«æäœãå®äºããè§£é€åŸã¯æ§èŠæ±ã®çµæãé©çšããCAFãåé€ããããšã確èªããã |
ç«¶åãã¹ãã®åŸ
æ©æ¹æ³ãèŠçŽãããåŸæ¥ã¯Swiftã®å調ã¹ã¬ããããŒã«äžã§ãã¹ããšä¿çäžã®ãã³ãŒããã»ããã©ãåæçã«åŸ
ã¡ããã³ãŒããè§£é€ãããã¹ãåŽã®åŠçãå®è¡ãããªãå Žåããã£ããåæçãªãã£ãã·ã¥ã»ãã³ãŒããŒåŒã³åºãã¯GCDã䜿ãå°çš TaskExecutor ãžé
眮ãããã¹ãåŽã®èŠ³æž¬ã¯ç¶ç¶ã䜿ã£ãŠéåæã«åŸ
ã€ãããã«ããã¿ã¹ã¯ã®ãã£ã³ã»ã«ç¶æ
ãä¿ã¡ãªããã芳枬åŽãå調ã¹ã¬ããããŒã«ãå æããããšãé¿ããã
äž¡ã¬ãã¥ãŒææã¯ãå®ãã£ãã·ã¥ã䜿ãä¿®æ£åã»ä¿®æ£åŸã®æ¯èŒã§ã確èªãããè¿åŽåŸã«å¥æ²ãå
¬éããŠããæåã®CAFãéã詊éšãšãæŸæ£ãã .partial.caf ã®åå詊éšã¯ãä¿®æ£åã§ã¯äž¡æ¹å€±æããä¿®æ£åŸã§ã¯äž¡æ¹æåãããNSTemporaryDirectory() ã® /var 衚èšã䜿ã£ãå Žåãä¿®æ£åŸã¯æåããã
ã¬ãã¥ãŒä¿®æ£åŸã«ãåã512 KiBäžéã®100ä»¶ãããã倿Žåãšäº€äºã«3åå®è¡ãããè©³çŽ°ãªæž¬å®çµæãå®éã«ã³ã³ãã€ã«ãããœãŒã¹ãSHA-256㯠benchmarks/extended-audio-cache-pr20-2026-10-03/ ã«ä¿åããã
| åãèŸŒã¿æã®æ€èšŒ100ä»¶ | åãèŸŒã¿æCAFçæ | ã¬ãã¥ãŒä¿®æ£åŸ |
|---|---|---|
| CAFã®è«çæžã蟌ã¿é | 11,986,900 B | 0 B |
| ããã»ã¹ã®ãã£ã¹ã¯æžã蟌ã¿ã«ãŠã³ã¿ãŒå¢å | 12,185,600 B | 12,288 B |
| æ€èšŒçµäºæã«æ®ããã£ãã·ã¥ | 479,476 B | 0 B |
| çµéæéã®äžå€®å€ | 0.212391 s | 0.143751 s |
| CPUæéã®äžå€®å€ïŒuser + systemïŒ | 0.207450 s | 0.135108 s |
æåã®æ²ã®åçæºåã¯ãäž¡æ¹ãšã176,128 Bã®CAFãäœãã43,008ãã¬ãŒã ãèªã¿åãããã¬ãã¥ãŒä¿®æ£åŸããåãèŸŒã¿æ€èšŒã®PCMæžã蟌ã¿ãšå®æãã£ãã·ã¥ã¯0 Bãç¶æããŠããã
æçµãœãŒã¹ãXcode 27ã§ãã«ãããæ¬¡ã®æ€èšŒãæåãããiPhoneã¯é¢é£5ã¹ã€ãŒãã®36ãã¹ããšããã£ãã·ã¥åé€ãå«ã LibraryServicePersistenceTests ã®7ãã¹ããåããŠå®è¡ãããiPadã¯åã6ã¹ã€ãŒããäžæ¬å®è¡ããã
| å®è¡å | çµæ |
|---|---|
| macOS 27ãå šåäœãã¹ã | 448ãã¹ãã71ã¹ã€ãŒãæå |
| macOS 27ã峿 Œãªå調ã¹ã¬ããããŒã« | ãã£ãã·ã¥é¢é£17ãã¹ãã2ã¹ã€ãŒãæå |
| iPhone 18 Pro / iOS 27 Simulator | åèš43ãã¹ãã6ã¹ã€ãŒãæå |
| iPad Pro 11ã€ã³ãïŒM5ïŒ/ iOS 27 Simulator | 43ãã¹ãã6ã¹ã€ãŒãæå |
| SwiftLint 0.65.1 | æ¢åèŠå43ä»¶ããšã©ãŒ0ä»¶ãæ°èŠéå0ä»¶ãããŒã¹ã©ã€ã³å€æŽãªã |
峿 Œãªå調ã¹ã¬ããããŒã«ã®ç¢ºèªã¯ LIBDISPATCH_COOPERATIVE_POOL_STRICT=1 ãèšå®ããŠè¡ã£ããiPhoneãšiPadã§ã¯ã256ãã¡ã€ã«ã®å®éã®åã蟌ã¿äžã«ãã£ãã·ã¥æžã¿WMAã®é³å£°åºåãšåçæéã®é²è¡ã確èªãã詊éšãæåããã宿©ã®é³åããšé»æ± æ¶è²»ã¯ä»åãæªæ€èšŒã§ããã