Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Vigilancia de plugins

Imagen:traduccion-pendiente.png 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:

Etiquetas y colaboradores del documento

 Colaboradores en esta página: GUALY GAETE, Mgjbot
 Última actualización por: GUALY GAETE,