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

Side by Side Diff: chrome/browser/resources/profiler.js

Issue 8585023: Avoid too many consecutive redraws on about:profiler while loading. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 var g_browserBridge; 5 var g_browserBridge;
6 var g_mainView; 6 var g_mainView;
7 7
8 /** 8 /**
9 * Main entry point called once the page has loaded. 9 * Main entry point called once the page has loaded.
10 */ 10 */
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 KEY_BIRTH_THREAD, 524 KEY_BIRTH_THREAD,
525 KEY_DEATH_THREAD, 525 KEY_DEATH_THREAD,
526 KEY_PROCESS_TYPE, 526 KEY_PROCESS_TYPE,
527 KEY_PROCESS_ID, 527 KEY_PROCESS_ID,
528 KEY_FUNCTION_NAME, 528 KEY_FUNCTION_NAME,
529 KEY_SOURCE_LOCATION, 529 KEY_SOURCE_LOCATION,
530 KEY_FILE_NAME, 530 KEY_FILE_NAME,
531 KEY_LINE_NUMBER, 531 KEY_LINE_NUMBER,
532 ]; 532 ];
533 533
534 /**
535 * The time (in milliseconds) to wait after receiving new data before
536 * re-drawing it to the screen. The reason we wait a bit is to avoid
537 * repainting repeatedly during the loading phase (which can slow things
538 * down). Note that this only slows down the addition of new data. It does
539 * not impact the latency of user-initiated operations like sorting or
540 * merging.
541 */
542 var PROCESS_DATA_DELAY_MS = 500;
543
534 // -------------------------------------------------------------------------- 544 // --------------------------------------------------------------------------
535 // General utility functions 545 // General utility functions
536 // -------------------------------------------------------------------------- 546 // --------------------------------------------------------------------------
537 547
538 /** 548 /**
539 * Returns a list of all the keys in |dict|. 549 * Returns a list of all the keys in |dict|.
540 */ 550 */
541 function getDictionaryKeys(dict) { 551 function getDictionaryKeys(dict) {
542 var keys = []; 552 var keys = [];
543 for (var key in dict) { 553 for (var key in dict) {
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 */ 717 */
708 function getFilenameFromPath(path) { 718 function getFilenameFromPath(path) {
709 var lastSlash = Math.max(path.lastIndexOf('/'), 719 var lastSlash = Math.max(path.lastIndexOf('/'),
710 path.lastIndexOf('\\')); 720 path.lastIndexOf('\\'));
711 if (lastSlash == -1) 721 if (lastSlash == -1)
712 return path; 722 return path;
713 723
714 return path.substr(lastSlash + 1); 724 return path.substr(lastSlash + 1);
715 } 725 }
716 726
727 /**
728 * Returns the current time in milliseconds since unix epoch.
729 */
730 function getTimeMillis() {
731 return (new Date()).getTime();
732 }
733
717 // -------------------------------------------------------------------------- 734 // --------------------------------------------------------------------------
718 // Functions that augment, bucket, and compute aggregates for the input data. 735 // Functions that augment, bucket, and compute aggregates for the input data.
719 // -------------------------------------------------------------------------- 736 // --------------------------------------------------------------------------
720 737
721 /** 738 /**
722 * Adds new derived properties to row. Mutates the provided dictionary |e|. 739 * Adds new derived properties to row. Mutates the provided dictionary |e|.
723 */ 740 */
724 function augmentDataRow(e) { 741 function augmentDataRow(e) {
725 e[KEY_AVG_QUEUE_TIME] = e[KEY_QUEUE_TIME] / e[KEY_COUNT]; 742 e[KEY_AVG_QUEUE_TIME] = e[KEY_QUEUE_TIME] / e[KEY_COUNT];
726 e[KEY_AVG_RUN_TIME] = e[KEY_RUN_TIME] / e[KEY_COUNT]; 743 e[KEY_AVG_RUN_TIME] = e[KEY_RUN_TIME] / e[KEY_COUNT];
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
1161 // stuff), so we skip past them. 1178 // stuff), so we skip past them.
1162 continue; 1179 continue;
1163 } 1180 }
1164 1181
1165 // Add our computed properties. 1182 // Add our computed properties.
1166 augmentDataRow(newRow); 1183 augmentDataRow(newRow);
1167 1184
1168 this.flatData_.push(newRow); 1185 this.flatData_.push(newRow);
1169 } 1186 }
1170 1187
1171 // Recompute the merged data based on flatData_. 1188 // We may end up calling addData() repeatedly (once for each process).
1172 this.updateMergedData_(); 1189 // To avoid this from slowing us down we do bulk updates on a timer.
1190 this.updateMergedDataSoon_();
1191 },
1192
1193 updateMergedDataSoon_: function() {
1194 if (this.updateMergedDataPending_) {
1195 // If a delayed task has already been posted to re-merge the data,
1196 // then we don't need to do anything extra.
1197 return;
1198 }
1199
1200 // Otherwise schedule updateMergeData_() to be called later. We want it to
1201 // be called no more than once every PROCESS_DATA_DELAY_MS milliseconds.
1202
1203 if (this.lastUpdateMergedDataTime_ == undefined)
1204 this.lastUpdateMergedDataTime_ = 0;
1205
1206 var timeSinceLastMerge = getTimeMillis() - this.lastUpdateMergedDataTime_;
1207 var timeToWait = Math.max(0, PROCESS_DATA_DELAY_MS - timeSinceLastMerge);
1208
1209 var functionToRun = function() {
1210 // Do the actual update.
1211 this.updateMergedData_();
1212 // Keep track of when we last ran.
1213 this.lastUpdateMergedDataTime_ = getTimeMillis();
1214 this.updateMergedDataPending_ = false;
1215 }.bind(this);
jar (doing other things) 2011/11/17 07:02:42 curious qusetion: Do you need the .bind(this)? Wo
eroman 2011/11/17 07:06:55 |this| is a very weird beast in javascript. Wherea
1216
1217 this.updateMergedDataPending_ = true;
1218 window.setTimeout(functionToRun, timeToWait);
1173 }, 1219 },
1174 1220
1175 updateMergedData_: function() { 1221 updateMergedData_: function() {
1176 // Recompute mergedData_. 1222 // Recompute mergedData_.
1177 this.mergedData_ = mergeRows(this.flatData_, 1223 this.mergedData_ = mergeRows(this.flatData_,
1178 this.getMergeColumns_(), 1224 this.getMergeColumns_(),
1179 this.shouldMergeSimilarThreads_()); 1225 this.shouldMergeSimilarThreads_());
1180 1226
1181 // Recompute filteredData_ (since it is derived from mergedData_) 1227 // Recompute filteredData_ (since it is derived from mergedData_)
1182 this.updateFilteredData_(); 1228 this.updateFilteredData_();
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
1589 groupKey.push(entry); 1635 groupKey.push(entry);
1590 } 1636 }
1591 1637
1592 return JSON.stringify(groupKey); 1638 return JSON.stringify(groupKey);
1593 }; 1639 };
1594 }, 1640 },
1595 }; 1641 };
1596 1642
1597 return MainView; 1643 return MainView;
1598 })(); 1644 })();
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698