Memory Monitor ( Firefox 17 + )
Автор: bunda1
Версия: от 28.07.2014.
Описание: Kод показывает в адресной строке расход оперативной памяти в Firefox, по клику на котором потребление памяти будет показана в вкладке подробно по элементам. Сплывающая подсказка у счётчика памяти отображает в MB максимально возможное и текущее заполнение дискового кеша, оффлайн кеша и кеша в оперативной памяти(FF26).
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.

Memory Monitor( Firefox 17-45 )

Выделить код

Код:

// Показывать потребление памяти в адресной строке, от 28.07.2014. ................................
(function () {
   if ( document.getElementById('memoryDisplay') ) return;
    
   // Создать в адресной строке счётчик памяти ....
   var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("urlbar-icons");
   urlbarIcons.insertBefore( memoryDisplay, urlbarIcons.lastChild ); // перед первой иконкой адресной строки
   
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory() + ' MB';  
   self.timer = setInterval(function() { memoryDisplay.label = getMemory() + ' MB' }, 2000 ); // таймер обновляет счётчик раз в 2000мс( 2 сек )
   
   
   // Всплывающая подсказка у счётчика отображает заполнение дискового кеша ....
   var k = 100, mb = 1024 * 1024, str = "",
   cs = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService),
   visitor = { visitDevice: addInfo };

   function addInfo(device, info) {
      str += (str ? "\n" : "") + device[0].toUpperCase() + device.slice(1) + " Cache:  " +
      [info.totalSize, info.maximumSize].map(function(num) Math.round(k * num / mb) / k + " MB").join(" / ");
   };

   memoryDisplay.onmouseenter = function() {
     str = "";
     try { cs.visitEntries(visitor) } catch(e) {};
     memoryDisplay.tooltipText = "Л: Подробно показать потребление памяти в вкладке" + "\n\n" 
        + ( cbu.getPrefs("browser.cache.memory.enable") || cbu.getPrefs("browser.cache.disk.enable") ? str : "Кэш отключен" );
   };
   
   
   // Получить всю занимаемую оперативную память в MB ....
   function getMemory() {            
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          } 
      catch(e) { var memory = reporterManager.resident }; // для Nightly
      
      return ( Math.round( memory/1048576 ) );
   };      
   
   
   // По клику подробно показать потребление памяти в вкладке ....
   memoryDisplay.onclick = function(e) {
      if ( e.button ) return;
       var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") ); 
          
       // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
       memoryTab.addEventListener("pageshow", function c(e) {         
          this.removeEventListener( e.type, c );           

          setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);      
       });  
   };
   
     
   // Css стиль для счётчика ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      #memoryDisplay { -moz-appearance: none !important; margin-left: 2px !important; margin-right: -4px !important; border: 0 !important; min-width: 5.5em; text-align: right; }\
      #memoryDisplay[resetMemory] { color: red !important; }\
   '));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); 


   // Удалять счётчик памяти и другие изменения ....
   addDestructor(function() { 
      sss.unregisterSheet(uri, sss.AGENT_SHEET);
      urlbarIcons.removeChild( memoryDisplay )
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
   
})();

Memory Monitor( Firefox 45+ )

Выделить код

Код:

// Показывать потребление памяти в адресной строке, от 04.03.2017. ................................
(function () {
   if ( document.getElementById('memoryDisplay') ) return;
    
   // Создать в адресной строке счётчик памяти ....
   var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("urlbar-icons");
   urlbarIcons.insertBefore( memoryDisplay, urlbarIcons.lastChild ); // перед первой иконкой адресной строки
   
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory() + ' MB';  
   self.timer = setInterval(function() { memoryDisplay.label = getMemory() + ' MB' }, 2000 ); // таймер обновляет счётчик раз в 2000мс( 2 сек )
   
   
   // Всплывающая подсказка у счётчика отображает заполнение дискового кеша ....
   var data = {
       memory: "Memory Cache:  ",
       disk: "Disk Cache:  ",
       offline: "Offline Cache:  "
   };   
   function getSize(size) {
      if (!size) return size === 0 ? "0" : "?";
      for(var count = -1; size >= 1024; size /= 1024, count++);
      return size.toFixed(2).replace(/0+$/, "").replace(/\.$/, "") + " " + ("KMGT"[count] || "") + "B";
   }
   function setInf(tot, max, type, i) {
      var inf = getSize(tot) + " / " + getSize(max);
      var key = "browser.cache." + type + ".enable";
      if (!Services.prefs.getBoolPref(key)) inf += " (disabled)";
      memoryDisplay.tooltipText = memoryDisplay.tooltipText.replace(zws(i), inf);
   }
   function zws(ind) "\u200B\u200B\u200B".slice(0, ++ind);

   var types = Object.keys(data);
   var ttt = types.map(function(key, i) data[key] + zws(i)).join("\n");
   
   var context = Cu.import("resource://gre/modules/LoadContextInfo.jsm", {}).LoadContextInfo.default;
   memoryDisplay.onmouseenter = function() {
      memoryDisplay.tooltipText = "Л: Показать потребление памяти в вкладке\n" + ttt;
      try {
          var entries = {};
          Services.cache.visitEntries({
          visitDevice: function(device, info) entries[device] = info,
          visitEntry: function() {}
          });
      types.forEach(function(type, i) {
         var info = entries[type];
         setInf(info && info.totalSize, info && info.maximumSize, type, i)
      });
   } 
   catch(ex) {
      Services.cache2 && types.forEach(function(type, i) {
      var func = function(aEntryCount, aConsumption, aCapacity, aDiskDirectory)
                 setInf(aConsumption, aCapacity, type, i);
      var storage = Services.cache2[(type == "offline" ? "app" : type) + "CacheStorage"](context, null);
      try { storage.asyncVisitStorage({onCacheStorageInfo: func}, false) } catch(ex) {};
      });
   }
   };
  
   
   // Получить всю занимаемую оперативную память в MB ....
   function getMemory() {            
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          } 
      catch(e) { var memory = reporterManager.resident }; // для Nightly
      
      return ( Math.round( memory/1048576 ) );
   };      
   
   
   // По клику подробно показать потребление памяти в вкладке ....
   memoryDisplay.onclick = function(e) {
      if ( e.button ) return;
       var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") ); 
          
       // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
       memoryTab.addEventListener("pageshow", function c(e) {         
          this.removeEventListener( e.type, c );           

          setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);      
       });  
   };
   
     
   // Css стиль для счётчика ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      #memoryDisplay { -moz-appearance: none !important; margin-left: 2px !important; margin-right: -4px !important; border: 0 !important; min-width: 5.5em; text-align: right; }\
      #memoryDisplay[resetMemory] { color: red !important; }\
   '));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); 


   // Удалять счётчик памяти и другие изменения ....
   addDestructor(function() { 
      sss.unregisterSheet(uri, sss.AGENT_SHEET);
      urlbarIcons.removeChild( memoryDisplay )
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
   
})();

Memory Monitor как кнопка с выводом расхода оперативной памяти на кнопке:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E222MB%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-2%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20memoryTab%20%3D%20gBrowser.getBrowserForTab%28%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%22about%3Amemory%22%29%20%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20o%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0436%u0434%u0435%u0442%20%u043F%u043E%u043A%u0430%20%u043E%u0442%u043A%u0440%u043E%u0435%u0442%u0441%u044F%20%22about%3Amemory%22%2C%20%u0443%u0434%u0430%u043B%u044F%u0435%u0442%20%u0441%u0435%u0431%u044F%20%u0438%20%u043D%u0430%u0436%u0438%u043C%u0430%u0435%u0442%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0A%20%20%20%20%20%20%20%20%20%20memoryTab.addEventListener%28%22pageshow%22%2C%20function%20c%28e%29%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28%20e.type%2C%20c%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20try%20%7B%20e.originalTarget.getElementById%28%27measureButton%27%29.click%28%29%20%7D%20catch%28e%29%20%7B%7D%20%7D%2C%200%29%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20....%0A%20%20%20%20%20%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%20....%0A%20%20%20%20%20%20%20%20%20%20var%20dir%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29.get%28%22Home%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20dir.exists%28%29%20%29%20dir.remove%28true%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21dir.exists%28%29%20%29%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20%20%20%20%20%20var%20alertService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%20%20%20%20%20%20%20%20%20%20alertService.showAlertNotification%28%27chrome%3A//global/skin/icons/information-16.png%27%2C%20%27%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%27%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20alertService.closeAlert%28%29%20%7D%2C%202500%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A%0A//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u043D%u0430%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u043A%u043D%u043E%u043F%u043A%u0435%20................................%0A%28function%20%28%29%20%7B%0A%20%20%20self.label%20%3D%20getMemory%28%29%20+%20%27MB%27%3B%20%20%0A%20%20%20self.timer%20%3D%20setInterval%28function%28%29%20self.label%20%3D%20getMemory%28%29%20+%20%27MB%27%2C%202000%20%29%3B%20//%20%u0442%u0430%u0439%u043C%u0435%u0440%20%u043E%u0431%u043D%u043E%u0432%u043B%u044F%u0435%u0442%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u0440%u0430%u0437%20%u0432%202000%u043C%u0441%28%202%20%u0441%u0435%u043A%20%29%20%20%20%0A%20%20%20%0A%20%20%20//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0432%20MB%20....%0A%20%20%20function%20getMemory%28%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20reporterManager%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20e%20%3D%20reporterManager.enumerateReporters%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%20%28%20e.hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mr%20%3D%20e.getNext%28%29.QueryInterface%28Ci.nsIMemoryReporter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5Bmr.path%5D%20%3D%20mr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20memory%20%3D%20self%5B%22resident%22%5D.amount%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20memory%20%3D%20reporterManager.resident%20%7D%3B%20//%20%u0434%u043B%u044F%20Nightly%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20return%20%28%20Math.round%28%20memory/1048576%20%29%20%29%3B%0A%20%20%20%7D%3B%20%0A%0A%20%20%20//%20%u0421%u0442%u0438%u043B%u044C%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20....%0A%20%20%20var%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A%20%20%20%25button%25%20.toolbarbutton-icon%20%7B%5C%0A%20%20%20%20%20display%3A%20none%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20.toolbarbutton-text%20%7B%5C%0A%20%20%20%20%20display%3A%20-moz-box%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20%7B%5C%0A%20%20%20%20%20-moz-box-orient%3A%20horizontal%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%27.replace%28/%25button%25/g%2C%20%22%23%22%20+%20_id%29%20%29%29%3B%0A%20%20%20const%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%20%0A%20%20%20%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20....%0A%20%20%20addDestructor%28function%28%29%20%7B%20%0A%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28%20self.timer%20%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%20%20%0A%7D%29%28%29%3B%0A%0A%0A//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0430%u0435%u0442%20%u0437%u0430%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0435%20%u0434%u0438%u0441%u043A%u043E%u0432%u043E%u0433%u043E%20%u043A%u0435%u0448%u0430%20..............%0Avar%20data%20%3D%20%7B%0A%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%7D%3B%20%20%20%0Afunction%20getSize%28size%29%20%7B%0A%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%7D%0Afunction%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20self.tooltipText%20%3D%20self.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%7D%0Afunction%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0Avar%20types%20%3D%20Object.keys%28data%29%3B%0Avar%20ttt%20%3D%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%20%20%20%0Avar%20context%20%3D%20Cu.import%28%22resource%3A//gre/modules/LoadContextInfo.jsm%22%2C%20%7B%7D%29.LoadContextInfo.default%3B%0Aself.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20self.tooltipText%20%3D%20%22%u041B%3A%20%u041F%u043E%u0434%u0440%u043E%u0431%u043D%u043E%20%u043F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%5Cn%u0421%3A%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash-%u043A%u0443%u043A%u0438%5Cn%5Cn%22%20+%20ttt%3B%0A%20%20%20try%20%7B%0A%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%20%0A%20%20%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28context%2C%20null%29%3B%0A%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Спасибо,  полезный код.  Вот только после ПКМ - настроить получается такая картинаc6c73c6cc5e7.jpg
Сколько раз нажимаю ПКМ, столько дополнительных МВ получается.

mserv
Спасибо, а то я забыл про эту проблему.
Я исправил код.

bunda1 пишет

Я исправил код.

Спасибо, теперь всё ОК.
PS Не останавливайтесь на достигнутом, добавьте загрузку процессора.smile.gif

bunda1
подскажи, что подправить в коде, чтобы убрать появившийся разделитель между Memory Monitor и history-dropmarker ?
Просто дропмаркер у меня скрыт стилем и образовывающийся разделитель ни к чему...

Inko7
в userChrome.css

Выделить код

Код:

#MemoryDisplay{
-moz-appearance: none !important;
border: 0px !important;}

bunda1
И ещё подскажите плиз, как уменьшить интервалы.
                                                                   874b14a0a9b8.jpg

06-11-2011 00:34:09
bunda1
У меня показатели отличаются от диспетчера задач на 70-130МБ  :(

mserv
в userChrome.css

Выделить код

Код:

#MemoryDisplay{
-moz-appearance: none !important;
border: 0px !important;
padding:0px !important;
margin-right:-5px !important;
margin-left:-3px !important;
}

:(
У меня показатели точно совпадают с диспетчером задач.
пробуй так:
about:config
dom.ipc.plugins.enabled - false

mserv пишет

У меня показатели отличаются от диспетчера задач на 70-130МБ

А диспетчер задач "родной"(виндовый)? Process Hacker показывает зарезервированную память, taskmanager - рабочий набор, а Process Explorer - и то, и другое. У меня совпадает c диспетчером задач :)
s_1320526957_4141461_4ff6b10461.png

bunda1 пишет

в userChrome.css

Спасибо

bunda1 пишет

пробуй так:
about:config
dom.ipc.plugins.enabled - false

Так вообще не показывает, остаётся только МВ:(

06-11-2011 01:33:15
bunda1
Создал новую кнопку только с этим кодом, и стало всё ОК. :beer:

В  вашем стиле надо заменить statusbarpanel на #MemoryDisplay, иначе может получиться маленький хаос в панели дополнений.

mserv
Спасибо, заменю.

На Memory Monitor можно навесить свою команду и он будет работать как CB кнопка.
Пример, после

Выделить код

Код:

var go = urlbar.lastChild;
    urlbar.insertBefore(memoryPanel, go)

добавляем

Выделить код

Код:

memoryPanel.addEventListener("click", function(){
       //Добавить страницу в закладки    
       PlacesCommandHook.bookmarkLink(PlacesUtils.bookmarksMenuFolderId, content.location.href, content.document.title);
}, true);

или добавляем

Выделить код

Код:

memoryPanel.addEventListener("click", function(){
//Без запроса, добавить страницу в закладки в Меню закладок.
var bmsvc = Components. classes ["@mozilla.org/browser/nav-bookmarks-service;1"].
        getService (Components. interfaces. nsINavBookmarksService);

var br = gBrowser. getBrowserForTab (gBrowser. mCurrentTab);
bmsvc. insertBookmark (bmsvc. bookmarksMenuFolder, br. webNavigation. currentURI, bmsvc. DEFAULT_INDEX, gBrowser. mCurrentTab. label);
}, true);

На самом деле сомнительно решение заменить звездочку:/

Kamui пишет

На самом деле сомнительно решение заменить звездочку:/

Почему.

А мне идея понравилась, но не понравилось, что не работает с Add Bookmark Here ², поэтому оставил первый вариант [CB]Memory Monitor.

bunda1 пишет

Почему.

Звездочка как-то привычнее, да и по логике эти функции не связаны друг с другом. А еще на скрине видно что индикатор немного залезает на кнопку go. У меня например звездочка и go на одном месте находятся и заменяют друг друга (когда фокус на странице там звездочка, когда в адресной строке, там go), а тут такое не получится, потому что индикатор шире чем кнопка go/

Kamui пишет

а тут такое не получится, потому что индикатор шире чем кнопка go/

Замени _dPrefix: true, на _dPrefix: false, и места станет больше. :)

bunda1 пишет

Удаляет из адресной строки star-button(звездочка).

А можете сделать вариант кода с заменой не звёздочки, а треугольника выпадающего списка?

Kamui пишет

А еще на скрине видно что индикатор немного залезает на кнопку go.

Не проблема, если изменить #MemoryDisplay{margin-right:

mserv пишет

А можете сделать вариант кода с заменой не звёздочки, а треугольника выпадающего списка?

К сожалению, не знаю как это сделать.
Но можно зделать так - кнопка go становится желтого цвета, если текущая страница уже есть в закладках + если щелкнуть правой клавишей мыши на go button, откроется диалог добавление страницы в закладки.

bunda1 пишет

Но можно зделать так - кнопка go становится желтого цвета, если текущая страница уже есть в закладках + если щелкнуть правой клавишей мыши на go button, откроется диалог добавление страницы в закладки.

А у меня этой go нет совсем, и уже не помню, куда она делась, когда я её убрал…  scratch_one-s_head.gifДа и как управление закладками меня устраивает звёздочка, я просто просил убрать треугольник, а его функции приделать к [CB]Memory Monitor, что бы сэкономить место.

mserv пишет

bunda1
У меня показатели отличаются от диспетчера задач на 70-130МБ

У меня на 2 - 3МБ

на 5мб разница, не думаю что это много)

WW пишет

на 5мб разница, не думаю что это много)

Да не, не много. :)

Не успевает за диспетчером обновятся. :D

AKBA пишет

Не успевает за диспетчером обновятся. :D

интервал обновления можно изменить в коде

Выделить код

Код:

_interval: 2000, //ms

Подскажите а можно ли сделать так что бы при открытии Firefox - Memory monitor запускался автоматически и во всех открытых окнах? Спасибо

Pippo78 пишет

Подскажите а можно ли сделать так что бы при открытии Firefox - Memory monitor запускался автоматически и во всех открытых окнах? Спасибо

запускался автоматически - а разве не запускается?
и во всех открытых окнах - тоже вроде работает.
может код не положил в инициализацию а в вкладку код?

bunda1 пишет

запускался автоматически - а разве не запускается?

Кстати, всё забываю сказать. У меня довольно часто бывает, что монитор сразу не отображается, приходится перезагружать [nightly], иногда 2-3 раза.

mserv пишет

Кстати, всё забываю сказать. У меня довольно часто бывает, что монитор сразу не отображается, приходится перезагружать [nightly], иногда 2-3 раза.

Замени

Выделить код

Код:

if (!document.getElementById("MemoryDisplay")) ucjs_MemoryMonitor.init();

на

Выделить код

Код:

if (!document.getElementById("MemoryDisplay")) setTimeout(function() {ucjs_MemoryMonitor.init() }, 1000);

bunda1 Большое спасибо за помощь, всё работает как надо, это я накосячил-код не положил в инициализацию

bunda1 пишет

Замени

Спасибо, буду тестировать, пока вроде работает.

Приветствую народ! С переходом на 12 лису, установил по новой мемори монитор, и он что то стал болльше показывать,  вот к примеру: в диспетчере Fx в данный момент ест 378444кб + 7200 плугин контейнер = 385644, а у меня монитор показывает, что 459мб. Или ещё что то входит в монитор?

WW пишет

Приветствую народ! С переходом на 12 лису, установил по новой мемори монитор, и он что то стал болльше показывать,  вот к примеру: в диспетчере Fx в данный момент ест 378444кб + 7200 плугин контейнер = 385644, а у меня монитор показывает, что 459мб. Или ещё что то входит в монитор?

Memory Monitor показывает сколько потребляет памяти Firefox и у меня на FF12 показывает правильно. Не знаю в чём тут дело, может это поможет 06-11-2011 00:29:22

На [nightly] кнопка перестала работать, просьба оживить.

voqabuhe пишет

На [nightly] кнопка перестала работать, просьба оживить.

Да, не работает и мне пока не понятно почему.

И на [aurora] тоже не работает:(

SendAbuse пишет

И на [aurora] тоже не работает:(

с 13 [firefox] не работает и на [seamonkey] 2.9 может связано с адресной строкой?

feas пишет

с 13 [firefox] не работает

У меня с 14 отвалилась, на 13 работала.

bunda1

Выделить код

Код:

//var commitmentSize = gMemReporters["private"].amount;
      //var gfxImage = gMemReporters["gfx-surface-image"].amount;
2k1dmg пишет

//var commitmentSize = gMemReporters["private"].amount;
//var gfxImage = gMemReporters["gfx-surface-image"].amount;

Ура, работает. Молодец :beer:

2k1dmg
Большое спасибо тебе. :)

Исправил Memory Monitor(Firefox 7.1 +)

Memory Monitor (Firefox 7.1 +)
Исправил ошибки:
Memory Monitor при изменении расхода оперативной памяти на трехзначную число(например 65MB > 120MB) удлинялся, из за чего дергались другие кнопки в адресной строке.

на UX просто исчезает при перезапуске, снося за собой кнопку
А при новом добавлении работает

sthprog пишет

на UX просто исчезает при перезапуске, снося за собой кнопку

А CB пофикшено? У меня не исчезает.

Починил, спасибо

Здравствуйте.  Подскажите, пожалуйста, а можно разместить Memory Monitor  в "Панели дополнений" (снизу экрана)?  Что надо изменить в коде?

PEAKTOP пишет

Здравствуйте.  Подскажите, пожалуйста, а можно разместить Memory Monitor  в "Панели дополнений" (снизу экрана)?  Что надо изменить в коде?

Заменить в коде:

Выделить код

Код:

var urlbar = document.getElementById("urlbar-icons");
var go = urlbar.lastChild;
urlbar.insertBefore(memoryPanel, go);

на

Выделить код

Код:

document.getElementById("status-bar").insertBefore(memoryPanel, null);

рестарт.

Кнопка вызывает самопроизвольный перезапуск FF версий 18.0.2, 19.0, 19.0.1, 20b1, 20b2 и 21а2. Как можно от это побороть? В какой именно момент происходит перезапуск и чем он вызван понять не удалось, т.к. нет механизма для отслеживания. Могу сказать одно - память занимаемая FF около 1200-1600 Мб и открыто около 100 вкладок.

PEAKTOP

скрытый текст

PEAKTOP пишет

В какой именно момент происходит перезапуск и чем он вызван понять не удалось

Выделить код

Код:

if (workingSet > restartMemory) {
        ucjs_MemoryMonitor.restart();
      }
PEAKTOP пишет

Как можно от это побороть?

Выделить код

Код:

_maxMemory: Infinity, // 1500,


bunda1
И правда, хорошо бы рестарт в описание добавить, на всякий случай :)
Кстати, интересно, если такую строчку добавить,
у тебя тоже тикает как true ?
скрытый текст

Выделить код

Код:

var workingSet = gMemReporters["resident"].amount;
Services.console.logStringMessage("MM: mgr.resident == workingSet is " + (mgr.resident == workingSet));
      var restartMemory = ucjs_MemoryMonitor.getSize(ucjs_MemoryMonitor._maxMemory, true);

Dumby пишет

bunda1
И правда, хорошо бы рестарт в описание добавить, на всякий случай :)
Кстати, интересно, если такую строчку добавить,
у тебя тоже тикает как true ?

Добавлю, кто бы мог подумать что у кого то браузер потребляет 1200-1600 Мб.
Да true постоянно.

Для Firefox 26

Выделить код

Код:

var e = mgr.enumerateReporters();
      var gMemReporters = {};
      while (e.hasMoreElements()) {
        var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
        gMemReporters[mr.path] = mr;
      }
      var workingSet = gMemReporters["resident"].amount;

заменить на:

Выделить код

Код:

var workingSet = mgr.resident;

скрытый текст

Выделить код

Код:

var ucjs_MemoryMonitor = {
    _interval: 2000, //ms
    _maxMemory: 700, // если больше, то текст индикатора станет жирным
    _prefix: "MiB", //B, KB, KiB, MB, MiB, GB, GiB
    _dPrefix: true,
    _inURLbar: true, // true - в адресной строке, false в статусбаре(панель дополнений)

    interval: null,

    init: function () {
        if (!document.getElementById("ucjs_MemoryMonitor")) {
            var memoryPanel = document.createElement("statusbarpanel");
            memoryPanel.id = "ucjs_MemoryMonitor";
            memoryPanel.setAttribute("label", this.setPrefix(this._dPrefix));

            if (this._inURLbar) {
                document.getElementById("urlbar-icons").appendChild(memoryPanel);
            } else {
                try {
                    document.getElementById("status-bar").appendChild(memoryPanel);
                } catch (e) {
                    document.getElementById("addon-bar").appendChild(memoryPanel);
                }

            }
        }
        this.start();
        this.interval = setInterval(this.start, this._interval);

    },
    uninit: function () {
        clearInterval(ucjs_MemoryMonitor.interval);
    },

    destroy: function () {
        this.uninit();
        var m = document.getElementById("ucjs_MemoryMonitor");
        if (m)
            m.parentNode.removeChild(m);
        ucjs_MemoryMonitor = null;
    },

    addFigure: function (str) {
        var num = new String(str).replace(/,/g, "");
        while (num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
        return num;
    },

    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 = {};
            while (e.hasMoreElements()) {
                var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                gMemReporters[mr.path] = mr;
            };
            var workingSet = gMemReporters["resident"].amount;
            */
            var workingSet = mgr.resident;
            var restartMemory = ucjs_MemoryMonitor.getSize(ucjs_MemoryMonitor._maxMemory, true);
            var memoryPanel = document.getElementById("ucjs_MemoryMonitor");
            memoryPanel.setAttribute("label", ucjs_MemoryMonitor.getSize(workingSet) + ucjs_MemoryMonitor.setPrefix(ucjs_MemoryMonitor._dPrefix));
            //memoryPanel.setAttribute("memload", "norm");
            if (workingSet > restartMemory) {
                memoryPanel.setAttribute("memload", "high");
            } else {
                memoryPanel.setAttribute("memload", "norm");
            }
        } catch (e) {
            clearInterval(ucjs_MemoryMonitor.interval);
        }
    }

};

var cssStr = ('\
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");\n\
@-moz-document url("' + window.location.href + '") {\n\
    #ucjs_MemoryMonitor {\n\
        /*font-size: -moz-use-system-font !important;*/\n\
        -moz-appearance: none !important;\n\
        padding: 0 !important;\n\
        margin: 0 !important;\n\
        background: transparent !important;\n\
        border: 0 !important;\n\
    }\n\
    #ucjs_MemoryMonitor > .statusbarpanel-text {\n\
        font-size: 1em !important;\n\
        margin-top: 0 !important;\n\
        margin-bottom: 0 !important;\n\
        -moz-margin-start: 3px !important;\n\
        -moz-margin-end: 3px !important;\n\
    }\n\
    #ucjs_MemoryMonitor[memload="high"] .statusbarpanel-text {\n\
        font-weight: bold !important;\n\
    }\n\
}\n\
');
var cssURI = this.cssURI = Components.classes["@mozilla.org/network/io-service;1"]
    .getService(Components.interfaces.nsIIOService)
    .newURI("data:text/css," + encodeURIComponent(cssStr), null, null);
var sss = this.sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
    .getService(Components.interfaces.nsIStyleSheetService);
if (!sss.sheetRegistered(cssURI, sss.USER_SHEET))
    sss.loadAndRegisterSheet(cssURI, sss.USER_SHEET);

if (typeof addDestructor == "function" &&  // userChromeJS/uc
    addDestructor != ("addDestructor" in window && window.addDestructor)) {
    addDestructor(function (reason) {
        if (reason != "destructor") {
            let sss = this.sss;
            let cssURI = this.cssURI;
            if (sss.sheetRegistered(cssURI, sss.USER_SHEET))
                sss.unregisterSheet(cssURI, sss.USER_SHEET);
        }
        if (ucjs_MemoryMonitor) {
            ucjs_MemoryMonitor.destroy();
        }
    }, this);
} 
ucjs_MemoryMonitor.init();

Насчет рестарта посмотрите, как справились здесь:https://github.com/ardiman/userChrome.j … rMod.uc.js

2k1dmg пишет

Для Firefox 26

спасиб =)

Решил создать почти новый профиль, перенес папку с кнопками CB, все отвалились, костыль с предыдущей страницы не работает :( что можно сделать?

sthprog пишет

Решил создать почти новый профиль, перенес папку с кнопками CB, все отвалились, костыль с предыдущей страницы не работает :( что можно сделать?

Что за костыль?

bunda1 пишет

sthprog пишет: Решил создать почти новый профиль, перенес папку с кнопками CB, все отвалились, костыль с предыдущей страницы не работает  что можно сделать?Что за костыль?

этот, в прошлый раз советовали

sthprog
custombuttons-0.0.5.7pre1-20130923

bunda1 пишет

sthprogcustombuttons-0.0.5.7pre1-20130923

Ура, заработало, спасибо.

Мне кажется, что для экономии места можно не показывать "МВ", а только само число мегабайт.
Кроме того можно показывать только 3 младшие цифры, а 1200МБ от 200МБ можно различить  цветом фона :)
Индикатор можно ещё в аддон баре показывать - "addon-bar". Это почти там же где и "status-bar", чуть левее в панели закладок.
Интересно - можно ли его помещать ещё в каком-то месте - панели закладок, таб-баре и т.д.?

difabor пишет

Мне кажется, что для экономии места можно не показывать "МВ", а только само число мегабайт.

Дело вкуса или переделать просишь?

difabor пишет

Кроме того можно показывать только 3 младшие цифры, а 1200МБ от 200МБ можно различить  цветом фона :)

Ну можно конечно, но почему именно эти значения?

difabor пишет

Интересно - можно ли его помещать ещё в каком-то месте - панели закладок, таб-баре и т.д.?

Легко.

difabor пишет

2. Если текст состоит из нескольких символов, можно ли устанавливать цвета отдельно для каждого символа?

Можно но сложно, я не сделаю.

bunda1 пишет
difabor пишет

Мне кажется, что для экономии места можно не показывать "МВ", а только само число мегабайт.

Дело вкуса или переделать просишь?

difabor пишет

