본 사이트는 여러분의 사용자 경험을 개선하기 위해 유지 보수를 진행하는 동안 기능이 제한됩니다. 도움말로 문제가 해결되지 않고 질문을 하고 싶다면 Twitter의 @FirefoxSupport 및 Reddit의 /r/firefox 채널을 활용하세요.

Mozilla 도움말 검색

고객 지원 사기를 피하세요. 저희는 여러분께 절대로 전화를 걸거나 문자를 보내거나 개인 정보를 공유하도록 요청하지 않습니다. "악용 사례 신고"옵션을 사용하여 의심스러운 활동을 신고해 주세요.

자세히 살펴보기

This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obta

  • 2 답장
  • 3 이 문제를 만남
  • 11 보기
  • 최종 답변자: cor-el

more options
This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;

let EXPORTED_SYMBOLS = ["TelemetryStopwatch"];

let Telemetry = Cc["@mozilla.org/base/telemetry;1"]
                  .getService(Ci.nsITelemetry);

// simpleTimers are directly associated with a histogram
// name. objectTimers are associated with an object _and_
// a histogram name.
let simpleTimers = {};
let objectTimers = new WeakMap();

let TelemetryStopwatch = {
  /**
   * Starts a timer associated with a telemetry histogram. The timer can be
   * directly associated with a histogram, or with a pair of a histogram and
   * an object.
   *
   * @param aHistogram a string which must be a valid histogram name
   *                   from TelemetryHistograms.h
   *
   * @param aObj Optional parameter. If specified, the timer is associated
   *             with this object, meaning that multiple timers for a same
   *             histogram may be run concurrently, as long as they are
   *             associated with different objects.
   *
   * @return true if the timer was successfully started, false otherwise. If a
   *         timer already exists, it can't be started again, and the existing
   *         one will be cleared in order to avoid measurements errors.
   */
  start: function(aHistogram, aObj) {
    if (!validTypes(aHistogram, aObj))
      return false;

    let timers;
    if (aObj) {
      timers = objectTimers.get(aObj, {});
      objectTimers.set(aObj, timers);
    } else {
      timers = simpleTimers;
    }

    if (timers.hasOwnProperty(aHistogram)) {
      delete timers[aHistogram];
      Cu.reportError("TelemetryStopwatch: key \"" +
                     aHistogram + "\" was already initialized");
      return false;
    }

    timers[aHistogram] = Date.now();
    return true;
  },

  /**
   * Stops the timer associated with the given histogram (and object),
   * calculates the time delta between start and finish, and adds the value
   * to the histogram.
   *
   * @param aHistogram a string which must be a valid histogram name
   *                   from TelemetryHistograms.h. If an invalid name
   *                   is given, the function will throw.
   *
   * @param aObj Optional parameter which associates the histogram timer with
   *             the given object.
   *
   * @return true if the timer was succesfully stopped and the data was
   *         added to the histogram, false otherwise.
   */
  finish: function(aHistogram, aObj) {
    if (!validTypes(aHistogram, aObj))
      return false;

    let timers = aObj
                 ? objectTimers.get(aObj, {})
                 : simpleTimers;

    let start = timers[aHistogram];
    delete timers[aHistogram];

    if (start) {
      let delta = Date.now() - start;
      let histogram = Telemetry.getHistogramById(aHistogram);
      histogram.add(delta);
      return true;
    }

    return false;
  }
}

function validTypes(aKey, aObj) {
  return (typeof aKey == "string") &&
         (aObj === undefined || typeof aObj == "object");
}
<pre><nowiki>This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ const Cc = Components.classes; const Ci = Components.interfaces; const Cu = Components.utils; let EXPORTED_SYMBOLS = ["TelemetryStopwatch"]; let Telemetry = Cc["@mozilla.org/base/telemetry;1"] .getService(Ci.nsITelemetry); // simpleTimers are directly associated with a histogram // name. objectTimers are associated with an object _and_ // a histogram name. let simpleTimers = {}; let objectTimers = new WeakMap(); let TelemetryStopwatch = { /** * Starts a timer associated with a telemetry histogram. The timer can be * directly associated with a histogram, or with a pair of a histogram and * an object. * * @param aHistogram a string which must be a valid histogram name * from TelemetryHistograms.h * * @param aObj Optional parameter. If specified, the timer is associated * with this object, meaning that multiple timers for a same * histogram may be run concurrently, as long as they are * associated with different objects. * * @return true if the timer was successfully started, false otherwise. If a * timer already exists, it can't be started again, and the existing * one will be cleared in order to avoid measurements errors. */ start: function(aHistogram, aObj) { if (!validTypes(aHistogram, aObj)) return false; let timers; if (aObj) { timers = objectTimers.get(aObj, {}); objectTimers.set(aObj, timers); } else { timers = simpleTimers; } if (timers.hasOwnProperty(aHistogram)) { delete timers[aHistogram]; Cu.reportError("TelemetryStopwatch: key \"" + aHistogram + "\" was already initialized"); return false; } timers[aHistogram] = Date.now(); return true; }, /** * Stops the timer associated with the given histogram (and object), * calculates the time delta between start and finish, and adds the value * to the histogram. * * @param aHistogram a string which must be a valid histogram name * from TelemetryHistograms.h. If an invalid name * is given, the function will throw. * * @param aObj Optional parameter which associates the histogram timer with * the given object. * * @return true if the timer was succesfully stopped and the data was * added to the histogram, false otherwise. */ finish: function(aHistogram, aObj) { if (!validTypes(aHistogram, aObj)) return false; let timers = aObj ? objectTimers.get(aObj, {}) : simpleTimers; let start = timers[aHistogram]; delete timers[aHistogram]; if (start) { let delta = Date.now() - start; let histogram = Telemetry.getHistogramById(aHistogram); histogram.add(delta); return true; } return false; } } function validTypes(aKey, aObj) { return (typeof aKey == "string") && (aObj === undefined || typeof aObj == "object"); }</nowiki></pre>

글쓴이 cor-el 수정일시

모든 댓글 (2)

more options

I'm a bit confused on what you want help with here?

more options

This is about the information that sending performance data.
Firefox 19 and later will have an about:telemetry page to give some information.