aboutsummaryrefslogtreecommitdiffstats
path: root/infrastructure/ace/www/profiler.js
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2010-06-08 09:01:43 +0200
committerAlexander Sulfrian <alexander@sulfrian.net>2010-06-08 09:01:43 +0200
commitd1fa08fdc9cb11dccee76d668ff85df30458c295 (patch)
tree1d19df6405103577d872902486792e8c23bce711 /infrastructure/ace/www/profiler.js
parentd7c5ad7d6263fd1baf9bfdbaa4c50b70ef2fbdb2 (diff)
parent70d1f9d6fcaefe611e778b8dbf3bafea8934aa08 (diff)
downloadetherpad-d1fa08fdc9cb11dccee76d668ff85df30458c295.tar.gz
etherpad-d1fa08fdc9cb11dccee76d668ff85df30458c295.tar.xz
etherpad-d1fa08fdc9cb11dccee76d668ff85df30458c295.zip
Merge remote branch 'upstream/master'
Conflicts: etherpad/src/etherpad/control/pro/admin/pro_admin_control.js etherpad/src/etherpad/control/pro/pro_main_control.js etherpad/src/etherpad/control/pro_help_control.js etherpad/src/etherpad/globals.js etherpad/src/etherpad/legacy_urls.js etherpad/src/etherpad/pne/pne_utils.js etherpad/src/etherpad/pro/pro_utils.js etherpad/src/main.js etherpad/src/plugins/fileUpload/templates/fileUpload.ejs etherpad/src/plugins/testplugin/templates/page.ejs etherpad/src/static/css/pad2_ejs.css etherpad/src/static/css/pro-help.css etherpad/src/static/img/jun09/pad/protop.gif etherpad/src/static/js/store.js etherpad/src/themes/default/templates/framed/framedheader-pro.ejs etherpad/src/themes/default/templates/main/home.ejs etherpad/src/themes/default/templates/pro-help/main.ejs etherpad/src/themes/default/templates/pro-help/pro-help-template.ejs infrastructure/com.etherpad/licensing.scala trunk/etherpad/src/etherpad/collab/ace/contentcollector.js trunk/etherpad/src/etherpad/collab/ace/linestylefilter.js trunk/etherpad/src/static/css/home-opensource.css trunk/etherpad/src/static/js/ace.js trunk/etherpad/src/static/js/linestylefilter_client.js trunk/etherpad/src/templates/email/eepnet_license_info.ejs trunk/etherpad/src/templates/pad/pad_body2.ejs trunk/etherpad/src/templates/pad/pad_content.ejs trunk/etherpad/src/templates/pad/padfull_body.ejs trunk/etherpad/src/templates/pro/admin/pne-license-manager.ejs
Diffstat (limited to 'infrastructure/ace/www/profiler.js')
-rw-r--r--infrastructure/ace/www/profiler.js117
1 files changed, 117 insertions, 0 deletions
diff --git a/infrastructure/ace/www/profiler.js b/infrastructure/ace/www/profiler.js
new file mode 100644
index 0000000..24b68a2
--- /dev/null
+++ b/infrastructure/ace/www/profiler.js
@@ -0,0 +1,117 @@
+/**
+ * Copyright 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// author: David Greenspan
+// a basic profiler
+// e.g. var p = PROFILER("somename", true);
+// p.mark("abc"); abc();
+// p.mark("xyz"); var x = xyz();
+// p.literal(x, "someNumber");
+// p.end();
+
+// Note that IE/Win only has 16 ms time resolution for each run.
+
+var _profilersByName = {};
+function PROFILER(name, enabled) {
+ if (!_profilersByName['$'+name]) {
+ _profilersByName['$'+name] = _makeProfiler(name, enabled);
+ }
+ var p = _profilersByName['$'+name];
+ p.start();
+ return p;
+}
+
+function resetProfiler(name) {
+ delete _profilersByName['$'+name];
+}
+
+function _makeProfiler(name, enabled) {
+ enabled = (enabled !== false);
+
+ var _profileTime;
+ var _profileResults;
+ var _profileTotal;
+ var _profileHistory = [];
+ var running = false;
+
+ function profileStart(name) {
+ _profileResults = [];
+ _profileTotal = 0;
+ if (name) _profileResults.push(name);
+ running = true;
+ _profileTime = (new Date()).getTime();
+ }
+
+ function profileMark(name) {
+ var stopTime = (new Date()).getTime();
+ var dt = stopTime - _profileTime;
+ _profileResults.push(dt);
+ _profileTotal += dt;
+ if (name) _profileResults.push(name);
+ _profileTime = (new Date()).getTime();
+ }
+
+ function profileLiteral(value, name) {
+ _profileResults.push(value);
+ if (name) _profileResults.push("%="+name);
+ }
+
+ function profileEnd(name) {
+ if (running == false) return;
+ var stopTime = (new Date()).getTime();
+ var dt = stopTime - _profileTime;
+ _profileResults.push(dt);
+ _profileTotal += dt;
+ if (name) _profileResults.push(name);
+ _profileResults.unshift(_profileTotal,"=");
+ _profileHistory.push(_profileResults);
+ if (dumpProfileDataTimeout)
+ top.clearTimeout(dumpProfileDataTimeout);
+ dumpProfileDataTimeout = top.setTimeout(dumpProfileData, 800);
+ running = false;
+ }
+
+ var dumpProfileDataTimeout = null;
+
+ function dumpProfileData() {
+ var data = _profileHistory[0].slice();
+ forEach(_profileHistory.slice(1), function (h) {
+ forEach(h, function (x, i) {
+ if ((typeof x) == "number") data[i] += x;
+ });
+ });
+ data = map(data, function (x) {
+ if ((typeof x) == "number") return String(x/_profileHistory.length).substring(0,4);
+ return x;
+ });
+ data.push("("+_profileHistory.length+")");
+ top.pad.dmesg(data.join(" ").replace(/ %/g,''));
+ dumpProfileDataTimeout = null;
+ }
+
+ function noop() {}
+ function cancel() {
+ running = false;
+ }
+
+ if (enabled) {
+ return {start:profileStart, mark:profileMark, literal:profileLiteral, end:profileEnd,
+ cancel:cancel};
+ }
+ else {
+ return {start:noop, mark:noop, literal:noop, end:noop, cancel:noop};
+ }
+}