Предотвращение утечки памяти AudioWorkletNode

#javascript #web-audio-api

#javascript #web-audio-api

Вопрос:

У меня есть AudioWorkletNode, который является членом экземпляра класса. Когда я удаляю / уничтожаю / удаляю этот экземпляр, происходит утечка AudioWorkletNode и MessagePort.

Перед удалением экземпляра я удостоверяюсь, что соответствующий метод обработки AudioWorkletProcessor не запущен. Я также пытался вызвать метод закрытия порта () и даже установить для AudioWorkletNode значение null. Также, похоже, не имеет значения, подключен или отключен узел в данный момент. В любом случае происходит утечка.

Для установки модуля AudioWorklet:

 AG_Recorder = class AG_Recorder {

  constructor(outNode) {

      AG_AudioManager.audioCtx.audioWorklet.addModule( '/audioWorkers/recorder.js').then(() => {

        this.recorderNode = new AudioWorkletNode(AG_AudioManager.audioCtx, 'recorder');
        this.recorderNode.connect(outNode);

        this.recorderNode.port.onmessage = (event) => {
          this.handleMessage(event.data);
        };

      }).catch(function (err) {
        console.log('recorder audioworklet error: ', err.name, err.message);
      });

   }
}
  

И процессор, сильно сокращенный для релевантности:

 class RecorderWorkletNode extends AudioWorkletProcessor {

  constructor (options) {

    super(options);
    this._running = true;

    this.port.onmessage = event => {

      if (event.data.release) {
        this._running = false;
      }
    }

    this.port.start();
  }

  process (inputs, outputs, parameters) {

    return this._running;
  }
}
  

И прежде чем узел будет отключен, а экземпляр AG_Recorder будет удален, я попытался сделать это:

 release() {
    this.recorderNode.port.postMessage({release: true});
    this.recorderNode.port.onmessage = null;
    this.recorderNode.port.close();
    this.recorderNode = null;
 }
  

Комментарии:

1. Вы когда-нибудь находили ответ на это?

2. @SteveM к сожалению, нет

Ответ №1:

Похоже, это подтвержденная ошибка для Chromium:

https://bugs.chromium.org/p/chromium/issues/detail?id=1298955

Обновление: не очень уверен в Firefox и т. Д