(function (global) { 'use strict'; /** * Auto engine markers — no project invasion. * @constructor * @param {InstanceType} sampler */ function AutoMarkers(sampler) { this.sampler = sampler; this.enabledAssetSpike = true; this.assetSpikeThreshold = 20; this._cc = null; this._lastScene = ''; this._bundles = {}; this._lastAssetCount = 0; this._pollTimer = 0; this._boundScene = null; } /** @param {*} cc */ AutoMarkers.prototype.bindEngine = function (cc) { var self = this; this._cc = cc; if (!cc) return; this.dispose(); var director = cc.director; var Director = cc.Director; if (director && Director && Director.EVENT_AFTER_SCENE_LAUNCH) { this._boundScene = function () { var scene = director.getScene(); var name = scene && scene.name ? scene.name : 'unknown'; if (name !== self._lastScene) { self._lastScene = name; self.sampler.mark('scene:' + name); } }; director.on(Director.EVENT_AFTER_SCENE_LAUNCH, this._boundScene); } var game = cc.game; var Game = cc.Game; if (game && Game) { if (!this._boundHide && Game.EVENT_HIDE) { this._boundHide = function () { self.sampler.mark('game:hide'); }; game.on(Game.EVENT_HIDE, this._boundHide); } if (!this._boundShow && Game.EVENT_SHOW) { this._boundShow = function () { self.sampler.mark('game:show'); }; game.on(Game.EVENT_SHOW, this._boundShow); } } this._pollTimer = setInterval(function () { self._poll(); }, 1000); this._poll(); }; /** Stop polling / listeners. */ AutoMarkers.prototype.dispose = function () { if (this._pollTimer) { clearInterval(this._pollTimer); this._pollTimer = 0; } var cc = this._cc; if (cc && cc.director && this._boundScene && cc.Director) { cc.director.off(cc.Director.EVENT_AFTER_SCENE_LAUNCH, this._boundScene); } this._boundScene = null; if (cc && cc.game) { if (this._boundHide && cc.Game && cc.Game.EVENT_HIDE) cc.game.off(cc.Game.EVENT_HIDE, this._boundHide); if (this._boundShow && cc.Game && cc.Game.EVENT_SHOW) cc.game.off(cc.Game.EVENT_SHOW, this._boundShow); } this._boundHide = null; this._boundShow = null; }; AutoMarkers.prototype._poll = function () { var cc = this._cc; if (!cc) return; var scene = cc.director && cc.director.getScene ? cc.director.getScene() : null; var name = scene && scene.name ? scene.name : ''; if (name && name !== this._lastScene) { this._lastScene = name; this.sampler.mark('scene:' + name); } if (cc.assetManager && cc.assetManager.bundles) { var self = this; try { cc.assetManager.bundles.forEach(function (bundle, bundleName) { var key = bundleName || (bundle && bundle.name) || ''; if (!key) return; if (!self._bundles[key]) { self._bundles[key] = true; self.sampler.mark('bundle:' + key); } }); } catch (e) { console.warn('[Workbench] bundle poll failed', e); } } if (!this.enabledAssetSpike || !cc.assetManager || !cc.assetManager.assets) return; var assets = cc.assetManager.assets; var count = 0; if (typeof assets.size === 'number' && isFinite(assets.size)) { count = assets.size; } else { try { assets.forEach(function () { count += 1; }); } catch (e2) { return; } } if (this._lastAssetCount > 0) { var delta = count - this._lastAssetCount; if (delta >= this.assetSpikeThreshold) { this.sampler.mark('assets:+' + delta); } } this._lastAssetCount = count; }; global.PWAutoMarkers = AutoMarkers; })(window);