OLD | NEW |
(Empty) | |
| 1 google.load("visualization", "1", {packages:["treemap"]}); |
| 2 google.setOnLoadCallback(drawChart); |
| 3 function drawChart() { |
| 4 var data = google.visualization.arrayToDataTable(g_raw_data); |
| 5 |
| 6 tree = new google.visualization.TreeMap( |
| 7 document.getElementById('chart_div')); |
| 8 |
| 9 tree.draw(data, { |
| 10 minColor: '#faa', |
| 11 midColor: '#f77', |
| 12 maxColor: '#f44', |
| 13 headerHeight: 20, |
| 14 fontColor: 'black', |
| 15 showScale: true, |
| 16 minColorValue: 0, |
| 17 maxColorValue: g_maxval, |
| 18 generateTooltip: tooltip |
| 19 }); |
| 20 |
| 21 // Update from 'Loading'. |
| 22 document.getElementById('title').innerText = g_dllname; |
| 23 |
| 24 // Set favicon. |
| 25 var doc_head = document.getElementsByTagName('head')[0]; |
| 26 var new_link = document.createElement('link'); |
| 27 new_link.rel = 'shortcut icon'; |
| 28 new_link.href = 'data:image/png;base64,'+g_favicon; |
| 29 doc_head.appendChild(new_link); |
| 30 |
| 31 var cur_line_sizes = null; |
| 32 function nodeSelect() { |
| 33 symlist.setValue(''); |
| 34 var selected = tree.getSelection(); |
| 35 if (selected.length > 0) { |
| 36 var filename = data.getValue(selected[0].row, 0); |
| 37 var size = data.getValue(selected[0].row, 2); |
| 38 if (size >= 0) { |
| 39 // Is a leaf. |
| 40 cur_line_sizes = g_line_data[filename]; |
| 41 var body = g_file_contents[filename]; |
| 42 editor.setValue(body); |
| 43 var maximum_size = 0; |
| 44 for (var line in cur_line_sizes) { |
| 45 maximum_size = Math.max(maximum_size, cur_line_sizes[line][0]); |
| 46 } |
| 47 for (var line in cur_line_sizes) { |
| 48 var symbol_indices = cur_line_sizes[line][1]; |
| 49 var symbols = []; |
| 50 for (var i = 0; i < symbol_indices.length; ++i) { |
| 51 symbols.push(g_symbol_list[symbol_indices[i]]); |
| 52 } |
| 53 var size = cur_line_sizes[line][0]; |
| 54 // Zero based lines. |
| 55 var line_num = parseInt(line, 10) - 1; |
| 56 if (size >= maximum_size * 0.9) |
| 57 editor.addLineClass(line_num, 'gutter', 'linebg-top10'); |
| 58 else if (size >= maximum_size * 0.75) |
| 59 editor.addLineClass(line_num, 'gutter', 'linebg-top25'); |
| 60 else if (size >= maximum_size * 0.5) |
| 61 editor.addLineClass(line_num, 'gutter', 'linebg-top50'); |
| 62 function addTag() { |
| 63 var line_num = parseInt(line, 10); |
| 64 var symbols_tooltip = symbols.join('\n'); |
| 65 var num_syms = symbols.length; |
| 66 // markText wants 0-based lines. |
| 67 var mark = editor.markText({line: line_num - 1, ch: 0}, |
| 68 {line: line_num, ch: 0}, |
| 69 { className: 'symbol-tag' }); |
| 70 CodeMirror.on(mark, 'beforeCursorEnter', function(e) { |
| 71 symlist.setValue(num_syms + |
| 72 ' symbol(s) contributing to line ' + |
| 73 line_num + ':\n' + |
| 74 symbols_tooltip); |
| 75 }); |
| 76 } |
| 77 addTag(); |
| 78 } |
| 79 } |
| 80 } |
| 81 } |
| 82 google.visualization.events.addListener(tree, 'select', nodeSelect); |
| 83 |
| 84 editor = CodeMirror.fromTextArea( |
| 85 document.getElementById('source_view'), { |
| 86 readOnly: "nocursor", |
| 87 mode: { name: 'text/x-c++src' }, |
| 88 lineNumbers: true, |
| 89 lineNumberFormatter: weightGetter |
| 90 }); |
| 91 editor.setSize(850, 600); |
| 92 |
| 93 symlist = CodeMirror.fromTextArea( |
| 94 document.getElementById('symlist_view'), { |
| 95 readOnly: "nocursor", |
| 96 mode: { name: 'none' }, |
| 97 lineNumbers: false |
| 98 }); |
| 99 symlist.setSize(850, 150); |
| 100 |
| 101 function tooltip(row, size, value) { |
| 102 return '<div style="background:#fd9;' + |
| 103 ' padding:10px; border-style:solid"><b>' + |
| 104 data.getValue(row, 0) + '</b><br>' + |
| 105 data.getColumnLabel(2) + |
| 106 ' (total value of this cell and its children): ' + size + |
| 107 '<br>'; |
| 108 } |
| 109 |
| 110 function weightGetter(line) { |
| 111 if (cur_line_sizes && cur_line_sizes.hasOwnProperty('' + line)) { |
| 112 return cur_line_sizes['' + line][0] + ' bytes ' + line; |
| 113 } |
| 114 return line; |
| 115 } |
| 116 } |
OLD | NEW |