Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save sshopov/0059461c4ab494ebf48ab48dd690bf33 to your computer and use it in GitHub Desktop.
Save sshopov/0059461c4ab494ebf48ab48dd690bf33 to your computer and use it in GitHub Desktop.

Revisions

  1. sshopov created this gist May 11, 2018.
    88 changes: 88 additions & 0 deletions WebAppBuilderAppLayersListWidgetPerfTest.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,88 @@
    var WidgetManager = require("jimu/WidgetManager");
    var Extent = require("esri/geometry/Extent");
    var wm = WidgetManager.getInstance();
    var map = wm.getAllWidgets()[0].map;

    //Fires when one or more layers begins updating their content. There is a gap between the set-extent and update-start event and it can be quite large.
    //Fires after layers that are updating their content have completed.
    var listener1 = map.on('update-start',
    function(e){
    startTime = new Date().getTime()/1000;
    updateStarts.push(startTime);
    console.log('start: ' + new Date().getTime()/1000);
    });
    var listener2 = map.on('update-end',
    function(e){
    endTime = new Date().getTime()/1000;
    updateEnds.push(endTime);
    console.log( metrics1.length, 'stop: ' + (endTime - startTime), endTime - startExtentTime, startTime - startExtentTime, zzz);
    metrics1.push(endTime - startTime);
    metrics2.push(endTime - startExtentTime);
    if (metrics1.length == extents.length){
    console.log(metrics1);
    console.log(metrics2);
    calculateStats();
    }
    });


    var breakPeriod = 10; //seconds allowed for the operation to complete before the next operation is called
    //this needs to be greater than the longest possible response time otherwise the results may be skewed

    extents = [{"xmin":16675516.081326026,"ymin":-3434556.727452047,"xmax":16678386.052872181,"ymax":-3433499.7466703802,"spatialReference":{"wkid":102100}} ,
    {"xmin":16676258.057948027,"ymin":-3434093.029386024,"xmax":16677693.043721423,"ymax":-3433564.538995073,"spatialReference":{"wkid":102100}} ,
    {"xmin":16676723.39821615,"ymin":-3433886.261252783,"xmax":16677440.89110253,"ymax":-3433622.0160574247,"spatialReference":{"wkid":102100}} ,
    {"xmin":16676994.846705677,"ymin":-3433865.547116706,"xmax":16677174.219927272,"ymax":-3433799.4858178664,"spatialReference":{"wkid":102100}} ,
    {"xmin":16676367.040429777,"ymin":-3434096.7616627617,"xmax":16677802.026203172,"ymax":-3433568.271271811,"spatialReference":{"wkid":102100}} ,
    {"xmin":16665604.64713091,"ymin":-3438060.439594304,"xmax":16688564.419502039,"ymax":-3429604.5933402684,"spatialReference":{"wkid":102100}} ,
    {"xmin":16680025.567412717,"ymin":-3436310.1510793893,"xmax":16682895.538958872,"ymax":-3435253.1702977223,"spatialReference":{"wkid":102100}} ,
    {"xmin":16680207.403936861,"ymin":-3436121.7457480263,"xmax":16681642.389710257,"ymax":-3435593.2553570755,"spatialReference":{"wkid":102100}} ,
    {"xmin":16680648.260469358,"ymin":-3435925.726571889,"xmax":16681365.753355738,"ymax":-3435661.481376531,"spatialReference":{"wkid":102100}} ,
    {"xmin":16675267.063819608,"ymin":-3437907.5655377777,"xmax":16686746.950005488,"ymax":-3433679.6424106425,"spatialReference":{"wkid":102100}} ,
    {"xmin":16678862.58997068,"ymin":-3437970.2677874863,"xmax":16681732.561516834,"ymax":-3436913.2870058194,"spatialReference":{"wkid":102100}} ,
    {"xmin":16680329.971906213,"ymin":-3437658.100158295,"xmax":16681047.464792592,"ymax":-3437393.854962937,"spatialReference":{"wkid":102100}} ];

    function calculateStats(){
    script = require('dojo/io/script');
    var deferred = script.get({url:'//cdn.jsdelivr.net/jstat/latest/jstat.min.js'});
    deferred.then(function() {
    s1=jStat(metrics1);
    s2=jStat(metrics2);
    console.log(s1.min(), s1.mean(), s1.median(), s1.max(), s1.sum(), s1.stdev(), metrics1.length);
    console.log(s2.min(), s2.mean(), s2.median(), s2.max(), s2.sum(), s2.stdev(), metrics2.length);
    var m1 = [];
    var m2 = [];
    for (var i=0; i<updateEnds.length; ++i){
    m1.push(updateEnds[i] - updateStarts[i]);
    m2.push(updateEnds[i] - extentStarts[i]);
    }
    s1=jStat(m1);
    s2=jStat(m2);
    console.log(s1.min(), s1.mean(), s1.median(), s1.max(), s1.sum(), s1.stdev(), m1.length);
    console.log(s2.min(), s2.mean(), s2.median(), s2.max(), s2.sum(), s2.stdev(), m2.length);
    });
    }


    function setExtent(i){
    var e = new Extent(extents[i]);
    startExtentTime = new Date().getTime()/1000;
    extentStarts.push(startExtentTime);
    map.setExtent(e);
    startExtentTime2 = new Date().getTime()/1000;
    console.log('before after setExtent', startExtentTime2 - startExtentTime);
    if (i == extents.length){
    //we are done so remove the listeners so that they don't double up
    //listener1.remove();
    //listener2.remove();
    }
    }

    extentStarts = [];
    updateStarts = [];
    updateEnds = [];
    metrics1 = [];
    metrics2 = [];
    for (i=0;i<extents.length; i++){
    setTimeout(setExtent.bind(null, i), breakPeriod*1000*i);
    }