brucmao
火狐狸
火狐狸
  • UID39549
  • 注册日期2013-05-29
  • 最后登录2020-03-25
  • 发帖数101
  • 经验154枚
  • 威望0点
  • 贡献值134点
  • 好评度5点
15楼#
发布于:2013-12-27 11:22
我用UC脚本查看内存

图片:QQ截图20131227112311.png



// ==UserScript==
// @name  MemoryMonitorMod.uc.js
// @compatibility  Firefox 9.*
// @description  Bei Ueberschreitung der maximalen Speicherauslastung kann automatischer Neustart durchgefuehrt werden
// @include  main
// @note  Bezug: about:memory
// @note  http://loda.jp/script/?id=584
// @note  Version auf https://github.com/ardiman/userChrome.js um _autoRestart und Fehlerumgehung bei gfx-surface-image ergaenzt
// ==/UserScript==
const version = Services.prefs.getCharPref("extensions.lastPlatformVersion").split(".",1);
var ucjs_MemoryMonitor = {
  // ---------------------------------setting data-----------------------------
  // Update-Intervall[ms]
  _interval: 5000,
  // Neustart bei maximaler Speichernutzung (Achtung! Anpassen an die darunter gewaehlte Speichereinheit)
  _maxMemory: 500,
  // Speicher-Einheit: B, KB, KiB, MB, MiB, GB, GiB
  _prefix: "MB",
  // Speicher-Einheitanzeige in der Statusbar
  _dPrefix: true,
  // automatischen Restart bei Ueberschreitung von _maxMemory durchfuehren
  _autoRestart: false,
  // --------------------------------------------------------------------------
  interval: null,
  init: function () {
    var memoryPanel = document.createElement("statusbarpanel");
    memoryPanel.id = "MemoryDisplay";
    memoryPanel.setAttribute("label", this.setPrefix(this._dPrefix));
    document.getElementById("urlbar-icons").insertBefore(memoryPanel, null);
    this.start();
    this.interval = setInterval(this.start, this._interval);
  },
  
  addFigure: function (str) {
    var num = new String(str).replace(/,/g, "");
    while (num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
    return num;
  },
  
  restart: function () {
    var appStartup = Components.interfaces.nsIAppStartup;
    Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(appStartup).quit(appStartup.eRestart | appStartup.eAttemptQuit);
  },
  
  getSize: function (mem, flag) {
    var pre = 1;
    switch (this._prefix) {      
      case 'KB':
        pre = 1000;
        break;
      case 'KiB':
        pre = 1024;
        break;
      case 'MB':
        pre= 1000 * 1000;
        break;
      case 'MiB':
        pre = 1024 * 1024;
        break;
      case 'GB':
        pre = 1000 * 1000 * 1000;
        break;
      case 'GiB':
        pre = 1024 * 1024 * 1024;
        break;
    }
    if (flag) return mem * pre;
    else return ucjs_MemoryMonitor.addFigure(Math.round(mem / pre));
  },
  
  setPrefix: function (flag) {
    return (flag) ? " " + this._prefix : "";
  },
  
  start: function () {
    try {
      const Cc = Components.classes;
      const Ci = Components.interfaces;
      var mgr = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      var e = mgr.enumerateReporters();
      var gMemReporters = {};
      if(version<=25){
        while (e.hasMoreElements()) {
            var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
            gMemReporters[mr.path] = mr;}
      }
      if(version>25){
        var handleReport = function(Process, Path, Kind, Units, Amount, Description) {
            gMemReporters[Path] = {};
            gMemReporters[Path].amount = Amount;
        }
        var MEM_HISTOGRAMS = {};
        while (e.hasMoreElements()) {
            let mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
            MEM_HISTOGRAMS[mr.name] = mr.name;
            if(!MEM_HISTOGRAMS[mr.name] || ["resident","private","gfx-surface-image"].indexOf(mr.name)==-1) continue;
        try{
            mr.collectReports(handleReport, null);
            }catch(ex){}
        }
      }
      var workingSet = gMemReporters["resident"].amount;
      var commitmentSize=(typeof(gMemReporters["private"])!="undefined" ? gMemReporters["private"].amount : 0);
      var gfxImage=(typeof(gMemReporters["gfx-surface-image"])!="undefined" ? gMemReporters["gfx-surface-image"].amount : 0);
      var restartMemory = ucjs_MemoryMonitor.getSize(ucjs_MemoryMonitor._maxMemory, true);
      var memoryPanel = document.getElementById("MemoryDisplay");
      memoryPanel.setAttribute("label", ucjs_MemoryMonitor.getSize(workingSet) + ucjs_MemoryMonitor.setPrefix(ucjs_MemoryMonitor._dPrefix));
      memoryPanel.setAttribute("onclick", "openUILinkIn('about:memory','tab')");
      memoryPanel.setAttribute("tooltiptext", 
        ((workingSet) ? "resident: " + ucjs_MemoryMonitor.getSize(workingSet) + " " + ucjs_MemoryMonitor._prefix + "\n" : "") + 
        ((commitmentSize) ? "private: " + ucjs_MemoryMonitor.getSize(commitmentSize) + " " + ucjs_MemoryMonitor._prefix + "\n" : "") + 
        ((gfxImage) ? "gfx-surface-image: " + ucjs_MemoryMonitor.getSize(gfxImage) + " " + ucjs_MemoryMonitor._prefix : "")
      );
     if (workingSet > restartMemory) {
        if (memoryPanel.style.backgroundColor == "red" && ucjs_MemoryMonitor._autoRestart) ucjs_MemoryMonitor.restart();
        else memoryPanel.style.backgroundColor = "red";
      } else if (workingSet > restartMemory * 0.8) memoryPanel.style.backgroundColor = "#FF99FF";
      else if (workingSet > restartMemory * 0.6) memoryPanel.style.backgroundColor = "#FFFF99";
      else memoryPanel.style.backgroundColor = "transparent";
    } catch (e) {
      clearInterval(ucjs_MemoryMonitor.interval);
      alert("ucjs_MemoryMonitor Err:" + e);
    }
  }
}
  
ucjs_MemoryMonitor.init();
@brucmao
上一页 下一页
游客

返回顶部