2014年1月2日

Nightly での nsIMemoryReporterManager の変更

UnMHT のメモリリークテストを動かしていたところ Nightly でテスト自体がエラーになる事態に、
という事で調べてみると nsIMemoryReporterManager.enumerateReporters が無くなったのでした。
詳細は Bug 947802 にあるようです。
どうやら全部非同期にするための変更らしいですヨ。

新しい方法は nsIMemoryReporterManager.getReports のようで、下のように書くと動きます。

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

let handleReport = function(process, path, kind, units, amount,
                            description) {
  // 情報を集めるヤツ
};

let finishReporting = function() {
  // 完了したら呼ばれるヤツ
};

MemoryReporterManager.getReports(handleReport, null,
                                 finishReporting, null);

ちなみにこちらが Firefox 28 までのヤツ。
for (let r in XPCOMUtils.IterSimpleEnumerator(
  MemoryReporterManager.enumerateReporters(), Ci.nsIMemoryReporter)) {
  r.collectReports(handleReport, null);
}

そしてその前 (いつだっけ?) のヤツ。

for (let r in XPCOMUtils.IterSimpleEnumerator(
  MemoryReporterManager.enumerateReporters(), Ci.nsIMemoryReporter)) {
  handleReport(r.process, r.path, r.kind, r.units,
               r.amount, r.description);
}

for (let r in XPCOMUtils.IterSimpleEnumerator(
  MemoryReporterManager.enumerateMultiReporters(),
  Ci.nsIMemoryMultiReporter)) {
  r.collectReports(handleReport, null);
}

0 件のコメント:

コメントを投稿