Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Side by Side Diff: runtime/bin/vmservice/client/lib/src/app/view_model.dart

Issue 342513004: Visual refresh of allocation profile page (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of app; 5 part of app;
6 6
7 abstract class TableTreeRow extends Observable { 7 abstract class TableTreeRow extends Observable {
8 final TableTreeRow parent; 8 final TableTreeRow parent;
9 @observable final int depth; 9 @observable final int depth;
10 @observable final List<TableTreeRow> children = new List<TableTreeRow>(); 10 @observable final List<TableTreeRow> children = new List<TableTreeRow>();
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 } 124 }
125 125
126 class SortedTableRow { 126 class SortedTableRow {
127 final List values; 127 final List values;
128 SortedTableRow(this.values); 128 SortedTableRow(this.values);
129 } 129 }
130 130
131 class SortedTable extends Observable { 131 class SortedTable extends Observable {
132 final List<SortedTableColumn> columns; 132 final List<SortedTableColumn> columns;
133 final List<SortedTableRow> rows = new List<SortedTableRow>(); 133 final List<SortedTableRow> rows = new List<SortedTableRow>();
134 final List<int> _sortedRows = []; 134 final List<int> sortedRows = [];
135
136 void _trace(Stopwatch sw, String label) {
137 //print('$label took ${sw.elapsedMicroseconds} us.');
koda 2014/06/17 21:04:06 Uncomment or remove.
Cutch 2014/06/18 14:35:03 Done.
138 sw.reset();
139 }
135 140
136 SortedTable(this.columns); 141 SortedTable(this.columns);
137 142
138 int _sortColumnIndex = 0; 143 int _sortColumnIndex = 0;
139 set sortColumnIndex(var index) { 144 set sortColumnIndex(var index) {
140 assert(index >= 0); 145 assert(index >= 0);
141 assert(index < columns.length); 146 assert(index < columns.length);
142 _sortColumnIndex = index; 147 _sortColumnIndex = index;
143 notifyPropertyChange(#getColumnLabel, 0, 1); 148 notifyPropertyChange(#getColumnLabel, 0, 1);
144 } 149 }
145 int get sortColumnIndex => _sortColumnIndex; 150 int get sortColumnIndex => _sortColumnIndex;
146 bool _sortDescending = true; 151 bool _sortDescending = true;
152 bool get sortDescending => _sortDescending;
153 set sortDescending(var descending) {
154 _sortDescending = descending;
155 notifyPropertyChange(#getColumnLabel, 0, 1);
156 }
157
158
159 dynamic getSortKeyFor(int row, int col) {
160 return rows[row].values[col];
161 }
162
163 int _sortFuncDescending(int i, int j) {
164 var a = getSortKeyFor(i, _sortColumnIndex);
165 var b = getSortKeyFor(j, _sortColumnIndex);
166 return b.compareTo(a);
167 }
168
169 int _sortFuncAscending(int i, int j) {
170 var a = getSortKeyFor(i, _sortColumnIndex);
171 var b = getSortKeyFor(j, _sortColumnIndex);
172 return a.compareTo(b);
173 }
147 174
148 void sort() { 175 void sort() {
176 Stopwatch sw = new Stopwatch()..start();
149 assert(_sortColumnIndex >= 0); 177 assert(_sortColumnIndex >= 0);
150 assert(_sortColumnIndex < columns.length); 178 assert(_sortColumnIndex < columns.length);
151 _sortedRows.sort((i, j) { 179 if (_sortDescending) {
152 var a = rows[i].values[_sortColumnIndex]; 180 sortedRows.sort(_sortFuncDescending);
153 var b = rows[j].values[_sortColumnIndex]; 181 } else {
154 if (_sortDescending) { 182 sortedRows.sort(_sortFuncAscending);
155 return b.compareTo(a); 183 }
156 } else { 184 _trace(sw, 'Sorting');
157 return a.compareTo(b);
158 }
159 });
160 notifyPropertyChange(#sortedRows, 0, 1);
161 } 185 }
162 186
163 @observable List<int> get sortedRows => _sortedRows;
164
165 void clearRows() { 187 void clearRows() {
166 rows.clear(); 188 rows.clear();
167 _sortedRows.clear(); 189 sortedRows.clear();
168 } 190 }
169 191
170 void addRow(SortedTableRow row) { 192 void addRow(SortedTableRow row) {
171 _sortedRows.add(rows.length); 193 sortedRows.add(rows.length);
172 rows.add(row); 194 rows.add(row);
173 notifyPropertyChange(#sortedRows, 0, 1);
174 } 195 }
175 196
176 @reflectable String getFormattedValue(int row, int column) { 197 String getFormattedValue(int row, int column) {
177 var value = getValue(row, column); 198 var value = getValue(row, column);
178 var formatter = columns[column].formatter; 199 var formatter = columns[column].formatter;
179 return formatter(value); 200 return formatter(value);
180 } 201 }
181 202
182 @reflectable String getColumnLabel(int column) { 203 @observable String getColumnLabel(int column) {
183 assert(column >= 0); 204 assert(column >= 0);
184 assert(column < columns.length); 205 assert(column < columns.length);
185 // TODO(johnmccutchan): Move expander display decisions into html once 206 // TODO(johnmccutchan): Move expander display decisions into html once
186 // tables and templates are better supported. 207 // tables and templates are better supported.
187 const arrowUp = '\u25BC'; 208 const arrowUp = '\u25BC';
188 const arrowDown = '\u25B2'; 209 const arrowDown = '\u25B2';
189 if (column != _sortColumnIndex) { 210 if (column != _sortColumnIndex) {
190 return columns[column].label + '\u2003'; 211 return columns[column].label + '\u2003';
191 } 212 }
192 return columns[column].label + (_sortDescending ? arrowUp : arrowDown); 213 return columns[column].label + (_sortDescending ? arrowUp : arrowDown);
193 } 214 }
194 215
195 @reflectable dynamic getValue(int row, int column) { 216 dynamic getValue(int row, int column) {
196 return rows[row].values[column]; 217 return rows[row].values[column];
197 } 218 }
198 } 219 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698