blob: 023d13f78c25af9f09698c6bb0b133829c137def [file] [log] [blame]
// Copyright 2017 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.
'use strict';
function requestProcessList() {
chrome.send('requestProcessList');
}
function saveDump() {
chrome.send('saveDump');
}
function reportProcess(pid) {
chrome.send('reportProcess', [pid]);
}
function startProfiling(pid) {
chrome.send('startProfiling', [pid]);
}
// celltype should either be "td" or "th". The contents of the |cols| will be
// added as children of each table cell if they are non-null.
function addListRow(table, celltype, cols) {
let tr = document.createElement('tr');
for (let col of cols) {
let cell = document.createElement(celltype);
if (col)
cell.appendChild(col);
tr.appendChild(cell);
}
table.appendChild(tr);
}
function setSaveDumpMessage(data) {
$('save_dump_text').innerText = data;
}
function returnProcessList(data) {
$('message').innerText = data['message'];
let proclist = $('proclist');
proclist.innerText = ''; // Clear existing contents.
let processes = data['processes'];
if (processes.length == 0)
return; // No processes to dump, don't make the table and refresh button.
// Add the refresh and save-dump buttons.
let commandsDiv = document.createElement('div');
commandsDiv.className = 'commands';
let refreshButton = document.createElement('button');
refreshButton.innerText = '\u21ba Refresh process list';
refreshButton.onclick = () => requestProcessList();
commandsDiv.appendChild(refreshButton);
let saveDumpButton = document.createElement('button');
saveDumpButton.innerText = '\u21e9 Save dump';
saveDumpButton.onclick = () => saveDump();
commandsDiv.appendChild(saveDumpButton);
let saveDumpText = document.createElement('div');
saveDumpText.id = 'save_dump_text';
commandsDiv.appendChild(saveDumpText);
proclist.appendChild(commandsDiv);
let table = document.createElement('table');
// Heading.
addListRow(table, 'th', [
null, document.createTextNode('Process ID'), document.createTextNode('Name')
]);
for (const proc of processes) {
const procId = proc[0];
const procIdText = document.createTextNode(procId.toString());
const description = document.createTextNode(proc[1]);
const profiled = proc[2];
let button = null;
if (profiled) {
button = document.createElement('button');
button.innerText = '\uD83D\uDC1E Report';
button.onclick = () => reportProcess(procId);
} else {
button = document.createElement('button');
button.innerText = '\u2600 Start profiling';
button.onclick = () => startProfiling(procId);
}
addListRow(table, 'td', [button, procIdText, description]);
}
proclist.appendChild(table);
}
// Get data and have it displayed upon loading.
document.addEventListener('DOMContentLoaded', requestProcessList);
/* For manual testing.
function fakeResults() {
returnProcessList([
[ 11234, "Process 11234 [Browser]" ],
[ 11235, "Process 11235 [Renderer]" ],
[ 11236, "Process 11236 [Renderer]" ]]);
}
document.addEventListener('DOMContentLoaded', fakeResults);
*/