Esta página está traduciéndose a partir del artículo Monitoring_plugins, razón por la cual puede haber algunos errores sintácticos o partes sin traducir. Puedes colaborar continuando con la traducción
Sumario
Un nuevo componente del sistema plugin está ahora disponible para medir cuanto le toma a los plugins (e.g., Adobe Flash) ejecutar sus tareas. Este componente reporta el tiempo de ejecución del plugin usando el observador de servicios a quién esté registrado para recibir las notificaciones. Este artículo discute como los desarrolladores pueden hacer uso de esta nueva característica.
Datos de tiempos de ejecución (Runtime Data)
La información de tiempo de ejecución reportada es siempre en fracciones de segundo. Debido a que el componente mide el tiempo reloj que le toma al plugin ejecutar las órdenes, el valor incluye ambos tiempos de CPU, el tiempo requerido para el proceso al igual que el tiempo para operaciones de disco. Por lo tanto es técnicamente incorrecto decir que el tiempo de ejecución es una medida del uso del CPU, sin embargo, es una buena representación of todos los recursos que están siendo consumidos por el plugin.
Uso
Para hacer uso del nuevo componente debes registrarte para recibir sus notificaciones de tiempo de ejecución usando el observador de servicios. El tema de la notificación es experimental-notify-plugin-call
. Si eres nuevo con el observador de servicios de Mozilla, quizás quieras familiarizarte con este antes de proseguir. Puedes hallar más información sobre el observador de servicios aquí y aquí.
Abajo hay un número de recortes de JavaScript que podrían ser útiles para desarrolladores que intenten usar esta característica:
Registro
Para registrarse en las notificaciones de tiempo de ejecución con el observador de servicios debes crear una clase con un método observe
que reciba 3 parámetros (tema
, asunto
y dato
) así como un método register
que contenga el siguiente código:
var observerService = Components.classes["@mozilla.org/observer-service;1"] .getService (Components.interfaces.nsIObserverService); observerService.addObserver(this, "experimental-notify-plugin-call", false);
Observando
Como se discutió arriba, para especificar que quieres hacer cuando llegue una notificación tu clase debe tener un método observe
, recibiendo 3 parámetros (tema
, asunto
y dato
). El asunto
contiene el asunto de la notificación - experimental-notify-plugin-call
en este caso, el dato
es el tiempo de ejecución en milisegundos y el tema
es siempre null
y no debería ser usado.
Aquí hay un ejemplo que muestra el tiempo de ejecución en una caja de alerta al usuario si el tiempo de ejecución excede el medio segundo:
observe: function(subject, topic, data) { if (topic == "experimental-notify-plugin-call" ) { if (data > 0.500) { alert("Runtime is: " + data); } } }
NOTA: Este es solo un ejemplo simplificado y el uso de alert()
es muy moderado ya que el componente puede enviar cientos de notificaciones por segundo y puede provocar que el browser deje de funcionar si un número excesivo de cajas de alerta son desplegadas.
Además note que en el ejemplo de arriba una sentencia if se asegura que el tema de la notificación entrante es el correcto. Esto es muy útil en casos donde tu clase está registrada para recibir notificaciones para más de un tema con el observador de servicios.
Limpieza
Para eliminar el registro de tu clase con observador de servicios - cuando ya no quieras recibir más notificaciones de tiempos de ejecución - tu clase debe incluir un método unregister
que contenga el siguiente código:
var observerService = Components.classes["@mozilla.org/observer-service;1"] .getService(Components.interfaces.nsIObserverService); observerService.removeObserver(this, "experimental-notify-plugin-call");
Esqueleto (estructura) de clases para el observador
Abajo está un esqueleto de clase que podrías usar para recibir notificaciones de tiempos de ejecución:
function PluginObserver() { this.registered = false; this.register(); //takes care of registering this class with observer services as an observer for plugin runtime notifications } PluginWatcherObserver.prototype = { observe: function(subject, topic, data) { if (topic == "experimental-notify-plugin-call") //In case your class is registered to listen to other topics //This gets executed each time a runtime notification arrives // --YOUR CODE GOES HERE-- } }, //Takes care of registering the observer services for the "experimental-notify-plugin-call" topic register: function() { if (this.registered == false) { //This check prevents double registration -- something you want to avoid!! var observerService = Components.classes["@mozilla.org/observer-service;1"] .getService(Components.interfaces.nsIObserverService); observerService.addObserver(this, "experimental-notify-plugin-call", false); this.registered = true; } }, //Unregisters from the observer services unregister: function() { if (this.registered == true) { var observerService = Components.classes["@mozilla.org/observer-service;1"] .getService(Components.interfaces.nsIObserverService); observerService.removeObserver(this, "experimental-notify-plugin-call"); this.registered = false; } } }
Recursos adicionales
Más información sobre el observador de servicios: