UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 4.57 kB
import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Accessor.js";import i from"../../../core/Logger.js";import{isSome as s,isNone as a}from"../../../core/maybe.js";import{MemCacheStorage as r,MemCache as o}from"../../../core/MemCache.js";import{property as h}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/accessorSupport/ensureType.js";import"../../../core/arrayUtils.js";import{subclass as y}from"../../../core/accessorSupport/decorators/subclass.js";import{isMemoryManagedLayerView as m}from"../layers/support/MemoryManagedLayerView.js";function l(e){return new p({view:e})}const d=1,n=1,u=.75,_=.6,c=1.3;let p=class extends t{constructor(e){super(e),this._quality=1,this._memoryUsed=0,this._updating=!1,this.minQuality=.1,this._stableQuality=0,this._downscaleMemoryUsed=0,this._canFastRecover=!1,this._memoryPredicted=0,this._cacheStorage=new r,this._warnMemoryUsage=null,this._numQualityChanges=0,this._maxMemory=500,this._additionalCacheMemory=100}destroy(){this._cacheStorage.destroy()}set maxMemory(e){null==e||e<=0||(this._stableQuality=0,this._canFastRecover=!1,this._maxMemory<e&&this._updateQuality(d),this._maxMemory=e)}get maxMemory(){return this._maxMemory}set additionalCacheMemory(e){null!=e&&e>=0&&(this._additionalCacheMemory=e)}get additionalCacheMemory(){return this._additionalCacheMemory}get memoryFactor(){return this._quality}get updating(){return this._updating}get usedMemory(){return this._memoryUsed}newCache(e,t){return new o(e,this._cacheStorage,t)}resetStableQuality(){this._stableQuality=0}disableMemCache(){this.additionalCacheMemory=-4096}update(){if(this._updateMemory(),this._memoryPredicted<=0&&!this._updating)return;let e=this._layersUpdating();if(this._memoryPredicted<_&&this._canFastRecover)this._downscaleMemoryUsed=0,this._stableQuality=0,this._canFastRecover=!1,this._updateQuality(d);else if(e)(this._memoryPredicted>1.1*n||this._memoryUsed>n)&&(this._stableQuality>0?(this._downscaleMemoryUsed=0,this._updateQuality(this._stableQuality)):this._quality>this.minQuality&&this._downscaleMemoryUsed<this._memoryUsed&&(this._updateQuality(this._quality/c),this._downscaleMemoryUsed=this._memoryUsed,this._canFastRecover=!1));else if(this._downscaleMemoryUsed=0,this._memoryUsed>n)this._stableQuality=0,this._canFastRecover=!1,e=this._updateQuality(this._quality/c),this._downscaleMemoryUsed=this._memoryPredicted;else if(this._stableQuality!==this._quality)if(this._memoryUsed<u&&this._quality<d){this._stableQuality=this._quality;const t=.05;e=this._updateQuality(this._quality+t)}else this._quality<1&&(this._canFastRecover=!0);this._updating=e}_updateQuality(e){return(e=Math.min(Math.max(e,this.minQuality),d))!==this._quality&&(this._quality=e,++this._numQualityChanges,!0)}_layersUpdating(){return this.view.allLayerViews.some((e=>!!e.updating))}_updateMemory(){let e=0,t=0;this.view.basemapTerrain&&this.view.basemapTerrain.getUsedMemory&&(e+=this.view.basemapTerrain.getUsedMemory());const r=this.view._stage&&this.view._stage.renderView&&this.view._stage.renderer.edgeView;s(r)&&(e+=r.usedMemory),this.view.allLayerViews&&this.view.allLayerViews.forEach((i=>{if(m(i)){const s=i.ignoresMemoryFactor()?this._quality:1;e+=i.getUsedMemory()*s,t+=i.getUnloadedMemory()*s}}));const o=a(this._warnMemoryUsage)||Math.round(10*e)!==Math.round(10*this._warnMemoryUsage),h=1048576*this.maxMemory;if(e>h&&o){this._warnMemoryUsage=e;const s=e=>(e/1048576).toLocaleString(void 0,{maximumFractionDigits:1})+" MB",a=Math.round(100*this._quality);i.getLogger(this.declaredClass).warn(`Memory Limit exceeded! Limit: ${s(h)} Current: ${s(e)} Projected: ${s(e+t)} Quality: ${a}%`)}this._memoryUsed=e/h,this._memoryPredicted=(e+t)/h;const y=h-e;this._cacheStorage.maxSize=Math.max(0,y+1048576*this.additionalCacheMemory)}get test(){const e=this;return{cacheStorage:this._cacheStorage,resetQualityChanges:()=>{const t=e._numQualityChanges;return e._numQualityChanges=0,t}}}};e([h({constructOnly:!0})],p.prototype,"view",void 0),e([h()],p.prototype,"maxMemory",null),e([h()],p.prototype,"additionalCacheMemory",null),e([h()],p.prototype,"memoryFactor",null),e([h()],p.prototype,"updating",null),e([h()],p.prototype,"usedMemory",null),e([h()],p.prototype,"_quality",void 0),e([h()],p.prototype,"_memoryUsed",void 0),e([h()],p.prototype,"_updating",void 0),e([h()],p.prototype,"_stableQuality",void 0),e([h()],p.prototype,"_maxMemory",void 0),e([h()],p.prototype,"_additionalCacheMemory",void 0),p=e([y("esri.views.3d.support.MemoryController")],p);export{l as newMemoryController};