From d4d9cdfd19ee00eec57025c5becb96563ef86efc Mon Sep 17 00:00:00 2001 From: pandamicro Date: Tue, 9 May 2017 11:54:55 +0800 Subject: [PATCH 1/3] Fix eventManager memory leak --- cocos2d/core/event-manager/CCEventListener.js | 76 ++++++++++--------- cocos2d/core/event-manager/CCEventManager.js | 6 +- 2 files changed, 42 insertions(+), 40 deletions(-) diff --git a/cocos2d/core/event-manager/CCEventListener.js b/cocos2d/core/event-manager/CCEventListener.js index 06e5bd4eee..c970c43fdf 100644 --- a/cocos2d/core/event-manager/CCEventListener.js +++ b/cocos2d/core/event-manager/CCEventListener.js @@ -277,15 +277,16 @@ cc.EventListener.CUSTOM = 8; cc._EventListenerCustom = cc.EventListener.extend({ _onCustomEvent: null, - ctor: function (listenerId, callback) { + ctor: function (listenerId, callback, target) { this._onCustomEvent = callback; - var selfPointer = this; - var listener = function (event) { - if (selfPointer._onCustomEvent !== null) - selfPointer._onCustomEvent(event); - }; + this._target = target; - cc.EventListener.prototype.ctor.call(this, cc.EventListener.CUSTOM, listenerId, listener); + cc.EventListener.prototype.ctor.call(this, cc.EventListener.CUSTOM, listenerId, this._callback); + }, + + _callback: function (event) { + if (this._onCustomEvent !== null) + this._onCustomEvent.call(this._target, event); }, checkAvailable: function () { @@ -308,31 +309,31 @@ cc._EventListenerMouse = cc.EventListener.extend({ onMouseScroll: null, ctor: function () { - var selfPointer = this; - var listener = function (event) { - var eventType = cc.EventMouse; - switch (event._eventType) { - case eventType.DOWN: - if (selfPointer.onMouseDown) - selfPointer.onMouseDown(event); - break; - case eventType.UP: - if (selfPointer.onMouseUp) - selfPointer.onMouseUp(event); - break; - case eventType.MOVE: - if (selfPointer.onMouseMove) - selfPointer.onMouseMove(event); - break; - case eventType.SCROLL: - if (selfPointer.onMouseScroll) - selfPointer.onMouseScroll(event); - break; - default: - break; - } - }; - cc.EventListener.prototype.ctor.call(this, cc.EventListener.MOUSE, cc._EventListenerMouse.LISTENER_ID, listener); + cc.EventListener.prototype.ctor.call(this, cc.EventListener.MOUSE, cc._EventListenerMouse.LISTENER_ID, this._callback); + }, + + _callback: function (event) { + var eventType = cc.EventMouse; + switch (event._eventType) { + case eventType.DOWN: + if (this.onMouseDown) + this.onMouseDown(event); + break; + case eventType.UP: + if (this.onMouseUp) + this.onMouseUp(event); + break; + case eventType.MOVE: + if (this.onMouseMove) + this.onMouseMove(event); + break; + case eventType.SCROLL: + if (this.onMouseScroll) + this.onMouseScroll(event); + break; + default: + break; + } }, clone: function () { @@ -501,11 +502,12 @@ cc._EventListenerFocus = cc.EventListener.extend({ }, onFocusChanged: null, ctor: function(){ - var listener = function(event){ - if(this.onFocusChanged) - this.onFocusChanged(event._widgetLoseFocus, event._widgetGetFocus); - }; - cc.EventListener.prototype.ctor.call(this, cc.EventListener.FOCUS, cc._EventListenerFocus.LISTENER_ID, listener); + cc.EventListener.prototype.ctor.call(this, cc.EventListener.FOCUS, cc._EventListenerFocus.LISTENER_ID, this._callback); + }, + _callback: function (event) { + if (this.onFocusChanged) { + this.onFocusChanged(event._widgetLoseFocus, event._widgetGetFocus); + } } }); diff --git a/cocos2d/core/event-manager/CCEventManager.js b/cocos2d/core/event-manager/CCEventManager.js index 890ba5bf7c..7f54f03939 100644 --- a/cocos2d/core/event-manager/CCEventManager.js +++ b/cocos2d/core/event-manager/CCEventManager.js @@ -258,8 +258,8 @@ cc.eventManager = /** @lends cc.eventManager# */{ if (!this._inDispatch) { listeners.clear(); - delete this._listenersMap[listenerID]; } + delete this._listenersMap[listenerID]; } var locToAddedListeners = this._toAddedListeners, listener; @@ -751,8 +751,8 @@ cc.eventManager = /** @lends cc.eventManager# */{ * @param {function} callback * @return {cc.EventListener} the generated event. Needed in order to remove the event from the dispatcher */ - addCustomListener: function (eventName, callback) { - var listener = new cc._EventListenerCustom(eventName, callback); + addCustomListener: function (eventName, callback, target) { + var listener = new cc._EventListenerCustom(eventName, callback, target); this.addListener(listener, 1); return listener; }, From f192b7d12737143dcef5edf8e73621435f78c289 Mon Sep 17 00:00:00 2001 From: pandamicro Date: Tue, 9 May 2017 11:55:47 +0800 Subject: [PATCH 2/3] Listen to orientationChange event only on mobile --- cocos2d/core/platform/CCEGLView.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cocos2d/core/platform/CCEGLView.js b/cocos2d/core/platform/CCEGLView.js index 6093dc0b04..448f1b2f1b 100755 --- a/cocos2d/core/platform/CCEGLView.js +++ b/cocos2d/core/platform/CCEGLView.js @@ -184,6 +184,10 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{ _t._rpFixedWidth = new cc.ResolutionPolicy(_strategyer.EQUAL_TO_FRAME, _strategy.FIXED_WIDTH); _t._targetDensityDPI = cc.DENSITYDPI_HIGH; + + if (sys.isMobile) { + window.addEventListener('orientationchange', this._orientationChange); + } }, // Resize helper functions @@ -276,14 +280,12 @@ cc.EGLView = cc.Class.extend(/** @lends cc.view# */{ if (!this.__resizeWithBrowserSize) { this.__resizeWithBrowserSize = true; window.addEventListener('resize', this._resizeEvent); - window.addEventListener('orientationchange', this._orientationChange); } } else { //disable if (this.__resizeWithBrowserSize) { this.__resizeWithBrowserSize = false; window.removeEventListener('resize', this._resizeEvent); - window.removeEventListener('orientationchange', this._orientationChange); } } }, From 0ff97d0972d2a24e6bb03b38f11627c89b28fcf1 Mon Sep 17 00:00:00 2001 From: pandamicro Date: Tue, 9 May 2017 11:56:16 +0800 Subject: [PATCH 3/3] Fix texture cache.dumpCachedTextureInfo --- cocos2d/core/textures/CCTextureCache.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cocos2d/core/textures/CCTextureCache.js b/cocos2d/core/textures/CCTextureCache.js index afd8af3e61..07442c8d3d 100644 --- a/cocos2d/core/textures/CCTextureCache.js +++ b/cocos2d/core/textures/CCTextureCache.js @@ -279,11 +279,11 @@ cc.textureCache = /** @lends cc.textureCache# */{ var selTexture = locTextures[key]; count++; if (selTexture.getHtmlElementObj() instanceof HTMLImageElement) - cc.log(cc._LogInfos.textureCache_dumpCachedTextureInfo, key, selTexture.getHtmlElementObj().src, selTexture.pixelsWidth, selTexture.pixelsHeight); + cc.log(cc._LogInfos.textureCache_dumpCachedTextureInfo, key, selTexture.getHtmlElementObj().src, selTexture.getPixelsWide(), selTexture.getPixelsHigh()); else { - cc.log(cc._LogInfos.textureCache_dumpCachedTextureInfo_2, key, selTexture.pixelsWidth, selTexture.pixelsHeight); + cc.log(cc._LogInfos.textureCache_dumpCachedTextureInfo_2, key, selTexture.getPixelsWide(), selTexture.getPixelsHigh()); } - totalBytes += selTexture.pixelsWidth * selTexture.pixelsHeight * 4; + totalBytes += selTexture.getPixelsWide() * selTexture.getPixelsHigh() * 4; } var locTextureColorsCache = this._textureColorsCache;