Chromium Code Reviews| Index: runtime/bin/vmservice/client/lib/src/app/view_model.dart |
| diff --git a/runtime/bin/vmservice/client/lib/src/app/view_model.dart b/runtime/bin/vmservice/client/lib/src/app/view_model.dart |
| index 0b90a993b6ce476d1cf305c2a60e4e2129c9e6b8..e16406c353f674dd6aa06ce5def336e0d3032f34 100644 |
| --- a/runtime/bin/vmservice/client/lib/src/app/view_model.dart |
| +++ b/runtime/bin/vmservice/client/lib/src/app/view_model.dart |
| @@ -131,7 +131,12 @@ class SortedTableRow { |
| class SortedTable extends Observable { |
| final List<SortedTableColumn> columns; |
| final List<SortedTableRow> rows = new List<SortedTableRow>(); |
| - final List<int> _sortedRows = []; |
| + final List<int> sortedRows = []; |
| + |
| + void _trace(Stopwatch sw, String label) { |
| + //print('$label took ${sw.elapsedMicroseconds} us.'); |
|
koda
2014/06/17 21:04:06
Uncomment or remove.
Cutch
2014/06/18 14:35:03
Done.
|
| + sw.reset(); |
| + } |
| SortedTable(this.columns); |
| @@ -144,42 +149,58 @@ class SortedTable extends Observable { |
| } |
| int get sortColumnIndex => _sortColumnIndex; |
| bool _sortDescending = true; |
| + bool get sortDescending => _sortDescending; |
| + set sortDescending(var descending) { |
| + _sortDescending = descending; |
| + notifyPropertyChange(#getColumnLabel, 0, 1); |
| + } |
| + |
| + |
| + dynamic getSortKeyFor(int row, int col) { |
| + return rows[row].values[col]; |
| + } |
| + |
| + int _sortFuncDescending(int i, int j) { |
| + var a = getSortKeyFor(i, _sortColumnIndex); |
| + var b = getSortKeyFor(j, _sortColumnIndex); |
| + return b.compareTo(a); |
| + } |
| + |
| + int _sortFuncAscending(int i, int j) { |
| + var a = getSortKeyFor(i, _sortColumnIndex); |
| + var b = getSortKeyFor(j, _sortColumnIndex); |
| + return a.compareTo(b); |
| + } |
| void sort() { |
| + Stopwatch sw = new Stopwatch()..start(); |
| assert(_sortColumnIndex >= 0); |
| assert(_sortColumnIndex < columns.length); |
| - _sortedRows.sort((i, j) { |
| - var a = rows[i].values[_sortColumnIndex]; |
| - var b = rows[j].values[_sortColumnIndex]; |
| - if (_sortDescending) { |
| - return b.compareTo(a); |
| - } else { |
| - return a.compareTo(b); |
| - } |
| - }); |
| - notifyPropertyChange(#sortedRows, 0, 1); |
| + if (_sortDescending) { |
| + sortedRows.sort(_sortFuncDescending); |
| + } else { |
| + sortedRows.sort(_sortFuncAscending); |
| + } |
| + _trace(sw, 'Sorting'); |
| } |
| - @observable List<int> get sortedRows => _sortedRows; |
| - |
| void clearRows() { |
| rows.clear(); |
| - _sortedRows.clear(); |
| + sortedRows.clear(); |
| } |
| void addRow(SortedTableRow row) { |
| - _sortedRows.add(rows.length); |
| + sortedRows.add(rows.length); |
| rows.add(row); |
| - notifyPropertyChange(#sortedRows, 0, 1); |
| } |
| - @reflectable String getFormattedValue(int row, int column) { |
| + String getFormattedValue(int row, int column) { |
| var value = getValue(row, column); |
| var formatter = columns[column].formatter; |
| return formatter(value); |
| } |
| - @reflectable String getColumnLabel(int column) { |
| + @observable String getColumnLabel(int column) { |
| assert(column >= 0); |
| assert(column < columns.length); |
| // TODO(johnmccutchan): Move expander display decisions into html once |
| @@ -192,7 +213,7 @@ class SortedTable extends Observable { |
| return columns[column].label + (_sortDescending ? arrowUp : arrowDown); |
| } |
| - @reflectable dynamic getValue(int row, int column) { |
| + dynamic getValue(int row, int column) { |
| return rows[row].values[column]; |
| } |
| } |