// All material copyright Esri, All Rights Reserved, unless otherwise specified. // See https://js.arcgis.com/4.30/esri/copyright.txt for details. //>>built define("exports ../../core/Handles ../../core/has ../../core/Logger ../../core/maybe ../../core/PerformanceSampler ../../core/PooledArray ../../core/promiseUtils ../../core/reactiveUtils ../../core/signal ../../core/time ../../layers/support/PromiseQueue ./debugFlags ./RenderState ./Yield".split(" "),function(d,B,M,C,D,p,q,r,t,z,g,E,F,h,G){function u(b){return v.has(b)?v.get(b):"number"===typeof b?b:1}d.TaskPriority=void 0;(function(b){b.RESOURCE_CONTROLLER_IMMEDIATE="immediate";b.RESOURCE_CONTROLLER= "schedule";b.SLIDE="slide";b.STREAM_DATA_LOADER="stream loader";b.ELEVATION_QUERY="elevation query";b.TERRAIN_SURFACE="terrain";b.SURFACE_GEOMETRY_UPDATES="surface geometry updates";b.LOD_RENDERER="LoD renderer";b.GRAPHICS_CORE="Graphics3D";b.I3S_CONTROLLER="I3S";b.POINT_CLOUD_LAYER="point cloud";b.FEATURE_TILE_FETCHER="feature fetcher";b.OVERLAY="overlay";b.STAGE="stage";b.GRAPHICS_DECONFLICTOR="graphics deconflictor";b.FILTER_VISIBILITY="Graphics3D filter visibility";b.SCALE_VISIBILITY="Graphics3D scale visibility"; b.FRUSTUM_VISIBILITY="Graphics3D frustum visibility";b.POINT_OF_INTEREST_FREQUENT="POI frequent";b.POINT_OF_INTEREST_INFREQUENT="POI infrequent";b.LABELER="labeler";b.FEATURE_QUERY_ENGINE="feature query";b.FEATURE_TILE_TREE="feature tile tree";b.FEATURE_TILE_TREE_ACTIVE="fast feature tile tree";b.ELEVATION_ALIGNMENT="elevation alignment";b.ELEVATION_ALIGNMENT_SCENE="elevation alignment scene";b.TEXT_TEXTURE_ATLAS="text texture atlas";b.TEXTURE_UNLOAD="texture unload";b.LINE_OF_SIGHT_TOOL="line of sight tool"; b.LINE_OF_SIGHT_TOOL_INTERACTIVE="interactive line of sight tool";b.ELEVATION_PROFILE="elevation profile";b.SNAPPING="snapping";b.SHADOW_ACCUMULATOR="shadow accumulator";b.CLOUDS_GENERATOR="clouds generator";b[b.NONE=0]="NONE";b[b.TEST_PRIO=1]="TEST_PRIO"})(d.TaskPriority||(d.TaskPriority={}));const v=new Map([[d.TaskPriority.RESOURCE_CONTROLLER_IMMEDIATE,0],[d.TaskPriority.RESOURCE_CONTROLLER,4],[d.TaskPriority.SLIDE,0],[d.TaskPriority.STREAM_DATA_LOADER,0],[d.TaskPriority.ELEVATION_QUERY,0],[d.TaskPriority.TERRAIN_SURFACE, 1],[d.TaskPriority.SURFACE_GEOMETRY_UPDATES,1],[d.TaskPriority.LOD_RENDERER,2],[d.TaskPriority.GRAPHICS_CORE,2],[d.TaskPriority.I3S_CONTROLLER,2],[d.TaskPriority.POINT_CLOUD_LAYER,2],[d.TaskPriority.FEATURE_TILE_FETCHER,2],[d.TaskPriority.OVERLAY,4],[d.TaskPriority.STAGE,4],[d.TaskPriority.GRAPHICS_DECONFLICTOR,4],[d.TaskPriority.FILTER_VISIBILITY,4],[d.TaskPriority.SCALE_VISIBILITY,4],[d.TaskPriority.FRUSTUM_VISIBILITY,4],[d.TaskPriority.CLOUDS_GENERATOR,4],[d.TaskPriority.POINT_OF_INTEREST_FREQUENT, 6],[d.TaskPriority.POINT_OF_INTEREST_INFREQUENT,30],[d.TaskPriority.LABELER,8],[d.TaskPriority.FEATURE_QUERY_ENGINE,8],[d.TaskPriority.FEATURE_TILE_TREE,16],[d.TaskPriority.FEATURE_TILE_TREE_ACTIVE,0],[d.TaskPriority.ELEVATION_ALIGNMENT,12],[d.TaskPriority.ELEVATION_ALIGNMENT_SCENE,14],[d.TaskPriority.TEXT_TEXTURE_ATLAS,12],[d.TaskPriority.TEXTURE_UNLOAD,12],[d.TaskPriority.LINE_OF_SIGHT_TOOL,16],[d.TaskPriority.LINE_OF_SIGHT_TOOL_INTERACTIVE,0],[d.TaskPriority.SNAPPING,0],[d.TaskPriority.SHADOW_ACCUMULATOR, 30]]),H=g.Milliseconds(6.5),A=g.Milliseconds(1),I=g.Milliseconds(30),J=g.Milliseconds(1E3/30),K=g.Milliseconds(100);var w;(function(b){class m{get updating(){return this._updating.value}_updatingChanged(){this._updating.value=this._tasks.some(a=>a.needsUpdate)}constructor(){this._updating=z.signal(!0);this._microTaskQueued=!1;this._frameNumber=0;this.performanceInfo={total:new p("total"),tasks:new Map};this._frameTaskTimes=new Map;this._budget=new k;this._state=h.RenderState.INTERACTING;this._tasks= new q;this._runQueue=new q;this._load=0;this._idleStateCallbacks=new q;this._debug=this._forceTask=this._idleUpdatesStartFired=!1;this._debugHandle=t.watch(()=>F.SCHEDULER_LOG_SLOW_TASKS,a=>this._debug=a,t.initial);for(const a of Object.keys(d.TaskPriority))this.performanceInfo.tasks.set(d.TaskPriority[a],new p(d.TaskPriority[a]))}destroy(){this._tasks.toArray().forEach(a=>a.remove());this._tasks.clear();D.removeMaybe(this._debugHandle);this._microTaskQueued=!1;this._updatingChanged()}taskRunningChanged(a){this._updatingChanged(); a&&0{this._microTaskQueued&&(this._microTaskQueued=!1,0this._removeIdleStateCallbacks(c),set idleBegin(n){f._idleUpdatesStartFired&&(c.idleEnd(),f._state===h.RenderState.IDLE&&n());c.idleBegin=n},set idleEnd(n){c.idleEnd=n}}}get load(){return this._load}set state(a){this._state!==a&&(this._state=a,this.state!==h.RenderState.IDLE&&this._idleUpdatesStartFired&&(this._idleUpdatesStartFired=!1,this._idleStateCallbacks.forAll(e=>e.idleEnd())))}get state(){return this._state}updateBudget(a){++this._frameNumber; let e=H,c=a.frameDuration,f=A;switch(this.state){case h.RenderState.IDLE:e=g.Milliseconds(0);c=g.Milliseconds(Math.max(K,a.frameDuration));f=I;break;case h.RenderState.INTERACTING:c=g.Milliseconds(Math.max(J,a.frameDuration))}c=g.Milliseconds(c-a.elapsedFrameTime-e);if(this.state!==h.RenderState.IDLE&&ca.idleBegin()));this._runIdle();break;case h.RenderState.INTERACTING:this._runInteracting();break;default:this._runAnimating()}}stopFrame(){this._budget.reset(g.Milliseconds(0),this._state);this._budget.madeProgress()}_removeIdleStateCallbacks(a){this._idleUpdatesStartFired&&a.idleEnd();this._idleStateCallbacks.removeUnordered(a)}removeTask(a){this._tasks.removeUnordered(a); this._runQueue.removeUnordered(a);this._updatingChanged()}_updateTask(a){this._tasks.forAll(e=>{e.name===a&&e.setPriority(a)})}_getState(a){if(this._runQueue.some(c=>c.name===a))return d.TaskState.SCHEDULED;let e=d.TaskState.IDLE;this._tasks.forAll(c=>{c.name===a&&c.needsUpdate&&(1>=c.schedulePriority?e=d.TaskState.READY:e!==d.TaskState.READY&&(e=d.TaskState.WAITING))});return e}_getRuntime(a){let e=0;this._tasks.forAll(c=>{c.name===a&&(e+=c.runtime)});return e}_resetRuntimes(){this._tasks.forAll(a=> a.runtime=0)}_getRunning(){const a=new Map;this._tasks.forAll(c=>{c.needsUpdate&&a.set(c.name,(a.get(c.name)||0)+1)});if(0===a.size)return null;let e="";a.forEach((c,f)=>{e=1c.needsUpdate?++e:e,0);this._load=.9*this._load+a*(1-.9)}_schedule(){this._runQueue.filterInPlace(a=>{if(a.needsUpdate)return!0;a.schedulePriority=a.basePriority; return!1});for(this._tasks.forAll(a=>{0===a.basePriority&&a.needsUpdate&&!this._runQueue.includes(a)&&a.blockFrame!==this._frameNumber&&this._runQueue.unshift(a)});0===this._runQueue.length;){let a=!1;this._tasks.forAll(e=>{if(e.needsUpdate&&0!==e.schedulePriority&&0!==e.basePriority&&e.blockFrame!==this._frameNumber)switch(a=!0,e.schedulePriority){case 1:e.schedulePriority=0;this._runQueue.push(e);break;default:--e.schedulePriority}});if(!a)return this._updatingChanged(),!1}this._updatingChanged(); return!0}_run(){const a=this._budget.now();this._startFrameTaskTimes();do for(;0=this._budget.remaining){this._updatingChanged();this._recordFrameTaskTimes(this._budget.now()-a);return}}while(this._schedule());this._updatingChanged();this._recordFrameTaskTimes(this._budget.now()-a)}_startFrameTaskTimes(){for(const a of Object.keys(d.TaskPriority))this._frameTaskTimes.set(d.TaskPriority[a],0)}_recordFrameTaskTimes(a){this._frameTaskTimes.forEach((e, c)=>this.performanceInfo.tasks.get(c).record(e));this.performanceInfo.total.record(a)}get test(){}}b.Scheduler=m;class l{get task(){return this._task.value}get updating(){return this._queue.running}constructor(a,e,c){this._scheduler=a;this.name=e;this.runtime=this.blockFrame=0;this._queue=new E.PromiseQueue;this._handles=new B;this.schedulePriority=this._basePriority=u(e);this._task=z.signal(null!=c?c:this._queue);this._handles.add(t.when(()=>this.task.running,f=>a.taskRunningChanged(f)))}remove(){this.processQueue(x); this._scheduler.removeTask(this);this.schedule=y.schedule;this.reschedule=y.reschedule;this._handles.destroy()}get basePriority(){return this._basePriority}setPriority(a){if(this.name!==a){this.name=a;a=u(a);if(0===this._basePriority||0!==this.schedulePriority)this.schedulePriority=a;this._basePriority=a}}get priority(){return this.name}set priority(a){this.setPriority(a)}get needsUpdate(){return this.updating||this.task.running}schedule(a,e,c){return this._queue.push(a,e,c)}reschedule(a,e,c){return this._queue.unshift(a, e,c)}processQueue(a){return this._queue.runTask(a)}}class k{constructor(){this._begin="undefined"!==typeof performance?performance.now():0;this._budget=0;this._state=h.RenderState.IDLE;this._progressed=this._done=!1;this._enabled=!0}run(a){if(this.done)return!1;!0===a()&&this.madeProgress();return!0}get done(){return this._done}get budget(){return this._budget}madeProgress(){this._progressed=!0;return this._done=this.elapsed>=this._budget&&this._enabled}get state(){return this._state}get enabled(){return this._enabled}set enabled(a){this._enabled= a}reset(a,e){this._begin=this.now();this._budget=a;this._state=e;this.resetProgress()}get remaining(){return Math.max(this._budget-this.elapsed,0)}now(){return performance.now()}get elapsed(){return this.now()-this._begin}resetProgress(){this._done=this._progressed=!1}get hasProgressed(){return this._progressed}}b.Budget=k})(w||={});d.TaskState=void 0;(function(b){b.SCHEDULED="s";b.READY="r";b.WAITING="w";b.IDLE="i"})(d.TaskState||(d.TaskState={}));const x=(()=>{const b=new w.Budget;b.enabled=!1; return b})();class L{remove(){}processQueue(){}schedule(b,m,l){try{if(r.isAborted(m)){const k=r.createAbortError();return l?Promise.resolve(l(k)):Promise.reject(k)}return r.when(b(x))}catch(k){return Promise.reject(k)}}reschedule(b,m,l){return this.schedule(b,m,l)}}const y=new L;d.ImmediateTask=y;d.getTaskPriority=u;d.newScheduler=function(){return new w.Scheduler};d.noBudget=x;d.taskPriorities=v;Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});