// Copyright 2014 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. 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 '
' + data.getValue(row, 0) + '
' + data.getColumnLabel(2) + ' (total value of this cell and its children): ' + size + '
'; } function weightGetter(line) { if (cur_line_sizes && cur_line_sizes.hasOwnProperty('' + line)) { return cur_line_sizes['' + line][0] + ' bytes ' + line; } return line; } }