Кроме того можно показывать только 3 младшие цифры, а 1200МБ от 200МБ можно различить  цветом фона :)

Ну можно конечно, но почему именно эти значения?

difabor пишет

Интересно - можно ли его помещать ещё в каком-то месте - панели закладок, таб-баре и т.д.?

Легко.

difabor пишет

2. Если текст состоит из нескольких символов, можно ли устанавливать цвета отдельно для каждого символа?

Можно но сложно, я не сделаю.

Спасибо!
Нет, нет, я не прошу Вас переделывать, я хочу сам научиться переделывать! (МВ я сам смогу убрать).
То же касается 3 младших цифр - это я сам постараюсь - всё-таки надо же мне учиться :)
А вот как указать другую панель - я не знаю  и если бы Вы мне просто показали как это делается - был бы Вам очень благодарен.
Кроме того, если бы Вы мне просто показали как менять цвет всего текста - я бы Вам был очень признателен.
Что же касается установки цветов отдельных цифр, то очевидно, что для Memory Monitor это не нужно, но знать, как это делается я бы хотел...

Ох тяжко, мне не русскому человеку трудно объяснять :(

Цвета отдельных цифр - наверно нужно создать и объединить в адресной строке несколько маленьких разноцветных панелей которые должены отображать только одну цифру расхода памяти..

Как указать другую панель здесь почитай Метод appendChild() – добавление дочернего узла к XML элементу | okITgo.ru и Метод insertBefore() XML Элемента | okITgo.ru
Для примера ниже в коде который я переписал для наглядности замени:
var urlbarIcons = document.getElementById("urlbar-icons");
на:
var urlbarIcons = document.getElementById("PersonalToolbar"); //это панель закладок

Выделить код

Код:

// Показывать потребление памяти в адресной строке, от 12.11.2013. ................................
(function func() {  
   // Создать в адресной строке счётчик памяти ....
   var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("urlbar-icons");
   urlbarIcons.insertBefore( memoryDisplay, urlbarIcons.lastChild ); // перед первой иконкой адресной строки
   addDestructor(function() { urlbarIcons.removeChild( memoryDisplay ) });
   
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory();  
   setInterval(function() { memoryDisplay.label = getMemory() }, 2000 ); // таймер обновляет счётчик, по умолчанию в 2000мс( 2 сек )   
   
   
   // Получить потребление памяти в MB ....
   function getMemory() {            
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      var e = reporterManager.enumerateReporters();
      while ( e.hasMoreElements() ) {
              var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
              func[mr.path] = mr;
              }
      var memory = func["resident"].amount;
      return ( Math.round( memory/1048576 )+10 );
   };      

      
   // Css стиль для счётчика ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      #memoryDisplay { -moz-appearance: none !important; border: 0 !important; min-width: 5.5em; text-align: right; }\
      #memoryDisplay{ color: #FF1493 !important; }\
   '));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); 
   addDestructor(function() { sss.unregisterSheet(uri, sss.AGENT_SHEET) });  

})();

Цвет всего текста - #memoryDisplay{ color: #FF1493 !important; }

bunda1 можно подставить в подсказку различные показатели типа памяти из about:memory:
например:
       var commitmentSize=(typeof(gMemReporters["private"])!="undefined" ? gMemReporters["private"].amount : 0);
       var gfxImage=(typeof(gMemReporters["vsize"])!="undefined" ? gMemReporters["vsize"].amount : 0);
     
      memoryPanel.setAttribute("tooltiptext",
        ((workingSet) ? "resident: " + ucjs_MemoryMonitor.getSize(workingSet) + " " + ucjs_MemoryMonitor._prefix + "\n" : "") +
        ((commitmentSize) ? "private: " + ucjs_MemoryMonitor.getSize(commitmentSize) + " " + ucjs_MemoryMonitor._prefix + "\n" : "") +
                ((gfxImage) ? "vsize: " + ucjs_MemoryMonitor.getSize(gfxImage) + " " + ucjs_MemoryMonitor._prefix + "\n" : "")
        );

Из того что показывает кнопка - соответствует: значению resident.
В диспетчере задач  - другое значение.
Можете объяснить (может быть и ни к вам вопрос, а ко всем) - что мы наблюдаем на этой кнопке.? Чисто спортивный интерес.

Andrey_Krropotkin пишет

Из того что показывает кнопка - соответствует: значению resident.
В диспетчере задач  - другое значение.

У меня соответствует тому что показывает диспетчер задач, разница около 5-10MB
0dmc.jpg

13-11-2013 00:31:08
Я так понимаю resident и enumerateReporters() отдаёт всю занимаемую оперативную память.

bunda1 пишет

Ох тяжко, мне не русскому человеку трудно объяснять :(
...

Как указать другую панель здесь почитай Метод appendChild() – добавление дочернего узла к XML элементу | okITgo.ru и Метод insertBefore() XML Элемента | okITgo.ru
Для примера ниже в коде который я переписал для наглядности замени:
var urlbarIcons = document.getElementById("urlbar-icons");
на:
var urlbarIcons = document.getElementById("PersonalToolbar"); //это панель закладок

Огромнейшее спасибо!appl.gif
А как называется таб бар (бар вкладок) и может есть место, где перечислены названия всех тулбаров?

difabor пишет

А как называется таб бар (бар вкладок) и может есть место, где перечислены названия всех тулбаров?

TabsToolbar

bunda1 пишет
difabor пишет

А как называется таб бар (бар вкладок) и может есть место, где перечислены названия всех тулбаров?

TabsToolbar

Спасибо большое!
Подстраиваю под свои нужды Ваш монитор - скорее, с целью научиться чему либо.
Заодно обнаружил, что personal-bookmarks это не PersonalToolbar и можно добавить и к personal-bookmarks - тогда монитор можно перетаскивать вместе с закладками куда угодно :)
Для Вас, конечно, это не новость, а вот я открываю для себя Америки :)

difabor
Также можно выводить расход памяти или другие данные прямо на Сustom Buttons кнопку:

Выделить код

Код:

// Показывать потребление памяти на текущей кнопке, от 12.11.2013. ................................
(function () {  
   self.label = getMemory();  
   self.timer = setInterval(function() { self.label = getMemory() }, 2000 ); // таймер обновляет счётчик раз в 2000мс( 2 сек )   
   
   // Получить потребление памяти в MB ....
   function getMemory() {         
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      var e = reporterManager.enumerateReporters();
      while ( e.hasMoreElements() ) {
              var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
              self[mr.path] = mr;
              }
      var memory = self["resident"].amount;
      return ( Math.round( memory/1048576 ) );
   };

   // Стиль добавляет текст на кнопку ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
   %button% .toolbarbutton-icon {\
     display: none !important;\
   }\
   %button% .toolbarbutton-text {\
     display: -moz-box !important;\
   }\
   %button% {\
     -moz-box-orient: horizontal !important;\
   }\
   '.replace(/%button%/g, "#" + _id) ));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); 
   
   // Удалять изменения ....
   addDestructor(function() { 
      sss.unregisterSheet(uri, sss.AGENT_SHEET);
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
     
})();
bunda1 пишет

Добавлены новые возможности:
Теперь Левый клик в адресной строке на расходе оперативной памяти открывает в новой вкладке потребление памяти(about:memory) подробно по элементам.

В [nightly] открывает пустую страницу, с названием вкладки about:memory

voqabuhe пишет

В [nightly] открывает пустую страницу, с названием вкладки about:memory

У меня на [nightly] проблем нет, что будет если просто открыть about:memory из адресной строки.

bunda1
Через адресную открывается. А если через кнопку, то сначала открывается пустая страница, потом жму в адресной строке Enter, тогда открывается about:memory

voqabuhe
Не понятная проблема, может в коде замени:

Выделить код

Код:

var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") ); 
          
       // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
       memoryTab.addEventListener("pageshow", function c(e) {         
          this.removeEventListener( e.type, c );           

          setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);

на:

Выделить код

Код:

gBrowser.selectedTab = gBrowser.addTab("about:memory");

bunda1
Так вообще перестала работать, совсем исчезла вместе с Изменить масштаб, в одной кнопке были.

Упс, пропустил }); за  setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);

bunda1
Так ничего не изменилось, работает как в первом варианте №72

А если в новой кнопке запустить gBrowser.selectedTab = gBrowser.addTab("about:memory");

bunda1
Результат такой же.

16-11-2013 00:51:36
Странно, несколько раз открыла пустую вкладку, а теперь вообще не работает

Ну тогда не знаю :(

mserv пишет

bunda1
И ещё подскажите плиз, как уменьшить интервалы.
                                                                   http://s006.radikal.ru/i215/1111/38/874b14a0a9b8.jpg

Я уменьшил их так:

Выделить код

Код:

memoryPanel.style.paddingLeft  = "0px";
memoryPanel.style.paddingRight = "0px";

Не намного, конечно, но чуть-чуть уменьшил  :)

difabor пишет

Не намного, конечно, но чуть-чуть уменьшил

Ну наверное надо минусовые значения поставить вместо нуля, чтобы ещё уменьшить интервал?
Для уменьшения интервала между значением и единицей измерения можно убрать пробел между апострофом и MB.
memoryDisplay.label = getMemory() + ' MB';

difabor
Попробуй вот это:
memoryDisplay.style.cssText = "-moz-appearance: none; border: 0; padding: 0; margin-right:-4px; margin-left:-2px;"; // Css стиль для счётчика

Andrey_Krropotkin
так лучше, спасибо.

Andrey_Krropotkin пишет

difabor
Попробуй вот это:
memoryDisplay.style.cssText = "-moz-appearance: none; border: 0; padding: 0; margin-right:-4px; margin-left:-2px;"; // Css стиль для счётчика

Спасибо!!!

Подскажите, плз, в чём может быть проблема.
Их теперь как бы два монитора:
http://img.flashtux.org/img1332d30b231x3f91c890.jpg

Удалял и создавал заново. Делал отдельную кнопку и клал в существующую.
Всё без толку.

Может обнови Сustom Buttons, проверь на чистом профиле. Вообще то такое возможно только если ты установил два таких кода :/

bunda1 пишет

только если ты установил два таких кода

Не, ну я ещё не совсем из ума выжил! :D
Сustom Buttons стоит последняя версия. Ставил также и pre-версию.
На чистом, голом профиле, естественно, работает нормально.
Вообщем, искать по отдельности, что же мешает, времени и желания нет.
Благо, сохранил старый код. Буду им пользоваться.
Меня терзают смутные сомнения, что виноват Addons in Urlbar. :mad:
Спасибо за участие!

bunda1 а можно ли в текущей версии Memory Monitor сделать так чтобы при достижении отметки например 1000 MB  текст становился жирным выделенным. Спасибо.

Pippo78 пишет

bunda1 а можно ли в текущей версии Memory Monitor сделать так чтобы при достижении отметки например 1000 MB  текст становился жирным выделенным. Спасибо.

Замени в коде:

Выделить код

Код:

self.timer = setInterval(function() { memoryDisplay.label = getMemory() + ' MB' }, 2000 ); // таймер обновляет счётчик раз в 2000мс( 2 сек )

на:

Выделить код

Код:

self.timer = setInterval(function() {
      var m = getMemory();
      memoryDisplay.label = m + ' MB';
      memoryDisplay.style.fontWeight = (m > 1000) ? 'bold' : '';
   }, 2000 );

bunda1 большое спасибо!:D

bunda1, а что надо в коде заменить для размещения монитора в панели дополнений (статусной строке)?

PEAKTOP пишет

bunda1, а что надо в коде заменить для размещения монитора в панели дополнений (статусной строке)?

var urlbarIcons = document.getElementById("urlbar-icons"); надо заменить на var urlbarIcons = document.getElementById("status-bar"); или на "addon-bar" (это не то же самое, но разница небольшая)

bunda1
А можно объединить 2 кнопки?
Л: Подробно показать потребление памяти в вкладке (Кнопка Memory Monitor)
R: Очистил кеш и удалил Flash кукиси (Кнопка Clear Cache / Delete flash cookie)
Мне кажется, было бы так удобно. Всё равно всплывающие подсказки у них одинаковые. ;)

Хорошо.

А что происходит при удалении Flash кукиси? Пароли сохраняются?
Я попытался найти объяснение - что такое Flash кукиси, но всё, что я нашёл - это то, что эти кукиси доступны всем браузерам.

bunda1 пишет

Andrey_Krropotkin пишет: Из того что показывает кнопка - соответствует: значению resident.В диспетчере задач  - другое значение.У меня соответствует тому что показывает диспетчер задач, разница около 5-10MBДобавлено 12-11-2013 22:31:08Я так понимаю resident и enumerateReporters() отдаёт всю занимаемую оперативную память.
                    Отредактировано bunda1 (12-11-2013 22:31:08)

Добрый день.

Чего то мониторчик стабильно подбрехивает на + 40 МБ.

Вин 7 [firefox] -26

ДЗ - Винды показывает 190, монитор 230.

Где можно поправить?

nafanja333
У меня на на FF26 и Вин 7 примерно соответствует разница максимум 10 MB не знаю в чём тут дело.
Может измени время обновления монитора в:

Выделить код

Код:

self.timer = setInterval(function() { memoryDisplay.label = getMemory() + ' MB' }, 2000 ); // таймер обновляет счётчик раз в 2000мс( 2 сек )

20-12-2013 17:21:30
vfcn.jpg

20-12-2013 17:22:34
Наверно надо добавить 10.

У меня

Выделить код

Код:

var mrm = Cc["@mozilla.org/memory-reporter-manager;1"]
    .getService(Ci.nsIMemoryReporterManager);
mrm.resident/1024;

совпадает с Physical Memory – Working Set в Process Explorer'е.

20-12-2013 17:48:37
Во встроенном диспетчере задач в Windows 7 это столбец «Память – рабочий набор», тогда как по умолчанию выводится «частный рабочий набор» («WS Private» в Process Explorer'e).

Спасибо за разъяснения Infocatcher
Действительно в других программах совпадает:
27qj.jpg

Спасибо.

С прогой Process Explorer'е. есть расхождение в 15- 18 мб, а так вроде бы ОК.

bunda1
Доброго времени. Уже в этой теме спрашивал, у самого сделать не получилось №93.
Сейчас появилась ещё одна идея. Можно во всплывающем окне кнопки (выделено "1") показывать сумму "Plugin Flash: xxx MB" (одной цифрой, это сумма plugin-container.exe + все дочерние процессы) (выделено на скриншоте "2")?
Точность цифр не особенно важна, можно как показывает сейчас [firefox] использует +/- 20 MB.

скрытый текст
gt3p2mA.png

xrun1 пишет

bunda1
А можно объединить 2 кнопки?
Л: Подробно показать потребление памяти в вкладке (Кнопка Memory Monitor)
R: Очистил кеш и удалил Flash кукиси (Кнопка Clear Cache / Delete flash cookie)
Мне кажется, было бы так удобно. Всё равно всплывающие подсказки у них одинаковые. ;)

Выделить код

Код:

// Показывать потребление памяти в адресной строке, от 20.12.2013. ................................
(function () {  
   // Создать в адресной строке счётчик памяти ....
   var memoryDisplay = document.createElement("statusbarpanel");
   memoryDisplay.setAttribute("context", "event.stopPropagation()");
   var urlbarIcons = document.getElementById("urlbar-icons");
   urlbarIcons.insertBefore( memoryDisplay, urlbarIcons.lastChild ); // перед первой иконкой адресной строки
            
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory() + ' MB'; 
   memoryDisplay.style.cssText = "-moz-appearance: none; border: 0; min-width: 5.5em; text-align: right;"; // Css стиль для счётчика
   self.timer = setInterval(function() { memoryDisplay.label = getMemory() + ' MB' }, 2000 ); // таймер обновляет счётчик раз в 2000мс( 2 сек ) 
   
   
   // Всплывающая подсказка у счётчика отображает заполнение дискового кеша, автор кода 'Dumby' ....
   var k = 100, mb = 1024 * 1024, str = "",
   cs = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService),
   visitor = { visitDevice: addInfo };

   function addInfo(device, info) {
      str += (str ? "\n" : "") + device[0].toUpperCase() + device.slice(1) + " Cache:  " +
      [info.totalSize, info.maximumSize].map(function(num) Math.round(k * num / mb) / k + " MB").join(" / ");
   };

   memoryDisplay.onmouseenter = function() {
     str = "";
     cs.visitEntries(visitor);
     memoryDisplay.tooltipText = "Л: Подробно показать потребление памяти в вкладке" + "\n" +
                                 "Р: Очистить кэш и удалить Flash кукисы" + "\n\n" + str;
   };
   
   
   // Получить всю занимаемую оперативную память в MB ....
   function getMemory() {            
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          } 
      catch(e) { var memory = reporterManager.resident; } // FF26 - Nightly
      
      return ( Math.round( memory/1048576 ) );
   };      
   
   
   // Отслеживать клики на счётчике памяти ....
   memoryDisplay.onclick = function(e) {
       // по ЛКМ подробно показать потребление памяти в вкладке
       if ( e.button == 0 ) {
           var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") ); 
          
           // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
           memoryTab.addEventListener("pageshow", function c(e) {         
              this.removeEventListener( e.type, c );
              setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);      
           })
           }

      // по ПКМ очистить кэш и удалить Flash кукисы
      if ( e.button == 2 ) {
           // очистить кэш ....
           var cacheService = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService);
           cacheService.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
           cacheService.evictEntries(Ci.nsICache.STORE_ON_DISK);

           // удалить Flash кукисы ....
           var dir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("Home", Ci.nsIFile);
           dir.append("Application Data");
           dir.append("Macromedia");
           if ( dir.exists() ) dir.remove(true);
           if ( !dir.exists() ) dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);

           // всплывающее сообщение ....
           Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).
           showAlertNotification("chrome://global/skin/icons/question-16.png", self.label, 'Очистил кеш и удалил Flash кукиси', false, "", null, "");
           }
  
   };
   
   
   // Удалять счётчик памяти и другие изменения ....
   addDestructor(function() { 
      urlbarIcons.removeChild( memoryDisplay )
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
})();

А вот как получить память что расходует Plugin Flash я не знаю :(

bunda1
Спасибо. Мне удобнее пользоваться одной кнопкой в адресной строке, так как панель дополнений у меня обычно отключена.

bunda1 пишет

А вот как получить память что расходует Plugin Flash я не знаю

Значит буду пользоваться Process Explorer для мониторинга и дальше. Ещё раз, спасибо за внимание и помощь.

xrun1 пишет

Значит буду пользоваться Process Explorer для мониторинга и дальше. Ещё раз, спасибо за внимание и помощь.

Можно отключить plugin-container и смотреть общий расход памяти.

bunda1

Можно отключить plugin-container и смотреть общий расход памяти.

Интересно, не знал об этой возможности, спасибо.

ЛКМ вызывает about:memory, а там есть "кнопки", одна из которых - "minimize memory usage"
Можно ли как-то напр. по СКМ (или длинному ЛКМ) сымитировать её нажатие без вызова about:memory?
И более общий вопрос: как узнать по каким операциям вызываются кнопки этой вкладки?
Я посмотрел код страницы about:memory но оттуда ничего не выудил.
Моя просьба - не столько как "навесить" minimize memory usage на СКМ, сколько как узнать по какой операции это делается и откуда это узнаётся.
Спасибо
-------------------------------
Я сам нашёл - там есть источник:
Вопрос к Бунде:
Я добавил в монитор такую штуку:

Выделить код

Код:

if (e.button == 1) {Services.obs.notifyObservers(null, "child-mmu-request", null); custombuttons.alertSlide("MMU",1);}

Это будет работать?
Я игрался - как будто уменьшается нагрузка, но не намного.

difabor пишет

Я сам нашёл - там есть источник:
Вопрос к Бунде:
Я добавил в монитор такую штуку:

Выделить код

Код:

if (e.button == 1) {Services.obs.notifyObservers(null, "child-mmu-request", null); custombuttons.alertSlide("MMU",1);}

Это будет работать?
Я игрался - как будто уменьшается нагрузка, но не намного.

Думаю что не уменьшится нагрузка, код это не может. Кстати себе в коде Memory Monitor я сделал выгрузку занимаемой памяти по ЛКМ который запускает портативную программку afom.exe которая работает как процесс, программку вытащил из расширения AFOM

Выделить код

Код:

// Включить по клику программу для автоматической выгрузки памяти ....
   memoryDisplay.onclick = function(e) {
      if ( e.button ) return;
      var profileDir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsILocalFile).path;                                 
      var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile);
      file.initWithPath( profileDir + "\\..\\Soft\\afom\\afom.exe" ); 
      file.launch();
   };

26-03-2014 22:50:15
Папки с afom.exe положил в папку в которой находится Firefox и его профиль - Firefox portable\Soft\afom\afom.exe

bunda1 пишет
difabor пишет

Я сам нашёл - там есть источник:
Вопрос к Бунде:
Я добавил в монитор такую штуку:

Выделить код

Код:

if (e.button == 1) {Services.obs.notifyObservers(null, "child-mmu-request", null); custombuttons.alertSlide("MMU",1);}

Это будет работать?
Я игрался - как будто уменьшается нагрузка, но не намного.

Думаю что не уменьшится нагрузка, код это не может. Кстати себе в коде Memory Monitor я сделал выгрузку занимаемой памяти по ЛКМ который запускает портативную программку afom.exe которая работает как процесс, программку вытащил из расширения AFOM

Выделить код

Код:

// Включить по клику программу для автоматической выгрузки памяти ....
   memoryDisplay.onclick = function(e) {
      if ( e.button ) return;
      var profileDir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsILocalFile).path;                                 
      var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile);
      file.initWithPath( profileDir + "\\..\\Soft\\afom\\afom.exe" ); 
      file.launch();
   };

26-03-2014 22:50:15
Папки с afom.exe положил в папку в которой находится Firefox и его профиль - Firefox portable\Soft\afom\afom.exe

Спасибо большое, я себе тоже скачал и посадил на СКМ. Работает.
Но что интересно - с самого начала она сильно уменьшает загрузку памяти и без кликов.
Где можно почитать об этой программе? Где этот AFOM и что это такое?

difabor пишет

Спасибо большое, я себе тоже скачал и посадил на СКМ. Работает.
Но что интересно - с самого начала она сильно уменьшает загрузку памяти и без кликов.
Где можно почитать об этой программе? Где этот AFOM и что это такое?

AFOM | Форум Mozilla Россия
Но его автор удалил из Add-ons for Firefox

Я вот уже неделю пользуюсь этим AFOM и не нарадуюсь. Я забыл что такое 700 МВ... Ещё раз огромное спасибо, bunda1

bunda1
Привет.
В 32-й кнопка работает не правильно, не показывает при наведении мыши на счётчик потребление памяти.
Мой старый вариант вообще ничего не показывает и не реагирует на ПКМ, в 31-й работал. Я твой новый вариант сам модифицировал под себя на СКМ, т.к. ПКМ вызывало меню. В 31-й вариант работал, в 32-й перестал.
Возможно, это как-то связано с новыми параметрами кеша. В 31-й, если выставлял "browser.cache.use_new_backend", 1 (не создавать в APPLOCAL папки Cache2.xxxxx) тоже переставадо показывать кеш (только на моём профиле это глючило, на стандартном работало), а в 32-й добавился ещё и browser.cache.use_new_backend_temp.
Значит, ещё и кнопка Clear Cache / Delete flash cookie отвалилась?

Мой вариант

Выделить код

Код:

// https://forum.mozilla-russia.org/viewtopic.php?pid=644365#p644365
// https://forum.mozilla-russia.org/viewtopic.php?pid=633560#p633560

// Показывать потребление памяти в адресной строке, от 28.07.2014. ................................
(function () {
   if ( document.getElementById('memoryDisplay') ) return;
    
   // Создать в адресной строке счётчик памяти ....
   var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("urlbar-icons");
   urlbarIcons.insertBefore( memoryDisplay, urlbarIcons.lastChild ); // перед первой иконкой адресной строки
   
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory() + ' MB';  
   self.timer = setInterval(function() {
      var mv = getMemory();
      memoryDisplay.label = mv + ' MB';
      memoryDisplay.style.background = (mv > 800) ? 'Red' : '';
   }, 2000 );  // таймер обновляет счётчик раз в 2000мс( 2 сек )
   
   // Всплывающая подсказка у счётчика отображает заполнение дискового кеша ....
   var k = 100, mb = 1024 * 1024, str = "",
   cs = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService),
   visitor = { visitDevice: addInfo };

   function addInfo(device, info) {
      str += (str ? "\n" : "") + device[0].toUpperCase() + device.slice(1) + " Cache:  " +
      [info.totalSize, info.maximumSize].map(function(num) Math.round(k * num / mb) / k + " MB").join(" / ");
   };

   memoryDisplay.onmouseenter = function() {
     str = "";
     try { cs.visitEntries(visitor) } catch(e) {};
     memoryDisplay.tooltipText = "Л: Подробно показать потребление памяти" + "\n" +
                                 "С: Очистить кэш и удалить Flash-куки" + "\n\n"
        + ( cbu.getPrefs("browser.cache.memory.enable") || cbu.getPrefs("browser.cache.disk.enable") ? str : "Кэш отключен" );
   };
   
   
   // Получить всю занимаемую оперативную память в MB ....
   function getMemory() {            
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          } 
      catch(e) { var memory = reporterManager.resident }; // для Nightly
      
      return ( Math.round( memory/1048576 ) );
   };      
   
   
   // По клику подробно показать потребление памяти в вкладке ....
   memoryDisplay.onclick = function(e) {
      if ( e.button == 0 ) {
       var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") ); 
          
       // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
       memoryTab.addEventListener("pageshow", function c(e) {         
          this.removeEventListener( e.type, c );           

          setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);      
       }); 
       }

      // по СКМ очистить кэш и удалить Flash кукисы
      if ( e.button == 1 ) {
           // очистить кэш ....
           var cacheService = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService);
           cacheService.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
           cacheService.evictEntries(Ci.nsICache.STORE_ON_DISK);

           // удалить Flash кукисы ....
           var dir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("Home", Ci.nsIFile);
           dir.append("Application Data");
           dir.append("Macromedia");
           if ( dir.exists() ) dir.remove(true);
           if ( !dir.exists() ) dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);

           // всплывающее сообщение ....
           Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).
           showAlertNotification("chrome://global/skin/icons/question-16.png", self.label, 'Очистил кеш и удалил Flash-куки', false, "", null, "");
           }

   };
   
     
   // Css стиль для счётчика ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      #memoryDisplay { -moz-appearance: none !important; margin-left: -2px !important; margin-right: -2px !important; border: 0 !important; padding: 0 !important; text-align: right; }\
      #memoryDisplay[resetMemory] { color: red !important; }\
   '));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); 


   // Удалять счётчик памяти и другие изменения ....
   addDestructor(function() { 
      sss.unregisterSheet(uri, sss.AGENT_SHEET);
      urlbarIcons.removeChild( memoryDisplay )
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
   
})();

xrun1

Выделить код

Код:

// https://forum.mozilla-russia.org/viewtopic.php?pid=644365#p644365
// https://forum.mozilla-russia.org/viewtopic.php?pid=633560#p633560

// Показывать потребление памяти в адресной строке, от 04.09.2014. ................................
(function () {
   if ( document.getElementById('memoryDisplay') ) return;
    
   // Создать в адресной строке счётчик памяти ....
   var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("urlbar-icons");
   urlbarIcons.insertBefore( memoryDisplay, urlbarIcons.lastChild ); // перед первой иконкой адресной строки
   
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory() + ' MB';  
   self.timer = setInterval(function() {
      var mv = getMemory();
      memoryDisplay.label = mv + ' MB';
      memoryDisplay.style.background = (mv > 800) ? 'Red' : '';
   }, 2000 );  // таймер обновляет счётчик раз в 2000мс( 2 сек )
   
   
   // Всплывающая подсказка у счётчика отображает заполнение дискового кеша ....
   var title = "Л: Подробно показать потребление памяти \nС: Очистить кэш и удалить Flash-куки\n\n";
   var data = {
       memory: "Memory Cache:  ",
       disk: "Disk Cache:  ",
       offline: "Offline Cache:  "
   };
   function getSize(size) {
      if (!size) return size === 0 ? "0" : "?";
      for(var count = -1; size >= 1024; size /= 1024, count++);
      return size.toFixed(2).replace(/0+$/, "").replace(/\.$/, "") + " " + ("KMGT"[count] || "") + "B";
   }
   function setInf(tot, max, type, i) {
      var inf = getSize(tot) + " / " + getSize(max);
      var key = "browser.cache." + type + ".enable";
      if (!Services.prefs.getBoolPref(key)) inf += " (disabled)";
      memoryDisplay.tooltipText = memoryDisplay.tooltipText.replace(zws(i), inf);
   }
   function zws(ind) "\u200B\u200B\u200B".slice(0, ++ind);

   var types = Object.keys(data);
   var ttt = title + types.map(function(key, i) data[key] + zws(i)).join("\n");

   memoryDisplay.onmouseenter = function() {
       memoryDisplay.tooltipText = ttt;
       try {
           var entries = {};
           Services.cache.visitEntries({
              visitDevice: function(device, info) entries[device] = info,
              visitEntry: function() {}
           });
           types.forEach(function(type, i) {
              var info = entries[type];
              setInf(info && info.totalSize, info && info.maximumSize, type, i)
           });
       } catch(ex) {
           Services.cache2 && types.forEach(function(type, i) {
               var func = function(aEntryCount, aConsumption, aCapacity, aDiskDirectory)
                          setInf(aConsumption, aCapacity, type, i);
               var storage = Services.cache2[(type == "offline" ? "app" : type) + "CacheStorage"]({}, null);
               try { storage.asyncVisitStorage({onCacheStorageInfo: func}, false) } catch(ex) {};
           });
       }
   };
    
   
   // Получить всю занимаемую оперативную память в MB ....
   function getMemory() {            
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          } 
      catch(e) { var memory = reporterManager.resident }; // для Nightly
      
      return ( Math.round( memory/1048576 ) );
   };      
   
   
   // По клику подробно показать потребление памяти в вкладке ....
   memoryDisplay.onclick = function(e) {
      if ( e.button == 0 ) {
       var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") ); 
          
       // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
       memoryTab.addEventListener("pageshow", function c(e) {         
          this.removeEventListener( e.type, c );           

          setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);      
       }); 
       }

      // по СКМ очистить кэш и удалить Flash кукисы
      if ( e.button == 1 ) {
           // очистить кэш ....
           try { 
                Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
                Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK);
                } 
           catch(e) { Services.cache2.clear() };

           // удалить Flash кукисы ....
           var dir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("Home", Ci.nsIFile);
           dir.append("Application Data");
           dir.append("Macromedia");
           if ( dir.exists() ) dir.remove(true);
           if ( !dir.exists() ) dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);

           // всплывающее сообщение ....
           Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).
           showAlertNotification("chrome://global/skin/icons/question-16.png", self.label, 'Очистил кеш и удалил Flash-куки', false, "", null, "");
           }

   };
   
     
   // Css стиль для счётчика ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      #memoryDisplay { -moz-appearance: none !important; margin-left: -2px !important; margin-right: -2px !important; border: 0 !important; padding: 0 !important; text-align: right; }\
      #memoryDisplay[resetMemory] { color: red !important; }\
   '));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); 


   // Удалять счётчик памяти и другие изменения ....
   addDestructor(function() { 
      sss.unregisterSheet(uri, sss.AGENT_SHEET);
      urlbarIcons.removeChild( memoryDisplay )
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
   
})();

