| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 | <!DOCTYPE html><html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>The source code</title>  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>  <style type="text/css">    .highlight { display: block; background-color: #ddd; }  </style>  <script type="text/javascript">    function highlight() {      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";    }  </script></head><body onload="prettyPrint(); highlight();">  <pre class="prettyprint lang-js"><span id='Ext-perf-Monitor'>/**</span> * @class Ext.perf.Monitor * @singleton * @private */Ext.define('Ext.perf.Monitor', {    singleton: true,    alternateClassName: 'Ext.Perf',    requires: [        'Ext.perf.Accumulator'    ],    constructor: function () {        this.accumulators = [];        this.accumulatorsByName = {};    },    calibrate: function () {        var accum = new Ext.perf.Accumulator('$'),            total = accum.total,            getTimestamp = Ext.perf.Accumulator.getTimestamp,            count = 0,            frame,            endTime,            startTime;        startTime = getTimestamp();        do {            frame = accum.enter();            frame.leave();            ++count;        } while (total.sum < 100);        endTime = getTimestamp();        return (endTime - startTime) / count;    },    get: function (name) {        var me = this,            accum = me.accumulatorsByName[name];        if (!accum) {            me.accumulatorsByName[name] = accum = new Ext.perf.Accumulator(name);            me.accumulators.push(accum);        }        return accum;    },    enter: function (name) {        return this.get(name).enter();    },    monitor: function (name, fn, scope) {        this.get(name).monitor(fn, scope);    },    report: function () {        var me = this,            accumulators = me.accumulators,            calibration = me.calibrate();        accumulators.sort(function (a, b) {            return (a.name < b.name) ? -1 : ((b.name < a.name) ? 1 : 0);        });        me.updateGC();        Ext.log('Calibration: ' + Math.round(calibration * 100) / 100 + ' msec/sample');        Ext.each(accumulators, function (accum) {            Ext.log(accum.format(calibration));        });    },    getData: function (all) {        var ret = {},            accumulators = this.accumulators;        Ext.each(accumulators, function (accum) {            if (all || accum.count) {                ret[accum.name] = accum.getData();            }        });        return ret;    },    reset: function(){        Ext.each(this.accumulators, function(accum){            var me = accum;            me.count = me.childCount = me.depth = me.maxDepth = 0;            me.pure = {                min: Number.MAX_VALUE,                max: 0,                sum: 0            };            me.total = {                min: Number.MAX_VALUE,                max: 0,                sum: 0            };        });    },    updateGC: function () {        var accumGC = this.accumulatorsByName.GC,            toolbox = Ext.senchaToolbox,            bucket;        if (accumGC) {            accumGC.count = toolbox.garbageCollectionCounter || 0;            if (accumGC.count) {                bucket = accumGC.pure;                accumGC.total.sum = bucket.sum = toolbox.garbageCollectionMilliseconds;                bucket.min = bucket.max = bucket.sum / accumGC.count;                bucket = accumGC.total;                bucket.min = bucket.max = bucket.sum / accumGC.count;            }        }    },    watchGC: function () {        Ext.perf.getTimestamp(); // initializes SenchaToolbox (if available)        var toolbox = Ext.senchaToolbox;        if (toolbox) {            this.get("GC");            toolbox.watchGarbageCollector(false); // no logging, just totals        }    },    setup: function (config) {        if (!config) {            config = {                /*insertHtml: {                    'Ext.dom.Helper': 'insertHtml'                },*/                /*xtplCompile: {                    'Ext.XTemplateCompiler': 'compile'                },*///                doInsert: {//                    'Ext.Template': 'doInsert'//                },//                applyOut: {//                    'Ext.XTemplate': 'applyOut'//                },                render: {                    'Ext.AbstractComponent': 'render'                },//                fnishRender: {//                    'Ext.AbstractComponent': 'finishRender'//                },//                renderSelectors: {//                    'Ext.AbstractComponent': 'applyRenderSelectors'//                },//                compAddCls: {//                    'Ext.AbstractComponent': 'addCls'//                },//                compRemoveCls: {//                    'Ext.AbstractComponent': 'removeCls'//                },//                getStyle: {//                    'Ext.core.Element': 'getStyle'//                },//                setStyle: {//                    'Ext.core.Element': 'setStyle'//                },//                addCls: {//                    'Ext.core.Element': 'addCls'//                },//                removeCls: {//                    'Ext.core.Element': 'removeCls'//                },//                measure: {//                    'Ext.layout.component.Component': 'measureAutoDimensions'//                },//                moveItem: {//                    'Ext.layout.Layout': 'moveItem'//                },//                layoutFlush: {//                    'Ext.layout.Context': 'flush'//                },                layout: {                    'Ext.layout.Context': 'run'                }            };        }        this.currentConfig = config;        var key, prop,            accum, className, methods;        for (key in config) {            if (config.hasOwnProperty(key)) {                prop = config[key];                accum = Ext.Perf.get(key);                for (className in prop) {                    if (prop.hasOwnProperty(className)) {                        methods = prop[className];                        accum.tap(className, methods);                    }                }            }        }        this.watchGC();    }});</pre></body></html>
 |