From e3ceec9fb8f64d0ddd14fb7646830fcc28445e42 Mon Sep 17 00:00:00 2001 From: Yuval keidar Date: Sun, 24 May 2020 15:41:31 +0300 Subject: [PATCH 1/6] fix(FEC-10122): clear playlist manager on reset to avoid memory leak --- src/kaltura-player.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/kaltura-player.js b/src/kaltura-player.js index c11012f87..07fd3d8e6 100644 --- a/src/kaltura-player.js +++ b/src/kaltura-player.js @@ -211,6 +211,7 @@ class KalturaPlayer extends FakeEventTarget { } reset(): void { + this._playlistManager.reset(); this._localPlayer.reset(); this._uiWrapper.reset(); } From 2420bd28ebe62e3124b74c9bff06f1e703eac558 Mon Sep 17 00:00:00 2001 From: Yuval keidar Date: Mon, 15 Jun 2020 10:57:41 +0300 Subject: [PATCH 2/6] clear the playlist manager on destroy --- src/common/playlist/playlist-manager.js | 6 ++++++ src/kaltura-player.js | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/common/playlist/playlist-manager.js b/src/common/playlist/playlist-manager.js index a168660c5..6c8f1c589 100644 --- a/src/common/playlist/playlist-manager.js +++ b/src/common/playlist/playlist-manager.js @@ -282,6 +282,12 @@ class PlaylistManager { } return Promise.reject(); } + + destroy(): void { + this._player = null; + this._eventManager.destroy(); + this._playlist = null; + } } export {PlaylistManager}; diff --git a/src/kaltura-player.js b/src/kaltura-player.js index 07fd3d8e6..0720874f6 100644 --- a/src/kaltura-player.js +++ b/src/kaltura-player.js @@ -211,7 +211,6 @@ class KalturaPlayer extends FakeEventTarget { } reset(): void { - this._playlistManager.reset(); this._localPlayer.reset(); this._uiWrapper.reset(); } @@ -221,6 +220,7 @@ class KalturaPlayer extends FakeEventTarget { this._localPlayer.destroy(); this._uiWrapper.destroy(); this._eventManager.destroy(); + this._playlistManager.destroy(); const targetContainer = document.getElementById(targetId); if (targetContainer && targetContainer.parentNode) { Utils.Dom.removeChild(targetContainer.parentNode, targetContainer); From b406b8c910334158b295204517ebbe8cd4b24c01 Mon Sep 17 00:00:00 2001 From: Yuval keidar Date: Mon, 15 Jun 2020 11:06:52 +0300 Subject: [PATCH 3/6] clear ref --- src/common/playlist/playlist-manager.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/playlist/playlist-manager.js b/src/common/playlist/playlist-manager.js index 6c8f1c589..4f624d12a 100644 --- a/src/common/playlist/playlist-manager.js +++ b/src/common/playlist/playlist-manager.js @@ -286,6 +286,7 @@ class PlaylistManager { destroy(): void { this._player = null; this._eventManager.destroy(); + this._eventManager = null; this._playlist = null; } } From 14916eee9566a2a9884b235cb1a035dbe045b75c Mon Sep 17 00:00:00 2001 From: Yuval keidar Date: Mon, 15 Jun 2020 11:43:44 +0300 Subject: [PATCH 4/6] delete prop instead setting null --- src/common/playlist/playlist-manager.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/common/playlist/playlist-manager.js b/src/common/playlist/playlist-manager.js index 4f624d12a..3ae5b19e4 100644 --- a/src/common/playlist/playlist-manager.js +++ b/src/common/playlist/playlist-manager.js @@ -284,10 +284,9 @@ class PlaylistManager { } destroy(): void { - this._player = null; + delete this._player; + delete this._playlist; this._eventManager.destroy(); - this._eventManager = null; - this._playlist = null; } } From 7e0c40e214f90a55f46d75536df67a25e27809bf Mon Sep 17 00:00:00 2001 From: Yuval keidar Date: Mon, 15 Jun 2020 12:29:41 +0300 Subject: [PATCH 5/6] Update playlist-manager.js --- src/common/playlist/playlist-manager.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/common/playlist/playlist-manager.js b/src/common/playlist/playlist-manager.js index 3ae5b19e4..df32a56fd 100644 --- a/src/common/playlist/playlist-manager.js +++ b/src/common/playlist/playlist-manager.js @@ -284,8 +284,6 @@ class PlaylistManager { } destroy(): void { - delete this._player; - delete this._playlist; this._eventManager.destroy(); } } From a08f94947dbe1eb09396fabd820b5d63a63c74d1 Mon Sep 17 00:00:00 2001 From: Yuval keidar Date: Sun, 28 Jun 2020 13:28:52 +0300 Subject: [PATCH 6/6] fix: remove listeners which added by static class on destroy --- src/common/storage/storage-manager.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/common/storage/storage-manager.js b/src/common/storage/storage-manager.js index 8c15c8fb3..b3c624a10 100644 --- a/src/common/storage/storage-manager.js +++ b/src/common/storage/storage-manager.js @@ -1,7 +1,7 @@ // @flow import StorageWrapper from './storage-wrapper'; import getLogger from '../utils/logger'; -import {Utils} from '@playkit-js/playkit-js'; +import {EventManager, Utils} from '@playkit-js/playkit-js'; export default class StorageManager { static StorageKeys: {[key: string]: string} = { @@ -32,17 +32,19 @@ export default class StorageManager { */ static attach(player: Player): void { StorageManager._logger.debug('Attach local storage'); - player.addEventListener(player.Event.UI.USER_CLICKED_MUTE, () => { + let eventManager = new EventManager(); + eventManager.listen(player, player.Event.UI.USER_CLICKED_MUTE, () => { if (!player.isCasting()) { StorageWrapper.setItem(StorageManager.StorageKeys.MUTED, player.muted); } }); - player.addEventListener(player.Event.UI.USER_CLICKED_UNMUTE, () => { + eventManager.listen(player, player.Event.UI.USER_CLICKED_UNMUTE, () => { if (!player.isCasting()) { StorageWrapper.setItem(StorageManager.StorageKeys.MUTED, player.muted); } }); - player.addEventListener(player.Event.UI.USER_CHANGED_VOLUME, () => { + + eventManager.listen(player, player.Event.UI.USER_CHANGED_VOLUME, () => { if (!player.isCasting()) { if (player.volume > 0) { StorageWrapper.setItem(StorageManager.StorageKeys.MUTED, false); @@ -52,15 +54,18 @@ export default class StorageManager { StorageWrapper.setItem(StorageManager.StorageKeys.VOLUME, player.volume); } }); - player.addEventListener(player.Event.UI.USER_SELECTED_AUDIO_TRACK, event => { + + eventManager.listen(player, player.Event.UI.USER_SELECTED_AUDIO_TRACK, event => { const audioTrack = event.payload.audioTrack; StorageWrapper.setItem(StorageManager.StorageKeys.AUDIO_LANG, audioTrack.language); }); - player.addEventListener(player.Event.UI.USER_SELECTED_CAPTION_TRACK, event => { + + eventManager.listen(player, player.Event.UI.USER_SELECTED_CAPTION_TRACK, event => { const textTrack = event.payload.captionTrack; StorageWrapper.setItem(StorageManager.StorageKeys.TEXT_LANG, textTrack.language); }); - player.addEventListener(player.Event.UI.USER_SELECTED_CAPTIONS_STYLE, event => { + + eventManager.listen(player, player.Event.UI.USER_SELECTED_CAPTIONS_STYLE, event => { try { const textStyle = JSON.stringify(event.payload.captionsStyle); StorageWrapper.setItem(StorageManager.StorageKeys.TEXT_STYLE, textStyle); @@ -68,6 +73,8 @@ export default class StorageManager { this._logger.error(e.message); } }); + + eventManager.listen(player, player.Event.PLAYER_DESTROY, () => eventManager.destroy()); } /**