:/

bunda1
Спасибо, работает. Но если дисковый кеш отключён, то в значения попадает кеш памяти.

скрытый текст
MemoryMonitor%20001.pngMemoryMonitor%20002.png

UPD: И в Offline Cache: 0 / 0  - берётся другое значение (только в случае, если disabled), чем в browser.cache.offline.capacity.

Не обращай внимание на моё занудство, это уже мелочи и просто для тебя информация. Память показывает в адресной строке и очищает, мне этого достаточно. :)

bunda1
А эту кнопку можно поместить на панель вкладок, просто у меня урл очень узкий.

На 31 стандартно показывало потребление памяти в районе 1Gb. Сильно не парился, но с переходом на 32 потребление памяти упало почти вдвое. Прочитал что кнопка сломалась, сегодня поменял код. Показывает в районе 256-350 Mb. Это у нас теперь такой браузер, или у меня что-то?:) Хотя мне так очень нравится.
PS: Что-то я поторопился, разогнался до 1200.

villa7 пишет

bunda1
А эту кнопку можно поместить на панель вкладок, просто у меня урл очень узкий.

Легко :)

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-1%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20memoryTab%20%3D%20gBrowser.getBrowserForTab%28%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%22about%3Amemory%22%29%20%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20o%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0436%u0434%u0435%u0442%20%u043F%u043E%u043A%u0430%20%u043E%u0442%u043A%u0440%u043E%u0435%u0442%u0441%u044F%20%22about%3Amemory%22%2C%20%u0443%u0434%u0430%u043B%u044F%u0435%u0442%20%u0441%u0435%u0431%u044F%20%u0438%20%u043D%u0430%u0436%u0438%u043C%u0430%u0435%u0442%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0A%20%20%20%20%20%20%20%20%20%20memoryTab.addEventListener%28%22pageshow%22%2C%20function%20c%28e%29%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28%20e.type%2C%20c%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20try%20%7B%20e.originalTarget.getElementById%28%27measureButton%27%29.click%28%29%20%7D%20catch%28e%29%20%7B%7D%20%7D%2C%200%29%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20....%0A%20%20%20%20%20%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%20....%0A%20%20%20%20%20%20%20%20%20%20var%20dir%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29.get%28%22Home%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20dir.exists%28%29%20%29%20dir.remove%28true%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21dir.exists%28%29%20%29%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29.%0A%20%20%20%20%20%20%20%20%20%20showAlertNotification%28%27chrome%3A//global/skin/icons/information-16.png%27%2C%20%27%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%27%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u043D%u0430%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u043A%u043D%u043E%u043F%u043A%u0435%20................................%0A%28function%20%28%29%20%7B%0A%20%20%20self.label%20%3D%20getMemory%28%29%20+%20%27MB%27%3B%20%20%0A%20%20%20self.timer%20%3D%20setInterval%28function%28%29%20self.label%20%3D%20getMemory%28%29%20+%20%27MB%27%2C%202000%20%29%3B%20//%20%u0442%u0430%u0439%u043C%u0435%u0440%20%u043E%u0431%u043D%u043E%u0432%u043B%u044F%u0435%u0442%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u0440%u0430%u0437%20%u0432%202000%u043C%u0441%28%202%20%u0441%u0435%u043A%20%29%20%20%20%0A%20%20%20%0A%20%20%20//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0432%20MB%20....%0A%20%20%20function%20getMemory%28%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20reporterManager%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20e%20%3D%20reporterManager.enumerateReporters%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%20%28%20e.hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mr%20%3D%20e.getNext%28%29.QueryInterface%28Ci.nsIMemoryReporter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5Bmr.path%5D%20%3D%20mr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20memory%20%3D%20self%5B%22resident%22%5D.amount%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20memory%20%3D%20reporterManager.resident%20%7D%3B%20//%20%u0434%u043B%u044F%20Nightly%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20return%20%28%20Math.round%28%20memory/1048576%20%29%20%29%3B%0A%20%20%20%7D%3B%20%0A%0A%20%20%20//%20%u0421%u0442%u0438%u043B%u044C%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20....%0A%20%20%20var%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A%20%20%20%25button%25%20.toolbarbutton-icon%20%7B%5C%0A%20%20%20%20%20display%3A%20none%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20.toolbarbutton-text%20%7B%5C%0A%20%20%20%20%20display%3A%20-moz-box%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20%7B%5C%0A%20%20%20%20%20-moz-box-orient%3A%20horizontal%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%27.replace%28/%25button%25/g%2C%20%22%23%22%20+%20_id%29%20%29%29%3B%0A%20%20%20const%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%20%0A%20%20%20%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20....%0A%20%20%20addDestructor%28function%28%29%20%7B%20%0A%20%20%20%20%20%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28%20self.timer%20%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%20%20%0A%7D%29%28%29%3B%0A%0A%0A//%20%u0421%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0A%28function%28%29%20%7B%20%20%20%0A%20%20%20%20var%20title%20%3D%20%22%u041B%3A%20%u041F%u043E%u0434%u0440%u043E%u0431%u043D%u043E%20%u043F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%5Cn%u041F%3A%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash-%u043A%u0443%u043A%u0438%5Cn%5Cn%22%3B%0A%20%20%20%20var%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%20%20%20%20%7D%3B%0A%20%20%20%20function%20getSize%28size%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20%20%20%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20%20%20%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20%20%20%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20%20%20%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20self.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0A%20%20%20%20var%20types%20%3D%20Object.keys%28data%29%3B%0A%20%20%20%20var%20ttt%20%3D%20title%20+%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%0A%20%20%20%20self.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20ttt%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28%7B%7D%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%7D%29%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

06-09-2014 20:12:38

xrun1 пишет

bunda1
Спасибо, работает. Но если дисковый кеш отключён, то в значения попадает кеш памяти.


UPD: И в Offline Cache: 0 / 0  - берётся другое значение (только в случае, если disabled), чем в browser.cache.offline.capacity.

Не обращай внимание на моё занудство, это уже мелочи и просто для тебя информация. Память показывает в адресной строке и очищает, мне этого достаточно. :)

Хорошо, спасибо за информацию.

bunda1
О, спасибо, давно хотел с переходом Австралис.

bunda1
Вдогонку к этому посту.
Если отключить этот новый кеш browser.cache.use_new_backend_temp;false и перезапустить браузер, то всё отображается нормально (версия у меня 32.0.2).

скрытый текст
memory_monitor.png

Memory Monitor + функционал кнопки  Clear Cache / Delete flash cookie для FF 24.8.0 с размещением индикатора в адресной строке/панели дополнений.

При клике ЛКМ по индикатору, происходит запуск утилиты afom.exe — программа для автоматической выгрузки памяти.
Измените путь для этого файла в строке  «file.initWithPath( profileDir + "\\afom.exe" );» по умолчанию считается, что файл afom.exe лежит в корне папки профиля FF.

Очистка кэша и удаление Flash кукисов выполняется по нажатию СКМ или ПКМ (при нажатии ПКМ, вместе с уведомлением очистки кэша и кукисов вылезет стандартное меню панели.

Автор кода Bunda1 Все благодарности ему.

С размещением индикатора в адресной строке

Выделить код

Код:

//  Показывать потребление памяти в адресной строке, от 28.07.2014. ................................
(function () {
   if ( document.getElementById('memoryDisplay') ) return;
    
   // Создать в адресной строке....
    var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("urlbar-icons");
   urlbarIcons.insertBefore( memoryDisplay, urlbarIcons.lastChild ); // перед первой иконкой адресной строки
   
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory() + ' MB';  
   self.timer = setInterval(function() { memoryDisplay.label = getMemory() + ' MB' }, 2000 ); // таймер обновляет счётчик раз в 2000мс( 2 сек )
   
   
   // Всплывающая подсказка у счётчика отображает заполнение дискового кеша ....
   var k = 100, mb = 1024 * 1024, str = "",
   cs = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService),
   visitor = { visitDevice: addInfo };

   function addInfo(device, info) {
      str += (str ? "\n" : "") + device[0].toUpperCase() + device.slice(1) + " Cache:  " +
      [info.totalSize, info.maximumSize].map(function(num) Math.round(k * num / mb) / k + " MB").join(" / ");
   };

   memoryDisplay.onmouseenter = function() {
     str = "";
     try { cs.visitEntries(visitor) } catch(e) {};
     memoryDisplay.tooltipText = "ЛКМ: Автоматически выгружать память" + "\n"+ "СКМ и ПКМ: Очистить кэш и удалить Flash кукисы" + "\n\n"  
        + ( cbu.getPrefs("browser.cache.memory.enable") || cbu.getPrefs("browser.cache.disk.enable") ? str : "Кэш отключен" );
   };
   
   
   // Получить всю занимаемую оперативную память в MB ....
   function getMemory() {            
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          } 
      catch(e) { var memory = reporterManager.resident }; // для Nightly
      
      return ( Math.round( memory/1048576 ) );
   };      
   
// Включить по клику программу для автоматической выгрузки памяти ....
   memoryDisplay.onclick = function(e) {
      if ( e.button == 0 ) {
           var profileDir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsILocalFile).path;                                 
           var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile);
           file.initWithPath( profileDir + "\\afom.exe" ); 
           file.launch();
            
           memoryDisplay.setAttribute("resetMemory", true );
           return;
           }

      // очистить кэш ....
     try { 
         Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
         Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK);
         } 
     catch(e) { Services.cache2.clear() }

     // Удалить Flash кукиси ....
     var dir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("Home", Ci.nsIFile);
     dir.append("Application Data");
     dir.append("Macromedia");
     if ( dir.exists() ) dir.remove(true);
     if ( !dir.exists() ) dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);

     // Всплывающее сообщение ....
  Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).
     showAlertNotification(self.image, 'Memory Monitor', 'Очистил кеш и удалил Flash кукиси', false, "", null, "");
    };
   // Css стиль для счётчика ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      #memoryDisplay { -moz-appearance: none !important; margin-left: 2px !important; margin-right: -4px !important; border: 0 !important; min-width: 5.5em; text-align: right; }\
      #memoryDisplay[resetMemory] { color: BLACK !important; }\
   '));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); 


   // Удалять счётчик памяти и другие изменения ....
   addDestructor(function() { 
      sss.unregisterSheet(uri, sss.AGENT_SHEET);
      urlbarIcons.removeChild( memoryDisplay )
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
})();

С размещением индикатора в панели дополнений.

Выделить код

Код:

//  Показывать потребление памяти в панели дополнений, от 28.07.2014. ................................
(function () {
   if ( document.getElementById('memoryDisplay') ) return;
    
   // Создать в панели дополнений....
   var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("status-bar");
   urlbarIcons.insertBefore( memoryDisplay, null); 
   
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory() + ' MB';  
   self.timer = setInterval(function() { memoryDisplay.label = getMemory() + ' MB' }, 2000 ); // таймер обновляет счётчик раз в 2000мс( 2 сек )
   
   
   // Всплывающая подсказка у счётчика отображает заполнение дискового кеша ....
   var k = 100, mb = 1024 * 1024, str = "",
   cs = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService),
   visitor = { visitDevice: addInfo };

   function addInfo(device, info) {
      str += (str ? "\n" : "") + device[0].toUpperCase() + device.slice(1) + " Cache:  " +
      [info.totalSize, info.maximumSize].map(function(num) Math.round(k * num / mb) / k + " MB").join(" / ");
   };

   memoryDisplay.onmouseenter = function() {
     str = "";
     try { cs.visitEntries(visitor) } catch(e) {};
     memoryDisplay.tooltipText = "ЛКМ: Автоматически выгружать память" + "\n"+ "СКМ и ПКМ: Очистить кэш и удалить Flash кукисы" + "\n\n"  
        + ( cbu.getPrefs("browser.cache.memory.enable") || cbu.getPrefs("browser.cache.disk.enable") ? str : "Кэш отключен" );
   };
   
   
   // Получить всю занимаемую оперативную память в MB ....
   function getMemory() {            
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          } 
      catch(e) { var memory = reporterManager.resident }; // для Nightly
      
      return ( Math.round( memory/1048576 ) );
   };      
   
// Включить по клику программу для автоматической выгрузки памяти ....
   memoryDisplay.onclick = function(e) {
      if ( e.button == 0 ) {
           var profileDir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("ProfD", Ci.nsILocalFile).path;                                 
           var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile);
           file.initWithPath( profileDir + "\\afom.exe" ); 
           file.launch();
            
           memoryDisplay.setAttribute("resetMemory", true );
           return;
           }

      // очистить кэш ....
     try { 
         Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
         Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK);
         } 
     catch(e) { Services.cache2.clear() }

     // Удалить Flash кукиси ....
     var dir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("Home", Ci.nsIFile);
     dir.append("Application Data");
     dir.append("Macromedia");
     if ( dir.exists() ) dir.remove(true);
     if ( !dir.exists() ) dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);

     // Всплывающее сообщение ....
  Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).
     showAlertNotification(self.image, 'Memory Monitor', 'Очистил кеш и удалил Flash кукиси', false, "", null, "");
    };
   // Css стиль для счётчика ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      #memoryDisplay { -moz-appearance: none !important; margin-left: 2px !important; margin-right: -4px !important; border: 0 !important; min-width: 5.5em; text-align: right; }\
      #memoryDisplay[resetMemory] { color: BLACK !important; }\
   '));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); 


   // Удалять счётчик памяти и другие изменения ....
   addDestructor(function() { 
      sss.unregisterSheet(uri, sss.AGENT_SHEET);
      urlbarIcons.removeChild( memoryDisplay )
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
})();

Bunda1, добавь пожалуйста к расширенной версии кнопки — с очисткой кукисов и кэша, очистку памяти по СКМ и ПКМ
thumb.png 
А также добавить этот функционал в кнопку Clear Cache / Delete flash cookie

PEAKTOP пишет

Bunda1, добавь пожалуйста к расширенной версии кнопки — с очисткой кукисов и кэша, очистку памяти по СКМ и ПКМ
А также добавить этот функционал в кнопку Clear Cache / Delete flash cookie

Извини но я не знаю как запустить очистку памяти через Minimize memory usage так как у тебя в изображении.

bunda1, печально. А если мне удасться выяснить у знатоков как это делается, добавишь в кнопку?

bunda1 пишет

не знаю как запустить очистку памяти через Minimize memory usage так как у тебя в изображении

img

Dumby пишет
bunda1 пишет

не знаю как запустить очистку памяти через Minimize memory usage так как у тебя в изображении

img

Не работает:

Выделить код

Код:

var gMgr = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
gMgr.minimizeMemoryUsage();

а так работает:

Выделить код

Код:

var gMgr = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
gMgr.minimizeMemoryUsage(() => updateMainAndFooter("Memory minimization completed", HIDE_FOOTER));

но показывает ошибку:

Метка времени: 25.11.2014 18:13:55
Ошибка: ReferenceError: updateMainAndFooter is not defined
Источник: chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button67@code
Строка: 3

25-11-2014 19:17:06

PEAKTOP пишет

bunda1, печально. А если мне удасться выяснить у знатоков как это делается, добавишь в кнопку?

Хорошо.

?

скрытый текст

Выделить код

Код:

Cc["@mozilla.org/memory-reporter-manager;1"]
    .getService(Ci.nsIMemoryReporterManager)
    .minimizeMemoryUsage(null);

Dumby
Спасибо :)

PEAKTOP пишет

Bunda1, добавь пожалуйста к расширенной версии кнопки — с очисткой кукисов и кэша, очистку памяти по СКМ и ПКМ
А также добавить этот функционал в кнопку Clear Cache / Delete flash cookie

А стоит ли это добавлять если запуск Minimize memory usage не сильно снижает потребление памяти максимум на 30MB.

У меня

bunda1 пишет

...не сильно снижает потребление памяти максимум на 30MB

У меня иной раз 150-200 Мб освобождает, но это в случае, когда FF отжирает больше 1,5 Гб. У меня вкладок много открыто, в среднем > 60-70.

я так понимаю!!! эта кнопа не актуальна.????
из за отсутствием "afom"???

yacornei
Тут есть, скачайте и вытащите, архиватором 7-zip, например. Memory Fox.

xrun1 пишет

yacornei
Тут есть, скачайте и вытащите, архиватором 7-zip, например. Memory Fox.

??

Так у меня есть это расширение! стоит!!! есть ли смысл вытаскивать оттуда-отдельный элемент?

yacornei
Тогда поправить путь в кнопке
«file.initWithPath( profileDir + "\\extensions\\{E173B749-DB5B-4fd2-BA0E-94ECEA0CA55B}\\components\\afom.exe" );»
или просто поставить чистую кнопку с первой страницы топика без специфического функционала очистки, раз за это отвечает расширение.

Поначалу поставил с 1 стр,а потом дальше пошел и наткнулся на с "afom",попробую поправить путь :blush: спс!!!

Подскажите почему у меня при нажатии на лкм начинается попытка открытия новой вкладки и фф сразу падает.
Так было и на предыдущих версиях и на последней то же самое, все забывал спросить.
Может что то включить или выключить в настройках нужно?

villi311 пишет

Подскажите почему у меня при нажатии на лкм начинается попытка открытия новой вкладки и фф сразу падает.

Не знаю в чём проблема, может удали в коде Memory Monitor этот кусок:

Выделить код

Код:

// По клику подробно показать потребление памяти в вкладке ....
   memoryDisplay.onclick = function(e) {
      if ( e.button ) return;
       var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") ); 
          
       // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
       memoryTab.addEventListener("pageshow", function c(e) {         
          this.removeEventListener( e.type, c );           

          setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);      
       });  
   };
bunda1 пишет

Не знаю в чём проблема, может удали в коде Memory Monitor этот кусок:

Ну тогда я так понимаю, он вообще не будет открывать в новой вкладке about:memory
Ну если не щелкать по нему он и так не открывает, я же наоборот хочу чтобы это работало.
Неужели у всех все нормально? Я уже не первый раз переустанавливал Мозиллу и всегда при нажатии она вылетала, хотя за все время несколько раз страница about:memory открывалась, но очень редко.

villi311
Если у Вас не портабельный, а обычный Firefox, ничего переставлять не надо. Создаёте новый профиль, например так
"C:\Program Files\Mozilla Firefox\firefox.exe" -ProfileManager
(список команд можно посмотреть здесь), ставите Custom Buttons и кнопку, проверяете.
Если не падает - той же командой возвращаете основной профиль по умолчанию и начинаете по одному отключать свои расширения и проверять, какое вызывает глюк.
У меня с кнопкой всё нормально.
:offtopic: Недавно обновилось расширение Redirect Cleaner, так у меня после этого стали глючить жесты в FireGestures...

villi311 пишет

Ну тогда я так понимаю, он вообще не будет открывать в новой вкладке about:memory
Ну если не щелкать по нему он и так не открывает, я же наоборот хочу чтобы это работало.
Неужели у всех все нормально?

У меня работает, но я как-то про эту фишку  подзабыл и не пользуюсь. Открываю about:memory с помощью About: Menu. Попробуй, может и тебя устроит такой вариант и все Эбауты )) будут под рукой.

Всем спасибо. Буду пробовать.  Не так то это важно, да и давно уже падает, бог с ней. Видимо и правда какое то расширение мешает, но они у меня все отфильтрованы и поставлены только нужные.

Подниму тему. Скажите можно ли сделать так чтоб afom запускался автоматически, если потребление оперативки наберет например 500мб. спасибо.

broker пишет

Подниму тему. Скажите можно ли сделать так чтоб afom запускался автоматически, если потребление оперативки наберет например 500мб. спасибо.

Замени:

Выделить код

Код:

self.timer = setInterval(function() { memoryDisplay.label = getMemory() + ' MB' }, 2000 );

на:

Выделить код

Код:

self.timer = setInterval(function() {
      var memory = getMemory();
      memoryDisplay.label = memory + ' MB';
      if ( memory > 500 ) {
           var path = "c:\\Program files\\Afom\\afom.exe";
           var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
           file.initWithPath(path);
           file.launch();
           }
   }, 2000 );

Только замени путь c:\\Program files\\Afom\\afom.exe на свой, но с двойными \\

bunda1
Спасибо но я не учел fool.gif, у меня портабле браузер и нужно задать относительные пути папка Soft/afom.exe находится в профиле.

broker пишет

Спасибо но я не учел, у меня портабле браузер и нужно задать относительные пути папка Soft/afom.exe находится в профиле.

Ну тогда что то типа:

Выделить код

Код:

self.timer = setInterval(function() {
      var memory = getMemory();
      memoryDisplay.label = memory + ' MB';
      if ( memory > 500 ) {
           var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
           file.initWithPath(file.path + "\\..\\Soft\\afom.exe"); 
           file.launch();
           }
   }, 2000 );

bunda1, подскажи, пожалуйста — как добиться запуска afom.exe при старте браузера?

PEAKTOP пишет

bunda1, подскажи, пожалуйста — как добиться запуска afom.exe при старте браузера?

Ну наверно положить в инициализацию любой кнопки:

Выделить код

Код:

var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
file.initWithPath(file.path + "\\..\\Soft\\afom.exe"); 
file.launch();

bunda1
Чето у меня не робит "Проверьте, правильно ли указано имя и повторите попитку"
разобрался удалил  "\\.." из "\\Soft\\afom.exe"); Спасибо большое кнопка мастхев получилась:D.

bunda1
Скажите, можно сделать так чтоб индикатор в зависимости от занятой оперативки менял цвет?  на подобе кнопки индикатор загрузки страницы цвет меняется з зеленого до красна.

А есть ли итоговый враиант с AFOM работающий на 40 версии? Что-то у меня не выходит подружить кнопку с файлом, файл лежит в портативной версии в профиле.

free13man пишет

А есть ли итоговый враиант с AFOM работающий на 40 версии? Что-то у меня не выходит подружить кнопку с файлом, файл лежит в портативной версии в профиле.

Если я правильно понял что требуется, то нужно положить в инициализацию любой кнопки:

Выделить код

Код:

var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
file.append("afom.exe");    
file.launch();

и тогда при старте браузера AFOM тоже заработает.

bunda1 пишет

и тогда при старте браузера AFOM тоже заработает.

Ага спасибо, а вычищаться при заполнении памяти он ведь не будет, я так понимаю он единожды запустится и всё.

free13man пишет

Ага спасибо, а вычищаться при заполнении памяти он ведь не будет, я так понимаю он единожды запустится и всё.

Нет, после запуска он регулярно, кажется раз в минуту вычищает память.

Мониторить бы сколько каждая отдельная вкладка памяти жрет)

emlen пишет

Мониторить бы сколько каждая отдельная вкладка памяти жрет)

Может посмотри в about:memory :/

bunda1 пишет

emlen пишет: Мониторить бы сколько каждая отдельная вкладка памяти жрет)Может посмотри в about:memory

Не ну там как-то не наглядненько)

Есть код, минимизирует использование памяти

скрытый текст

Выделить код

Код:

doMMU();
function doMMU() {
    let gMgr = Cc["@mozilla.org/memory-reporter-manager;1"]
        .getService(Ci.nsIMemoryReporterManager);
    Services.obs.notifyObservers(null, "child-mmu-request", null);
    gMgr.minimizeMemoryUsage(null, false, false);
}


Как перенести его в инициализацию, чтобы срабатывал по клику СКМ на индикаторе в URL и появлялось окошко о выполнении?

Я пробовал так

скрытый текст

Выделить код

Код:

// По клику очистить кэш и удалить Flash кукисы
   memoryDisplay.onclick = function(e) {
      if ( e.button == 0 ){
                try { 
                Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
                Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK);
                } 
           catch(e) { Services.cache2.clear() };
     var dir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("Home", Ci.nsIFile);
           dir.append("Application Data");
           dir.append("Macromedia");
           if ( dir.exists() ) dir.remove(true);
           if ( !dir.exists() ) dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);

// по СКМ минимизировать использование памяти
      if ( e.button == 1 ) doMMU();
function doMMU() {
    let gMgr = Cc["@mozilla.org/memory-reporter-manager;1"]
        .getService(Ci.nsIMemoryReporterManager);
    Services.obs.notifyObservers(null, "child-mmu-request", null);
    gMgr.minimizeMemoryUsage(null, false, false);
}


Но, похоже, средний клик не работает

Ultima2m
 

Выделить код

Код:

// Настройка функций кликов мыши для Memory Monitor .....
   memoryDisplay.onclick = function(e) {
      // по ЛКМ очистить кэш и удалить Flash кукисы
      if ( e.button == 0 ){
           try { 
                Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
                Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK);
                } 
           catch(e) { Services.cache2.clear() };
           var dir = Services.dirsvc.get('Home', Ci.nsIFile);
           dir.append("Application Data");
           dir.append("Macromedia");
           dir.exists() && dir.remove(true);
           !dir.exists() && dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);
           }
      // по СКМ минимизировать использование памяти
      if ( e.button == 1 ) {
           memoryDisplay.style.color = "red";             
           Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager)
           .minimizeMemoryUsage(null);
           }
   };

bunda1,
С этим кодом кнопка просто отрубается
Кстати, я использую такой вариант

