| Index: tools/win/sizeviewer/main.js
|
| diff --git a/tools/win/sizeviewer/main.js b/tools/win/sizeviewer/main.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..82b2f237513a029cd905c15f525b83d88dbb9c89
|
| --- /dev/null
|
| +++ b/tools/win/sizeviewer/main.js
|
| @@ -0,0 +1,116 @@
|
| +google.load("visualization", "1", {packages:["treemap"]});
|
| +google.setOnLoadCallback(drawChart);
|
| +function drawChart() {
|
| + var data = google.visualization.arrayToDataTable(g_raw_data);
|
| +
|
| + tree = new google.visualization.TreeMap(
|
| + document.getElementById('chart_div'));
|
| +
|
| + tree.draw(data, {
|
| + minColor: '#faa',
|
| + midColor: '#f77',
|
| + maxColor: '#f44',
|
| + headerHeight: 20,
|
| + fontColor: 'black',
|
| + showScale: true,
|
| + minColorValue: 0,
|
| + maxColorValue: g_maxval,
|
| + generateTooltip: tooltip
|
| + });
|
| +
|
| + // Update from 'Loading'.
|
| + document.getElementById('title').innerText = g_dllname;
|
| +
|
| + // Set favicon.
|
| + var doc_head = document.getElementsByTagName('head')[0];
|
| + var new_link = document.createElement('link');
|
| + new_link.rel = 'shortcut icon';
|
| + new_link.href = 'data:image/png;base64,'+g_favicon;
|
| + doc_head.appendChild(new_link);
|
| +
|
| + var cur_line_sizes = null;
|
| + function nodeSelect() {
|
| + symlist.setValue('');
|
| + var selected = tree.getSelection();
|
| + if (selected.length > 0) {
|
| + var filename = data.getValue(selected[0].row, 0);
|
| + var size = data.getValue(selected[0].row, 2);
|
| + if (size >= 0) {
|
| + // Is a leaf.
|
| + cur_line_sizes = g_line_data[filename];
|
| + var body = g_file_contents[filename];
|
| + editor.setValue(body);
|
| + var maximum_size = 0;
|
| + for (var line in cur_line_sizes) {
|
| + maximum_size = Math.max(maximum_size, cur_line_sizes[line][0]);
|
| + }
|
| + for (var line in cur_line_sizes) {
|
| + var symbol_indices = cur_line_sizes[line][1];
|
| + var symbols = [];
|
| + for (var i = 0; i < symbol_indices.length; ++i) {
|
| + symbols.push(g_symbol_list[symbol_indices[i]]);
|
| + }
|
| + var size = cur_line_sizes[line][0];
|
| + // Zero based lines.
|
| + var line_num = parseInt(line, 10) - 1;
|
| + if (size >= maximum_size * 0.9)
|
| + editor.addLineClass(line_num, 'gutter', 'linebg-top10');
|
| + else if (size >= maximum_size * 0.75)
|
| + editor.addLineClass(line_num, 'gutter', 'linebg-top25');
|
| + else if (size >= maximum_size * 0.5)
|
| + editor.addLineClass(line_num, 'gutter', 'linebg-top50');
|
| + function addTag() {
|
| + var line_num = parseInt(line, 10);
|
| + var symbols_tooltip = symbols.join('\n');
|
| + var num_syms = symbols.length;
|
| + // markText wants 0-based lines.
|
| + var mark = editor.markText({line: line_num - 1, ch: 0},
|
| + {line: line_num, ch: 0},
|
| + { className: 'symbol-tag' });
|
| + CodeMirror.on(mark, 'beforeCursorEnter', function(e) {
|
| + symlist.setValue(num_syms +
|
| + ' symbol(s) contributing to line ' +
|
| + line_num + ':\n' +
|
| + symbols_tooltip);
|
| + });
|
| + }
|
| + addTag();
|
| + }
|
| + }
|
| + }
|
| + }
|
| + google.visualization.events.addListener(tree, 'select', nodeSelect);
|
| +
|
| + editor = CodeMirror.fromTextArea(
|
| + document.getElementById('source_view'), {
|
| + readOnly: "nocursor",
|
| + mode: { name: 'text/x-c++src' },
|
| + lineNumbers: true,
|
| + lineNumberFormatter: weightGetter
|
| + });
|
| + editor.setSize(850, 600);
|
| +
|
| + symlist = CodeMirror.fromTextArea(
|
| + document.getElementById('symlist_view'), {
|
| + readOnly: "nocursor",
|
| + mode: { name: 'none' },
|
| + lineNumbers: false
|
| + });
|
| + symlist.setSize(850, 150);
|
| +
|
| + function tooltip(row, size, value) {
|
| + return '<div style="background:#fd9;' +
|
| + ' padding:10px; border-style:solid"><b>' +
|
| + data.getValue(row, 0) + '</b><br>' +
|
| + data.getColumnLabel(2) +
|
| + ' (total value of this cell and its children): ' + size +
|
| + '<br>';
|
| + }
|
| +
|
| + function weightGetter(line) {
|
| + if (cur_line_sizes && cur_line_sizes.hasOwnProperty('' + line)) {
|
| + return cur_line_sizes['' + line][0] + ' bytes ' + line;
|
| + }
|
| + return line;
|
| + }
|
| +}
|
|
|