Нашёл причину утечки памяти

This commit is contained in:
ThomasCharester committed 2026-03-24 15:16:17 +03:00
1 parent 60c28f54f2
commit 320847af5b
229 files changed
+3094 -18282

No files matched your search

@@ -88,10 +88,24 @@ namespace Code.Infrastructure.Audio
_pool.ReleaseSource(audioSource);
}
private Dictionary<KeyValuePair<AudioNames, int>, CancellationTokenSource> _cancellationTokenSources = new();
public void CancelMusic(AudioNames groupName, int id) => _cancellationTokenSources[new KeyValuePair<AudioNames, int>(groupName, id)].Cancel();
public void ReleaseCancellationSource(AudioNames groupName, int id) => _cancellationTokenSources[new KeyValuePair<AudioNames, int>(groupName, id)] = null;
private Dictionary<AudioNameIdPair, CancellationTokenSource> _cancellationTokenSources = new();
public void CancelMusic(AudioNames groupName, int id)
{
var key = new AudioNameIdPair(groupName, id);
if (!_cancellationTokenSources.ContainsKey(key)) return;
_cancellationTokenSources[key].Cancel();
_cancellationTokenSources.Remove(key);
}
public void ReleaseCancellationSource(AudioNames groupName, int id)
{
// _cancellationTokenSources[new KeyValuePair<AudioNames, int>(groupName, id)] = null; никаких полумер
_cancellationTokenSources.Remove(new AudioNameIdPair(groupName, id));
}
public async UniTaskVoid PlayRepeatedly(AudioNames groupName, int id, AudioGroupType audioGroupType,
AudioSourceType sourceType = AudioSourceType.NoBlend, AudioSource audioSource = null, CancellationTokenSource cancellationTokenSource = null)
{
@@ -100,7 +114,7 @@ namespace Code.Infrastructure.Audio
if(cancellationTokenSource == null)
{
cancellationTokenSource = new CancellationTokenSource();
_cancellationTokenSources[new KeyValuePair<AudioNames, int>(groupName, id)] = cancellationTokenSource;
_cancellationTokenSources[new AudioNameIdPair(groupName, id)] = cancellationTokenSource;
}
if (!audioSource) audioSource = _pool.GetSource(sourceType);
@@ -108,11 +122,10 @@ namespace Code.Infrastructure.Audio
audioSource.outputAudioMixerGroup = _audioMixerGroups[audioGroupType];
audioSource.Play();
await UniTask.NextFrame();
// await UniTask.WaitUntil(audioSource, _ => audioSource.isPlaying);
var (isCanceled, _) = await UniTask.WaitUntilValueChanged(audioSource,
_ => !audioSource.isPlaying,
cancellationToken: cancellationTokenSource.Token).SuppressCancellationThrow();
UnityEngine.Debug.LogError("Music skipping");
if (isCanceled)
{
@@ -129,6 +142,7 @@ namespace Code.Infrastructure.Audio
}
public AudioClip GetClip(AudioNames groupName, int id) => _audioClips[groupName][id];
public bool CheckClip(AudioNames groupName, int id) => _audioClips[groupName].ContainsKey(id);
public void AudioClipsLoaded(AudioNames groupname, Dictionary<int, AudioClip> clips)
@@ -150,10 +164,37 @@ namespace Code.Infrastructure.Audio
_mixer.SetFloat(effectName, newValue);
}).OnComplete(callback);
}
public void ChangeGroupVolume(AudioGroupType groupType, float value, float time, Action callback = null)
{
ApplyParameter(_audioMixerGroups[groupType].name, Mathf.Log10(value == 0f ? 0.001f : value) * 20, time, callback);
}
private struct AudioNameIdPair : IEquatable<AudioNameIdPair>
{
public AudioNames AudioNames;
public int ID;
public AudioNameIdPair(AudioNames audioNames, int id)
{
AudioNames = audioNames;
ID = id;
}
public bool Equals(AudioNameIdPair other)
{
return AudioNames == other.AudioNames && ID == other.ID;
}
public override bool Equals(object obj)
{
return obj is AudioNameIdPair other && Equals(other);
}
public override int GetHashCode()
{
return HashCode.Combine((int)AudioNames, ID);
}
}
}
public interface IReadyToPlayHandle : IGlobalSubscriber