скрытый текст

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u0430%u043C%u044F%u0442%u044C%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADHklEQVQ4jYWTXUxTBxiG32hn62h1GLASoWoY+JNaZBtLmIMjyyKixLgEspEFkJZNHDHOAdmBU6RkUZzZsmK1+EOyOspAQ92QpjhbEEaUSmLXru4s4WLdxSgmrhCdEGSL7640ahb23L3J99w9H/AsiwBoHo9dOcu+fydvuQuAGoAKQBwWQvMiCps/TPo9WbvYBEDnatHOXTu7nnm5b1w/3NQUliRpHEDO895qnVYhAtiSrV9yfP7mBnY0Jz9am6z1W1v2/3Pj+jDn5h7yMXa7PaZUKnc9sVNWKmvv/5hBW03Cg7ffXHe343Q9f/BcYiTyG/+amefM7BxjsRgnJyc5MTHBWCxGq9X6QKlUFgAA9giaDu/pjfzmjJnBn3/h1PQsp6bvMRqdZCQS4fj4OGVZZjgcZjAYZCAQoCzLrK+vn1IoFNmo3K0ZFvfn0uH8jtFolLIsMxQKMRAIcGxsjKOjoxwZGeHQ0BB9Ph99Ph8HBgbo8XgoCEIIB4rUv3aek9jy+Rd0Op30+/0cHByk1+tlf38/3W43+/r66Ha76XL1sK2tjQ1SIz+pqWP+9u1/wlyx4u6pryT2X/GyurqaXV1d7O3tZU9PD10uF7u7u2m32ylJZlZVVbGy8gOWFO+guaGGpWVlf0DYovK+/kraja8d52mz2Wg0Gtne3s7W1laKokiTyUSj0cjSchMls4W1dSI9J1LZeXQjl7208ksAUAJQZ2VlDTscDoqiyMLCQpaX72Vp+T42NR+hubGR5ywZPLRXP5+UpGsr2Kq5PDW4mZkblhx9uoc1giCELRYLKyqMtDSZeeTQqywrKXik12++9e1nKXd+6kyfB/AyACF6xcCPihN8z0eVmpaWdnNb3luzBoM+PHBq7f1rZ1L/BrAzP1ttDXVtIoAMQ7qq4c5VA3XaFz7+z6IBpANQ5b0W1/7Qn8nlmkW1+4oSnOeb18wASDj4buKtk5/q7gFIWvA3SnbEO29f2EQA+ccPro4ceC9xCEDcqkTFMZUC2xaUAShsdSm3Lx5bNw1gVW5mnEcbv7jk/6SnWfp+fnwwJ1NtX+joXwJBlDIWFgabAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%28function%20%28%29%20%7B%0A%20%20%20if%20%28%20document.getElementById%28%27memoryDisplay%27%29%20%29%20return%3B%0A%20%20%20%20%0A%20%20%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u043F%u0430%u043C%u044F%u0442%u0438%20....%0A%20%20%20var%20memoryDisplay%20%3D%20document.createElement%28%22statusbarpanel%22%29%3B%0A%20%20%20var%20urlbarIcons%20%3D%20document.getElementById%28%22urlbar-icons%22%29%3B%0A%20%20%20urlbarIcons.insertBefore%28%20memoryDisplay%2C%20urlbarIcons.lastChild%20%29%3B%20//%20%u043F%u0435%u0440%u0435%u0434%20%u043F%u0435%u0440%u0432%u043E%u0439%20%u0438%u043A%u043E%u043D%u043A%u043E%u0439%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%0A%20%20%20%20%20%20%20memoryDisplay.id%20%3D%20%22memoryDisplay%22%3B%0A%20%20%20memoryDisplay.label%20%3D%20getMemory%28%29%20+%20%27%20MB%27%3B%20%20%0A%20%20%20self.timer%20%3D%20setInterval%28function%28%29%20%7B%0A%20%20%20%20%20%20var%20mv%20%3D%20getMemory%28%29%3B%0A%20%20%20%20%20%20memoryDisplay.label%20%3D%20mv%20+%20%27%20MB%27%3B%0A%20%20%20%20%20%20memoryDisplay.style.color%20%3D%20%28mv%20%3E%20700%29%20%3F%20%27%23AB274F%27%20%3A%20%27%27%3B%0A%20%20%20%7D%2C%202000%20%29%3B%20%20//%20%u0442%u0430%u0439%u043C%u0435%u0440%20%u043E%u0431%u043D%u043E%u0432%u043B%u044F%u0435%u0442%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u0440%u0430%u0437%20%u0432%202000%u043C%u0441%28%202%20%u0441%u0435%u043A%20%29%0A%20%20%0A%20%20%0A//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0430%u0435%u0442%20%u0437%u0430%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0435%20%u0434%u0438%u0441%u043A%u043E%u0432%u043E%u0433%u043E%20%u043A%u0435%u0448%u0430%20....%0A%20%20%20var%20title%20%3D%20%22%u041B%3A%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash-%u043A%u0443%u043A%u0438%5Cn%5Cn%22%3B%0A%20%20%20var%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%20%20%20%7D%3B%20%20%20%0A%20%20%20%20%20%20function%20getSize%28size%29%20%7B%0A%20%20%20%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%20%20%20%7D%0A%20%20%20function%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20%20%20%20memoryDisplay.tooltipText%20%3D%20memoryDisplay.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%20%20%20%7D%0A%20%20%20function%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0A%20%20%20var%20types%20%3D%20Object.keys%28data%29%3B%0A%20%20%20var%20ttt%20%3D%20title%20+%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%0A%20%20%20memoryDisplay.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20memoryDisplay.tooltipText%20%3D%20ttt%3B%0A%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28%7B%7D%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%0A%20%20%20%7D%3B%0A%20%20%20%20%0A%20%20%20%20%0A%20%20%20%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0437%u0430%u043D%u0438%u043C%u0430%u0435%u043C%u0443%u044E%20%u043E%u043F%u0435%u0440%u0430%u0442%u0438%u0432%u043D%u0443%u044E%20%u043F%u0430%u043C%u044F%u0442%u044C%20%u0432%20MB%20....%0A%20%20%20function%20getMemory%28%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20reporterManager%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20e%20%3D%20reporterManager.enumerateReporters%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%20%28%20e.hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mr%20%3D%20e.getNext%28%29.QueryInterface%28Ci.nsIMemoryReporter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5Bmr.path%5D%20%3D%20mr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20memory%20%3D%20self%5B%22resident%22%5D.amount%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20memory%20%3D%20reporterManager.resident%20%7D%3B%20//%20%u0434%u043B%u044F%20Nightly%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20return%20%28%20Math.round%28%20memory/1048576%20%29%20%29%3B%0A%20%20%20%7D%3B%20%20%20%20%20%20%0A%20%20%20%0A%20%0A%20//%20%u041F%u043E%20%u043A%u043B%u0438%u043A%u0443%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u044B%0A%20%20%20memoryDisplay.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%3B%0A%20%20%20%20%20var%20dir%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29.get%28%22Home%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20dir.exists%28%29%20%29%20dir.remove%28true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20%21dir.exists%28%29%20%29%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%0A//%20%u043F%u043E%20%u0421%u041A%u041C%20%u043C%u0438%u043D%u0438%u043C%u0438%u0437%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u043E%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20doMMU%28%29%3B%0Afunction%20doMMU%28%29%20%7B%0A%09let%20gMgr%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D%0A%09.getService%28Ci.nsIMemoryReporterManager%29%3B%20%0A%09Services.obs.notifyObservers%28null%2C%20%22child-mmu-request%22%2C%20null%29%3B%20%0A%09gMgr.minimizeMemoryUsage%28null%2C%20false%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%0A%20%0A//%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29.%0A%20%20%20%20%20%20%20%20%20%20%20showAlertNotification%28%22chrome%3A//global/skin/icons/question-16.png%22%2C%20self.label%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash-%u043A%u0443%u043A%u0438%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%0A%20%20%20//%20Css%20%u0441%u0442%u0438%u043B%u044C%20%u0434%u043B%u044F%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20....%0A%20%20%20var%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A%20%20%20%20%20%20%23memoryDisplay%20%7B%20-moz-appearance%3A%20none%20%21important%3B%20color%3A%20green%20%21important%3B%20margin-left%3A%20-4px%20%21important%3B%20margin-right%3A%20-4px%20%21important%3B%20border%3A%200%20%21important%3B%20padding%3A%200%20%21important%3B%20text-align%3A%20right%3B%20%7D%5C%0A%20%20%20%20%20%20%23memoryDisplay%5BresetMemory%5D%20%7B%20color%3A%20red%20%21important%3B%20%7D%5C%0A%20%20%20%27%29%29%3B%0A%20%20%20const%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%20%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0438%20%u0434%u0440%u0443%u0433%u0438%u0435%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20....%0A%20%20%20addDestructor%28function%28%29%20%7B%20%0A%20%20%20%20%20%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20%20%20urlbarIcons.removeChild%28%20memoryDisplay%20%29%0A%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28%20self.timer%20%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%0A%7D%29%28%29%3B%0A%0A%0A%0A%0A%0Athis.tooltipText%20%3D%20%22MinMemory%20%5Cn%u041B%3A%20%u041C%u0438%u043D%u0438%u043C%u0438%u0437%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u043E%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%5Cn%u041F%3A%20%u041C%u0435%u043D%u044E%22%3B%0A%0A%0A%20%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BdoMMU%28%29%3B%0Afunction%20doMMU%28%29%20%7B%0A%09let%20gMgr%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D%0A%09%09.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%09Services.obs.notifyObservers%28null%2C%20%22child-mmu-request%22%2C%20null%29%3B%0A%09gMgr.minimizeMemoryUsage%28null%2C%20false%2C%20false%29%3B%0A%7D%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


P.S.Я пробовал вот так сделать
memoryDisplay.style.color = (mv < 500) ? 'green' : '';
memoryDisplay.style.color = (mv > 700) ? 'red' : '';
и иногда это срабатывало.
Можно это как-то правильно сделать?

Ultima2m
Ну тогда:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u0430%u043C%u044F%u0442%u044C%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADHklEQVQ4jYWTXUxTBxiG32hn62h1GLASoWoY+JNaZBtLmIMjyyKixLgEspEFkJZNHDHOAdmBU6RkUZzZsmK1+EOyOspAQ92QpjhbEEaUSmLXru4s4WLdxSgmrhCdEGSL7640ahb23L3J99w9H/AsiwBoHo9dOcu+fydvuQuAGoAKQBwWQvMiCps/TPo9WbvYBEDnatHOXTu7nnm5b1w/3NQUliRpHEDO895qnVYhAtiSrV9yfP7mBnY0Jz9am6z1W1v2/3Pj+jDn5h7yMXa7PaZUKnc9sVNWKmvv/5hBW03Cg7ffXHe343Q9f/BcYiTyG/+amefM7BxjsRgnJyc5MTHBWCxGq9X6QKlUFgAA9giaDu/pjfzmjJnBn3/h1PQsp6bvMRqdZCQS4fj4OGVZZjgcZjAYZCAQoCzLrK+vn1IoFNmo3K0ZFvfn0uH8jtFolLIsMxQKMRAIcGxsjKOjoxwZGeHQ0BB9Ph99Ph8HBgbo8XgoCEIIB4rUv3aek9jy+Rd0Op30+/0cHByk1+tlf38/3W43+/r66Ha76XL1sK2tjQ1SIz+pqWP+9u1/wlyx4u6pryT2X/GyurqaXV1d7O3tZU9PD10uF7u7u2m32ylJZlZVVbGy8gOWFO+guaGGpWVlf0DYovK+/kraja8d52mz2Wg0Gtne3s7W1laKokiTyUSj0cjSchMls4W1dSI9J1LZeXQjl7208ksAUAJQZ2VlDTscDoqiyMLCQpaX72Vp+T42NR+hubGR5ywZPLRXP5+UpGsr2Kq5PDW4mZkblhx9uoc1giCELRYLKyqMtDSZeeTQqywrKXik12++9e1nKXd+6kyfB/AyACF6xcCPihN8z0eVmpaWdnNb3luzBoM+PHBq7f1rZ1L/BrAzP1ttDXVtIoAMQ7qq4c5VA3XaFz7+z6IBpANQ5b0W1/7Qn8nlmkW1+4oSnOeb18wASDj4buKtk5/q7gFIWvA3SnbEO29f2EQA+ccPro4ceC9xCEDcqkTFMZUC2xaUAShsdSm3Lx5bNw1gVW5mnEcbv7jk/6SnWfp+fnwwJ1NtX+joXwJBlDIWFgabAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%28function%20%28%29%20%7B%0A%20%20%20if%20%28%20document.getElementById%28%27memoryDisplay%27%29%20%29%20return%3B%0A%20%20%20%20%0A%20%20%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u043F%u0430%u043C%u044F%u0442%u0438%20....%0A%20%20%20var%20memoryDisplay%20%3D%20document.createElement%28%22statusbarpanel%22%29%3B%0A%20%20%20var%20urlbarIcons%20%3D%20document.getElementById%28%22urlbar-icons%22%29%3B%0A%20%20%20urlbarIcons.insertBefore%28%20memoryDisplay%2C%20urlbarIcons.lastChild%20%29%3B%20//%20%u043F%u0435%u0440%u0435%u0434%20%u043F%u0435%u0440%u0432%u043E%u0439%20%u0438%u043A%u043E%u043D%u043A%u043E%u0439%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%0A%20%20%20%20%20%20%20memoryDisplay.id%20%3D%20%22memoryDisplay%22%3B%0A%20%20%20memoryDisplay.label%20%3D%20getMemory%28%29%20+%20%27%20MB%27%3B%20%20%0A%20%20%20self.timer%20%3D%20setInterval%28function%28%29%20%7B%0A%20%20%20%20%20%20var%20mv%20%3D%20getMemory%28%29%3B%0A%20%20%20%20%20%20memoryDisplay.label%20%3D%20mv%20+%20%27%20MB%27%3B%0A%20%20%20%20%20%20memoryDisplay.style.color%20%3D%20%28mv%20%3E%20700%29%20%3F%20%27%23AB274F%27%20%3A%20%27%27%3B%0A%20%20%20%7D%2C%202000%20%29%3B%20%20//%20%u0442%u0430%u0439%u043C%u0435%u0440%20%u043E%u0431%u043D%u043E%u0432%u043B%u044F%u0435%u0442%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u0440%u0430%u0437%20%u0432%202000%u043C%u0441%28%202%20%u0441%u0435%u043A%20%29%0A%20%20%0A%20%20%0A//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0430%u0435%u0442%20%u0437%u0430%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0435%20%u0434%u0438%u0441%u043A%u043E%u0432%u043E%u0433%u043E%20%u043A%u0435%u0448%u0430%20....%0A%20%20%20var%20title%20%3D%20%22%u041B%3A%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash-%u043A%u0443%u043A%u0438%5Cn%5Cn%22%3B%0A%20%20%20var%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%20%20%20%7D%3B%20%20%20%0A%20%20%20%20%20%20function%20getSize%28size%29%20%7B%0A%20%20%20%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%20%20%20%7D%0A%20%20%20function%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20%20%20%20memoryDisplay.tooltipText%20%3D%20memoryDisplay.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%20%20%20%7D%0A%20%20%20function%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0A%20%20%20var%20types%20%3D%20Object.keys%28data%29%3B%0A%20%20%20var%20ttt%20%3D%20title%20+%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%0A%20%20%20memoryDisplay.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20memoryDisplay.tooltipText%20%3D%20ttt%3B%0A%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28%7B%7D%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%0A%20%20%20%7D%3B%0A%20%20%20%20%0A%20%20%20%20%0A%20%20%20%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0437%u0430%u043D%u0438%u043C%u0430%u0435%u043C%u0443%u044E%20%u043E%u043F%u0435%u0440%u0430%u0442%u0438%u0432%u043D%u0443%u044E%20%u043F%u0430%u043C%u044F%u0442%u044C%20%u0432%20MB%20....%0A%20%20%20function%20getMemory%28%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20reporterManager%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20e%20%3D%20reporterManager.enumerateReporters%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%20%28%20e.hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mr%20%3D%20e.getNext%28%29.QueryInterface%28Ci.nsIMemoryReporter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5Bmr.path%5D%20%3D%20mr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20memory%20%3D%20self%5B%22resident%22%5D.amount%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20memory%20%3D%20reporterManager.resident%20%7D%3B%20//%20%u0434%u043B%u044F%20Nightly%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20return%20%28%20Math.round%28%20memory/1048576%20%29%20%29%3B%0A%20%20%20%7D%3B%20%20%20%20%20%20%0A%20%20%20%0A%20%0A%20//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20Memory%20Monitor%20.....%0A%20%20%20memoryDisplay.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20%20//%20%u043F%u043E%20%u041B%u041A%u041C%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u044B%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20var%20dir%20%3D%20Services.dirsvc.get%28%27Home%27%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20dir.exists%28%29%20%26%26%20dir.remove%28true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%21dir.exists%28%29%20%26%26%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20//%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29.%0A%20%20%20%20%20%20%20%20%20%20%20showAlertNotification%28%22chrome%3A//global/skin/icons/question-16.png%22%2C%20self.label%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash-%u043A%u0443%u043A%u0438%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20//%20%u043F%u043E%20%u0421%u041A%u041C%20%u043C%u0438%u043D%u0438%u043C%u0438%u0437%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u043E%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%0A%20%20%20%20%20%20%20%20%20%20%20.minimizeMemoryUsage%28null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%7D%3B%0A%20%20%20%0A%20%20%20%20%20%0A%20%20%20//%20Css%20%u0441%u0442%u0438%u043B%u044C%20%u0434%u043B%u044F%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20....%0A%20%20%20var%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A%20%20%20%20%20%20%23memoryDisplay%20%7B%20-moz-appearance%3A%20none%20%21important%3B%20color%3A%20green%20%21important%3B%20margin-left%3A%20-4px%20%21important%3B%20margin-right%3A%20-4px%20%21important%3B%20border%3A%200%20%21important%3B%20padding%3A%200%20%21important%3B%20text-align%3A%20right%3B%20%7D%5C%0A%20%20%20%20%20%20%23memoryDisplay%5BresetMemory%5D%20%7B%20color%3A%20red%20%21important%3B%20%7D%5C%0A%20%20%20%27%29%29%3B%0A%20%20%20const%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%20%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0438%20%u0434%u0440%u0443%u0433%u0438%u0435%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20....%0A%20%20%20addDestructor%28function%28%29%20%7B%20%0A%20%20%20%20%20%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20%20%20urlbarIcons.removeChild%28%20memoryDisplay%20%29%0A%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28%20self.timer%20%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%0A%7D%29%28%29%3B%0A%0A%0A%0A%0A%0A%0A%0A%20%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BdoMMU%28%29%3B%0Afunction%20doMMU%28%29%20%7B%0A%09let%20gMgr%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D%0A%09%09.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%09Services.obs.notifyObservers%28null%2C%20%22child-mmu-request%22%2C%20null%29%3B%0A%09gMgr.minimizeMemoryUsage%28null%2C%20false%2C%20false%29%3B%0A%7D%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

удали старую кнопку + рестарт.

bunda1
Спасибо, работает.
А индикацию на срабатывание СКМ  никак не подвесить?
Вариант с  memoryDisplay.style.color = "red"; не работает.
Впрочем, и так нормально.

Ultima2m пишет

bunda1
Спасибо, работает.
А индикацию на срабатывание СКМ  никак не подвесить?
Вариант с  memoryDisplay.style.color = "red"; не работает.
Впрочем, и так нормально.

наверно у тебя конфликт с:

Выделить код

Код:

memoryDisplay.style.color = (mv < 500) ? 'green' : '';
memoryDisplay.style.color = (mv > 700) ? 'red' : '';

и

Выделить код

Код:

color: green !important;

можешь вместо memoryDisplay.style.color = "red"; поставить:

Выделить код

Код:

Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).
           showAlertNotification("chrome://global/skin/icons/question-16.png", self.label, 'Минимизировать использование памяти', false, "", null, "");

Кстати лучше в коде твоей кнопки заменить:

Выделить код

Код:

Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager)
           .minimizeMemoryUsage(null);

на

Выделить код

Код:

self.interval = setInterval(function() {
   Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager)
   .minimizeMemoryUsage(null);
}, 40000 );

тогда очистка памяти будет происходить раз в 40 секунд.

Можно готовый рабочий вариант кнопки для делитантов?:)

emlen пишет

Можно готовый рабочий вариант кнопки для делитантов?:)

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u0430%u043C%u044F%u0442%u044C%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADHklEQVQ4jYWTXUxTBxiG32hn62h1GLASoWoY+JNaZBtLmIMjyyKixLgEspEFkJZNHDHOAdmBU6RkUZzZsmK1+EOyOspAQ92QpjhbEEaUSmLXru4s4WLdxSgmrhCdEGSL7640ahb23L3J99w9H/AsiwBoHo9dOcu+fydvuQuAGoAKQBwWQvMiCps/TPo9WbvYBEDnatHOXTu7nnm5b1w/3NQUliRpHEDO895qnVYhAtiSrV9yfP7mBnY0Jz9am6z1W1v2/3Pj+jDn5h7yMXa7PaZUKnc9sVNWKmvv/5hBW03Cg7ffXHe343Q9f/BcYiTyG/+amefM7BxjsRgnJyc5MTHBWCxGq9X6QKlUFgAA9giaDu/pjfzmjJnBn3/h1PQsp6bvMRqdZCQS4fj4OGVZZjgcZjAYZCAQoCzLrK+vn1IoFNmo3K0ZFvfn0uH8jtFolLIsMxQKMRAIcGxsjKOjoxwZGeHQ0BB9Ph99Ph8HBgbo8XgoCEIIB4rUv3aek9jy+Rd0Op30+/0cHByk1+tlf38/3W43+/r66Ha76XL1sK2tjQ1SIz+pqWP+9u1/wlyx4u6pryT2X/GyurqaXV1d7O3tZU9PD10uF7u7u2m32ylJZlZVVbGy8gOWFO+guaGGpWVlf0DYovK+/kraja8d52mz2Wg0Gtne3s7W1laKokiTyUSj0cjSchMls4W1dSI9J1LZeXQjl7208ksAUAJQZ2VlDTscDoqiyMLCQpaX72Vp+T42NR+hubGR5ywZPLRXP5+UpGsr2Kq5PDW4mZkblhx9uoc1giCELRYLKyqMtDSZeeTQqywrKXik12++9e1nKXd+6kyfB/AyACF6xcCPihN8z0eVmpaWdnNb3luzBoM+PHBq7f1rZ1L/BrAzP1ttDXVtIoAMQ7qq4c5VA3XaFz7+z6IBpANQ5b0W1/7Qn8nlmkW1+4oSnOeb18wASDj4buKtk5/q7gFIWvA3SnbEO29f2EQA+ccPro4ceC9xCEDcqkTFMZUC2xaUAShsdSm3Lx5bNw1gVW5mnEcbv7jk/6SnWfp+fnwwJ1NtX+joXwJBlDIWFgabAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%28function%20%28%29%20%7B%0A%20%20%20if%20%28%20document.getElementById%28%27memoryDisplay%27%29%20%29%20return%3B%0A%20%20%20%20%0A%20%20%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u043F%u0430%u043C%u044F%u0442%u0438%20....%0A%20%20%20var%20memoryDisplay%20%3D%20document.createElement%28%22statusbarpanel%22%29%3B%0A%20%20%20var%20urlbarIcons%20%3D%20document.getElementById%28%22urlbar-icons%22%29%3B%0A%20%20%20urlbarIcons.insertBefore%28%20memoryDisplay%2C%20urlbarIcons.lastChild%20%29%3B%20//%20%u043F%u0435%u0440%u0435%u0434%20%u043F%u0435%u0440%u0432%u043E%u0439%20%u0438%u043A%u043E%u043D%u043A%u043E%u0439%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%0A%20%20%20memoryDisplay.id%20%3D%20%22memoryDisplay%22%3B%0A%20%20%20memoryDisplay.label%20%3D%20getMemory%28%29%20+%20%27%20MB%27%3B%20%20%0A%20%20%20self.timer%20%3D%20setInterval%28function%28%29%20%7B%0A%20%20%20%20%20%20var%20mv%20%3D%20getMemory%28%29%3B%0A%20%20%20%20%20%20memoryDisplay.label%20%3D%20mv%20+%20%27%20MB%27%3B%0A%20%20%20%7D%2C%202000%20%29%3B%20%20//%20%u0442%u0430%u0439%u043C%u0435%u0440%20%u043E%u0431%u043D%u043E%u0432%u043B%u044F%u0435%u0442%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u0440%u0430%u0437%20%u0432%202000%u043C%u0441%28%202%20%u0441%u0435%u043A%20%29%0A%20%20%0A%20%20%0A//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0430%u0435%u0442%20%u0437%u0430%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0435%20%u0434%u0438%u0441%u043A%u043E%u0432%u043E%u0433%u043E%20%u043A%u0435%u0448%u0430%20....%0A%20%20%20var%20title%20%3D%20%22%u041B%3A%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash-%u043A%u0443%u043A%u0438%5Cn%u0421%3A%20%u041C%u0438%u043D%u0438%u043C%u0438%u0437%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u043E%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%5Cn%5Cn%22%3B%0A%20%20%20var%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%20%20%20%7D%3B%20%20%20%0A%20%20%20%20%20%20function%20getSize%28size%29%20%7B%0A%20%20%20%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%20%20%20%7D%0A%20%20%20function%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20%20%20%20memoryDisplay.tooltipText%20%3D%20memoryDisplay.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%20%20%20%7D%0A%20%20%20function%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0A%20%20%20var%20types%20%3D%20Object.keys%28data%29%3B%0A%20%20%20var%20ttt%20%3D%20title%20+%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%0A%20%20%20memoryDisplay.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20memoryDisplay.tooltipText%20%3D%20ttt%3B%0A%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28%7B%7D%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%0A%20%20%20%7D%3B%0A%20%20%20%0A%20%20%20%0A%20%20%20//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0437%u0430%u043D%u0438%u043C%u0430%u0435%u043C%u0443%u044E%20%u043E%u043F%u0435%u0440%u0430%u0442%u0438%u0432%u043D%u0443%u044E%20%u043F%u0430%u043C%u044F%u0442%u044C%20%u0432%20MB%20....%0A%20%20%20function%20getMemory%28%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20reporterManager%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20e%20%3D%20reporterManager.enumerateReporters%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%20%28%20e.hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mr%20%3D%20e.getNext%28%29.QueryInterface%28Ci.nsIMemoryReporter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5Bmr.path%5D%20%3D%20mr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20memory%20%3D%20self%5B%22resident%22%5D.amount%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20memory%20%3D%20reporterManager.resident%20%7D%3B%20//%20%u0434%u043B%u044F%20Nightly%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20return%20%28%20Math.round%28%20memory/1048576%20%29%20%29%3B%0A%20%20%20%7D%3B%20%20%20%20%20%20%0A%20%20%20%0A%20%0A%20//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20Memory%20Monitor%20.....%0A%20%20%20memoryDisplay.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20%20//%20%u043F%u043E%20%u041B%u041A%u041C%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u044B%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20var%20dir%20%3D%20Services.dirsvc.get%28%27Home%27%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20dir.exists%28%29%20%26%26%20dir.remove%28true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%21dir.exists%28%29%20%26%26%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20//%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29.%0A%20%20%20%20%20%20%20%20%20%20%20showAlertNotification%28self.image%2C%20self.label%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash-%u043A%u0443%u043A%u0438%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20%u043F%u043E%20%u0421%u041A%u041C%20%u043C%u0438%u043D%u0438%u043C%u0438%u0437%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u043E%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20memoryDisplay.style.color%20%3D%20%22red%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20self.interval%20%29%20%7B%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20clearInterval%28%20self.interval%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20delete%20self.interval%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20self.interval%20%3D%20setInterval%28function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.minimizeMemoryUsage%28null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%2C%2040000%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%7D%3B%0A%20%20%20%0A%20%20%20%20%20%0A%20%20%20//%20Css%20%u0441%u0442%u0438%u043B%u044C%20%u0434%u043B%u044F%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20....%0A%20%20%20var%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A%20%20%20%20%20%20%23memoryDisplay%20%7B%20-moz-appearance%3A%20none%20%21important%3B%20margin-left%3A%20-4px%20%21important%3B%20margin-right%3A%20-4px%20%21important%3B%20border%3A%200%20%21important%3B%20padding%3A%200%20%21important%3B%20text-align%3A%20right%3B%20%7D%5C%0A%20%20%20%20%20%20%23memoryDisplay%5BresetMemory%5D%20%7B%20color%3A%20red%20%21important%3B%20%7D%5C%0A%20%20%20%27%29%29%3B%0A%20%20%20const%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%20%0A%20%20%20%0A%20%20%20%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0438%20%u0434%u0440%u0443%u0433%u0438%u0435%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20....%0A%20%20%20addDestructor%28function%28%29%20%7B%20%0A%20%20%20%20%20%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20%20%20urlbarIcons.removeChild%28%20memoryDisplay%20%29%0A%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28%20self.timer%20%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%0A%7D%29%28%29%3B%0A%0A%0A%0A%0A%0A%0A%0A%20%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Разница с диспетчером задач на Windows 10 примерно в 50 МБ

tom911, эта цифра не критична. плюс/минус 50 Мб мы потерпим. Может быть "Диспетчер задач" не правильно считает. :)

Разные диспетчеры и менеджеры процессов потребление памяти тоже по разному показывают, у меня самое близкое значение с кодом [CB]Memory Monitor показывает AnVir Task Manager.

bunda1, подскажи, пожалуйста, я разместил Memory Monitor в строке состояния,

Выделить код

Код:

// Создать в панели дополнений....
   var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("status-bar");
   urlbarIcons.insertBefore (memoryDisplay, null);

