package com.exanimo.memory { import com.exanimo.memory.MemoryMonitor; import fl.controls.DataGrid; import fl.controls.dataGridClasses.DataGridColumn; import fl.data.DataProvider; import flash.display.Sprite; import flash.text.TextField; import flash.utils.setInterval; /** * * .. * * @langversion ActionScript 3 * @playerversion Flash 9.0.0 * * @author Matthew Tretter * @since 2008.10.23 * */ public class MemoryMonitorDisplay extends Sprite { private var _dataGrid:DataGrid; private var _filter:RegExp; private var _filterField:TextField; /** * * */ public function MemoryMonitorDisplay() { this._init(); } private function _init():void { this._dataGrid = this.getChildByName('dataGrid') as DataGrid; var c1:DataGridColumn = new DataGridColumn('uid'); c1.sortCompareFunction = this._compareUIDs; var c2:DataGridColumn = new DataGridColumn('type'); this._dataGrid.columns = [c1, c2]; setInterval(this._update, 1000); this._filterField = this.getChildByName('filterField') as TextField; } private function _compareUIDs(itemA:Object, itemB:Object):int { var uidA:int = parseInt(itemA.uid, 16); var uidB:int = parseInt(itemB.uid, 16); if (uidA > uidB) { return -1; } else if (uidA < uidB) { return 1; } else { return 0; } } private function _update():void { var data:Array = MemoryMonitor.getData(); var dp:DataProvider = this._dataGrid.dataProvider; var i:int; dp.removeAll(); var obj:Object; var usedUIDs:Array = []; for each (obj in data) { usedUIDs.push(obj.uid); } var oldUIDs:Array = []; for each (obj in dp.toArray()) { oldUIDs.push(obj.uid); } // Remove items that are gone. for (i = dp.length - 1; i >= 0; i--) { obj = dp.getItemAt(i); if (usedUIDs.indexOf(obj.uid) == -1) { dp.removeItemAt(i); } } // Add new items. for each (obj in data) { if (oldUIDs.indexOf(obj.uid) == -1) dp.addItem(obj); } if (this._filterField.text) { var filter:RegExp = new RegExp(this._filterField.text); for (i = dp.length - 1; i >= 0; i--) { obj = dp.getItemAt(i); var matches:Boolean = false; for each (var value:String in obj) { if (filter.test(value)) { matches = true; break; } } if (!matches) { dp.removeItemAt(i); } } } } } }