Index: tracing/tracing/ui/extras/v8/gc_objects_stats_table.html |
diff --git a/tracing/tracing/ui/extras/v8/gc_objects_stats_table.html b/tracing/tracing/ui/extras/v8/gc_objects_stats_table.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e95167788583be97bde26f94471c80582eca8deb |
--- /dev/null |
+++ b/tracing/tracing/ui/extras/v8/gc_objects_stats_table.html |
@@ -0,0 +1,558 @@ |
+<!DOCTYPE html> |
+<!-- |
+Copyright (c) 2016 The Chromium Authors. All rights reserved. |
+Use of this source code is governed by a BSD-style license that can be |
+found in the LICENSE file. |
+--> |
+ |
+<link rel="import" href="/tracing/extras/v8/v8_gc_stats_thread_slice.html"> |
+<link rel="import" href="/tracing/ui/base/table.html"> |
+ |
+<dom-module id='tr-ui-e-v8-gc-objects-stats-table'> |
+ <template> |
+ <style> |
+ tr-ui-b-table { |
+ flex: 0 0 auto; |
+ align-self: stretch; |
+ margin-top: 1em; |
+ font-size: 12px; |
+ } |
+ </style> |
+ <tr-ui-b-table id="table"></tr-ui-b-table> |
+ </template> |
+</dom-module> |
+<script> |
+'use strict'; |
+ |
+tr.exportTo('tr.ui.e.v8', function() { |
+ |
+ var InstanceTypeGroups = { |
fmeawad
2016/10/04 17:50:55
We need to move those groups as well as the runtim
lpy
2016/10/05 17:44:28
Agree.
|
+ Rest: [ |
+ "ACCESSOR_INFO_TYPE", |
+ "ACCESSOR_PAIR_TYPE", |
+ "ACCESS_CHECK_INFO_TYPE", |
+ "ALLOCATION_MEMENTO_TYPE", |
+ "ALLOCATION_SITE_TYPE", |
+ "CALL_HANDLER_INFO_TYPE", |
+ "CELL_TYPE", |
+ "FIXED_INT8_ARRAY_TYPE", |
+ "FIXED_UINT8_ARRAY_TYPE", |
+ "FIXED_UINT8_CLAMPED_ARRAY_TYPE", |
+ "FIXED_INT16_ARRAY_TYPE", |
+ "FIXED_UINT16_ARRAY_TYPE", |
+ "FIXED_INT32_ARRAY_TYPE", |
+ "FIXED_UINT32_ARRAY_TYPE", |
+ "FIXED_FLOAT32_ARRAY_TYPE", |
+ "FIXED_FLOAT64_ARRAY_TYPE", |
+ "FIXED_DOUBLE_ARRAY_TYPE", |
+ "FOREIGN_TYPE", |
+ "FUNCTION_TEMPLATE_INFO_TYPE", |
+ "HEAP_NUMBER_TYPE", |
+ "INTERCEPTOR_INFO_TYPE", |
+ "MUTABLE_HEAP_NUMBER_TYPE", |
+ "OBJECT_TEMPLATE_INFO_TYPE", |
+ "ODDBALL_TYPE", |
+ "PROPERTY_CELL_TYPE", |
+ "PROTOTYPE_INFO_TYPE", |
+ "SCRIPT_TYPE", |
+ "SYMBOL_TYPE", |
+ "TRANSITION_ARRAY_TYPE", |
+ "TYPE_FEEDBACK_INFO_TYPE" |
+ ], |
+ Strings: [ |
+ "CONS_ONE_BYTE_STRING_TYPE", |
+ "CONS_STRING_TYPE", |
+ "EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE", |
+ "EXTERNAL_ONE_BYTE_STRING_TYPE", |
+ "EXTERNAL_INTERNALIZED_STRING_TYPE", |
+ "EXTERNAL_STRING_TYPE", |
+ "INTERNALIZED_STRING_TYPE", |
+ "ONE_BYTE_INTERNALIZED_STRING_TYPE", |
+ "ONE_BYTE_STRING_TYPE", |
+ "SHORT_EXTERNAL_INTERNALIZED_STRING_TYPE", |
+ "SHORT_EXTERNAL_ONE_BYTE_STRING_TYPE", |
+ "SHORT_EXTERNAL_ONE_BYTE_INTERNALIZED_STRING_TYPE", |
+ "SHORT_EXTERNAL_STRING_TYPE", |
+ "SLICED_ONE_BYTE_STRING_TYPE", |
+ "SLICED_STRING_TYPE", |
+ "STRING_TYPE" |
+ ], |
+ JS_OTHER: [ |
+ "JS_API_OBJECT_TYPE", |
+ "JS_ARGUMENTS_TYPE", |
+ "JS_ARRAY_BUFFER_TYPE", |
+ "JS_ARRAY_TYPE", |
+ "JS_BOUND_FUNCTION_TYPE", |
+ "JS_ERROR_TYPE", |
+ "JS_DATE_TYPE", |
+ "JS_FUNCTION_TYPE", |
+ "JS_GLOBAL_OBJECT_TYPE", |
+ "JS_GLOBAL_PROXY_TYPE", |
+ "JS_MAP_ITERATOR_TYPE", |
+ "JS_MAP_TYPE", |
+ "JS_MESSAGE_OBJECT_TYPE", |
+ "JS_PROMISE_TYPE", |
+ "JS_REGEXP_TYPE", |
+ "JS_SPECIAL_API_OBJECT_TYPE", |
+ "JS_TYPED_ARRAY_TYPE", |
+ "JS_VALUE_TYPE", |
+ "JS_WEAK_MAP_TYPE" |
+ ], |
+ FIXED_ARRAY_TYPE: [ |
+ "*FIXED_ARRAY_CODE_STUBS_TABLE_SUB_TYPE", |
+ "*FIXED_ARRAY_COMPILATION_CACHE_TABLE_SUB_TYPE", |
+ "*FIXED_ARRAY_CONTEXT_SUB_TYPE", |
+ "*FIXED_ARRAY_COPY_ON_WRITE_SUB_TYPE", |
+ "*FIXED_ARRAY_DEOPTIMIZATION_DATA_SUB_TYPE", |
+ "*FIXED_ARRAY_DESCRIPTOR_ARRAY_SUB_TYPE", |
+ "*FIXED_ARRAY_EMBEDDED_OBJECT_SUB_TYPE", |
+ "*FIXED_ARRAY_ENUM_CACHE_SUB_TYPE", |
+ "*FIXED_ARRAY_ENUM_INDICES_CACHE_SUB_TYPE", |
+ "*FIXED_ARRAY_DEPENDENT_CODE_SUB_TYPE", |
+ "*FIXED_ARRAY_DICTIONARY_ELEMENTS_SUB_TYPE", |
+ "*FIXED_ARRAY_DICTIONARY_PROPERTIES_SUB_TYPE", |
+ "*FIXED_ARRAY_EMPTY_PROPERTIES_DICTIONARY_SUB_TYPE", |
+ "*FIXED_ARRAY_FAST_ELEMENTS_SUB_TYPE", |
+ "*FIXED_ARRAY_FAST_PROPERTIES_SUB_TYPE", |
+ "*FIXED_ARRAY_HANDLER_TABLE_SUB_TYPE", |
+ "*FIXED_ARRAY_INTRINSIC_FUNCTION_NAMES_SUB_TYPE", |
+ "*FIXED_ARRAY_JS_COLLECTION_SUB_TYPE", |
+ "*FIXED_ARRAY_JS_WEAK_COLLECTION_SUB_TYPE", |
+ "*FIXED_ARRAY_LITERALS_ARRAY_SUB_TYPE", |
+ "*FIXED_ARRAY_MAP_CODE_CACHE_SUB_TYPE", |
+ "*FIXED_ARRAY_NOSCRIPT_SHARED_FUNCTION_INFOS_SUB_TYPE", |
+ "*FIXED_ARRAY_NUMBER_STRING_CACHE_SUB_TYPE", |
+ "*FIXED_ARRAY_OBJECT_TO_CODE_SUB_TYPE", |
+ "*FIXED_ARRAY_OPTIMIZED_CODE_LITERALS_TUB_TYPE", |
+ "*FIXED_ARRAY_OPTIMIZED_CODE_MAP_SUB_TYPE", |
+ "*FIXED_ARRAY_PROTOTYPE_USERS_SUB_TYPE", |
+ "*FIXED_ARRAY_REGEXP_MULTIPLE_CACHE_SUB_TYPE", |
+ "*FIXED_ARRAY_RETAINED_MAPS_SUB_TYPE", |
+ "*FIXED_ARRAY_SCOPE_INFO_SUB_TYPE", |
+ "*FIXED_ARRAY_SCRIPT_LIST_SUB_TYPE", |
+ "*FIXED_ARRAY_SERIALIZED_TEMPLATES_SUB_TYPE", |
+ "*FIXED_ARRAY_SHARED_FUNCTION_INFOS_SUB_TYPE", |
+ "*FIXED_ARRAY_SINGLE_CHARACTER_STRING_CACHE_SUB_TYPE", |
+ "*FIXED_ARRAY_STRING_SPLIT_CACHE_SUB_TYPE", |
+ "*FIXED_ARRAY_STRING_TABLE_SUB_TYPE", |
+ "*FIXED_ARRAY_TEMPLATE_INFO_SUB_TYPE", |
+ "*FIXED_ARRAY_TEMPLATE_INSTANTIATIONS_CACHE_SUB_TYPE", |
+ "*FIXED_ARRAY_TYPE_FEEDBACK_VECTOR_SUB_TYPE", |
+ "*FIXED_ARRAY_TYPE_FEEDBACK_METADATA_SUB_TYPE", |
+ "*FIXED_ARRAY_WEAK_NEW_SPACE_OBJECT_TO_CODE_SUB_TYPE", |
+ "*FIXED_ARRAY_UNKNOWN_SUB_TYPE" |
+ ], |
+ CODE_TYPE: [ |
+ "*CODE_FUNCTION", |
+ "*CODE_OPTIMIZED_FUNCTION", |
+ "*CODE_BYTECODE_HANDLER", |
+ "*CODE_STUB", |
+ "*CODE_HANDLER", |
+ "*CODE_BUILTIN", |
+ "*CODE_REGEXP", |
+ "*CODE_WASM_FUNCTION", |
+ "*CODE_WASM_TO_JS_FUNCTION", |
+ "*CODE_JS_TO_WASM_FUNCTION", |
+ "*CODE_LOAD_IC", |
+ "*CODE_LOAD_GLOBAL_IC", |
+ "*CODE_KEYED_LOAD_IC", |
+ "*CODE_CALL_IC", |
+ "*CODE_STORE_IC", |
+ "*CODE_KEYED_STORE_IC", |
+ "*CODE_BINARY_OP_IC", |
+ "*CODE_COMPARE_IC", |
+ "*CODE_TO_BOOLEAN_IC" |
+ ], |
+ CONTEXT_EXTENSION_TYPE: [ |
+ 'CONTEXT_EXTENSION_TYPE' |
+ ], |
+ MAP_TYPE: [ |
+ 'MAP_TYPE' |
+ ], |
+ BYTE_ARRAY_TYPE: [ |
+ 'BYTE_ARRAY_TYPE' |
+ ], |
+ SHARED_FUNCTION_INFO_TYPE: [ |
+ 'SHARED_FUNCTION_INFO_TYPE' |
+ ], |
+ WEAK_CELL_TYPE: [ |
+ 'WEAK_CELL_TYPE' |
+ ], |
+ JS_OBJECT_TYPE: [ |
+ 'JS_OBJECT_TYPE' |
+ ], |
+ JS_CONTEXT_EXTENSION_OBJECT_TYPE: [ |
+ 'JS_CONTEXT_EXTENSION_OBJECT_TYPE' |
+ ] |
+ }; |
+ |
+ var InstanceSubTypeNames = { |
+ FIXED_ARRAY_TYPE: { |
+ keyToName: key => key.slice("*FIXED_ARRAY_".length) |
+ .slice(0, -("_SUB_TYPE".length)), |
+ nameToKey: name => "*FIXED_ARRAY_" + name + "_SUB_TYPE" |
+ }, |
+ CODE_TYPE: { |
+ keyToName: key => key.slice("*CODE_".length), |
+ nameToKey: name => "*CODE_" + name |
+ }, |
+ Strings: { |
+ keyToName: key => key, |
+ nameToKey: name => name |
+ }, |
+ Rest: { |
+ keyToName: key => key, |
+ nameToKey: name => name |
+ }, |
+ JS_OTHER: { |
+ keyToName: key => key, |
+ nameToKey: name => name |
+ } |
+ }; |
+ |
+ class Entry { |
+ constructor(title, count, overall, overAllocated, histogram, |
+ overAllocatedHistogram) { |
+ this.title_ = title; |
+ this.overall_ = overall; |
+ this.count_ = count; |
+ this.overAllocated_ = overAllocated; |
+ this.histogram_ = histogram; |
+ this.overAllocatedHistogram_ = overAllocatedHistogram; |
+ this.bucketSize_ = this.histogram_.length; |
+ this.overallPercent_ = 100; |
+ this.overAllocatedPercent_ = 100; |
+ } |
+ |
+ get title() { |
+ return this.title_; |
+ } |
+ |
+ get overall() { |
+ return this.overall_; |
+ } |
+ |
+ get count() { |
+ return this.count_; |
+ } |
+ |
+ get overAllocated() { |
+ return this.overAllocated_; |
+ } |
+ |
+ get histogram() { |
+ return this.histogram_; |
+ } |
+ |
+ get overAllocatedHistogram() { |
+ return this.overAllocatedHistogram_; |
+ } |
+ |
+ get bucketSize() { |
+ return this.bucketSize_; |
+ } |
+ |
+ get overallPercent() { |
+ return this.overallPercent_; |
+ } |
+ |
+ set overallPercent(value) { |
+ this.overallPercent_ = value; |
+ } |
+ |
+ get overAllocatedPercent() { |
+ return this.overAllocatedPercent_; |
+ } |
+ |
+ set overAllocatedPercent(value) { |
+ this.overAllocatedPercent_ = value; |
+ } |
+ |
+ setFromObject(obj) { |
+ this.count_ = obj.count; |
+ this.overall_ = obj.overall; |
+ this.overAllocated_ = obj.over_allocated; |
+ this.histogram_ = obj.histogram; |
+ this.overAllocatedHistogram_ = obj.over_allocated_histogram; |
+ } |
+ } |
+ |
+ class GroupedEntry extends Entry { |
+ constructor(title, count, overall, overAllocated, histogram, |
+ overAllocatedHistogram) { |
+ super(title, count, overall, overAllocated, histogram, |
+ overAllocatedHistogram); |
+ this.histogram_.fill(0); |
+ this.overAllocatedHistogram_.fill(0); |
+ this.entries_ = new Map(); |
+ } |
+ |
+ get subRows() { |
+ return Array.from(this.entries_.values()); |
+ } |
+ |
+ getEntryFromTitle(title) { |
+ return this.entries_.get(title); |
+ } |
+ |
+ add(entry) { |
+ this.count_ += entry.count; |
+ this.overall_ += entry.overall; |
+ this.overAllocated_ += entry.overAllocated; |
+ if (this.bucketSize_ === entry.bucketSize) { |
+ for (var i = 0; i < this.bucketSize_; ++i) { |
+ this.histogram_[i] += entry.histogram[i]; |
+ this.overAllocatedHistogram_[i] += entry.overAllocatedHistogram[i]; |
+ } |
+ } |
+ this.entries_.set(entry.title, entry); |
+ } |
+ |
+ accumulateUnknown(title) { |
+ var unknownCount = this.count_; |
+ var unknownOverall = this.overall_; |
+ var unknownOverAllocated = this.overAllocated_; |
+ var unknownHistogram = tr.b.deepCopy(this.histogram_); |
+ var unknownOverAllocatedHistogram = |
+ tr.b.deepCopy(this.overAllocatedHistogram_); |
+ for (var entry of this.entries_.values()) { |
+ unknownCount -= entry.count; |
+ unknownOverall -= entry.overall; |
+ unknownOverAllocated -= entry.overAllocated; |
+ for (var i = 0; i < this.bucketSize_; ++i) { |
+ unknownHistogram[i] -= entry.histogram[i]; |
+ unknownOverAllocatedHistogram[i] -= entry.overAllocatedHistogram[i]; |
+ } |
+ } |
+ this.entries_.set(title, new Entry(title, unknownCount, unknownOverall, |
+ unknownOverAllocated, unknownHistogram, |
+ unknownOverAllocatedHistogram)); |
+ } |
+ |
+ calculatePercentage() { |
+ for (var entry of this.entries_.values()) { |
+ if (this.overall_ > 0) { |
+ entry.overallPercent = |
+ (entry.overall / this.overall_ * 100).toFixed(3); |
+ } else { |
+ entry.overallPercent = 0; |
+ } |
+ |
+ if (this.overAllocated_ > 0) { |
+ entry.overAllocatedPercent = |
+ (entry.overAllocated / this.overAllocated_ * 100).toFixed(3); |
+ } else { |
+ entry.overAllocatedPercent = 0; |
+ } |
+ |
+ if (entry instanceof GroupedEntry) entry.calculatePercentage(); |
+ } |
+ } |
+ } |
+ |
+ function plusMinus(value, suffix) { |
fmeawad
2016/10/04 17:50:55
Is this still used?
lpy
2016/10/05 17:44:28
Done.
|
+ return (value > 0 ? '+' : '') + value + suffix; |
+ } |
+ |
+ Polymer({ |
+ is: 'tr-ui-e-v8-gc-objects-stats-table', |
+ |
+ ready: function() { |
+ this.isolateEntries_ = []; |
+ }, |
+ |
+ constructTable_: function() { |
+ this.$.table.selectionMode = tr.ui.b.TableFormat.SelectionMode.ROW; |
+ this.$.table.tableColumns = [ |
+ { |
+ title: 'Component', |
+ value: function(row) { |
+ var typeEl = document.createElement('span'); |
+ typeEl.innerText = row.title; |
+ return typeEl; |
+ }, |
+ showExpandButtons: true |
+ }, |
+ { |
+ title: 'Overall Memory (KB)', |
+ value: function(row) { |
+ var typeEl = document.createElement('span'); |
+ typeEl.innerText = (row.overall / 1024).toFixed(3); |
+ return typeEl; |
+ }, |
+ cmp: function(a, b) { |
+ return a.overall - b.overall; |
+ } |
+ }, |
+ { |
+ title: 'Over Allocated Memory (KB)', |
+ value: function(row) { |
+ var typeEl = document.createElement('span'); |
+ typeEl.innerText = (row.overAllocated / 1024).toFixed(3); |
+ return typeEl; |
+ }, |
+ cmp: function(a, b) { |
+ return a.overAllocated - b.overAllocated; |
+ } |
+ }, |
+ { |
+ title: 'Overall Count', |
+ value: function(row) { |
+ var typeEl = document.createElement('span'); |
+ typeEl.innerText = row.count; |
+ return typeEl; |
+ }, |
+ cmp: function(a, b) { |
+ return a.count - b.count; |
+ } |
+ }, |
+ { |
+ title: 'Overall Memory Percent', |
+ value: function(row) { |
+ var typeEl = document.createElement('span'); |
+ typeEl.innerText = row.overallPercent + '%'; |
+ return typeEl; |
+ }, |
+ cmp: function(a, b) { |
+ return a.overall - b.overall; |
+ } |
+ }, |
+ { |
+ title: 'Overall Allocated Memory Percent', |
+ value: function(row) { |
+ var typeEl = document.createElement('span'); |
+ typeEl.innerText = row.overAllocatedPercent + '%'; |
+ return typeEl; |
+ }, |
+ cmp: function(a, b) { |
+ return a.overAllocated - b.overAllocated; |
+ } |
+ } |
+ ]; |
+ |
+ this.$.table.sortColumnIndex = 1; |
+ this.$.table.sortDescending = true; |
+ }, |
+ |
+ buildSubEntry_: function(objects, groupEntry, keyToName) { |
+ var typeGroup = InstanceTypeGroups[groupEntry.title]; |
+ for (var instanceType of typeGroup) { |
+ var e = objects[instanceType]; |
+ delete objects[instanceType]; |
+ if (e === undefined) continue; |
+ var title = instanceType; |
+ if (keyToName !== undefined) title = keyToName(title); |
+ groupEntry.add(new Entry(title, e.count, e.overall, e.over_allocated, |
+ e.histogram, e.over_allocated_histogram)); |
+ } |
+ }, |
+ |
+ buildOthers_: function(objects, groupEntry) { |
+ for (var title of Object.getOwnPropertyNames(objects)) { |
+ if (title === 'END') continue; |
+ var obj = objects[title]; |
+ groupEntry.add(new Entry(title, obj.count, obj.overall, |
+ obj.over_allocated, obj.histogram, |
+ obj.over_allocated_histogram)) |
+ } |
+ }, |
+ |
+ build_: function(objects, objectEntry, bucketSize) { |
+ var fixedArrayObject = objects['FIXED_ARRAY_TYPE']; |
+ if (fixedArrayObject === undefined) |
+ throw new Error('Fixed Array Object not found.'); |
+ |
+ var groupEntries = { |
+ restEntry: new GroupedEntry('Rest', 0, 0, 0, new Array(bucketSize), |
+ new Array(bucketSize)), |
+ stringEntry: new GroupedEntry('Strings', 0, 0, 0, new Array(bucketSize), |
+ new Array(bucketSize)), |
+ jsEntry: new GroupedEntry('JS_OTHER', 0, 0, 0, new Array(bucketSize), |
+ new Array(bucketSize)), |
+ fixedArrayEntry: new GroupedEntry('FIXED_ARRAY_TYPE', 0, 0, 0, |
+ new Array(bucketSize), |
+ new Array(bucketSize)), |
+ codeEntry: new GroupedEntry('CODE_TYPE', 0, 0, 0, new Array(bucketSize), |
+ new Array(bucketSize)), |
+ contextExtensionEntry: new GroupedEntry('CONTEXT_EXTENSION_TYPE', 0, 0, |
+ 0, new Array(bucketSize), |
+ new Array(bucketSize)), |
+ mapEntry: new GroupedEntry('MAP_TYPE', 0, 0, 0, new Array(bucketSize), |
+ new Array(bucketSize)), |
+ byteArrayEntry: new GroupedEntry('BYTE_ARRAY_TYPE', 0, 0, 0, |
+ new Array(bucketSize), |
+ new Array(bucketSize)), |
+ sharedFunctionInfoEntry: new GroupedEntry('SHARED_FUNCTION_INFO_TYPE', |
+ 0, 0, 0, |
+ new Array(bucketSize), |
+ new Array(bucketSize)), |
+ weakCellEntry: new GroupedEntry('WEAK_CELL_TYPE', 0, 0, 0, |
+ new Array(bucketSize), |
+ new Array(bucketSize)), |
+ jsObjectEntry: new GroupedEntry('JS_OBJECT_TYPE', 0, 0, 0, |
+ new Array(bucketSize), |
+ new Array(bucketSize)), |
+ jsContextExtensionObjectEntry: new GroupedEntry( |
+ 'JS_CONTEXT_EXTENSION_OBJECT_TYPE', 0, 0, 0, new Array(bucketSize), |
+ new Array(bucketSize)) |
+ }; |
+ for (var name of Object.getOwnPropertyNames(groupEntries)) { |
+ var groupEntry = groupEntries[name]; |
+ var keyToName = undefined; |
+ if (InstanceSubTypeNames[groupEntry.title] !== undefined) { |
+ keyToName = InstanceSubTypeNames[groupEntry.title].keyToName; |
+ } |
+ this.buildSubEntry_(objects, groupEntry, keyToName); |
+ if (name === 'fixedArrayEntry') { |
+ groupEntry.setFromObject(fixedArrayObject); |
+ groupEntry.accumulateUnknown('UNKNOWN'); |
+ } |
+ objectEntry.add(groupEntry); |
+ } |
+ }, |
+ |
+ set selection(slices) { |
+ slices.sortEvents(function(a, b) { |
+ return b.start - a.start; |
+ }); |
+ var previous = undefined; |
+ for (let slice of slices) { |
+ if (!slice instanceof tr.e.v8.V8GCStatsThreadSlice) continue; |
+ var liveObjects = slice.liveObjects; |
+ var deadObjects = slice.deadObjects; |
+ var isolate = liveObjects.isolate; |
+ |
+ var isolateEntry = |
+ new GroupedEntry( |
+ 'Isolate_' + isolate + ' at ' + slice.start.toFixed(3) + ' ms', |
+ 0, 0, 0, [], []); |
+ var liveEntry = new GroupedEntry('live objects', 0, 0, 0, [], []); |
+ var deadEntry = new GroupedEntry('dead objects', 0, 0, 0, [], []); |
+ |
+ var liveBucketSize = liveObjects.bucket_sizes.length; |
+ var deadBucketSize = deadObjects.bucket_sizes.length; |
+ |
+ this.build_(tr.b.deepCopy(liveObjects.type_data), liveEntry, |
+ liveBucketSize); |
+ isolateEntry.add(liveEntry); |
+ |
+ this.build_(tr.b.deepCopy(deadObjects.type_data), deadEntry, |
+ deadBucketSize); |
+ isolateEntry.add(deadEntry); |
+ |
+ isolateEntry.calculatePercentage(); |
+ this.isolateEntries_.push(isolateEntry); |
+ } |
+ this.updateTable_(); |
+ }, |
+ |
+ updateTable_: function() { |
+ this.constructTable_(); |
+ this.$.table.tableRows = this.isolateEntries_; |
+ this.$.table.rebuild(); |
+ }, |
+ }); |
+ |
+ return {}; |
+}); |
+</script> |