а можно как-нибудь указать для него определенную позицию? Хочу, чтобы он отображался в определённом месте панели. Через ПКМ на любой панели -> "Изменить" его невозможно переместить. :(

А у меня с Process Hacker практически один в один показывает.

PEAKTOP пишет

bunda1, подскажи, пожалуйста, я разместил Memory Monitor в строке состояния,

Выделить код

Код:

// Создать в панели дополнений....
   var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("status-bar");
   urlbarIcons.insertBefore (memoryDisplay, null);

а можно как-нибудь указать для него определенную позицию? Хочу, чтобы он отображался в определённом месте панели. Через ПКМ на любой панели -> "Изменить" его невозможно переместить. :(

Мне кажется, что можно панельку поместить на саму кнопку (хоть и не уверен).
А кнопку можно помещать и перетаскивать.
Но окончательный ответ должен дать сам bunda1

PEAKTOP пишет

а можно как-нибудь указать для него определенную позицию? Хочу, чтобы он отображался в определённом месте панели. Через ПКМ на любой панели -> "Изменить" его невозможно переместить.

Вот перемещаемая кнопка [CB]Memory Monitor:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname/%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-2%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20memoryTab%20%3D%20gBrowser.getBrowserForTab%28%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%22about%3Amemory%22%29%20%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20o%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0436%u0434%u0435%u0442%20%u043F%u043E%u043A%u0430%20%u043E%u0442%u043A%u0440%u043E%u0435%u0442%u0441%u044F%20%22about%3Amemory%22%2C%20%u0443%u0434%u0430%u043B%u044F%u0435%u0442%20%u0441%u0435%u0431%u044F%20%u0438%20%u043D%u0430%u0436%u0438%u043C%u0430%u0435%u0442%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0A%20%20%20%20%20%20%20%20%20%20memoryTab.addEventListener%28%22pageshow%22%2C%20function%20c%28e%29%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28%20e.type%2C%20c%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20try%20%7B%20e.originalTarget.getElementById%28%27measureButton%27%29.click%28%29%20%7D%20catch%28e%29%20%7B%7D%20%7D%2C%200%29%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20....%0A%20%20%20%20%20%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%20....%0A%20%20%20%20%20%20%20%20%20%20var%20dir%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29.get%28%22Home%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20dir.exists%28%29%20%29%20dir.remove%28true%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21dir.exists%28%29%20%29%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29.%0A%20%20%20%20%20%20%20%20%20%20showAlertNotification%28%27chrome%3A//global/skin/icons/information-16.png%27%2C%20%27%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%27%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A%0A//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u043D%u0430%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u043A%u043D%u043E%u043F%u043A%u0435%20................................%0A%28function%20%28%29%20%7B%0A%20%20%20self.label%20%3D%20getMemory%28%29%20+%20%27MB%27%3B%20%20%0A%20%20%20self.timer%20%3D%20setInterval%28function%28%29%20self.label%20%3D%20getMemory%28%29%20+%20%27MB%27%2C%202000%20%29%3B%20//%20%u0442%u0430%u0439%u043C%u0435%u0440%20%u043E%u0431%u043D%u043E%u0432%u043B%u044F%u0435%u0442%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u0440%u0430%u0437%20%u0432%202000%u043C%u0441%28%202%20%u0441%u0435%u043A%20%29%20%20%20%0A%20%20%20%0A%20%20%20//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0432%20MB%20....%0A%20%20%20function%20getMemory%28%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20reporterManager%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20e%20%3D%20reporterManager.enumerateReporters%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%20%28%20e.hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mr%20%3D%20e.getNext%28%29.QueryInterface%28Ci.nsIMemoryReporter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5Bmr.path%5D%20%3D%20mr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20memory%20%3D%20self%5B%22resident%22%5D.amount%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20memory%20%3D%20reporterManager.resident%20%7D%3B%20//%20%u0434%u043B%u044F%20Nightly%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20return%20%28%20Math.round%28%20memory/1048576%20%29%20%29%3B%0A%20%20%20%7D%3B%20%0A%0A%20%20%20//%20%u0421%u0442%u0438%u043B%u044C%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20....%0A%20%20%20var%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A%20%20%20%25button%25%20.toolbarbutton-icon%20%7B%5C%0A%20%20%20%20%20display%3A%20none%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20.toolbarbutton-text%20%7B%5C%0A%20%20%20%20%20display%3A%20-moz-box%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20%7B%5C%0A%20%20%20%20%20-moz-box-orient%3A%20horizontal%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%27.replace%28/%25button%25/g%2C%20%22%23%22%20+%20_id%29%20%29%29%3B%0A%20%20%20const%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%20%0A%20%20%20%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20....%0A%20%20%20addDestructor%28function%28%29%20%7B%20%0A%20%20%20%20%20%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28%20self.timer%20%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%20%20%0A%7D%29%28%29%3B%0A%0A%0A//%20%u0421%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0A%28function%28%29%20%7B%20%20%20%0A%20%20%20%20var%20title%20%3D%20%22%u041B%3A%20%u041F%u043E%u0434%u0440%u043E%u0431%u043D%u043E%20%u043F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%5Cn%u0421%3A%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash-%u043A%u0443%u043A%u0438%5Cn%5Cn%22%3B%0A%20%20%20%20var%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%20%20%20%20%7D%3B%0A%20%20%20%20function%20getSize%28size%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20%20%20%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20%20%20%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20%20%20%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20%20%20%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20self.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0A%20%20%20%20var%20types%20%3D%20Object.keys%28data%29%3B%0A%20%20%20%20var%20ttt%20%3D%20title%20+%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%0A%20%20%20%20self.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20ttt%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28%7B%7D%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%7D%29%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

bunda1? перемещаемая кнопка не перемещается. После захода в режим "настройка интерфейса" индикатор Memory Monitor пропадает с панели, такое же поведение было и со старой кнопкой.

P.S. После обновления кнопки FF перезапускал

PEAKTOP пишет

bunda1? перемещаемая кнопка не перемещается. После захода в режим "настройка интерфейса" индикатор Memory Monitor пропадает с панели, такое же поведение было и со старой кнопкой.

Упс, ну тогда вот так:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E222MB%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-2%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20memoryTab%20%3D%20gBrowser.getBrowserForTab%28%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%22about%3Amemory%22%29%20%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20o%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0436%u0434%u0435%u0442%20%u043F%u043E%u043A%u0430%20%u043E%u0442%u043A%u0440%u043E%u0435%u0442%u0441%u044F%20%22about%3Amemory%22%2C%20%u0443%u0434%u0430%u043B%u044F%u0435%u0442%20%u0441%u0435%u0431%u044F%20%u0438%20%u043D%u0430%u0436%u0438%u043C%u0430%u0435%u0442%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0A%20%20%20%20%20%20%20%20%20%20memoryTab.addEventListener%28%22pageshow%22%2C%20function%20c%28e%29%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28%20e.type%2C%20c%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20try%20%7B%20e.originalTarget.getElementById%28%27measureButton%27%29.click%28%29%20%7D%20catch%28e%29%20%7B%7D%20%7D%2C%200%29%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20....%0A%20%20%20%20%20%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%20....%0A%20%20%20%20%20%20%20%20%20%20var%20dir%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29.get%28%22Home%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20dir.exists%28%29%20%29%20dir.remove%28true%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21dir.exists%28%29%20%29%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29.%0A%20%20%20%20%20%20%20%20%20%20showAlertNotification%28%27chrome%3A//global/skin/icons/information-16.png%27%2C%20%27%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%27%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A%0A//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u043D%u0430%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u043A%u043D%u043E%u043F%u043A%u0435%20................................%0A%28function%20%28%29%20%7B%0A%20%20%20self.label%20%3D%20getMemory%28%29%20+%20%27MB%27%3B%20%20%0A%20%20%20self.timer%20%3D%20setInterval%28function%28%29%20self.label%20%3D%20getMemory%28%29%20+%20%27MB%27%2C%202000%20%29%3B%20//%20%u0442%u0430%u0439%u043C%u0435%u0440%20%u043E%u0431%u043D%u043E%u0432%u043B%u044F%u0435%u0442%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u0440%u0430%u0437%20%u0432%202000%u043C%u0441%28%202%20%u0441%u0435%u043A%20%29%20%20%20%0A%20%20%20%0A%20%20%20//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0432%20MB%20....%0A%20%20%20function%20getMemory%28%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20reporterManager%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20e%20%3D%20reporterManager.enumerateReporters%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%20%28%20e.hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mr%20%3D%20e.getNext%28%29.QueryInterface%28Ci.nsIMemoryReporter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5Bmr.path%5D%20%3D%20mr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20memory%20%3D%20self%5B%22resident%22%5D.amount%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20memory%20%3D%20reporterManager.resident%20%7D%3B%20//%20%u0434%u043B%u044F%20Nightly%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20return%20%28%20Math.round%28%20memory/1048576%20%29%20%29%3B%0A%20%20%20%7D%3B%20%0A%0A%20%20%20//%20%u0421%u0442%u0438%u043B%u044C%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20....%0A%20%20%20var%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A%20%20%20%25button%25%20.toolbarbutton-icon%20%7B%5C%0A%20%20%20%20%20display%3A%20none%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20.toolbarbutton-text%20%7B%5C%0A%20%20%20%20%20display%3A%20-moz-box%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20%7B%5C%0A%20%20%20%20%20-moz-box-orient%3A%20horizontal%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%27.replace%28/%25button%25/g%2C%20%22%23%22%20+%20_id%29%20%29%29%3B%0A%20%20%20const%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%20%0A%20%20%20%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20....%0A%20%20%20addDestructor%28function%28%29%20%7B%20%0A%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28%20self.timer%20%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%20%20%0A%7D%29%28%29%3B%0A%0A%0A//%20%u0421%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0A%28function%28%29%20%7B%20%20%20%0A%20%20%20%20var%20title%20%3D%20%22%u041B%3A%20%u041F%u043E%u0434%u0440%u043E%u0431%u043D%u043E%20%u043F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%5Cn%u0421%3A%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash-%u043A%u0443%u043A%u0438%5Cn%5Cn%22%3B%0A%20%20%20%20var%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%20%20%20%20%7D%3B%0A%20%20%20%20function%20getSize%28size%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20%20%20%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20%20%20%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20%20%20%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20%20%20%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20self.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0A%20%20%20%20var%20types%20%3D%20Object.keys%28data%29%3B%0A%20%20%20%20var%20ttt%20%3D%20title%20+%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%0A%20%20%20%20self.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20ttt%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28%7B%7D%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%7D%29%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

bunda1, благодарю за кнопку. Ещё одна просьба:  а как можно сделать пустое пространство, слева и справа от индикатора?
vr1gq80rhkzv.png 
Раньше можно было использовать в режиме редактирования интерфейса разделитель/плавающий разделитель, но в нынешних версиях FF он отсутствует. :(

P.S В не перемещаемой кнопке пустое пространство было.

tom911 пишет

Разница с диспетчером задач на Windows 10 примерно в 50 МБ

на самом деле это очень веская разница!

Alexay пишет

на самом деле это очень веская разница!

На самом деле разницы нет, кнопка выводит working set в мегабайтах.
Если включить столбец «память - рабочий набор» и пересчитать КБ/МБ, все совпадет.

PEAKTOP пишет

Ещё одна просьба:  а как можно сделать пустое пространство, слева и справа от индикатора?

Поменяй:

Выделить код

Код:

-moz-box-orient: horizontal !important;\

на

Выделить код

Код:

display: -moz-box !important; min-width: 5.5em;\

и измени там 5.5 как тебе удобней.

А как можно задавать цвет текста, фона, силу текста (bold/normal), стиль текста (italic, normal), подчёркивание?
Можно ли добавить иконку? И если можно, то как?
Спасибо
PS. Я сам нашёл как этим всем управлять, кроме иконки. Как добавить иконку пока не знаю.

difabor пишет

Как добавить иконку пока не знаю.

Удали:

Выделить код

Код:

%button% .toolbarbutton-text {\
     display: -moz-box !important;\
   }\
bunda1 пишет
difabor пишет

Как добавить иконку пока не знаю.

Удали:

Выделить код

Код:

%button% .toolbarbutton-text {\
     display: -moz-box !important;\
   }\

Спасибо.
Только у меня так не получилось.
А получилось так:
Я удалил:

Выделить код

Код:

%button% .toolbarbutton-icon {\
     display: none !important;\
   }\

и добавил:

Выделить код

Код:

var btn = this;
...
btn.image = <path_to_some_image>;
difabor пишет

Только у меня так не получилось.

Извиняюсь, в спешке не то скопировал.

difabor пишет

добавил:

Выделить код

Код:

var btn = this;
btn.image = <path_to_some_image>;

Это ты зря, можно было просто сменить иконку у кнопки.

bunda1 пишет
difabor пишет

добавил:

Выделить код

Код:

var btn = this;
btn.image = <path_to_some_image>;

Это ты зря, можно было просто сменить иконку у кнопки.

Спасибо.
Но так можно задать иконку статически, а через btn.image - динамически - задать несколько картинок и по определённым условиям выбирать нужную.
Уважаемый bunda1, безусловно, Ваш Memory Monitor не требует иконки - это я спросил для общего развития, чтобы знать как управлять.
Надеюсь, я своими вопросами не сильно Вам морочу голову :)
Офф-топ.
Есть ли возможность найти в вэб архиве тему о сниппетах, управлением файлами и т.д.?

bunda1, подскажи, пожалуйста, если я в раздел удаления кэша и кукисов добавлю вот этот код, действие "Минимизировать использование памяти" выполнится?

Выделить код

Код:

if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { 
          e.preventDefault();  

// Минимизировать использование памяти
Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager)
           .minimizeMemoryUsage(null);

// очистить кэш ....
          try { 
              Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
              Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK);
              } 
          catch(e) { Services.cache2.clear() }

Оставшуюся часть кода  — удаление кукисов, для экономии места не стал вставлять.

Пробовал повесить "Минимизировать использование памяти" на СКМ и после выполнения выводить сообщение, уж не знаю выполняет очистка памяти или нет, но сообщение не выводит:

Выделить код

Код:

if ( e.button == 1 ) {
Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager)
           .minimizeMemoryUsage(null);
 Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).
          showAlertNotification('chrome://global/skin/icons/information-16.png', 'Минимизировать использование памяти', 'Минимизирование использование памяти - выполнено', false, "", null, "");
}

Ещё попутно вопрос — можно при очистке памяти выполнять не одно, а три действия —  кнопки CG, CC, Minimize Memory  Usage?
z1dpzu4kicyv.png

PEAKTOP
Custom Buttons • View topic - Minimize memory usage

difabor пишет

Есть ли возможность найти в вэб архиве тему о сниппетах, управлением файлами и т.д.?

Инструменты для создателей Custom Buttons | Форум Mozilla Россия

17-12-2015 20:39:05
PEAKTOP
Выполнится по e.button == 2 и по e.button == 1, но такой код освобождает память максимум до 7 МБ как и CG, CC, Minimize Memory  Usage, так что нет толка от этого.

bunda1 пишет
difabor пишет

Есть ли возможность найти в вэб архиве тему о сниппетах, управлением файлами и т.д.?

Инструменты для создателей Custom Buttons | Форум Mozilla Россия

Спасибо!!!

В FF44.0 у меня поломалось что-то.Так показывает, т.е нет инфы с правой стороны:

скрытый текст
BcO7X6ql.jpg

CB версии 0.0.5.9pre1, ставил отсюда: Custom Buttons • View topic - Custom Buttons broken on all Firefox versions higher than 43
Кнопку использую эту: №161

Уважаемый bunda1,
у меня есть небольшой вопрос:
После того, как я создал кнопку у которой и иконка и ярлык (label), как мне отличить - находится курсор на иконке или на label? Что-то типа:

Выделить код

Код:

if (e.target.id == "<ИД кнопки>" && <что-то> == "image") alert("image");
if (e.target.id == "<ИД кнопки>" && <что-то> == "label") alert("label");

Что надо подставить вместо <что-то>?

difabor пишет

После того, как я создал кнопку у которой и иконка и ярлык (label), как мне отличить - находится курсор на иконке или на label?

Я проверил - обработчики не видят иконку или label, тут наверно нужно отдельно создать label - document.createElement("label") и поставить у кнопки. Не нужны такие сложности.

bunda1 пишет
difabor пишет

После того, как я создал кнопку у которой и иконка и ярлык (label), как мне отличить - находится курсор на иконке или на label?

Я проверил - обработчики не видят иконку или label, тут наверно нужно отдельно создать label - document.createElement("label") и поставить у кнопки. Не нужны такие сложности.

Да нет, мне - чтобы понять...
Спасибо большое!

Garider пишет

В FF44.0 у меня поломалось что-то.Так показывает, т.е нет инфы с правой стороны:
Кнопку использую эту: №161

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u0430%u043C%u044F%u0442%u044C%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADHklEQVQ4jYWTXUxTBxiG32hn62h1GLASoWoY+JNaZBtLmIMjyyKixLgEspEFkJZNHDHOAdmBU6RkUZzZsmK1+EOyOspAQ92QpjhbEEaUSmLXru4s4WLdxSgmrhCdEGSL7640ahb23L3J99w9H/AsiwBoHo9dOcu+fydvuQuAGoAKQBwWQvMiCps/TPo9WbvYBEDnatHOXTu7nnm5b1w/3NQUliRpHEDO895qnVYhAtiSrV9yfP7mBnY0Jz9am6z1W1v2/3Pj+jDn5h7yMXa7PaZUKnc9sVNWKmvv/5hBW03Cg7ffXHe343Q9f/BcYiTyG/+amefM7BxjsRgnJyc5MTHBWCxGq9X6QKlUFgAA9giaDu/pjfzmjJnBn3/h1PQsp6bvMRqdZCQS4fj4OGVZZjgcZjAYZCAQoCzLrK+vn1IoFNmo3K0ZFvfn0uH8jtFolLIsMxQKMRAIcGxsjKOjoxwZGeHQ0BB9Ph99Ph8HBgbo8XgoCEIIB4rUv3aek9jy+Rd0Op30+/0cHByk1+tlf38/3W43+/r66Ha76XL1sK2tjQ1SIz+pqWP+9u1/wlyx4u6pryT2X/GyurqaXV1d7O3tZU9PD10uF7u7u2m32ylJZlZVVbGy8gOWFO+guaGGpWVlf0DYovK+/kraja8d52mz2Wg0Gtne3s7W1laKokiTyUSj0cjSchMls4W1dSI9J1LZeXQjl7208ksAUAJQZ2VlDTscDoqiyMLCQpaX72Vp+T42NR+hubGR5ywZPLRXP5+UpGsr2Kq5PDW4mZkblhx9uoc1giCELRYLKyqMtDSZeeTQqywrKXik12++9e1nKXd+6kyfB/AyACF6xcCPihN8z0eVmpaWdnNb3luzBoM+PHBq7f1rZ1L/BrAzP1ttDXVtIoAMQ7qq4c5VA3XaFz7+z6IBpANQ5b0W1/7Qn8nlmkW1+4oSnOeb18wASDj4buKtk5/q7gFIWvA3SnbEO29f2EQA+ccPro4ceC9xCEDcqkTFMZUC2xaUAShsdSm3Lx5bNw1gVW5mnEcbv7jk/6SnWfp+fnwwJ1NtX+joXwJBlDIWFgabAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%28function%20%28%29%20%7B%0A%20%20%20if%20%28%20document.getElementById%28%27memoryDisplay%27%29%20%29%20return%3B%0A%20%20%20%20%0A%20%20%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0432%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0435%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u043F%u0430%u043C%u044F%u0442%u0438%20....%0A%20%20%20var%20memoryDisplay%20%3D%20document.createElement%28%22statusbarpanel%22%29%3B%0A%20%20%20var%20urlbarIcons%20%3D%20document.getElementById%28%22urlbar-icons%22%29%3B%0A%20%20%20urlbarIcons.insertBefore%28%20memoryDisplay%2C%20urlbarIcons.lastChild%20%29%3B%20//%20%u043F%u0435%u0440%u0435%u0434%20%u043F%u0435%u0440%u0432%u043E%u0439%20%u0438%u043A%u043E%u043D%u043A%u043E%u0439%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%0A%20%20%20memoryDisplay.id%20%3D%20%22memoryDisplay%22%3B%0A%20%20%20memoryDisplay.label%20%3D%20getMemory%28%29%20+%20%27%20MB%27%3B%20%20%0A%20%20%20self.timer%20%3D%20setInterval%28function%28%29%20%7B%0A%20%20%20%20%20%20var%20mv%20%3D%20getMemory%28%29%3B%0A%20%20%20%20%20%20memoryDisplay.label%20%3D%20mv%20+%20%27%20MB%27%3B%0A%20%20%20%7D%2C%202000%20%29%3B%20%20//%20%u0442%u0430%u0439%u043C%u0435%u0440%20%u043E%u0431%u043D%u043E%u0432%u043B%u044F%u0435%u0442%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u0440%u0430%u0437%20%u0432%202000%u043C%u0441%28%202%20%u0441%u0435%u043A%20%29%0A%20%20%0A%20%20%0A//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0430%u0435%u0442%20%u0437%u0430%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0435%20%u0434%u0438%u0441%u043A%u043E%u0432%u043E%u0433%u043E%20%u043A%u0435%u0448%u0430%20....%0A%20%20%20var%20title%20%3D%20%22%u041B%3A%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash-%u043A%u0443%u043A%u0438%5Cn%u0421%3A%20%u041C%u0438%u043D%u0438%u043C%u0438%u0437%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u043E%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%5Cn%5Cn%22%3B%0A%20%20%20var%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%20%20%20%7D%3B%20%20%20%0A%20%20%20%20%20%20function%20getSize%28size%29%20%7B%0A%20%20%20%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%20%20%20%7D%0A%20%20%20function%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20%20%20%20memoryDisplay.tooltipText%20%3D%20memoryDisplay.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%20%20%20%7D%0A%20%20%20function%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0A%20%20%20var%20types%20%3D%20Object.keys%28data%29%3B%0A%20%20%20var%20ttt%20%3D%20title%20+%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%20%20%20%0A%20%20%20var%20context%20%3D%20Cu.import%28%22resource%3A//gre/modules/LoadContextInfo.jsm%22%2C%20%7B%7D%29.LoadContextInfo.default%3B%0A%20%20%20memoryDisplay.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20memoryDisplay.tooltipText%20%3D%20ttt%3B%0A%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28context%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%0A%20%20%20%7D%3B%0A%20%20%20%0A%20%20%20%0A%20%20%20//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0437%u0430%u043D%u0438%u043C%u0430%u0435%u043C%u0443%u044E%20%u043E%u043F%u0435%u0440%u0430%u0442%u0438%u0432%u043D%u0443%u044E%20%u043F%u0430%u043C%u044F%u0442%u044C%20%u0432%20MB%20....%0A%20%20%20function%20getMemory%28%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20reporterManager%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20e%20%3D%20reporterManager.enumerateReporters%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%20%28%20e.hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mr%20%3D%20e.getNext%28%29.QueryInterface%28Ci.nsIMemoryReporter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5Bmr.path%5D%20%3D%20mr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20memory%20%3D%20self%5B%22resident%22%5D.amount%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20memory%20%3D%20reporterManager.resident%20%7D%3B%20//%20%u0434%u043B%u044F%20Nightly%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20return%20%28%20Math.round%28%20memory/1048576%20%29%20%29%3B%0A%20%20%20%7D%3B%20%20%20%20%20%20%0A%20%20%20%0A%20%0A%20//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20Memory%20Monitor%20.....%0A%20%20%20memoryDisplay.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20%20//%20%u043F%u043E%20%u041B%u041A%u041C%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u044B%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20var%20dir%20%3D%20Services.dirsvc.get%28%27Home%27%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20dir.exists%28%29%20%26%26%20dir.remove%28true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%21dir.exists%28%29%20%26%26%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20//%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29.%0A%20%20%20%20%20%20%20%20%20%20%20showAlertNotification%28self.image%2C%20self.label%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash-%u043A%u0443%u043A%u0438%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20//%20%u043F%u043E%20%u0421%u041A%u041C%20%u043C%u0438%u043D%u0438%u043C%u0438%u0437%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u043E%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%0A%20%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20memoryDisplay.style.color%20%3D%20%22red%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20if%20%28%20self.interval%20%29%20%7B%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20clearInterval%28%20self.interval%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20delete%20self.interval%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20self.interval%20%3D%20setInterval%28function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20.minimizeMemoryUsage%28null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%2C%2040000%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%7D%3B%0A%20%20%20%0A%20%20%20%20%20%0A%20%20%20//%20Css%20%u0441%u0442%u0438%u043B%u044C%20%u0434%u043B%u044F%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20....%0A%20%20%20var%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A%20%20%20%20%20%20%23memoryDisplay%20%7B%20-moz-appearance%3A%20none%20%21important%3B%20margin-left%3A%20-4px%20%21important%3B%20margin-right%3A%20-4px%20%21important%3B%20border%3A%200%20%21important%3B%20padding%3A%200%20%21important%3B%20text-align%3A%20right%3B%20%7D%5C%0A%20%20%20%20%20%20%23memoryDisplay%5BresetMemory%5D%20%7B%20color%3A%20red%20%21important%3B%20%7D%5C%0A%20%20%20%27%29%29%3B%0A%20%20%20const%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%20%0A%20%20%20%0A%20%20%20%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0438%20%u0434%u0440%u0443%u0433%u0438%u0435%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20....%0A%20%20%20addDestructor%28function%28%29%20%7B%20%0A%20%20%20%20%20%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20%20%20urlbarIcons.removeChild%28%20memoryDisplay%20%29%0A%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28%20self.timer%20%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%0A%7D%29%28%29%3B%0A%0A%0A%0A%0A%0A%0A%0A%20%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

bunda1
Спасибо! Теперь норм.

bunda1, можно ли исправить отображение размера кэш в таком варианте? :blush:

скрытый текст
// Показывать потребление памяти в адресной строке, от 04.09.2014. ................................
(function () {
   if ( document.getElementById('memoryDisplay') ) return;
   
   // Создать в адресной строке счётчик памяти ....
   var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("urlbar-icons");
   urlbarIcons.insertBefore( memoryDisplay, urlbarIcons.lastChild ); // перед первой иконкой адресной строки
   
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory() + ' MB'; 
   self.timer = setInterval(function() {
      var mv = getMemory();
      memoryDisplay.label = mv + ' MB';
      memoryDisplay.style.background = (mv > 800) ? 'Red' : '';
   }, 2000 );  // таймер обновляет счётчик раз в 2000мс( 2 сек )
   
   
   // Всплывающая подсказка у счётчика отображает заполнение дискового кеша ....
   var title = "Л: Подробно показать потребление памяти \nС: Очистить кэш и удалить Flash-куки\n\n";
   var data = {
       memory: "Memory Cache:  ",
       disk: "Disk Cache:  ",
       offline: "Offline Cache:  "
   };
   function getSize(size) {
      if (!size) return size === 0 ? "0" : "?";
      for(var count = -1; size >= 1024; size /= 1024, count++);
      return size.toFixed(2).replace(/0+$/, "").replace(/\.$/, "") + " " + ("KMGT"[count] || "") + "B";
   }
   function setInf(tot, max, type, i) {
      var inf = getSize(tot) + " / " + getSize(max);
      var key = "browser.cache." + type + ".enable";
      if (!Services.prefs.getBoolPref(key)) inf += " (disabled)";
      memoryDisplay.tooltipText = memoryDisplay.tooltipText.replace(zws(i), inf);
   }
   function zws(ind) "\u200B\u200B\u200B".slice(0, ++ind);

   var types = Object.keys(data);
   var ttt = title + types.map(function(key, i) data[key] + zws(i)).join("\n");

   memoryDisplay.onmouseenter = function() {
       memoryDisplay.tooltipText = ttt;
       try {
           var entries = {};
           Services.cache.visitEntries({
              visitDevice: function(device, info) entries[device] = info,
              visitEntry: function() {}
           });
           types.forEach(function(type, i) {
              var info = entries[type];
              setInf(info && info.totalSize, info && info.maximumSize, type, i)
           });
       } catch(ex) {
           Services.cache2 && types.forEach(function(type, i) {
               var func = function(aEntryCount, aConsumption, aCapacity, aDiskDirectory)
                          setInf(aConsumption, aCapacity, type, i);
               var storage = Services.cache2[(type == "offline" ? "app" : type) + "CacheStorage"]({}, null);
               try { storage.asyncVisitStorage({onCacheStorageInfo: func}, false) } catch(ex) {};
           });
       }
   };
   
   
   // Получить всю занимаемую оперативную память в MB ....
   function getMemory() {           
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          }
      catch(e) { var memory = reporterManager.resident }; // для Nightly
     
      return ( Math.round( memory/1048576 ) );
   };     
   
   
   // По клику подробно показать потребление памяти в вкладке ....
   memoryDisplay.onclick = function(e) {
      if ( e.button == 0 ) {
       var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") );
         
       // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
       memoryTab.addEventListener("pageshow", function c(e) {         
          this.removeEventListener( e.type, c );           

          setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);     
       });
       }

      // по СКМ очистить кэш и удалить Flash кукисы
      if ( e.button == 1 ) {
           // очистить кэш ....
           try {
                Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
                Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK);
                }
           catch(e) { Services.cache2.clear() };

           // удалить Flash кукисы ....
           var dir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("Home", Ci.nsIFile);
           dir.append("Application Data");
           dir.append("Macromedia");
           if ( dir.exists() ) dir.remove(true);
           if ( !dir.exists() ) dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);

           // всплывающее сообщение ....
           Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).
           showAlertNotification("chrome://global/skin/icons/question-16.png", self.label, 'Очистил кеш и удалил Flash-куки', false, "", null, "");
           }

   };
   
     
   // Css стиль для счётчика ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      #memoryDisplay { -moz-appearance: none !important; margin-left: -3px !important; margin-right: -5px !important; border: 0 !important; padding: 0 !important; text-align: right; }\
      #memoryDisplay[resetMemory] { color: red !important; }\
   '));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);


   // Удалять счётчик памяти и другие изменения ....
   addDestructor(function() {
      sss.unregisterSheet(uri, sss.AGENT_SHEET);
      urlbarIcons.removeChild( memoryDisplay )
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
   
})();


Спасибо...

Saenko пишет

bunda1, можно ли исправить отображение размера кэш в таком варианте?

Выделить код

Код:

// Показывать потребление памяти в адресной строке, от 04.09.2014. ................................
(function () {
   if ( document.getElementById('memoryDisplay') ) return;
   
   // Создать в адресной строке счётчик памяти ....
   var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("urlbar-icons");
   urlbarIcons.insertBefore( memoryDisplay, urlbarIcons.lastChild ); // перед первой иконкой адресной строки
   
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory() + ' MB'; 
   self.timer = setInterval(function() {
      var mv = getMemory();
      memoryDisplay.label = mv + ' MB';
      memoryDisplay.style.background = (mv > 800) ? 'Red' : '';
   }, 2000 );  // таймер обновляет счётчик раз в 2000мс( 2 сек )
   
   
// Всплывающая подсказка у счётчика отображает заполнение дискового кеша ....
   var title = "Л: Очистить кэш и удалить Flash-куки\nС: Минимизировать использование памяти\n\n";
   var data = {
       memory: "Memory Cache:  ",
       disk: "Disk Cache:  ",
       offline: "Offline Cache:  "
   };   
      function getSize(size) {
      if (!size) return size === 0 ? "0" : "?";
      for(var count = -1; size >= 1024; size /= 1024, count++);
      return size.toFixed(2).replace(/0+$/, "").replace(/\.$/, "") + " " + ("KMGT"[count] || "") + "B";
   }
   function setInf(tot, max, type, i) {
      var inf = getSize(tot) + " / " + getSize(max);
      var key = "browser.cache." + type + ".enable";
      if (!Services.prefs.getBoolPref(key)) inf += " (disabled)";
      memoryDisplay.tooltipText = memoryDisplay.tooltipText.replace(zws(i), inf);
   }
   function zws(ind) "\u200B\u200B\u200B".slice(0, ++ind);

   var types = Object.keys(data);
   var ttt = title + types.map(function(key, i) data[key] + zws(i)).join("\n");
   
   var context = Cu.import("resource://gre/modules/LoadContextInfo.jsm", {}).LoadContextInfo.default;
   memoryDisplay.onmouseenter = function() {
       memoryDisplay.tooltipText = ttt;
       try {
           var entries = {};
           Services.cache.visitEntries({
              visitDevice: function(device, info) entries[device] = info,
              visitEntry: function() {}
           });
           types.forEach(function(type, i) {
              var info = entries[type];
              setInf(info && info.totalSize, info && info.maximumSize, type, i)
           });
       } catch(ex) {
           Services.cache2 && types.forEach(function(type, i) {
               var func = function(aEntryCount, aConsumption, aCapacity, aDiskDirectory)
                          setInf(aConsumption, aCapacity, type, i);
               var storage = Services.cache2[(type == "offline" ? "app" : type) + "CacheStorage"](context, null);
               try { storage.asyncVisitStorage({onCacheStorageInfo: func}, false) } catch(ex) {};
           });
       }
   };
   
   
   // Получить всю занимаемую оперативную память в MB ....
   function getMemory() {           
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          }
      catch(e) { var memory = reporterManager.resident }; // для Nightly
     
      return ( Math.round( memory/1048576 ) );
   };     
   
   
   // По клику подробно показать потребление памяти в вкладке ....
   memoryDisplay.onclick = function(e) {
      if ( e.button == 0 ) {
       var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") );
         
       // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
       memoryTab.addEventListener("pageshow", function c(e) {         
          this.removeEventListener( e.type, c );           

          setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);     
       });
       }

      // по СКМ очистить кэш и удалить Flash кукисы
      if ( e.button == 1 ) {
           // очистить кэш ....
           try {
                Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
                Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK);
                }
           catch(e) { Services.cache2.clear() };

           // удалить Flash кукисы ....
           var dir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("Home", Ci.nsIFile);
           dir.append("Application Data");
           dir.append("Macromedia");
           if ( dir.exists() ) dir.remove(true);
           if ( !dir.exists() ) dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);

           // всплывающее сообщение ....
           Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).
           showAlertNotification("chrome://global/skin/icons/question-16.png", self.label, 'Очистил кеш и удалил Flash-куки', false, "", null, "");
           }

   };
   
     
   // Css стиль для счётчика ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      #memoryDisplay { -moz-appearance: none !important; margin-left: -3px !important; margin-right: -5px !important; border: 0 !important; padding: 0 !important; text-align: right; }\
      #memoryDisplay[resetMemory] { color: red !important; }\
   '));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);


   // Удалять счётчик памяти и другие изменения ....
   addDestructor(function() {
      sss.unregisterSheet(uri, sss.AGENT_SHEET);
      urlbarIcons.removeChild( memoryDisplay )
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
   
})();

