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

Unified Diff: chrome/browser/resources/profiler/profiler.js

Issue 2386123003: Add heap allocator usage to task profiler. (Closed)
Patch Set: Fix remaining clang compile errors. Created 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/profiler/profiler.js
diff --git a/chrome/browser/resources/profiler/profiler.js b/chrome/browser/resources/profiler/profiler.js
index ec573ad57a3f680368aad011973a9979db400f4c..74e5c228718bf43ad06fe0573414076e68fe0560 100644
--- a/chrome/browser/resources/profiler/profiler.js
+++ b/chrome/browser/resources/profiler/profiler.js
@@ -127,6 +127,17 @@ var MainView = (function() {
var KEY_QUEUE_TIME = END_KEY++;
var KEY_AVG_QUEUE_TIME = END_KEY++;
var KEY_MAX_QUEUE_TIME = END_KEY++;
+ if (loadTimeData.getBoolean('enableMemoryTaskProfiler')) {
+ var KEY_AVG_ALLOC_OPS = END_KEY++;
+ var KEY_AVG_FREE_OPS = END_KEY++;
+ var KEY_AVG_NET_BYTES = END_KEY++;
+ var KEY_MAX_ALLOCATED_BYTES = END_KEY++;
+ var KEY_ALLOC_OPS = END_KEY++;
+ var KEY_FREE_OPS = END_KEY++;
+ var KEY_ALLOCATED_BYTES = END_KEY++;
+ var KEY_FREED_BYTES = END_KEY++;
+ var KEY_ALLOC_OVERHEAD_BYTES = END_KEY++;
+ }
var KEY_BIRTH_THREAD = END_KEY++;
var KEY_DEATH_THREAD = END_KEY++;
var KEY_PROCESS_TYPE = END_KEY++;
@@ -243,6 +254,47 @@ var MainView = (function() {
})();
/**
+ * This aggregator computes an average by summing the difference of two
+ * numeric fields, summing a count, and then dividing the totals.
+ */
+ var AvgDiffAggregator = (function() {
+ function Aggregator(numeratorPosKey, numeratorNegKey, divisorKey) {
+ this.numeratorPosKey_ = numeratorPosKey;
+ this.numeratorNegKey_ = numeratorNegKey;
+ this.divisorKey_ = divisorKey;
+
+ this.numeratorSum_ = 0;
+ this.divisorSum_ = 0;
+ }
+
+ Aggregator.prototype = {
+ consume: function(e) {
+ this.numeratorSum_ +=
+ e[this.numeratorPosKey_] - e[this.numeratorNegKey_];
+ this.divisorSum_ += e[this.divisorKey_];
+ },
+
+ getValue: function() {
+ return this.numeratorSum_ / this.divisorSum_;
+ },
+
+ getValueAsText: function() {
+ return formatNumberAsText(this.getValue());
+ },
+ };
+
+ return {
+ create: function(numeratorPosKey, numeratorNegKey, divisorKey) {
+ return {
+ create: function(key) {
+ return new Aggregator(numeratorPosKey, numeratorNegKey, divisorKey);
+ },
+ };
+ }
+ };
+ })();
+
+ /**
* This aggregator finds the maximum for a numeric field.
*/
var MaxAggregator = (function() {
@@ -418,6 +470,93 @@ var MainView = (function() {
diff: diffFuncForCount,
};
+ if (loadTimeData.getBoolean('enableMemoryTaskProfiler')) {
+ KEY_PROPERTIES[KEY_AVG_ALLOC_OPS] = {
+ name: 'Avg Allocations',
+ cellAlignment: 'right',
+ sortDescending: true,
+ textPrinter: formatNumberAsText,
+ aggregator: AvgAggregator.create(KEY_ALLOC_OPS, KEY_COUNT),
+ };
+
+ KEY_PROPERTIES[KEY_AVG_FREE_OPS] = {
+ name: 'Avg Frees',
+ cellAlignment: 'right',
+ sortDescending: true,
+ textPrinter: formatNumberAsText,
+ aggregator: AvgAggregator.create(KEY_FREE_OPS, KEY_COUNT),
+ };
+
+ KEY_PROPERTIES[KEY_AVG_NET_BYTES] = {
+ name: 'Avg Net Bytes',
+ cellAlignment: 'right',
+ sortDescending: true,
+ textPrinter: formatNumberAsText,
+ aggregator: AvgDiffAggregator.create(KEY_ALLOCATED_BYTES,
+ KEY_FREED_BYTES, KEY_COUNT),
+ };
+
+ KEY_PROPERTIES[KEY_ALLOC_OPS] = {
+ name: 'Allocation count',
+ cellAlignment: 'right',
+ sortDescending: true,
+ textPrinter: formatNumberAsText,
+ inputJsonKey: 'death_data.alloc_ops',
+ aggregator: SumAggregator,
+ diff: diffFuncForCount,
+ };
+
+ KEY_PROPERTIES[KEY_FREE_OPS] = {
+ name: 'Free Count',
+ cellAlignment: 'right',
+ sortDescending: true,
+ textPrinter: formatNumberAsText,
+ inputJsonKey: 'death_data.free_ops',
+ aggregator: SumAggregator,
+ diff: diffFuncForCount,
+ };
+
+ KEY_PROPERTIES[KEY_ALLOCATED_BYTES] = {
+ name: 'Allocated bytes',
+ cellAlignment: 'right',
+ sortDescending: true,
+ textPrinter: formatNumberAsText,
+ inputJsonKey: 'death_data.allocated_bytes',
+ aggregator: SumAggregator,
+ diff: diffFuncForCount,
+ };
+
+ KEY_PROPERTIES[KEY_FREED_BYTES] = {
+ name: 'Freed bytes',
+ cellAlignment: 'right',
+ sortDescending: true,
+ textPrinter: formatNumberAsText,
+ inputJsonKey: 'death_data.freed_bytes',
+ aggregator: SumAggregator,
+ diff: diffFuncForCount,
+ };
+
+ KEY_PROPERTIES[KEY_ALLOC_OVERHEAD_BYTES] = {
+ name: 'Overhead bytes',
+ cellAlignment: 'right',
+ sortDescending: true,
+ textPrinter: formatNumberAsText,
+ inputJsonKey: 'death_data.alloc_overhead_bytes',
+ aggregator: SumAggregator,
+ diff: diffFuncForCount,
+ };
+
+ KEY_PROPERTIES[KEY_MAX_ALLOCATED_BYTES] = {
+ name: 'Max allocated (outstanding) bytes',
+ cellAlignment: 'right',
+ sortDescending: true,
+ textPrinter: formatNumberAsText,
+ inputJsonKey: 'death_data.max_allocated_bytes',
+ aggregator: MaxAggregator,
+ diff: diffFuncForMax,
+ };
+ }
+
KEY_PROPERTIES[KEY_AVG_RUN_TIME] = {
name: 'Avg run time',
cellAlignment: 'right',
@@ -482,6 +621,16 @@ var MainView = (function() {
KEY_QUEUE_TIME,
];
+ if (loadTimeData.getBoolean('enableMemoryTaskProfiler')) {
+ INITIALLY_HIDDEN_KEYS = INITIALLY_HIDDEN_KEYS.concat([
+ KEY_ALLOC_OPS,
+ KEY_FREE_OPS,
+ KEY_ALLOCATED_BYTES,
+ KEY_FREED_BYTES,
+ KEY_ALLOC_OVERHEAD_BYTES,
+ ]);
+ }
+
/**
* The ordered list of grouping choices to expose in the "Group by"
* dropdowns. We don't include the numeric properties, since they

Powered by Google App Engine
This is Rietveld 408576698