15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Shows an updating list of process statistics.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function init() {
73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  chrome.processes.onUpdatedWithMemory.addListener(
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    function(processes) {
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var table = "<table>\n" +
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "<tr><td><b>Process</b></td>" +
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "<td>OS ID</td>" +
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        "<td>Title</td>" +
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "<td>Type</td>" +
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "<td>Tabs</td>" +
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "<td>CPU</td>" +
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "<td>Network</td>" +
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "<td>Private Memory</td>" +
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "<td>JS Memory</td>" +
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "<td></td>" +
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "</tr>\n";
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (pid in processes) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        table = displayProcessInfo(processes[pid], table);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      table += "</table>\n";
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      var div = document.getElementById("process-list");
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      div.innerHTML = table;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    });
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.getElementById("killProcess").onclick = function () {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var procId = parseInt(prompt("Enter process ID"));
313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    chrome.processes.terminate(procId);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function displayProcessInfo(process, table) {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Format network string like task manager
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var network = process.network;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (network > 1024) {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    network = (network / 1024).toFixed(1) + " kB/s";
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (network > 0) {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    network += " B/s";
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (network == -1) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    network = "N/A";
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  table +=
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "<tr><td>" + process.id + "</td>" +
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "<td>" + process.osProcessId + "</td>" +
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    "<td>" + process.title + "</td>" +
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "<td>" + process.type + "</td>" +
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "<td>" + process.tabs + "</td>" +
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "<td>" + process.cpu + "</td>" +
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "<td>" + network + "</td>";
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if ("privateMemory" in process) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    table += "<td>" + (process.privateMemory / 1024) + "K</td>";
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    table += "<td>N/A</td>";
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if ("jsMemoryAllocated" in process) {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var allocated = process.jsMemoryAllocated / 1024;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var used = process.jsMemoryUsed / 1024;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    table += "<td>" + allocated.toFixed(2) + "K (" + used.toFixed(2) +
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "K live)</td>";
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    table += "<td>N/A</td>";
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  table +=
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "<td></td>" +
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    "</tr>\n";
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return table;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)document.addEventListener('DOMContentLoaded', init);
76