bunda1, премного благодарен..! :beer: Чуток переписал обозначения действий для Л: и С: ... Всё как и хотелось...

bunda1
Я тут новенький, прочитал не все. Но понял так, что я выпаду из общего хора.

В принципе размер потребляемой памяти показывают многие проги.
По опыту с хромоногами знаю - мониторинг сам по себе несоразмерно (по сравнению со спец прогами) жрет и памяти и процессор.

Хотелось бы другого: Не общего на всю прогу потребления ресурсов, а по вкладкам.
Допустим загрузил 20 вкладок, все тип-топ, потребление в норме. Загрузил еще одну, а она жрет как голодная крыса. И я об этом ни сном ни духом.
А делов то - знать какая пакость это делает и закрыть ее в таком случае. Нечего ей висеть.

Если получится такое сотворить возможны два варианта:
Мониторинг (очень редкий, к примеру раз в минуту) и второй вариант просто инфа по требованию.
Вот тогда была бы реальная польза от фичи. Работаешь себе и вдруг бац - сообщение: вкладка жрет там больше нормы в 5 раз. Ок. Я знаю. Я конечно закрою.
Как итог браузер жил бы без перезапуска долго-долго. Что удобно.

Ну и к тому же знание сила: такая информация могла бы сподвигнуть некоторых разработчиков на конкретные шаги. А так ведь не знают просто.

Надеюсь что вас простимулирует не только решение не тривиальной задачки, но и сам факт что эта фича будет всегда востребована как для отладки самой проги так и просто для ее разумного использования.

Если в лоб задачу решить невозможно, можно еще попробовать простую логическую вещь: При открытии вкладки всегда после загрузки сверять потребление памяти до и после, хранить эту информацию и выдавать по требованию.
В итоге я буду видеть какая вкладка требует закрытия. Мониторинг вести опять же редко, но при загрузке вкладки - обязательно.

Такой подход тоже мог бы решить проблему. Ну а нюансы (которые безусловно появятся) типа одновременной загрузки нескольких вкладок разрулить потом.

DmFedorov

Не общего на всю прогу потребления ресурсов, а по вкладкам.

Tab Memory Usage :: Add-ons for Firefox

DmFedorov пишет

Не общего на всю прогу потребления ресурсов, а по вкладкам.

Как тут написал oleg.sgh уже есть такое расширение.

bunda1
Да, только оно фризит и скроллинг и открытие вкладок. Так как напихали в него не пойми что, я так думаю. Надо то, просто отображение потребляемой памяти в подсказках и миниатюрах вкладок, а не тупые графики и постоянный мониторинг уже открытых вкладок. Зачем мониторить открытую вкладку вообще не понятно!? Открыл вкладку - получил размер, обновил - получил еще раз.

Упс. Извиняюсь, не о том расширении писал. Был под впечатлением беспонтовости и неоптимизированности вот этого шедевра - Tab Data (+Memory usage)

Однако, все же неплохо было бы увидеть кнопку с функционалом описанным выше.

отображение потребляемой памяти в подсказках и миниатюрах вкладок

Кнопка пропала с панели адреса, куда копнуть, чтобы найти причину?

sthprog пишет

Кнопка пропала с панели адреса, куда копнуть, чтобы найти причину?

24-01-2017 15:55:57

bunda1 пишет
PEAKTOP пишет

bunda1? перемещаемая кнопка не перемещается. После захода в режим "настройка интерфейса" индикатор Memory Monitor пропадает с панели, такое же поведение было и со старой кнопкой.

Упс, ну тогда вот так:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E222MB%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-2%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20memoryTab%20%3D%20gBrowser.getBrowserForTab%28%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%22about%3Amemory%22%29%20%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20o%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0436%u0434%u0435%u0442%20%u043F%u043E%u043A%u0430%20%u043E%u0442%u043A%u0440%u043E%u0435%u0442%u0441%u044F%20%22about%3Amemory%22%2C%20%u0443%u0434%u0430%u043B%u044F%u0435%u0442%20%u0441%u0435%u0431%u044F%20%u0438%20%u043D%u0430%u0436%u0438%u043C%u0430%u0435%u0442%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0A%20%20%20%20%20%20%20%20%20%20memoryTab.addEventListener%28%22pageshow%22%2C%20function%20c%28e%29%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28%20e.type%2C%20c%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20try%20%7B%20e.originalTarget.getElementById%28%27measureButton%27%29.click%28%29%20%7D%20catch%28e%29%20%7B%7D%20%7D%2C%200%29%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20....%0A%20%20%20%20%20%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%20....%0A%20%20%20%20%20%20%20%20%20%20var%20dir%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29.get%28%22Home%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20dir.exists%28%29%20%29%20dir.remove%28true%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21dir.exists%28%29%20%29%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20%20%20%20%20%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29.%0A%20%20%20%20%20%20%20%20%20%20showAlertNotification%28%27chrome%3A//global/skin/icons/information-16.png%27%2C%20%27%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%27%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A%0A//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u043D%u0430%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u043A%u043D%u043E%u043F%u043A%u0435%20................................%0A%28function%20%28%29%20%7B%0A%20%20%20self.label%20%3D%20getMemory%28%29%20+%20%27MB%27%3B%20%20%0A%20%20%20self.timer%20%3D%20setInterval%28function%28%29%20self.label%20%3D%20getMemory%28%29%20+%20%27MB%27%2C%202000%20%29%3B%20//%20%u0442%u0430%u0439%u043C%u0435%u0440%20%u043E%u0431%u043D%u043E%u0432%u043B%u044F%u0435%u0442%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u0440%u0430%u0437%20%u0432%202000%u043C%u0441%28%202%20%u0441%u0435%u043A%20%29%20%20%20%0A%20%20%20%0A%20%20%20//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0432%20MB%20....%0A%20%20%20function%20getMemory%28%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20reporterManager%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20e%20%3D%20reporterManager.enumerateReporters%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%20%28%20e.hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mr%20%3D%20e.getNext%28%29.QueryInterface%28Ci.nsIMemoryReporter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5Bmr.path%5D%20%3D%20mr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20memory%20%3D%20self%5B%22resident%22%5D.amount%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20memory%20%3D%20reporterManager.resident%20%7D%3B%20//%20%u0434%u043B%u044F%20Nightly%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20return%20%28%20Math.round%28%20memory/1048576%20%29%20%29%3B%0A%20%20%20%7D%3B%20%0A%0A%20%20%20//%20%u0421%u0442%u0438%u043B%u044C%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20....%0A%20%20%20var%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A%20%20%20%25button%25%20.toolbarbutton-icon%20%7B%5C%0A%20%20%20%20%20display%3A%20none%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20.toolbarbutton-text%20%7B%5C%0A%20%20%20%20%20display%3A%20-moz-box%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20%7B%5C%0A%20%20%20%20%20-moz-box-orient%3A%20horizontal%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%27.replace%28/%25button%25/g%2C%20%22%23%22%20+%20_id%29%20%29%29%3B%0A%20%20%20const%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%20%0A%20%20%20%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20....%0A%20%20%20addDestructor%28function%28%29%20%7B%20%0A%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28%20self.timer%20%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%20%20%0A%7D%29%28%29%3B%0A%0A%0A//%20%u0421%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0A%28function%28%29%20%7B%20%20%20%0A%20%20%20%20var%20title%20%3D%20%22%u041B%3A%20%u041F%u043E%u0434%u0440%u043E%u0431%u043D%u043E%20%u043F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%5Cn%u0421%3A%20CB%20%u041C%u0435%u043D%u044E%20%5Cn%u041F%3A%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash-%u043A%u0443%u043A%u0438%5Cn%5Cn%22%3B%0A%20%20%20%20var%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%20%20%20%20%7D%3B%0A%20%20%20%20function%20getSize%28size%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20%20%20%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20%20%20%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20%20%20%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20%20%20%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20self.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20function%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0A%20%20%20%20var%20types%20%3D%20Object.keys%28data%29%3B%0A%20%20%20%20var%20ttt%20%3D%20title%20+%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%0A%20%20%20%20self.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20self.tooltipText%20%3D%20ttt%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28%7B%7D%2C%20null%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%7D%29%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

а тут можно тоже сделать фикс отоброжения кеша и т д ?

mahtanoronra пишет

а тут можно тоже сделать фикс отоброжения кеша и т д ?

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E222MB%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-2%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20memoryTab%20%3D%20gBrowser.getBrowserForTab%28%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%22about%3Amemory%22%29%20%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20o%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0436%u0434%u0435%u0442%20%u043F%u043E%u043A%u0430%20%u043E%u0442%u043A%u0440%u043E%u0435%u0442%u0441%u044F%20%22about%3Amemory%22%2C%20%u0443%u0434%u0430%u043B%u044F%u0435%u0442%20%u0441%u0435%u0431%u044F%20%u0438%20%u043D%u0430%u0436%u0438%u043C%u0430%u0435%u0442%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0A%20%20%20%20%20%20%20%20%20%20memoryTab.addEventListener%28%22pageshow%22%2C%20function%20c%28e%29%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28%20e.type%2C%20c%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20try%20%7B%20e.originalTarget.getElementById%28%27measureButton%27%29.click%28%29%20%7D%20catch%28e%29%20%7B%7D%20%7D%2C%200%29%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20gShowPopup%28this%29%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20//%20%u043E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20....%0A%20%20%20%20%20%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_IN_MEMORY%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20Services.cache.evictEntries%28Ci.nsICache.STORE_ON_DISK%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20%20%20%20%20catch%28e%29%20%7B%20Services.cache2.clear%28%29%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20//%20%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%20....%0A%20%20%20%20%20%20%20%20%20%20var%20dir%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29.get%28%22Home%22%2C%20Ci.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20%20dir.append%28%22Application%20Data%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20dir.append%28%22Macromedia%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20dir.exists%28%29%20%29%20dir.remove%28true%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28%20%21dir.exists%28%29%20%29%20dir.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20....%0A%20%20%20%20%20%20%20%20%20%20var%20alertService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%20%20%20%20%20%20%20%20%20%20alertService.showAlertNotification%28%27chrome%3A//global/skin/icons/information-16.png%27%2C%20%27%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%27%2C%20%27%u041E%u0447%u0438%u0441%u0442%u0438%u043B%20%u043A%u0435%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u043B%20Flash%20%u043A%u0443%u043A%u0438%u0441%u0438%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20alertService.closeAlert%28%29%20%7D%2C%202500%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A%0A//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u043D%u0430%20%u0442%u0435%u043A%u0443%u0449%u0435%u0439%20%u043A%u043D%u043E%u043F%u043A%u0435%20................................%0A%28function%20%28%29%20%7B%0A%20%20%20self.label%20%3D%20getMemory%28%29%20+%20%27MB%27%3B%20%20%0A%20%20%20self.timer%20%3D%20setInterval%28function%28%29%20self.label%20%3D%20getMemory%28%29%20+%20%27MB%27%2C%202000%20%29%3B%20//%20%u0442%u0430%u0439%u043C%u0435%u0440%20%u043E%u0431%u043D%u043E%u0432%u043B%u044F%u0435%u0442%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u0440%u0430%u0437%20%u0432%202000%u043C%u0441%28%202%20%u0441%u0435%u043A%20%29%20%20%20%0A%20%20%20%0A%20%20%20//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0432%20MB%20....%0A%20%20%20function%20getMemory%28%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20reporterManager%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20e%20%3D%20reporterManager.enumerateReporters%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%20%28%20e.hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mr%20%3D%20e.getNext%28%29.QueryInterface%28Ci.nsIMemoryReporter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5Bmr.path%5D%20%3D%20mr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20memory%20%3D%20self%5B%22resident%22%5D.amount%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20memory%20%3D%20reporterManager.resident%20%7D%3B%20//%20%u0434%u043B%u044F%20Nightly%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20return%20%28%20Math.round%28%20memory/1048576%20%29%20%29%3B%0A%20%20%20%7D%3B%20%0A%0A%20%20%20//%20%u0421%u0442%u0438%u043B%u044C%20%u0434%u043E%u0431%u0430%u0432%u043B%u044F%u0435%u0442%20%u0442%u0435%u043A%u0441%u0442%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0443%20....%0A%20%20%20var%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28%27%5C%0A%20%20%20%25button%25%20.toolbarbutton-icon%20%7B%5C%0A%20%20%20%20%20display%3A%20none%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20.toolbarbutton-text%20%7B%5C%0A%20%20%20%20%20display%3A%20-moz-box%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%25button%25%20%7B%5C%0A%20%20%20%20%20-moz-box-orient%3A%20horizontal%20%21important%3B%5C%0A%20%20%20%7D%5C%0A%20%20%20%27.replace%28/%25button%25/g%2C%20%22%23%22%20+%20_id%29%20%29%29%3B%0A%20%20%20const%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%20%0A%20%20%20%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20....%0A%20%20%20addDestructor%28function%28%29%20%7B%20%0A%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28%20self.timer%20%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%7D%29%3B%0A%20%20%20%20%20%0A%7D%29%28%29%3B%0A%0A%0A//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0430%u0435%u0442%20%u0437%u0430%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0435%20%u0434%u0438%u0441%u043A%u043E%u0432%u043E%u0433%u043E%20%u043A%u0435%u0448%u0430%20..............%0Avar%20data%20%3D%20%7B%0A%20%20%20%20memory%3A%20%22Memory%20Cache%3A%20%20%22%2C%0A%20%20%20%20disk%3A%20%22Disk%20Cache%3A%20%20%22%2C%0A%20%20%20%20offline%3A%20%22Offline%20Cache%3A%20%20%22%0A%7D%3B%20%20%20%0Afunction%20getSize%28size%29%20%7B%0A%20%20%20if%20%28%21size%29%20return%20size%20%3D%3D%3D%200%20%3F%20%220%22%20%3A%20%22%3F%22%3B%0A%20%20%20for%28var%20count%20%3D%20-1%3B%20size%20%3E%3D%201024%3B%20size%20/%3D%201024%2C%20count++%29%3B%0A%20%20%20return%20size.toFixed%282%29.replace%28/0+%24/%2C%20%22%22%29.replace%28/%5C.%24/%2C%20%22%22%29%20+%20%22%20%22%20+%20%28%22KMGT%22%5Bcount%5D%20%7C%7C%20%22%22%29%20+%20%22B%22%3B%0A%7D%0Afunction%20setInf%28tot%2C%20max%2C%20type%2C%20i%29%20%7B%0A%20%20%20var%20inf%20%3D%20getSize%28tot%29%20+%20%22%20/%20%22%20+%20getSize%28max%29%3B%0A%20%20%20var%20key%20%3D%20%22browser.cache.%22%20+%20type%20+%20%22.enable%22%3B%0A%20%20%20if%20%28%21Services.prefs.getBoolPref%28key%29%29%20inf%20+%3D%20%22%20%28disabled%29%22%3B%0A%20%20%20self.tooltipText%20%3D%20self.tooltipText.replace%28zws%28i%29%2C%20inf%29%3B%0A%7D%0Afunction%20zws%28ind%29%20%22%5Cu200B%5Cu200B%5Cu200B%22.slice%280%2C%20++ind%29%3B%0A%0Avar%20types%20%3D%20Object.keys%28data%29%3B%0Avar%20ttt%20%3D%20types.map%28function%28key%2C%20i%29%20data%5Bkey%5D%20+%20zws%28i%29%29.join%28%22%5Cn%22%29%3B%0A%20%20%20%0Avar%20context%20%3D%20Cu.import%28%22resource%3A//gre/modules/LoadContextInfo.jsm%22%2C%20%7B%7D%29.LoadContextInfo.default%3B%0Aself.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20self.tooltipText%20%3D%20%22%u041B%3A%20%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%20%u043A%u044D%u0448%20%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20Flash-%u043A%u0443%u043A%u0438%5Cn%22%20+%20ttt%3B%0A%20%20%20try%20%7B%0A%20%20%20%20%20%20%20var%20entries%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20Services.cache.visitEntries%28%7B%0A%20%20%20%20%20%20%20visitDevice%3A%20function%28device%2C%20info%29%20entries%5Bdevice%5D%20%3D%20info%2C%0A%20%20%20%20%20%20%20visitEntry%3A%20function%28%29%20%7B%7D%0A%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20var%20info%20%3D%20entries%5Btype%5D%3B%0A%20%20%20%20%20%20setInf%28info%20%26%26%20info.totalSize%2C%20info%20%26%26%20info.maximumSize%2C%20type%2C%20i%29%0A%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%20%0A%20%20%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20%20Services.cache2%20%26%26%20types.forEach%28function%28type%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20var%20func%20%3D%20function%28aEntryCount%2C%20aConsumption%2C%20aCapacity%2C%20aDiskDirectory%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setInf%28aConsumption%2C%20aCapacity%2C%20type%2C%20i%29%3B%0A%20%20%20%20%20%20%20var%20storage%20%3D%20Services.cache2%5B%28type%20%3D%3D%20%22offline%22%20%3F%20%22app%22%20%3A%20type%29%20+%20%22CacheStorage%22%5D%28context%2C%20null%29%3B%0A%20%20%20%20%20%20%20try%20%7B%20storage.asyncVisitStorage%28%7BonCacheStorageInfo%3A%20func%7D%2C%20false%29%20%7D%20catch%28ex%29%20%7B%7D%3B%0A%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%7D%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

bunda1
в подсказке исчезло переход в about:memory
но по нажатию работает) вообщем все ок спс)

Есть код кнопки из сообщения broker - https://forum.mozilla-russia.org/viewtopic.php?pid=749907#p749907

скрытый текст

Выделить код

Код:

var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("page-action-buttons");
   urlbarIcons.insertBefore( memoryDisplay, urlbarIcons.lastChild ); // перед первой иконкой адресной строки
            
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory() + ' MB';
   memoryDisplay.style.cssText = "-moz-appearance: none; border: 0; padding: 0; margin-right:-6px; margin-left: -1px;"; // Css стиль для счётчика
     self.timer = setInterval(function() {
     var memory = getMemory();
      memoryDisplay.label = memory + ' MB';
      if ( memory > 600 ) {
           var file= Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
           file.initWithPath(file.path + "\\Soft\\afom.exe"); 
           file.launch();
           }
   }, 2000 ); 
     
   // Всплывающая подсказка у счётчика отображает заполнение дискового кеша......................................
   var k = 100, mb = 1024 * 1024, str = "",
   cs = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService),
   visitor = { visitDevice: addInfo };

   function addInfo(device, info) {
      str += (str ? "\n" : "") + device[0].toUpperCase() + device.slice(1) + " Cache:  " +
      [info.totalSize, info.maximumSize].map(function(num) Math.round(k * num / mb) / k + " MB").join(" / ");
   };

   memoryDisplay.onmouseenter = function() {
     str = "";
     cs.visitEntries(visitor);
     memoryDisplay.tooltipText = "Л: Подробно показать потребление памяти в вкладке"  + "\n\n" + str;
   };
   
   
   ///////////// Получить всю занимаемую оперативную память в MB .............................................////////////
   function getMemory() {            
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          } 
      catch(e) { var memory = reporterManager.resident; } // FF26 - Nightly
      
      return ( Math.round( memory/1048576 ) );
   };      
   
   
   // По клику подробно показать потребление памяти в вкладке, автор кода 'Dumby' .........................
   memoryDisplay.onclick = function(e) {
      if ( e.button ) return;
       var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") ); 
          
       // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
       memoryTab.addEventListener("pageshow", function c(e) {         
          this.removeEventListener( e.type, c );           

          setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);      
       });  
   };
   
   
   // Удалять счётчик памяти и другие изменения ............................................................
   addDestructor(function() { 
      urlbarIcons.removeChild( memoryDisplay )
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });

bunda1, можно ли исправить такие моменты:

1. Расход памяти отображается неверно - большое расхождение по сравнению с Диспетчером задач. Возможно, как-то влияет многопроцессность
2. После установки и второго перезапуска браузера (далее - постоянно) в адресной строке два одинаковых индикатора - один точно лишний :)

В коде предусмотрен сброс памяти по достижении 600 MB - фиг с ним, если работать не будет. Главное - чтобы правильно показывал. Спасибо :blush:

Viatcheslav

2. После установки и второго перезапуска браузера (далее - постоянно) в адресной строке два одинаковых индикатора - один точно лишний :)

У вас установлено две кнопки аналогичные, посему двоит. Одну удалить.

broker пишет

У вас установлено две кнопки аналогичные, посему двоит. Одну удалить

Нет, кнопка одна. Но если её перенести в расширенное меню - индикатор "раздваивается" (хотел, чтобы кнопки не было видно). Когда кнопка на панели инструментов - нормально, но показания... :usch:

Viatcheslav
Ну тогда, не знаю слово за маэстро.
db11d6c708484cf159293fab03fc444e.png

Добрый день может ли кто-нибудь помочь внедрить в код условие...
Если цифра будет 400 то запустить приложение...
Что-то немного труднова-то разобраться, а использовать хочется эту кнопочку :)
Пример из другого кода...

скрытый текст

Выделить код

Код:

memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory();
   memoryDisplay.style.cssText = "-moz-appearance: none; padding: 0; background-image: -moz-linear-gradient(#FF0, #0000E8, #FF0); margin-left: 1px; border: 0; color: #fff"; // 
     self.timer = setInterval(function() {
     var memory = getMemory();
      memoryDisplay.label = memory;
      if ( memory > 400 ) {
           var file= Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
          var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        file.initWithPath('Z:\\BROWSER\\GiperFox\\!Lib\\!Clear-RAM.LNK');
          file.launch();
           }
   }, 2000 );

Спасибо!

suz191 пишет

Добрый день может ли кто-нибудь помочь внедрить в код условие...
Если цифра будет 400 то запустить приложение...
Что-то немного труднова-то разобраться, а использовать хочется эту кнопочку :)

Выделить код

Код:

// Показывать потребление памяти в адресной строке, от 04.03.2017. ................................
(function () {
   if ( document.getElementById('memoryDisplay') ) return;
    
   // Создать в адресной строке счётчик памяти ....
   var memoryDisplay = document.createElement("statusbarpanel");
   var urlbarIcons = document.getElementById("urlbar-icons") || document.getElementById("page-action-buttons"); // FF57
   urlbarIcons.insertBefore( memoryDisplay, urlbarIcons.lastChild ); // перед первой иконкой адресной строки
   
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory() + ' MB';  
   self.timer = setInterval(function() {
      var memory = getMemory();
      memoryDisplay.label = memory + ' MB'

      if ( memory < 400 ) return;
      var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
      file.initWithPath('Z:\\BROWSER\\GiperFox\\!Lib\\!Clear-RAM.LNK');
      file.launch(); 
   
   }, 2000 ); // таймер обновляет счётчик раз в 2000мс( 2 сек )
   
   
   // Всплывающая подсказка у счётчика отображает заполнение дискового кеша ....
   var data = {
       memory: "Memory Cache:  ",
       disk: "Disk Cache:  ",
       offline: "Offline Cache:  "
   };   
   function getSize(size) {
      if (!size) return size === 0 ? "0" : "?";
      for(var count = -1; size >= 1024; size /= 1024, count++);
      return size.toFixed(2).replace(/0+$/, "").replace(/\.$/, "") + " " + ("KMGT"[count] || "") + "B";
   }
   function setInf(tot, max, type, i) {
      var inf = getSize(tot) + " / " + getSize(max);
      var key = "browser.cache." + type + ".enable";
      if (!Services.prefs.getBoolPref(key)) inf += " (disabled)";
      memoryDisplay.tooltipText = memoryDisplay.tooltipText.replace(zws(i), inf);
   }
   function zws(ind) "\u200B\u200B\u200B".slice(0, ++ind);

   var types = Object.keys(data);
   var ttt = types.map(function(key, i) data[key] + zws(i)).join("\n");
   
   var context = Cu.import("resource://gre/modules/LoadContextInfo.jsm", {}).LoadContextInfo.default;
   memoryDisplay.onmouseenter = function() {
      memoryDisplay.tooltipText = "Л: Показать потребление памяти в вкладке\n" + ttt;
      try {
          var entries = {};
          Services.cache.visitEntries({
          visitDevice: function(device, info) entries[device] = info,
          visitEntry: function() {}
          });
      types.forEach(function(type, i) {
         var info = entries[type];
         setInf(info && info.totalSize, info && info.maximumSize, type, i)
      });
   } 
   catch(ex) {
      Services.cache2 && types.forEach(function(type, i) {
      var func = function(aEntryCount, aConsumption, aCapacity, aDiskDirectory)
                 setInf(aConsumption, aCapacity, type, i);
      var storage = Services.cache2[(type == "offline" ? "app" : type) + "CacheStorage"](context, null);
      try { storage.asyncVisitStorage({onCacheStorageInfo: func}, false) } catch(ex) {};
      });
   }
   };
  
   
   // Получить всю занимаемую оперативную память в MB ....
   function getMemory() {            
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          } 
      catch(e) { var memory = reporterManager.resident }; // для Nightly
      
      return ( Math.round( memory/1048576 ) );
   };      
   
   
   // По клику подробно показать потребление памяти в вкладке ....
   memoryDisplay.onclick = function(e) {
      if ( e.button ) return;
       var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") ); 
          
       // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
       memoryTab.addEventListener("pageshow", function c(e) {         
          this.removeEventListener( e.type, c );           

          setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);      
       });  
   };
   
     
   // Css стиль для счётчика ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
      #memoryDisplay { -moz-appearance: none !important; margin-left: 2px !important; margin-right: -4px !important; border: 0 !important; min-width: 5.5em; text-align: right; }\
      #memoryDisplay[resetMemory] { color: red !important; }\
   '));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); 


   // Удалять счётчик памяти и другие изменения ....
   addDestructor(function() { 
      sss.unregisterSheet(uri, sss.AGENT_SHEET);
      urlbarIcons.removeChild( memoryDisplay )
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
   
})();

24-02-2018 18:53:03
Но на FF58 с влюченой многопроцесорности код не корректно показывает потребление памяти.

bunda1
Большое спасибо все работает в обоих.
Попробую сейчас по разбираться!
Да в 58 он не считает все процессы, а только один.
Просто у меня тот код кнопки с очисткой не работает в ESR, а этот работает и получилась каша...
Сам что-то не смог разобраться.
Попробую как-то объединить их, чтоб оба чистили и оба отображали хотя бы так.
Спасибо. :)

suz191, a что это за файл: !Clear-RAM.LNK ?

difabor пишет

suz191, a что это за файл: !Clear-RAM.LNK ?

скрытый текст
!Clear-RAM.LNK - это ярлык
Z:\BROWSER\GiperFox\!Lib\files\hidcon.exe Z:\BROWSER\GiperFox\!Lib\!Clear-RAM.bat
Запускает скрытый батник

внутри батника !Clear-RAM.bat
@echo off
Start "" /MIN "%~dp0files\nircmd.exe" sendkeypress Ctrl+f1
exit

нажимает на кнопку Ctrl+f1
в системе запущен mem reduct и он очищает память по нажатию на клавиши

Умнее я выход пока не нашел :)

Как то-так :rolleyes:

Спасибо, suz191.
Как я понял, надо загрузить что-то, что обеспечивает запуск mem reduct и должен ещё быть hidcon.exe

difabor пишет

Спасибо, suz191.
Как я понял, надо загрузить что-то, что обеспечивает запуск mem reduct и должен ещё быть hidcon.exe

hidcon.exe - это для невидимого на экране запуска... можно и без него! просто тогда будет видно как выполняется батник...
mem reduct - уже стоит в системе, работает и просто нужно нажать его горячие клавиши чтоб он сбросил память...
nircmd.exe - нажимает эти самые кнопки
если все сократить то просто требуется нажать кнопки ctrl+f1 в системе браузером в заданный момент, а чтоб их нажать не в окне браузера а именно в системе...
Я нашел только такой способ. Ну, и для очистки памяти браузера я тоже еще не нашел других способов - это показалось мне оптимальным при помощи Memory Monitor.
Не за что... Пока сам тестирую... :)

