feat(player): show cache limit in perf overlay

This commit is contained in:
edde746
2026-06-13 21:21:15 +02:00
parent 9ff3099a9d
commit c39b5a5cf1
37 changed files with 77 additions and 9 deletions
@@ -698,6 +698,8 @@ class ExoPlayerPlugin :
"audio-bitrate" to mpv.getProperty("audio-bitrate"),
// Performance metrics
"total-avsync-change" to mpv.getProperty("total-avsync-change"),
"cache-used" to mpv.getProperty("cache-used"),
"demuxer-max-bytes" to mpv.getProperty("demuxer-max-bytes"),
"cache-speed" to mpv.getProperty("cache-speed"),
"frame-drop-count" to mpv.getProperty("frame-drop-count"),
"decoder-frame-drop-count" to mpv.getProperty("decoder-frame-drop-count"),
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Използван кеш",
"cacheLimit": "Лимит на кеша",
"speed": "Скорост",
"player": "Плеър",
"memory": "Памет",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Brugt cache",
"cacheLimit": "Cachegrænse",
"speed": "Hastighed",
"player": "Afspiller",
"memory": "Hukommelse",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Cache genutzt",
"cacheLimit": "Cache-Limit",
"speed": "Geschwindigkeit",
"player": "Player",
"memory": "Speicher",
+1
View File
@@ -1196,6 +1196,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Cache Used",
"cacheLimit": "Cache Limit",
"speed": "Speed",
"player": "Player",
"memory": "Memory",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Caché usada",
"cacheLimit": "Límite de caché",
"speed": "Velocidad",
"player": "Reproductor",
"memory": "Memoria",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Cache utilisé",
"cacheLimit": "Limite du cache",
"speed": "Vitesse",
"player": "Lecteur",
"memory": "Mémoire",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Cache usata",
"cacheLimit": "Limite cache",
"speed": "Velocità",
"player": "Player",
"memory": "Memoria",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "使用キャッシュ",
"cacheLimit": "キャッシュ上限",
"speed": "速度",
"player": "プレーヤー",
"memory": "メモリ",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "사용 캐시",
"cacheLimit": "캐시 제한",
"speed": "속도",
"player": "플레이어",
"memory": "메모리",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Cache brukt",
"cacheLimit": "Cachegrense",
"speed": "Hastighet",
"player": "Spiller",
"memory": "Minne",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Cache gebruikt",
"cacheLimit": "Cachelimiet",
"speed": "Snelheid",
"player": "Speler",
"memory": "Geheugen",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Użyty cache",
"cacheLimit": "Limit cache'u",
"speed": "Szybkość",
"player": "Odtwarzacz",
"memory": "Pamięć",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Cache usado",
"cacheLimit": "Limite do cache",
"speed": "Velocidade",
"player": "Player",
"memory": "Memória",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Кэш использован",
"cacheLimit": "Лимит кэша",
"speed": "Скорость",
"player": "Плеер",
"memory": "Память",
+1 -1
View File
@@ -4,7 +4,7 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 16
/// Strings: 20345 (1271 per locale)
/// Strings: 20361 (1272 per locale)
// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayBg extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => 'Използван кеш';
@override String get cacheLimit => 'Лимит на кеша';
@override String get speed => 'Скорост';
@override String get player => 'Плеър';
@override String get memory => 'Памет';
@@ -3015,6 +3016,7 @@ extension on TranslationsBg {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Използван кеш',
'performanceOverlay.cacheLimit' => 'Лимит на кеша',
'performanceOverlay.speed' => 'Скорост',
'performanceOverlay.player' => 'Плеър',
'performanceOverlay.memory' => 'Памет',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayDa extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => 'Brugt cache';
@override String get cacheLimit => 'Cachegrænse';
@override String get speed => 'Hastighed';
@override String get player => 'Afspiller';
@override String get memory => 'Hukommelse';
@@ -3015,6 +3016,7 @@ extension on TranslationsDa {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Brugt cache',
'performanceOverlay.cacheLimit' => 'Cachegrænse',
'performanceOverlay.speed' => 'Hastighed',
'performanceOverlay.player' => 'Afspiller',
'performanceOverlay.memory' => 'Hukommelse',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayDe extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => 'Cache genutzt';
@override String get cacheLimit => 'Cache-Limit';
@override String get speed => 'Geschwindigkeit';
@override String get player => 'Player';
@override String get memory => 'Speicher';
@@ -3015,6 +3016,7 @@ extension on TranslationsDe {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Cache genutzt',
'performanceOverlay.cacheLimit' => 'Cache-Limit',
'performanceOverlay.speed' => 'Geschwindigkeit',
'performanceOverlay.player' => 'Player',
'performanceOverlay.memory' => 'Speicher',
+4
View File
@@ -3368,6 +3368,9 @@ class TranslationsPerformanceOverlayEn {
/// en: 'Cache Used'
String get cacheUsed => 'Cache Used';
/// en: 'Cache Limit'
String get cacheLimit => 'Cache Limit';
/// en: 'Speed'
String get speed => 'Speed';
@@ -5599,6 +5602,7 @@ extension on Translations {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Cache Used',
'performanceOverlay.cacheLimit' => 'Cache Limit',
'performanceOverlay.speed' => 'Speed',
'performanceOverlay.player' => 'Player',
'performanceOverlay.memory' => 'Memory',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayEs extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => 'Caché usada';
@override String get cacheLimit => 'Límite de caché';
@override String get speed => 'Velocidad';
@override String get player => 'Reproductor';
@override String get memory => 'Memoria';
@@ -3015,6 +3016,7 @@ extension on TranslationsEs {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Caché usada',
'performanceOverlay.cacheLimit' => 'Límite de caché',
'performanceOverlay.speed' => 'Velocidad',
'performanceOverlay.player' => 'Reproductor',
'performanceOverlay.memory' => 'Memoria',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayFr extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => 'Cache utilisé';
@override String get cacheLimit => 'Limite du cache';
@override String get speed => 'Vitesse';
@override String get player => 'Lecteur';
@override String get memory => 'Mémoire';
@@ -3015,6 +3016,7 @@ extension on TranslationsFr {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Cache utilisé',
'performanceOverlay.cacheLimit' => 'Limite du cache',
'performanceOverlay.speed' => 'Vitesse',
'performanceOverlay.player' => 'Lecteur',
'performanceOverlay.memory' => 'Mémoire',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayIt extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => 'Cache usata';
@override String get cacheLimit => 'Limite cache';
@override String get speed => 'Velocità';
@override String get player => 'Player';
@override String get memory => 'Memoria';
@@ -3015,6 +3016,7 @@ extension on TranslationsIt {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Cache usata',
'performanceOverlay.cacheLimit' => 'Limite cache',
'performanceOverlay.speed' => 'Velocità',
'performanceOverlay.player' => 'Player',
'performanceOverlay.memory' => 'Memoria',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayJa extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => '使用キャッシュ';
@override String get cacheLimit => 'キャッシュ上限';
@override String get speed => '速度';
@override String get player => 'プレーヤー';
@override String get memory => 'メモリ';
@@ -3015,6 +3016,7 @@ extension on TranslationsJa {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => '使用キャッシュ',
'performanceOverlay.cacheLimit' => 'キャッシュ上限',
'performanceOverlay.speed' => '速度',
'performanceOverlay.player' => 'プレーヤー',
'performanceOverlay.memory' => 'メモリ',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayKo extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => '사용 캐시';
@override String get cacheLimit => '캐시 제한';
@override String get speed => '속도';
@override String get player => '플레이어';
@override String get memory => '메모리';
@@ -3015,6 +3016,7 @@ extension on TranslationsKo {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => '사용 캐시',
'performanceOverlay.cacheLimit' => '캐시 제한',
'performanceOverlay.speed' => '속도',
'performanceOverlay.player' => '플레이어',
'performanceOverlay.memory' => '메모리',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayNb extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => 'Cache brukt';
@override String get cacheLimit => 'Cachegrense';
@override String get speed => 'Hastighet';
@override String get player => 'Spiller';
@override String get memory => 'Minne';
@@ -3015,6 +3016,7 @@ extension on TranslationsNb {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Cache brukt',
'performanceOverlay.cacheLimit' => 'Cachegrense',
'performanceOverlay.speed' => 'Hastighet',
'performanceOverlay.player' => 'Spiller',
'performanceOverlay.memory' => 'Minne',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayNl extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => 'Cache gebruikt';
@override String get cacheLimit => 'Cachelimiet';
@override String get speed => 'Snelheid';
@override String get player => 'Speler';
@override String get memory => 'Geheugen';
@@ -3015,6 +3016,7 @@ extension on TranslationsNl {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Cache gebruikt',
'performanceOverlay.cacheLimit' => 'Cachelimiet',
'performanceOverlay.speed' => 'Snelheid',
'performanceOverlay.player' => 'Speler',
'performanceOverlay.memory' => 'Geheugen',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayPl extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => 'Użyty cache';
@override String get cacheLimit => 'Limit cache\'u';
@override String get speed => 'Szybkość';
@override String get player => 'Odtwarzacz';
@override String get memory => 'Pamięć';
@@ -3015,6 +3016,7 @@ extension on TranslationsPl {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Użyty cache',
'performanceOverlay.cacheLimit' => 'Limit cache\'u',
'performanceOverlay.speed' => 'Szybkość',
'performanceOverlay.player' => 'Odtwarzacz',
'performanceOverlay.memory' => 'Pamięć',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayPt extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => 'Cache usado';
@override String get cacheLimit => 'Limite do cache';
@override String get speed => 'Velocidade';
@override String get player => 'Player';
@override String get memory => 'Memória';
@@ -3015,6 +3016,7 @@ extension on TranslationsPt {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Cache usado',
'performanceOverlay.cacheLimit' => 'Limite do cache',
'performanceOverlay.speed' => 'Velocidade',
'performanceOverlay.player' => 'Player',
'performanceOverlay.memory' => 'Memória',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayRu extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => 'Кэш использован';
@override String get cacheLimit => 'Лимит кэша';
@override String get speed => 'Скорость';
@override String get player => 'Плеер';
@override String get memory => 'Память';
@@ -3015,6 +3016,7 @@ extension on TranslationsRu {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Кэш использован',
'performanceOverlay.cacheLimit' => 'Лимит кэша',
'performanceOverlay.speed' => 'Скорость',
'performanceOverlay.player' => 'Плеер',
'performanceOverlay.memory' => 'Память',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlaySv extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => 'Cache använd';
@override String get cacheLimit => 'Cachegräns';
@override String get speed => 'Hastighet';
@override String get player => 'Spelare';
@override String get memory => 'Minne';
@@ -3015,6 +3016,7 @@ extension on TranslationsSv {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => 'Cache använd',
'performanceOverlay.cacheLimit' => 'Cachegräns',
'performanceOverlay.speed' => 'Hastighet',
'performanceOverlay.player' => 'Spelare',
'performanceOverlay.memory' => 'Minne',
+2
View File
@@ -1409,6 +1409,7 @@ class _TranslationsPerformanceOverlayZh extends TranslationsPerformanceOverlayEn
@override String get maxCll => 'MaxCLL';
@override String get maxFall => 'MaxFALL';
@override String get cacheUsed => '已用缓存';
@override String get cacheLimit => '缓存限制';
@override String get speed => '速度';
@override String get player => '播放器';
@override String get memory => '内存';
@@ -3015,6 +3016,7 @@ extension on TranslationsZh {
'performanceOverlay.maxCll' => 'MaxCLL',
'performanceOverlay.maxFall' => 'MaxFALL',
'performanceOverlay.cacheUsed' => '已用缓存',
'performanceOverlay.cacheLimit' => '缓存限制',
'performanceOverlay.speed' => '速度',
'performanceOverlay.player' => '播放器',
'performanceOverlay.memory' => '内存',
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "Cache använd",
"cacheLimit": "Cachegräns",
"speed": "Hastighet",
"player": "Spelare",
"memory": "Minne",
+1
View File
@@ -1187,6 +1187,7 @@
"maxCll": "MaxCLL",
"maxFall": "MaxFALL",
"cacheUsed": "已用缓存",
"cacheLimit": "缓存限制",
"speed": "速度",
"player": "播放器",
"memory": "内存",
@@ -101,6 +101,7 @@ class _PlayerPerformanceOverlayState extends State<PlayerPerformanceOverlay> {
_buildSection(Symbols.memory_rounded, t.performanceOverlay.buffer, [
_metric(t.fileInfo.duration, _stats.cacheDurationFormatted),
if (isMpv) _metric(t.performanceOverlay.cacheUsed, _stats.cacheUsedFormatted),
if (isMpv) _metric(t.performanceOverlay.cacheLimit, _stats.cacheLimitFormatted),
if (isMpv) _metric(t.performanceOverlay.speed, _stats.cacheSpeedFormatted),
]),
_buildSection(Symbols.apps_rounded, t.performanceOverlay.app, [
@@ -50,6 +50,7 @@ class PerformanceStats {
// Buffer metrics
final int? cacheUsed;
final int? cacheLimit;
final double? cacheSpeed;
final double? cacheDuration;
@@ -102,6 +103,7 @@ class PerformanceStats {
this.frameDropCount,
this.decoderFrameDropCount,
this.cacheUsed,
this.cacheLimit,
this.cacheSpeed,
this.cacheDuration,
this.dvConversionActive = false,
@@ -152,6 +154,7 @@ class PerformanceStats {
frameDropCount = null,
decoderFrameDropCount = null,
cacheUsed = null,
cacheLimit = null,
cacheSpeed = null,
cacheDuration = null,
dvConversionActive = false,
@@ -220,6 +223,13 @@ class PerformanceStats {
return '${mb.toStringAsFixed(1)} MB';
}
/// Format cache limit in MB.
String get cacheLimitFormatted {
if (cacheLimit == null || cacheLimit! <= 0) return 'N/A';
final mb = cacheLimit! / (1024 * 1024);
return '${mb.toStringAsFixed(1)} MB';
}
/// Format cache speed in MB/s.
String get cacheSpeedFormatted {
if (cacheSpeed == null) return 'N/A';
@@ -152,6 +152,7 @@ class PerformanceStatsService {
audioBitrate: _parseInt(statsMap['audio-bitrate'] as String?),
avsyncChange: _parseDouble(statsMap['total-avsync-change'] as String?),
cacheUsed: _parseInt(statsMap['cache-used'] as String?),
cacheLimit: _parseInt(statsMap['demuxer-max-bytes'] as String?),
cacheSpeed: _parseDouble(statsMap['cache-speed'] as String?),
displayFps: _parseDouble(statsMap['display-fps'] as String?),
frameDropCount: _parseInt(statsMap['frame-drop-count'] as String?),
@@ -234,10 +235,12 @@ class PerformanceStatsService {
player.getProperty('audio-params/hr-channels'), // 9
player.getProperty('audio-bitrate'), // 10
player.getProperty('total-avsync-change'), // 11
player.getProperty('cache-speed'), // 12
player.getProperty('frame-drop-count'), // 13
player.getProperty('decoder-frame-drop-count'), // 14
player.getProperty('demuxer-cache-duration'), // 15
player.getProperty('cache-used'), // 12
player.getProperty('demuxer-max-bytes'), // 13
player.getProperty('cache-speed'), // 14
player.getProperty('frame-drop-count'), // 15
player.getProperty('decoder-frame-drop-count'), // 16
player.getProperty('demuxer-cache-duration'), // 17
]);
final hasVideo = results[1] != null;
@@ -287,10 +290,12 @@ class PerformanceStatsService {
audioChannels: results[9],
audioBitrate: _parseInt(results[10]),
avsyncChange: _parseDouble(results[11]),
cacheSpeed: _parseDouble(results[12]),
frameDropCount: _parseInt(results[13]),
decoderFrameDropCount: _parseInt(results[14]),
cacheDuration: _parseDouble(results[15]),
cacheUsed: _parseInt(results[12]),
cacheLimit: _parseInt(results[13]),
cacheSpeed: _parseDouble(results[14]),
frameDropCount: _parseInt(results[15]),
decoderFrameDropCount: _parseInt(results[16]),
cacheDuration: _parseDouble(results[17]),
// Video-dependent properties
displayFps: _parseDouble(videoResults?.first),
pixelformat: videoResults?[1],