WMPerfMonPluginUsb.Mod 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. MODULE WMPerfMonPluginUsb; (** AUTHOR "staubesv"; PURPOSE "Performance Monitor USB transfer rate plugin"; *)
  2. (**
  3. * History:
  4. *
  5. * 16.02.2006 First Release (staubesv)
  6. * 23.06.2006 Adapted to WMPerfMonPlugins (staubesv)
  7. * 27.02.2007 Remove plugins when unloading module (staubesv)
  8. * 13.03.2007 Added more statistics variables (staubesv)
  9. *)
  10. IMPORT
  11. WMPerfMonPlugins,
  12. KernelLog, UsbDebug, UsbHcdi, Plugins, Modules;
  13. CONST
  14. PluginName = "USB Transfer Rate";
  15. ModuleName = "WMPerfMonPluginUsb";
  16. TYPE
  17. UsbParameter = POINTER TO RECORD(WMPerfMonPlugins.Parameter)
  18. controller : UsbHcdi.Hcd;
  19. END;
  20. UsbTransferRate = OBJECT(WMPerfMonPlugins.Plugin)
  21. VAR
  22. controller : UsbHcdi.Hcd;
  23. PROCEDURE Init(p : WMPerfMonPlugins.Parameter);
  24. VAR ds : WMPerfMonPlugins.DatasetDescriptor;
  25. BEGIN
  26. p.name := PluginName; p.description := "Amount of transfered data";
  27. SELF.controller := p(UsbParameter).controller;
  28. WMPerfMonPlugins.GetNameDesc(controller, p.devicename);
  29. p.modulename := ModuleName;
  30. p.max := 60*1024; p.autoMax := TRUE; p.minDigits := 5;
  31. NEW(ds, 9);
  32. ds[0].name := "NbytesTransfered";
  33. ds[1].name := "NnofTransfers";
  34. ds[2].name := "NnofBulkTransfers";
  35. ds[3].name := "NnofControlTransfers";
  36. ds[4].name := "NnofInterruptTransfers";
  37. ds[5].name := "NnofIsochronousTransfers";
  38. ds[6].name := "NnofUnknownTransfers";
  39. ds[7].name := "NnofInterrupts";
  40. ds[8].name := "NnofInterruptsHandled";
  41. p.datasetDescriptor := ds;
  42. END Init;
  43. PROCEDURE UpdateDataset;
  44. BEGIN
  45. dataset[0] := controller.NbytesTransfered;
  46. dataset[1] := controller.NnofTransfers;
  47. dataset[2] := controller.NnofBulkTransfers;
  48. dataset[3] := controller.NnofControlTransfers;
  49. dataset[4] := controller.NnofInterruptTransfers;
  50. dataset[5] := controller.NnofIsochronousTransfers;
  51. dataset[6] := controller.NnofUnknownTransfers;
  52. dataset[7] := controller.NnofInterrupts;
  53. dataset[8] := controller.NnofInterruptsHandled;
  54. END UpdateDataset;
  55. END UsbTransferRate;
  56. PROCEDURE AddPlugin(hcd : UsbHcdi.Hcd);
  57. VAR par : UsbParameter; plugin : UsbTransferRate;
  58. BEGIN {EXCLUSIVE}
  59. NEW(par); par.controller := hcd; NEW(plugin, par);
  60. END AddPlugin;
  61. PROCEDURE RemovePlugin(hcd : UsbHcdi.Hcd);
  62. VAR devicename : WMPerfMonPlugins.DeviceName;
  63. BEGIN {EXCLUSIVE}
  64. WMPerfMonPlugins.GetNameDesc(hcd, devicename);
  65. WMPerfMonPlugins.updater.RemoveByName(PluginName, devicename);
  66. END RemovePlugin;
  67. PROCEDURE EventHandler(event : WORD; plugin : Plugins.Plugin);
  68. BEGIN
  69. IF event = Plugins.EventAdd THEN
  70. AddPlugin(plugin (UsbHcdi.Hcd));
  71. ELSIF event = Plugins.EventRemove THEN
  72. RemovePlugin(plugin (UsbHcdi.Hcd));
  73. END;
  74. END EventHandler;
  75. PROCEDURE InitPlugins;
  76. VAR table : Plugins.Table; i : LONGINT;
  77. BEGIN
  78. IF UsbDebug.PerformanceMonitoring THEN
  79. UsbHcdi.controllers.AddEventHandler(EventHandler, i);
  80. UsbHcdi.controllers.GetAll(table);
  81. IF table # NIL THEN FOR i := 0 TO LEN(table)-1 DO AddPlugin(table[i] (UsbHcdi.Hcd)); END; END;
  82. ELSE KernelLog.String("WMPerfMonUsbPlugin: Performance counters not enabled in UsbHcdi.Mod"); KernelLog.Ln;
  83. END;
  84. END InitPlugins;
  85. PROCEDURE Install*;
  86. END Install;
  87. PROCEDURE Cleanup;
  88. VAR ignore : LONGINT;
  89. BEGIN
  90. IF UsbDebug.PerformanceMonitoring THEN
  91. UsbHcdi.controllers.RemoveEventHandler(EventHandler, ignore);
  92. WMPerfMonPlugins.updater.RemoveByModuleName(ModuleName);
  93. END;
  94. END Cleanup;
  95. BEGIN
  96. Modules.InstallTermHandler(Cleanup);
  97. InitPlugins;
  98. END WMPerfMonPluginUsb.
  99. WMPerfMonPluginUsb.Install ~ System.Free WMPerfMonPluginUsb ~