Любите господа огороды городить ....И memreduct и Mz Ultimate Tools работают без огородов и в мультирежиме тоже...
Ну, нет у memreduct  командой строки (ключа) , так и не надо, при запуске из кнопки она сразу чистит(проценты задаются в настройках)
А , вторая имеет функцию сразу оптимизировать...В мультирежиме - уменьшить память запуска в два раза. Прога чистит не память FF , а все процессы..

drage2 пишет

Любите господа огороды городить ....И memreduct и Mz Ultimate Tools работают без огородов и в мультирежиме тоже...
Ну, нет у memreduct  командой строки (ключа) , так и не надо, при запуске из кнопки она сразу чистит(проценты задаются в настройках)
А , вторая имеет функцию сразу оптимизировать...В мультирежиме - уменьшить память запуска в два раза. Прога чистит не память FF , а все процессы..

В мульти режиме неправильно работает сам счетчик памяти [CB]Memory Monitor в firefox58!
Да memreduct чистит все процессы в системе так же как и Mz Ultimate Tools...
Для того чтоб memreduct чистил только процесс firefox нужно перебирать его код, в принципе код программы открыт.
У memreduct нет ключа. Но есть горячие клавиши!
Я не у видел, чтоб Mz Ultimate Tools в win10 скашивала память браузера на 90% как memreduct и  Mz Ultimate Tools не умеет чистить память win10 по combine memory list.
Пользуйтесь тем, что Вам нравится!

Да, уже...Прога очистки запускается при 400МГ и сама выключается при 100Мг . Еще надо и при выходе из браузера.

drage2 пишет

Да, уже...Прога очистки запускается при 400МГ и сама выключается при 100Мг . Еще надо и при выходе из браузера.

Что вы пытаетесь сделать? Зачем она у вас включается и два раза выключается?
Это системная программа запуск программ для работы с системой в партбл режиме - это поменьше мере не правильно...
Установите её в систему, а firefox заставьте нажимать через [CB]Memory Monitor кнопки ctrl+f1 при достижении определенного объема памяти.
400 - это мало скорее всего надо 500 потому, что esr например долбит систему каждые 20 секунд при 400.
На 450-500 вроде нормально.

drage2 пишет

Да, уже...Прога очистки запускается при 400МГ и сама выключается при 100Мг . Еще надо и при выходе из браузера.

Найди расширение Memory Fox Next и вытащи из него afom.exe она чистит только Firefox раз в минуту и отключается при выходе из браузера.

bunda1 пишет

Найди расширение Memory Fox Next и вытащи из него afom.exe она чистит только Firefox раз в минуту и отключается при выходе из браузера.

Большое спасибо очень полезно, по-моему даже меньше чем в минуту, да и закрывается сам...
Это вообще супер очистка какая-то :D Спасибо!

bunda1 пишет
drage2 пишет

Да, уже...Прога очистки запускается при 400МГ и сама выключается при 100Мг . Еще надо и при выходе из браузера.

Найди расширение Memory Fox Next и вытащи из него afom.exe она чистит только Firefox раз в минуту и отключается при выходе из браузера.

И как этот afom.exe "пришить" к браузеру?
Куда его поместить и где "прописать"?

например №85

difabor пишет

И как этот afom.exe "пришить" к браузеру?
Куда его поместить и где "прописать"?

Вот код кнопки, которой пользуюсь я

скрытый текст

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EMemory%20Monitor%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHzSURBVEiJxdexattAGAfw/51IguUaAsmYzW7IG0gW3hIL71G21mNcQtc+hec2eC3t1OYFbGcT+PQGIcib52AQlgnIdx1aiQbL1t1FJn+45UD3474T93HAG4XofMRc1wMhXykguBCf7eHw985h1m5/JIYxaFhWBQDCIFiK1eraHo1+7AxmrntDKe2ftlrmQbUKAHheLPDo+zHn/Is9HH4rHc5D0+jgUvA2VBcvhGVQHXwrvA2lJycAAD6baeFUBwWAfc/DvuetzR9UqzhttUxKaZ+57o0SrFLevMjga/BrUVn8BVwWKoNncNloEU4BIGi3ryil/YbjlIr+jzccJ8W9DBaEDOqWZVZqtdLRNJVaDXXLMgEMMpgAIESrUSmHACKDIUQvZCxeRtHOwGUUYRoEsQA+ZbA1Gv3iSdINfT+O53OphfhstnZrbUo8nyP0/ZgnSTft3S/qyy4uLiml3+vNpmkeHqpsaCs6nUxiznnXHo/v0vm1g5XFjbMzAMDq4UEZBXJuLns8vuOcd6eTycayk+Nj7HU62Ot0QI6OlNFcWAYXUQTx9PR35PyQRShQ1BY1zlwGLYRVcVlUCpbFVVBpuAhXRZXgTbgOqgwDADs//0AM4/a947wTQiBkbMGTpNe8v/+pso7+E+ZflwHQ03nCvFn+AJlBeDpFZQf5AAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20memoryDisplay%20%3D%20document.createElement%28%22statusbarpanel%22%29%3B%0A%20%20%20var%20urlbarIcons%20%3D%20document.getElementById%28%22page-action-buttons%22%29%3B%0A%20%20%20urlbarIcons.insertBefore%28%20memoryDisplay%2C%20urlbarIcons.lastChild%20%29%3B%20//%20%u043F%u0435%u0440%u0435%u0434%20%u043F%u0435%u0440%u0432%u043E%u0439%20%u0438%u043A%u043E%u043D%u043A%u043E%u0439%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20memoryDisplay.id%20%3D%20%22memoryDisplay%22%3B%0A%20%20%20memoryDisplay.label%20%3D%20getMemory%28%29%20+%20%27%20MB%27%3B%0A%20%20%20memoryDisplay.style.cssText%20%3D%20%22-moz-appearance%3A%20none%3B%20border%3A%200%3B%20padding%3A%200%3B%20margin-right%3A-6px%3B%20margin-left%3A%20-1px%3B%22%3B%20//%20Css%20%u0441%u0442%u0438%u043B%u044C%20%u0434%u043B%u044F%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%0A%20%20%20%20%20self.timer%20%3D%20setInterval%28function%28%29%20%7B%0A%20%20%20%20%20var%20memory%20%3D%20getMemory%28%29%3B%0A%20%20%20%20%20%20memoryDisplay.label%20%3D%20memory%20+%20%27%20MB%27%3B%0A%20%20%20%20%20%20if%20%28%20memory%20%3E%20300%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20var%20file%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20getService%28Components.interfaces.nsIProperties%29.%0A%20%20get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20file.initWithPath%28file.path%20+%20%22%5C%5CSoft%5C%5Cafom.exe%22%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20file.launch%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%7D%2C%202000%20%29%3B%20%0A%20%20%20%20%20%0A%20%20%20//%20%u0412%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0430%u044F%20%u043F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0443%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%u0430%20%u043E%u0442%u043E%u0431%u0440%u0430%u0436%u0430%u0435%u0442%20%u0437%u0430%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u0435%20%u0434%u0438%u0441%u043A%u043E%u0432%u043E%u0433%u043E%20%u043A%u0435%u0448%u0430......................................%0A%20%20%20var%20k%20%3D%20100%2C%20mb%20%3D%201024%20*%201024%2C%20str%20%3D%20%22%22%2C%0A%20%20%20cs%20%3D%20Cc%5B%22@mozilla.org/network/cache-service%3B1%22%5D.getService%28Ci.nsICacheService%29%2C%0A%20%20%20visitor%20%3D%20%7B%20visitDevice%3A%20addInfo%20%7D%3B%0A%0A%20%20%20function%20addInfo%28device%2C%20info%29%20%7B%0A%20%20%20%20%20%20str%20+%3D%20%28str%20%3F%20%22%5Cn%22%20%3A%20%22%22%29%20+%20device%5B0%5D.toUpperCase%28%29%20+%20device.slice%281%29%20+%20%22%20Cache%3A%20%20%22%20+%0A%20%20%20%20%20%20%5Binfo.totalSize%2C%20info.maximumSize%5D.map%28function%28num%29%20Math.round%28k%20*%20num%20/%20mb%29%20/%20k%20+%20%22%20MB%22%29.join%28%22%20/%20%22%29%3B%0A%20%20%20%7D%3B%0A%0A%20%20%20memoryDisplay.onmouseenter%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20str%20%3D%20%22%22%3B%0A%20%20%20%20%20cs.visitEntries%28visitor%29%3B%0A%20%20%20%20%20memoryDisplay.tooltipText%20%3D%20%22%u041B%3A%20%u041F%u043E%u0434%u0440%u043E%u0431%u043D%u043E%20%u043F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0432%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%22%20%20+%20%22%5Cn%5Cn%22%20+%20str%3B%0A%20%20%20%7D%3B%0A%20%20%20%0A%20%20%20%0A%20%20%20/////////////%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u0441%u044E%20%u0437%u0430%u043D%u0438%u043C%u0430%u0435%u043C%u0443%u044E%20%u043E%u043F%u0435%u0440%u0430%u0442%u0438%u0432%u043D%u0443%u044E%20%u043F%u0430%u043C%u044F%u0442%u044C%20%u0432%20MB%20.............................................////////////%0A%20%20%20function%20getMemory%28%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20var%20reporterManager%20%3D%20Cc%5B%22@mozilla.org/memory-reporter-manager%3B1%22%5D.getService%28Ci.nsIMemoryReporterManager%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20e%20%3D%20reporterManager.enumerateReporters%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20while%20%28%20e.hasMoreElements%28%29%20%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mr%20%3D%20e.getNext%28%29.QueryInterface%28Ci.nsIMemoryReporter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%5Bmr.path%5D%20%3D%20mr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20var%20memory%20%3D%20self%5B%22resident%22%5D.amount%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%20%20catch%28e%29%20%7B%20var%20memory%20%3D%20reporterManager.resident%3B%20%7D%20//%20FF26%20-%20Nightly%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20return%20%28%20Math.round%28%20memory/1048576%20%29%20%29%3B%0A%20%20%20%7D%3B%20%20%20%20%20%20%0A%20%20%20%0A%20%20%20%0A%20%20%20//%20%u041F%u043E%20%u043A%u043B%u0438%u043A%u0443%20%u043F%u043E%u0434%u0440%u043E%u0431%u043D%u043E%20%u043F%u043E%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u043E%u0442%u0440%u0435%u0431%u043B%u0435%u043D%u0438%u0435%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0432%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%2C%20%u0430%u0432%u0442%u043E%u0440%20%u043A%u043E%u0434%u0430%20%27Dumby%27%20.........................%0A%20%20%20memoryDisplay.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20%20if%20%28%20e.button%20%29%20return%3B%0A%20%20%20%20%20%20%20var%20memoryTab%20%3D%20gBrowser.getBrowserForTab%28%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%22about%3Amemory%22%29%20%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20//%20o%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0436%u0434%u0435%u0442%20%u043F%u043E%u043A%u0430%20%u043E%u0442%u043A%u0440%u043E%u0435%u0442%u0441%u044F%20%22about%3Amemory%22%2C%20%u0443%u0434%u0430%u043B%u044F%u0435%u0442%20%u0441%u0435%u0431%u044F%20%u0438%20%u043D%u0430%u0436%u0438%u043C%u0430%u0435%u0442%20%u043A%u043D%u043E%u043F%u043A%u0443%20%u043D%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0A%20%20%20%20%20%20%20memoryTab.addEventListener%28%22pageshow%22%2C%20function%20c%28e%29%20%7B%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20this.removeEventListener%28%20e.type%2C%20c%20%29%3B%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20try%20%7B%20e.originalTarget.getElementById%28%27measureButton%27%29.click%28%29%20%7D%20catch%28e%29%20%7B%7D%20%7D%2C%200%29%3B%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%7D%29%3B%20%20%0A%20%20%20%7D%3B%0A%20%20%20%0A%20%20%20%0A%20%20%20//%20%u0423%u0434%u0430%u043B%u044F%u0442%u044C%20%u0441%u0447%u0451%u0442%u0447%u0438%u043A%20%u043F%u0430%u043C%u044F%u0442%u0438%20%u0438%20%u0434%u0440%u0443%u0433%u0438%u0435%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%20............................................................%0A%20%20%20addDestructor%28function%28%29%20%7B%20%0A%20%20%20%20%20%20urlbarIcons.removeChild%28%20memoryDisplay%20%29%0A%20%20%20%20%20%20try%20%7B%20window.clearTimeout%28%20self.timer%20%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20%7D%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


Порог сброса (if ( memory > 300 )) настраивал под себя с учётом неправильного отображения расхода памяти (увы, последствия включенной мультипроцессности [firefox]). Ссылка на загрузку файла Afom.exe - https://disk.karelia.pro/dvxnkR3/
А разместить его (Afom.exe) нужно в папке C:\Users\User_Name\AppData\Roaming\Mozilla\Firefox\Profiles\Profile_Name\Soft

Viatcheslav
А если профиль находится в другом месте? Исправил на

Выделить код

Код:

file.initWithPath(file.path + "V:\\Mozilla\\afom.exe");

Кнопка перестала работать.
А на 56ESR с отключённой мультипроцессностью эта кнопка должна работать?

Mishania пишет

Кнопка перестала работать.А на 56ESR с отключённой мультипроцессностью эта кнопка должна работать?

С этим кодом все работает, работает и на 58 и на esr и на басилиск даже, но 58 соответственно немного не правильно показывает :)
https://forum.mozilla-russia.org/viewto … 12#p754512
исправите это место под себя

if ( memory < 400 ) return;
      var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
      file.initWithPath('Z:\\BROWSER\\GiperFox\\!Lib\\!Clear-RAM.LNK');
      file.launch();

400 - на нужную вам цифру памяти при которой запустится.
и путь до файла на ваш путь где лежит фаил.

Если [CB]Memory Monitor - в кнопке не один, то он должен стаять выше других кодов первым, тогда будет отображаться!

afom.exe - вредная штука....Bunda1 уже сделал кнопку , при выходе  из браузера гасится любая прога! Правда, нужен запуск браузера с  WMIService...
Приходиться обратно подставлять tmemutil.dll или portable32.dll в dependentlibs.list...Теперь осталось загасить иконки в трее у прог очистки...

скрытый текст

Выделить код

Код:

/*Initialization Code*/

    var urlbarIcons = document.getElementById("urlbar-icons") || document.getElementById("page-action-buttons");
    if (!urlbarIcons) return;
    var memoryDisplay = document.createElement("statusbarpanel");
    urlbarIcons.insertBefore(memoryDisplay, urlbarIcons.lastChild); // перед последней кнопкой адресной строки
     
                     
   memoryDisplay.id = "memoryDisplay";
   memoryDisplay.label = getMemory();
   memoryDisplay.style.cssText = "-moz-appearance: none; margin-left: 1px; margin-right: 1px; padding: 2px; background-image: -moz-linear-gradient(#FF0, #0000E8, #FF0); border: 0 !important; color: #fff"; // 
     self.timer = setInterval(function() {
     var memory = getMemory();
      memoryDisplay.label = memory;
      if ( memory > 370 ) {
           var file= Components.classes["@mozilla.org/file/directory_service;1"].
  getService(Components.interfaces.nsIProperties).
  get("ProfD", Components.interfaces.nsIFile);
          var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
          file.initWithPath('C:\\memreduct\\32\\memreduct.exe');
          file.launch();
           }
   }, 2000 ); 
     
     
   // Всплывающая подсказка у счётчика отображает заполнение дискового кеша......................................
   var k = 100, mb = 1024 * 1024, str = "",
   cs = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService),
   visitor = { visitDevice: addInfo };

   function addInfo(device, info) {
      str += (str ? "\n" : "") + device[0].toUpperCase() + device.slice(1) + " Cache:  " +
      [info.totalSize, info.maximumSize].map(function(num) Math.round(k * num / mb) / k + " MB").join(" / ");
   };

   memoryDisplay.onmouseenter = function() {
     str = "";
     cs.visitEntries(visitor);
     memoryDisplay.tooltipText = "Л: Подробно показать потребление памяти в вкладке"  + "\n\n" + str;
   };
   
   
   ///////////// Получить всю занимаемую оперативную память в MB .............................................////////////
   function getMemory() {            
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          } 
      catch(e) { var memory = reporterManager.resident; } // FF26 - Nightly
      
      return ( Math.round( memory/1048576 ) );
   };      
   
   
   // По клику подробно показать потребление памяти в вкладке, автор кода 'Dumby' .........................
   memoryDisplay.onclick = function(e) {
      if ( e.button ) return;
       var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") ); 
          
       // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
       memoryTab.addEventListener("pageshow", function c(e) {         
          this.removeEventListener( e.type, c );           

          setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);      
       });  
   };
   
   
   // Удалять счётчик памяти и другие изменения ............................................................
   addDestructor(function() { 
      urlbarIcons.removeChild( memoryDisplay )
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
  // Пример, код закрывает memreduct.exe при выходе из браузера:
var closer = {
    observe: function(subject, topic, data) {
       if ( data == "shutdown" ){
            var VBScript =
               'strComputer = "."\
               \nSet objWMIService = GetObject("winmgmts:" _\
               \n& "{impersonationLevel=impersonate}!\\\\" & strComputer & "\\root\\cimv2")\
               \nSet colProcessList = objWMIService.ExecQuery _\
               \n("Select * from Win32_Process Where Name = \x27memreduct.exe\x27")\
               \nFor Each objProcess in colProcessList\
               \nobjProcess.Terminate()\
               \nNext';
   
            var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
            file.append("processTerminate.vbs");
            custombuttonsUtils.writeFile(file.path, VBScript);
            file.launch();
            }  
    }
};
Services.obs.addObserver(closer, "quit-application", false);

okkamas_knife, Viatcheslav, спасибо!

drage2
Вы предлагаете использовать костыли, чтоб использовать костыли, которые используют костыли. И при этом всё равно костыли получились не автоматические.
А про вредная или полезная штука споры ведут со дня выхода расширения. И я уже тогда понял что обе стороны приводят настолько веские доводы, что мне в уже пофиг на эти доводы.
Проблема в том что сдаётся мне что afom у меня не хочт запускаться. Я его раньше с кнеопки вручную иногда запускал, а сейчас не хочет. Я же правильно помню, он должен появится в диспетчере задач?

drage2 пишет

afom.exe - вредная штука

Почему вредная?

Mishania

Mishania пишет

Проблема в том что сдаётся мне что afom у меня не хочт запускаться.

В "костылях" путь прописан под любой exe/ и под afom.exe тоже....А, если руки не под то заточены, то и "костыли" не помогут.
Сам процесс невидим afom.exe это не винда...
bunda1

bunda1 пишет

Почему вредная?

Точно не помню , почему,то точно помню , что вредная.
Я, так понял, что иконку в трее никак не загасить ?

drage2 пишет

Я, так понял, что иконку в трее никак не загасить ?

Не знаю.

bunda1
Значит этот код никакой?

Выделить код

Код:

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
notifyIcon1.Visible = false;
notifyIcon1.Dispose();
}

Ну, если и вы не знаете, то и париться не стоит...

Mishania пишет

drage2
Проблема в том что сдаётся мне что afom у меня не хочт запускаться. Я его раньше с кнеопки вручную иногда запускал, а сейчас не хочет. Я же правильно помню, он должен появится в диспетчере задач?

запустите просто .exe он висит как процесс и ни где не отображается....

скрытый текст
15e5e6954892.jpg

Если о костылях говорить то afom ещё и так можно запускать...
скрытый текст
@echo off

taskkill /im afom.exe /F
Start "" /MIN "%~dp0files\afom.exe"

exit


Так даже правильней по запуску мгновенно чистит...

drage2

Сам процесс невидим afom.exe это не винда...

Простите, но читаю что вы написали, а смысл понять не могу. А про "помню что вредная, но не помню почему" даже улыбнуло. Из разряда, "ложечки мы нашли, но осадок неприятный остался"
Процесс afom.exe при запуске должен появляется в диспетчере задач и у меня свистопляска с "включился-отключился" приводит к вылету браузера. Оставлю всё как было.
suz191
Я всегда запускал кнопкой

Выделить код

Код:

/*CODE*/
var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);  
file.initWithPath("V:\\mozilla\\afom.exe");
file.launch();

Но батник тоже вариант.

Mishania пишет

у меня свистопляска с "включился-отключился" приводит к вылету браузера.

тогда memreduct и ctrl+f1
https://forum.mozilla-russia.org/viewto … 25#p754525

drage2 пишет

Ну, если и вы не знаете, то и париться не стоит...

Совсем не знаю что за код. Не надо думать что я тут какой то супер эксперт.

bunda1
Если нет, то кто? А, нельзя ли в этом коде обойтись без WMI, а типа taskkill /f /im memreduct.exe...У меня все FF запускаются без WMIService.Exe

Выделить код

Код:

// Пример, код закрывает memreduct.exe при выходе из браузера:
var closer = {
    observe: function(subject, topic, data) {
       if ( data == "shutdown" ){
            var VBScript =
               'strComputer = "."\
               \nSet objWMIService = GetObject("winmgmts:" _\
               \n& "{impersonationLevel=impersonate}!\\\\" & strComputer & "\\root\\cimv2")\
               \nSet colProcessList = objWMIService.ExecQuery _\
               \n("Select * from Win32_Process Where Name = \x27memreduct.exe\x27")\
               \nFor Each objProcess in colProcessList\
               \nobjProcess.Terminate()\
               \nNext';
   
            var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
            file.append("processTerminate.vbs");
            custombuttonsUtils.writeFile(file.path, VBScript);
            file.launch();
            }  
    }
};
Services.obs.addObserver(closer, "quit-application", false);

Она у вас по коду только открывается и закрывается...
В ней нужно кнопки нажимать для очистки (ctrl+f1)...
А без нажатий это равносильно тому если её установить в систему и просто пользоваться.

Mem Reduct может запускаться и сразу чистить. С помощью NirCmd   Нужны два батника - в один + VBS
nircmd.exe sendkeypress home  - это раз, и VBS  к нему

еще один бат:
nircmd.exe shexec "open" "C:\memreduct\32\memreduct.exe"
nircmd.exe shexec "open" "C:\nir\Home.vbs"

И Vbs уже к нему.Этот VBS ярлыком (значок ,как у проги и название)
Этот же VBS можно и в кнопку Memory

Но при выходе из браузера Nircom не может ее выключить, только убить процесс, нужна прога trayupdate.exe, тогда и эта проблема решается.

03-03-2018 15:27:59
del

в ff59 совсем перестал отображаться [CB]Memory Monitor
Работает только как кнопка, а в адресной строке ни в какую не хочет :rolleyes:
Проверьте пожалуйста правильно ли я сделал на кнопке?

скрытый текст

if ( memory < 400 ) return;
       var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        file.initWithPath('Z:\\BROWSER\\GiperFox\\!Lib\\!Clear-RAM.LNK');
       file.launch();


Вроде работает:
скрытый текст

// Настройка функций кликов мыши для кнопки ................................
this.onclick = function(e) {
     if ( e.button == 0 ) {
          var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") );
         
          // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
          memoryTab.addEventListener("pageshow", function c(e) {         
             this.removeEventListener( e.type, c );           

             setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);     
          });
          }
         
     if ( e.button == 1 ) gShowPopup(this);
     
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {
          e.preventDefault();   
         
          // очистить кэш ....
          try {
              Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
              Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK);
              }
          catch(e) { Services.cache2.clear() }

          // Удалить Flash кукиси ....
          var dir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("Home", Ci.nsIFile);
          dir.append("Application Data");
          dir.append("Macromedia");
          if ( dir.exists() ) dir.remove(true);
          if ( !dir.exists() ) dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);

          // Всплывающее сообщение ....
          var alertService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
          alertService.showAlertNotification('chrome://global/skin/icons/information-16.png', 'Показывать потребление памяти', 'Очистил кеш и удалил Flash кукиси');
          setTimeout(function() { alertService.closeAlert() }, 2500);
          }
};



// Показывать потребление памяти на текущей кнопке ................................
(function () {
   self.label = getMemory() + 'MB'; 
   self.timer = setInterval(function() {
      var memory = getMemory();
      self.label = memory + ' MB'

       if ( memory < 400 ) return;
       var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        file.initWithPath('Z:\\BROWSER\\GiperFox\\!Lib\\!Clear-RAM.LNK');
       file.launch();
   
   }, 2000 ); // таймер обновляет счётчик раз в 2000мс( 2 сек )
   
   
   
   
   
   // Получить потребление памяти в MB ....
   function getMemory() {           
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          }
      catch(e) { var memory = reporterManager.resident }; // для Nightly
     
      return ( Math.round( memory/1048576 ) );
   };

   // Стиль добавляет текст на кнопку ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
   %button% .toolbarbutton-icon {\
     display: none !important;\
   }\
   %button% .toolbarbutton-text {\
     display: -moz-box !important;\
   }\
   %button% {\
     -moz-box-orient: horizontal !important;\
   }\
   '.replace(/%button%/g, "#" + _id) ));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
   
   // Удалять изменения ....
   addDestructor(function() {
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
     
})();


// Всплывающая подсказка у счётчика отображает заполнение дискового кеша ..............
var data = {
    memory: "Memory Cache:  ",
    disk: "Disk Cache:  ",
    offline: "Offline Cache:  "
};   
function getSize(size) {
   if (!size) return size === 0 ? "0" : "?";
   for(var count = -1; size >= 1024; size /= 1024, count++);
   return size.toFixed(2).replace(/0+$/, "").replace(/\.$/, "") + " " + ("KMGT"[count] || "") + "B";
}
function setInf(tot, max, type, i) {
   var inf = getSize(tot) + " / " + getSize(max);
   var key = "browser.cache." + type + ".enable";
   if (!Services.prefs.getBoolPref(key)) inf += " (disabled)";
   self.tooltipText = self.tooltipText.replace(zws(i), inf);
}
function zws(ind) "\u200B\u200B\u200B".slice(0, ++ind);

var types = Object.keys(data);
var ttt = types.map(function(key, i) data[key] + zws(i)).join("\n");
   
var context = Cu.import("resource://gre/modules/LoadContextInfo.jsm", {}).LoadContextInfo.default;
self.onmouseenter = function() {
   self.tooltipText = "Л: Подробно показать потребление памяти \nС: CB Меню \nП: Очистить кэш и удалить Flash-куки\n\n" + ttt;
   try {
       var entries = {};
       Services.cache.visitEntries({
       visitDevice: function(device, info) entries[device] = info,
       visitEntry: function() {}
       });
   types.forEach(function(type, i) {
      var info = entries[type];
      setInf(info && info.totalSize, info && info.maximumSize, type, i)
   });
       }
   catch(ex) {
       Services.cache2 && types.forEach(function(type, i) {
       var func = function(aEntryCount, aConsumption, aCapacity, aDiskDirectory)
                  setInf(aConsumption, aCapacity, type, i);
       var storage = Services.cache2[(type == "offline" ? "app" : type) + "CacheStorage"](context, null);
       try { storage.asyncVisitStorage({onCacheStorageInfo: func}, false) } catch(ex) {};
       });
       }
};


Спасибо!

Всем привет!

Мои пять копеек к данной теме. У меня afom не работает. Вылетает при запуске, поэтому использую memreduct. Написал себе вот такую кнопку, которая запускает memreduct, прожимает ctrl+F1 (очистка памяти) и убивает memreduct.
Вставить на вкладку "Код"

Выделить код

Код:

// путь до папки с firefox.exe
var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
    .getService(Components.interfaces.nsIProperties)
    .get("CurProcD", Components.interfaces.nsILocalFile)
    .path;

// путь до исполняемого файла
var xul = profileDir + "\\..\\..\\Profile\\User_files\\memreduct\\RunMemreduct.exe";


// выполение исполняемого файла и его агрумент, например ["c:\\boot.ini"]
startProcess(xul,[""]);


// Сообщение об ошибке
function startProcess(path, args) {
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
     file.initWithPath(path);
    if(file.exists()) {
       var process = Components.classes["@mozilla.org/process/util;1"]
              .createInstance(Components.interfaces.nsIProcess);
       process.init(file);
        process.run(false, args, args.length);
      } else custombuttons. alertBox ("Файл не найден", path); 
};

Стартер написан с помощью бесплатной проги Perfect Automation.
Исходный код лежит здесь
Можете скачать прогу и исходник и убедиться, что ничего опасного в нем нет.

У меня на портативном firefox 56 всё работает отлично. Единственное, иногда срабатывает не с первого раза, а со второго. Плюс в трее висит "призрачный" memredict. Но стоит провести курсором по иконке в трее, и он очищается.

Кстати, если кто-то хочет поправить код, то я буду только за, поскольку разбираюсь во всем этом очень слабо. Просто взял какую-то кнопку и подставил свои значения.

shurik842
:offtopic:

скрытый текст
Можно не проводить мышкой, чтобы убрать из трея "призрака". В архиве программка, сделал для себя на AutoIt3, исходный код также положил в архив.
https://yadi.sk/d/4rBDx8R83UUJu8

Чтобы не париться Memory с полным фаршем:
https://www.upload.ee/files/8338368/Memory.rar.html

в firefox 60+ перестало работать и кнопка и строка состояния :(
Полностью умерло отображение :(
Можно ли что-то изменить?
Спасибо

suz191 пишет

в 60 firefox перестало работать и кнопка и строка состояния

А дополнение Custom Buttons включено и работает?

Coroner пишет
suz191 пишет

в 60 firefox перестало работать и кнопка и строка состояния

А дополнение Custom Buttons включено и работает?

Да, заставил работать этим методом https://forum.mozilla-russia.org/viewto … 99#p752799

Но, Memory Monitor отвалился поскольку переделали интерфейс и доступа к памяти больше нет...
В место кнопки Memory Monitor звезда, а в строке состояния исчезло и не работает с версии 59...
Нужно, что-то так же внедрять в код, чтоб получить доступ к памяти...
Нужен кто-то понимающий в этом во всем  :rolleyes:

suz191 пишет

доступа к памяти больше нет...

Есть. Мне удалось запустить кастрированный вариант кнопки. Попробую повторить опыт, так как похерил то что сделал. :angel:

Вышло очень странно: сделал клон кнопки (которая как бы не работала и находилась на панели, вместо строки урла).
Клон кнопки покоцал, оставив лишь получение памяти и тупо вывод переменной memory в Alert.
В алерте память показывалась. А затем значение появилось и в строке урла.

Повторил опыт. Вот код, который "работает" в 60.

скрытый текст

Выделить код

Код:

/*Initialization Code*/
var idbut=this.id;
var urlbar = document.getElementById("page-action-buttons");
var button = document.getElementById(idbut);
urlbar.insertBefore(button, urlbar.lastChild);

var style = custombutton.buttonGetHelp(self).replace(/id/g, _id); 
var uri = makeURI('data:text/css,'+ encodeURIComponent(style)); 
var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); 
sss.loadAndRegisterSheet(uri, 0);

(function () {  
   self.timer = setInterval(function() { self.label = getMemory() + ' mb'}, 2000 );
  
   // Получить всю занимаемую оперативную память в MB ....
   function getMemory() {            
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          } 
      catch(e) { var memory = reporterManager.resident; } // FF26 - Nightly
      
      return ( Math.round( memory/1048576 ) );
   };     
        
   // Удалять счётчик памяти и другие изменения ....
  addDestructor(function() { 
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
})();

Отвалились и кнопки видео и кнопки , работающие из контекст меню. Кнопки , меняющие параметры в about:config кое-как сделал. Короче, нужен новый CB///
Фуфло , а не браузер...Режут Xul систему, вот и все новшества. Если уж так косите под хром, так хотя бы декодер Mp4 сделали....Ну, дергается чуть шустрее, так оно и понятно, куча аддонов упала...." хромофокс" недоделанный.

suz191
Ну, я попробовал просто вывести в адресную строку лейбл,
отображающий расход памяти. (типа как на странице about:performance)

Вроде что-то показывает на Firefox 60, и, даже, на Nightly 62 (2018-05-10).

скрытый текст

Выделить код

Код:

setTimeout(url => {
    var mode = "rss"; // "rss" - Resident Set Size, "uss" - Unique Set Size
    var interval = 1500; // ms

    var before = null;
    var parent = before ? before.parentNode : document.getElementById("page-action-buttons");
    var lab = parent.insertBefore(document.createElement("label"), before);

    var nsvo = Cu.import(url, {});
    if (!("labels" in nsvo)) {
        nsvo.labels = new Set();
        var mb = 1024 * 1024, gb = mb * 1024;
        var format = num => num < gb
            ? Math.round(num / mb) + "MB"
            : (Math.round(100 * num / gb) / 100).toFixed(2) + "GB";
        var updateLabels = bytes => {
            if (bytes) for(var lab of nsvo.labels)
                lab.setAttribute("value", format(bytes));
        }
        if (Services.ppmm.childCount == 1) {
            var mrm = Cc["@mozilla.org/memory-reporter-manager;1"]
                .getService(Ci.nsIMemoryReporterManager);
            var prop = "resident" + (mode == "uss" ? "Unique" : "");
            var tick = () => updateLabels(mrm[prop]);
        } else {
            var tick = async () => {
                var res = await nsvo.Memory.summary(), bytes = 0;
                for(var prop in res) bytes += res[prop][mode];
                updateLabels(bytes);
            }
        }
        tick(); nsvo.intId = nsvo.setInterval(tick, interval);
    }
    nsvo.labels.add(lab);
    addDestructor(reason => {
        nsvo.labels.delete(lab); lab.remove();
        if (reason[5] == "e" && !nsvo.labels.size)
            nsvo.clearInterval(nsvo.intId), Cu.unload(url);
    });
}, 500, "resource://gre/modules/Memory.jsm?" + _id);

Dumby пишет

suz191
Ну, я попробовал просто вывести в адресную строку лейбл,
отображающий расход памяти. (типа как на странице about:performance)

Вроде что-то показывает на Firefox 60, и, даже, на Nightly 62 (2018-05-10).

скрытый текст

Выделить код

Код:

setTimeout(url => {
    var mode = "rss"; // "rss" - Resident Set Size, "uss" - Unique Set Size
    var interval = 1500; // ms

    var before = null;
    var parent = before ? before.parentNode : document.getElementById("page-action-buttons");
    var lab = parent.insertBefore(document.createElement("label"), before);

    var nsvo = Cu.import(url, {});
    if (!("labels" in nsvo)) {
        nsvo.labels = new Set();
        var mb = 1024 * 1024, gb = mb * 1024;
        var format = num => num < gb
            ? Math.round(num / mb) + "MB"
            : (Math.round(100 * num / gb) / 100).toFixed(2) + "GB";
        var updateLabels = bytes => {
            if (bytes) for(var lab of nsvo.labels)
                lab.setAttribute("value", format(bytes));
        }
        if (Services.ppmm.childCount == 1) {
            var mrm = Cc["@mozilla.org/memory-reporter-manager;1"]
                .getService(Ci.nsIMemoryReporterManager);
            var prop = "resident" + (mode == "uss" ? "Unique" : "");
            var tick = () => updateLabels(mrm[prop]);
        } else {
            var tick = async () => {
                var res = await nsvo.Memory.summary(), bytes = 0;
                for(var prop in res) bytes += res[prop][mode];
                updateLabels(bytes);
            }
        }
        tick(); nsvo.intId = nsvo.setInterval(tick, interval);
    }
    nsvo.labels.add(lab);
    addDestructor(reason => {
        nsvo.labels.delete(lab); lab.remove();
        if (reason[5] == "e" && !nsvo.labels.size)
            nsvo.clearInterval(nsvo.intId), Cu.unload(url);
    });
}, 500, "resource://gre/modules/Memory.jsm?" + _id);

Да, показывает что-то мощное... Уж больно много, наверное вообще от всех firefox процессов :)
Возможно ли туда прикрутить очистку из этого кода?

скрытый текст
// Показывать потребление памяти на текущей кнопке ................................
(function () {
   self.label = getMemory() + 'MB'; 
   self.timer = setInterval(function() {
      var memory = getMemory();
      self.label = memory + ' MB'

       if ( memory < 400 ) return;
       var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        file.initWithPath('Z:\\BROWSER\\GiperFox\\!Lib\\!Clear-RAM.LNK');
       file.launch();

   
   }, 2000 ); // таймер обновляет счётчик раз в 2000мс( 2 сек )


Картинка эллюстрация:
скрытый текст
d24dba225c65.jpg

1. Coroner https://forum.mozilla-russia.org/viewto … 39#p757739 У меня не получилось
2. Dumby https://forum.mozilla-russia.org/viewto … 42#p757742 Работает
3  Старый код который перестал работать с версии 60
скрытый текст
/*Initialization Code*/

// Настройка функций кликов мыши для кнопки ................................
this.onclick = function(e) {
     if ( e.button == 0 ) {
          var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") );
         
          // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
          memoryTab.addEventListener("pageshow", function c(e) {         
             this.removeEventListener( e.type, c );           

             setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);     
          });
          }
         
     if ( e.button == 1 ) gShowPopup(this);
     
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {
          e.preventDefault();   
         
          // очистить кэш ....
          try {
              Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
              Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK);
              }
          catch(e) { Services.cache2.clear() }

          // Удалить Flash кукиси ....
          var dir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("Home", Ci.nsIFile);
          dir.append("Application Data");
          dir.append("Macromedia");
          if ( dir.exists() ) dir.remove(true);
          if ( !dir.exists() ) dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);

          // Всплывающее сообщение ....
          var alertService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
          alertService.showAlertNotification('chrome://global/skin/icons/information-16.png', 'Показывать потребление памяти', 'Очистил кеш и удалил Flash кукиси');
          setTimeout(function() { alertService.closeAlert() }, 2500);
          }
};



// Показывать потребление памяти на текущей кнопке ................................
(function () {
   self.label = getMemory() + 'MB'; 
   self.timer = setInterval(function() {
      var memory = getMemory();
      self.label = memory + ' MB'

       if ( memory < 400 ) return;
       var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        file.initWithPath('Z:\\BROWSER\\GiperFox\\!Lib\\!Clear-RAM.LNK');
       file.launch();
   
   }, 2000 ); // таймер обновляет счётчик раз в 2000мс( 2 сек )
   
   
   
   
   
   // Получить потребление памяти в MB ....
   function getMemory() {           
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          }
      catch(e) { var memory = reporterManager.resident }; // для Nightly
     
      return ( Math.round( memory/1048576 ) );
   };

   // Стиль добавляет текст на кнопку ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
   %button% .toolbarbutton-icon {\
     display: none !important;\
   }\
   %button% .toolbarbutton-text {\
     display: -moz-box !important;\
   }\
   %button% {\
     -moz-box-orient: horizontal !important;\
   }\
   '.replace(/%button%/g, "#" + _id) ));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
   
   // Удалять изменения ....
   addDestructor(function() {
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
     
})();


// Всплывающая подсказка у счётчика отображает заполнение дискового кеша ..............
var data = {
    memory: "Memory Cache:  ",
    disk: "Disk Cache:  ",
    offline: "Offline Cache:  "
};   
function getSize(size) {
   if (!size) return size === 0 ? "0" : "?";
   for(var count = -1; size >= 1024; size /= 1024, count++);
   return size.toFixed(2).replace(/0+$/, "").replace(/\.$/, "") + " " + ("KMGT"[count] || "") + "B";
}
function setInf(tot, max, type, i) {
   var inf = getSize(tot) + " / " + getSize(max);
   var key = "browser.cache." + type + ".enable";
   if (!Services.prefs.getBoolPref(key)) inf += " (disabled)";
   self.tooltipText = self.tooltipText.replace(zws(i), inf);
}
function zws(ind) "\u200B\u200B\u200B".slice(0, ++ind);

var types = Object.keys(data);
var ttt = types.map(function(key, i) data[key] + zws(i)).join("\n");
   
var context = Cu.import("resource://gre/modules/LoadContextInfo.jsm", {}).LoadContextInfo.default;
self.onmouseenter = function() {
   self.tooltipText = "Л: Подробно показать потребление памяти \nС: CB Меню \nП: Очистить кэш и удалить Flash-куки\n\n" + ttt;
   try {
       var entries = {};
       Services.cache.visitEntries({
       visitDevice: function(device, info) entries[device] = info,
       visitEntry: function() {}
       });
   types.forEach(function(type, i) {
      var info = entries[type];
      setInf(info && info.totalSize, info && info.maximumSize, type, i)
   });
       }
   catch(ex) {
       Services.cache2 && types.forEach(function(type, i) {
       var func = function(aEntryCount, aConsumption, aCapacity, aDiskDirectory)
                  setInf(aConsumption, aCapacity, type, i);
       var storage = Services.cache2[(type == "offline" ? "app" : type) + "CacheStorage"](context, null);
       try { storage.asyncVisitStorage({onCacheStorageInfo: func}, false) } catch(ex) {};
       });
       }
};


тут полностью готовый код для 60+ https://forum.mozilla-russia.org/viewto … 39#p758039
Изменено дабы не вносить путаницу...
Спасибо

Dumby
перепробовал сейчас методом тыка прикрутить сброс памяти при определенной цифре не получается!

скрытый текст
if ( memory < 400 ) return;
       var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        file.initWithPath('путь до файла');
       file.launch();

Помогите пожалуйста если это возможно...
Я так полагаю отображение url  в строке завязано на этом:
скрытый текст
}, 500, "resource://gre/modules/Memory.jsm?" + _id);

нужно как-то задать
      var memory = "resource://gre/modules/Memory.jsm?" ;

Но так оно не работает :)
Белиберда конечно но я просто попытался объяснить смысл...

var memory = "resource://gre/modules/Memory.jsm?" ;
}, 500, memory + _id);
if ( memory < 400 ) return;
       var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        file.initWithPath('путь до файла');
       file.launch();


Спасибо

suz191 пишет

1. Coroner https://forum.mozilla-russia.org/viewto … 39#p757739 У меня не получилось

Ну тут уже выше моего понимания. :) У меня этот огрызок работает. Осталось лишь нажатия прикрутить...

скрытый текст
mcgz3lk2j7jhzqfw6ct3z42kngm.png

Про стиль в "справке" не забыли? Без него не прокатит.
скрытый текст

Выделить код

Код:

#id .toolbarbutton-text {
  color: #00FF00 !important;
  font-weight: bold !important; 
  font-size: 10px !important;
  Min-height: 23px !important;
  display: block !important; 
}


#id .toolbarbutton-icon {
  display: none !important;
}

Coroner пишет

Про стиль в "справке" не забыли? Без него не прокатит.

скрытый текст

Выделить код

Код:

#id .toolbarbutton-text {
  color: #00FF00 !important;
  font-weight: bold !important; 
  font-size: 10px !important;
  Min-height: 23px !important;
  display: block !important; 
}


#id .toolbarbutton-icon {
  display: none !important;
}

в firefox 60+ Всё прописал сейчас работает!
А без стиля можно?
Получается все назад собирать постепенно?
С ней проще разобраться...
Сброс вставил
тут полностью готовый https://forum.mozilla-russia.org/viewto … 39#p758039
Изменено дабы не вносить путаницу...
картинка

скрытый текст
69d395e27b29.jpg

работает как старая на один процесс, а вторая на все процессы. :)

suz191 пишет

А без стиля можно?

Вообще без стиля — нет. Он как раз цифры и буквы вместо значка и выводит.
В принципе его вроде в сам код вставить можно, кажется такие кнопки были тут, но я не подскажу сейчас как именно...

Coroner пишет

Вообще без стиля — нет. Он как раз цифры и буквы вместо значка и выводит.
В принципе его вроде в сам код вставить можно, кажется такие кнопки были тут, но я не подскажу сейчас как именно...

Я думаю примерно так как-то.
https://forum.mozilla-russia.org/viewto … 39#p758039
Спасибо, получилось все работает:D

suz191
А где разместить этот код
memoryDisplay.style.cssText = "-moz-appearance: none; padding: 0; background-image: -moz-linear-gradient(#FF0, #0000E8, #FF0); margin-left: 1px; border: 0; color: #fff"; //
в коде кнопки?
Что-то с ним у меня кнопка не работает(

Garalf пишет

suz191
А где разместить этот код
memoryDisplay.style.cssText = "-moz-appearance: none; padding: 0; background-image: -moz-linear-gradient(#FF0, #0000E8, #FF0); margin-left: 1px; border: 0; color: #fff"; //
в коде кнопки?
Что-то с ним у меня кнопка не работает(

Это было предположение, её просто нужно сейчас собрать потихоньку обратно отключая места которые её ломают и доработать...
Вот со стилем сразу в коде... вроде работает!
Черным запуск программы и стиль...
Если запуск какой либы программы не нужен выкинте его (первый черный отрезок)
Но этот счетчик, память показывает не правильно и он собственно на данный момент подходит именно для очистки т.к. это прикручено...
Счетчик просто для показа памяти ... На мой взгляд более правильной тут https://forum.mozilla-russia.org/viewto … 42#p757742
Второй черный отрезок это стиль :)
в firefox 60+ https://forum.mozilla-russia.org/viewto … 39#p758039
Спасибо Coroner и Dumby ещё бы всё это собрать в единое целое то цены бы не было :rolleyes:

suz191
Спасибо, так работает.

Еще бы Autocopy+3 оживить...

suz191 пишет

её просто нужно сейчас собрать потихоньку обратно отключая места которые её ломают и доработать...

Её у меня ломал код, отвечающий за показ дискового кэша в подсказке. Код убрал, подсказку оставил.
У меня там было ещё очистка кэша, но я её давно уже выключил.
Все мои "нажатия", в том числе и по "Long Click" работают. Но это у меня, а как в оригинале было — я не помню. Может там и про кэш ничего и небыло... :angel:

Coroner пишет

Все мои "нажатия", в том числе и по "Long Click" работают. Но это у меня, а как в оригинале было — я не помню. Может там и про кэш ничего и небыло... :angel:

Да и пусть так остается... Показывает чистит и хорошо... Все равно не правильно показывает :D Самое главное память сбрасывает :)
По-моему это был оригинал и он тоже работает, с вашим заголовком вставленным сверху и подсказки нету, она и не нужна:
в firefox 60+ https://forum.mozilla-russia.org/viewto … 39#p758039

suz191, без подсказки можно запутаться, если нажатий всяких много определено. :)
А вляпать её несложно. Вставляем после

Выделить код

Код:

sss.loadAndRegisterSheet(uri, 0);

и описываем по вкусу.

скрытый текст

Выделить код

Код:

self.onmouseenter = function() {
     self.tooltipText = "Left               => Настройки Mozilla FireFox\n" +
                   "Middle         => Дополнения\n" +
                   "Ctrl+Right   => Информация для решения проблем и плагины\n" +
                   "Alt+Right    => Vacuum очистка баз places.sqlite и Brief,\n" +
                   "                            удаление Flash-кукисов и запуск Afom.exe или Firemin\n" +
                   "Right            => About:About\n\n" +
                   "Long Left    => Производительность\n" +
                   "Long Right  => Открыть значение (выделенное или из буфера) в About:Config\n\n" +
                   "Shift+Right  => Меню кнопки\n\n";
                   };

Народ, так готовый хэппи энд будет, для "особо одаренных", вроде меня :)? Чтоб код копирнул и всё.
А то "вставь сюда","вляпай туда"...
Вообще мёртвая кнопка. Код взял с предпоследнего поста от suz191
Пробовал вставлять описание кликов с предыдущего от Coroner - результат тот-же.
W7x64  FF_ESR-52.7.4 (x32)

JKT пишет

W7x64  FF_ESR-52.7.4 (x32)

Так и берите готовую кнопку. Вы же берёте всё после сообщения

suz191 пишет

в 60 firefox перестало работать и кнопка и строка состояния

Чего бы ему работать на 52?

Вам в самое начало темы, на страницу номер 1. https://forum.mozilla-russia.org/viewto … 30#p528430
Остальные переделки рассматривать не стоит.

Coroner
Спасибо. Всё работает.

Memory Monitor Firefox 60+

1. Старый Код с не правильно отображающейся памятью и использованием запуска внешней программы для очистки памяти
     Л: Открыть about:memory
     П: Очистка Кеш и удаление Flash-кукисов
(подсказка есть, очистка выделена черным и если не используете можете удалить эти строки):

скрытый текст

/*Initialization Code*/

// ====================================================================================
// Memory Monitor ................................
// https://forum.mozilla-russia.org/viewtopic.php?id=52237
// ====================================================================================
var idbut=this.id;
var urlbar = document.getElementById("page-action-buttons");
var button = document.getElementById(idbut);
urlbar.insertBefore(button, urlbar.lastChild);

var style = custombutton.buttonGetHelp(self).replace(/id/g, _id);
var uri = makeURI('data:text/css,'+ encodeURIComponent(style));
var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
sss.loadAndRegisterSheet(uri, 0);

// Подсказка кнопки ................................
this.tooltipText = "Л:  Открыть about:memory\nП: Очистка Кеш и удаление Flash-кукисов";       

                   
// Настройка функций кликов мыши для кнопки ................................
this.onclick = function(e) {
     if ( e.button == 0 ) {
          var memoryTab = gBrowser.getBrowserForTab( gBrowser.selectedTab = gBrowser.addTab("about:memory") );
         
          // oбработчик ждет пока откроется "about:memory", удаляет себя и нажимает кнопку на странице
          memoryTab.addEventListener("pageshow", function c(e) {         
             this.removeEventListener( e.type, c );           

             setTimeout(function() { try { e.originalTarget.getElementById('measureButton').click() } catch(e) {} }, 0);     
          });
          }
         
     if ( e.button == 1 ) gShowPopup(this);
     
     if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) {
          e.preventDefault();   
         
          // очистить кэш ....
          try {
              Services.cache.evictEntries(Ci.nsICache.STORE_IN_MEMORY);
              Services.cache.evictEntries(Ci.nsICache.STORE_ON_DISK);
              }
          catch(e) { Services.cache2.clear() }

          // Удалить Flash кукиси ....
          var dir = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties).get("Home", Ci.nsIFile);
          dir.append("Application Data");
          dir.append("Macromedia");
          if ( dir.exists() ) dir.remove(true);
          if ( !dir.exists() ) dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);

          // Всплывающее сообщение ....
          var alertService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
          alertService.showAlertNotification('chrome://global/skin/icons/information-16.png', 'Показывать потребление памяти', 'Очистил кеш и удалил Flash кукиси');
          setTimeout(function() { alertService.closeAlert() }, 2500);
          }
};

// Показывать потребление памяти на текущей кнопке
(function () { 
   self.timer = setInterval(function() {
   var memory = getMemory();
   self.label = getMemory() + ' mb'
     
       if ( memory < 300 ) return;
       var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        file.initWithPath('буква диска:\\путь\\до\\файла.расширение');
       file.launch();

      
   }, 2000 );
 
// Получить всю занимаемую оперативную память в MB ....
   function getMemory() {           
      var reporterManager = Cc["@mozilla.org/memory-reporter-manager;1"].getService(Ci.nsIMemoryReporterManager);
      try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          }
      catch(e) { var memory = reporterManager.resident; } // FF26 - Nightly
     
      return ( Math.round( memory/1048576 ) );
   };     

// Стиль добавляет текст на кнопку ....
   var uri = makeURI('data:text/css,'+ encodeURIComponent('\
   %button% .toolbarbutton-icon {\
     display: none !important;\
   }\
   %button% .toolbarbutton-text {\
     display: -moz-box !important;\
   }\
   %button% {\
     -moz-box-orient: horizontal !important;\
   }\
   '.replace(/%button%/g, "#" + _id) ));
   const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
   sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
   
// Удалять счётчик памяти и другие изменения ....
  addDestructor(function() {
      try { window.clearTimeout( self.timer ) } catch(e) {};
   });
})();


2. Код кнопки в строке с просто правильно отображающейся памятью и без прибабахов тут: https://forum.mozilla-russia.org/viewto … 42#p757742

suz191, парочка вопросов:
1. Стиль в код перенесён — даёт это какую пользу, или просто так удобнее?
2. Нажатие в about:memory можно переделать на "Garbage Collection", или сразу на "Minimize Memory Usage"?

Coroner пишет

suz191, парочка вопросов:
1. Стиль в код перенесён — даёт это какую пользу, или просто так удобнее?
2. Нажатие в about:memory можно переделать на "Garbage Collection", или сразу на "Minimize Memory Usage"?

Добрый день...
1. Удобнее в плане лени :)  (скопировал и вставил) :)
2. Я не знаю! Но, попробовать наверное можно... Я просто собрал её из старой, по вашим исходникам :)
И сделал одно сообщение тут, а старые сообщения с кодом поправил ссылкой на это сообщение, чтоб не создавалось в теме хаоса, а то было в каждом сообщении по кусочку кода... :)

del

Coroner пишет

suz191, парочка вопросов:
Нажатие в about:memory можно переделать на "Garbage Collection", или сразу на "Minimize Memory Usage"?

Идея понравилась...
Можно попробовать совместить с этим! http://custombuttons.sourceforge.net/fo … f=4&t=3556
Тогда по сути наверное и сброс памяти не нужен будет никакой внешней программой...
Как вам такой Вариант?

suz191 пишет

Как вам такой Вариант?

Хороший вариант. :) Главное что реализуется легко. :D

скрытый текст

Выделить код

Код:

if ( e.button == ... { // по вкусу

doMMU();
function doMMU() {
    let gMgr = Cc["@mozilla.org/memory-reporter-manager;1"]
        .getService(Ci.nsIMemoryReporterManager);
    Services.obs.notifyObservers(null, "child-mmu-request", null);
    gMgr.minimizeMemoryUsage(null, false, false);
}

};

Добрый день! В новом Firefox
Перестал работать правильный монитор от Dumby
из поста https://forum.mozilla-russia.org/viewto … 42#p757742
Они что-то сделали с адресной стройкой и больше он там не отображается!
Не мог ли бы кто-нибудь помочь заставить его отображаться? У меня не получается.
Спасибо! :)

Dumby пишет

suz191
Ну, я попробовал просто вывести в адресную строку лейбл,
отображающий расход памяти. (типа как на странице about:performance)

Вроде что-то показывает на Firefox 60, и, даже, на Nightly 62 (2018-05-10).

скрытый текст

Выделить код

Код:

setTimeout(url => {
    var mode = "rss"; // "rss" - Resident Set Size, "uss" - Unique Set Size
    var interval = 1500; // ms

    var before = null;
    var parent = before ? before.parentNode : document.getElementById("page-action-buttons");
    var lab = parent.insertBefore(document.createElement("label"), before);

    var nsvo = Cu.import(url, {});
    if (!("labels" in nsvo)) {
        nsvo.labels = new Set();
        var mb = 1024 * 1024, gb = mb * 1024;
        var format = num => num < gb
            ? Math.round(num / mb) + "MB"
            : (Math.round(100 * num / gb) / 100).toFixed(2) + "GB";
        var updateLabels = bytes => {
            if (bytes) for(var lab of nsvo.labels)
                lab.setAttribute("value", format(bytes));
        }
        if (Services.ppmm.childCount == 1) {
            var mrm = Cc["@mozilla.org/memory-reporter-manager;1"]
                .getService(Ci.nsIMemoryReporterManager);
            var prop = "resident" + (mode == "uss" ? "Unique" : "");
            var tick = () => updateLabels(mrm[prop]);
        } else {
            var tick = async () => {
                var res = await nsvo.Memory.summary(), bytes = 0;
                for(var prop in res) bytes += res[prop][mode];
                updateLabels(bytes);
            }
        }
        tick(); nsvo.intId = nsvo.setInterval(tick, interval);
    }
    nsvo.labels.add(lab);
    addDestructor(reason => {
        nsvo.labels.delete(lab); lab.remove();
        if (reason[5] == "e" && !nsvo.labels.size)
            nsvo.clearInterval(nsvo.intId), Cu.unload(url);
    });
}, 500, "resource://gre/modules/Memory.jsm?" + _id);

suz191 пишет

Добрый день! В новом Firefox
Перестал работать правильный монитор от Dumby
из поста https://forum.mozilla-russia.org/viewto … 42#p757742

Разобрался вроде! отсуцтвует вот это resource://gre/modules/Memory.jsm

А где он теперь лежит? :|

Подскажите пожалуйста как впендюрить resource://gre/modules/Memory.jsm
Обратно? :D
Спасибо :)

suz191 пишет

как впендюрить resource://gre/modules/Memory.jsm
Обратно?

Например, посмотри как вырезали и сделай наоборот.
Или сначала напиши что-нибудь простенькое, вдруг сойдёт. Ну типа

скрытый текст

Выделить код

Код:

((g, id) => {
    // Resident Set Size: "resident"
    // Unique Set Size:   "residentUnique"
    var mode = "resident";

    var mm = g[id] || (g[id] = ({
        init() {
            var mb = 1024 * 1024, gb = mb * 1024;
            this.format = num => num < gb
                ? Math.round(num / mb) + "MB"
                : (Math.round(100 * num / gb) / 100).toFixed(2) + "GB";
            this.ppmm.addMessageListener(id, this);
            this.timer.initWithCallback(
                this, 1500, this.timer.TYPE_REPEATING_SLACK
            );
            this.notify();
            return this;
        },
        destroy() {
            delete g[id];
            this.timer.cancel();
            this.ppmm.removeMessageListener(id, this);
        },
        url: `data:,
            sendAsyncMessage(
                "${id}",
                Cc["@mozilla.org/memory-reporter-manager;1"]
                    .getService(Ci.nsIMemoryReporterManager)
                    .${mode}
            )
        `.replace(/\s/g, ""),
        ppmm: Services.ppmm,
        timer: Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer),
        notify() {
            this.total = this.count = 0;
            this.childCount = this.ppmm.childCount;
            this.ppmm.loadProcessScript(this.url, false);
        },
        receiveMessage(msg) {
            this.total += msg.data;
            if (++this.count != this.childCount) return;
            var val = this.format(this.total);
            for(var lab of this.labels)
                lab.setAttribute("value", val);
        },
        labels: new Set(),
        register(doc, before) {
            var parent = before ? before.parentNode
                : doc.getElementById("page-action-buttons");
                var lab = doc.createElement("label");
                this.labels.add(lab);
                lab.id = id;
                doc.defaultView.setTimeout(() =>
                    this.labels.has(lab) && parent.insertBefore(lab, before)
                , 500);
                return lab;
        },
        unregister(lab) {
            lab.remove();
            this.labels.delete(lab);
            this.labels.size || this.destroy();
        }
    }).init());
    var lab = mm.register(document);
    addDestructor(() => mm.unregister(lab));
})(ChromeUtils.import("resource://gre/modules/Services.jsm", null), "CBMemoryMonitorIndicator");


Вобще, nsIMemoryReporterManager.getReports() показывал бы
и подробнее и точнее (как минимум, плюс GPU процесс), но
метод тормозной и сильно напрягает браузер, так что не подходит.

Dumby пишет

Или сначала напиши что-нибудь простенькое, вдруг сойдёт.

Огромное спасибо! :) Работает!
По поводу nsIMemoryReporterManager.getReports() не очень понял! Но, в этом коде его нет значить тормозить не должен!
Ещераз огромное спасибо! :)

Перестала работать. :/
Нет ли версии для нового браузера?
Спасибо.

Подскажите, нужен ли для FF45+ участок кода:

Выделить код

Код:

try {
          var e = reporterManager.enumerateReporters();
          while ( e.hasMoreElements() ) {
                  var mr = e.getNext().QueryInterface(Ci.nsIMemoryReporter);
                  self[mr.path] = mr;
                  }
          var memory = self["resident"].amount;
          }

Или достаточно только:

Выделить код

Код:

catch(e) { var memory = reporterManager.resident }; // для Nightly

Как здесь можно получить объем виртуальной памяти?
Тупая замена resident на private не помогает.
Нужно для FF52 и ниже.