ModuleProfile.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*
  2. MIT License http://www.opensource.org/licenses/mit-license.php
  3. Author Tobias Koppers @sokra
  4. */
  5. "use strict";
  6. class ModuleProfile {
  7. constructor() {
  8. /** @type {number} */
  9. this.startTime = Date.now();
  10. /** @type {number} */
  11. this.factoryStartTime = 0;
  12. /** @type {number} */
  13. this.factoryEndTime = 0;
  14. /** @type {number} */
  15. this.factory = 0;
  16. /** @type {number} */
  17. this.factoryParallelismFactor = 0;
  18. /** @type {number} */
  19. this.restoringStartTime = 0;
  20. /** @type {number} */
  21. this.restoringEndTime = 0;
  22. /** @type {number} */
  23. this.restoring = 0;
  24. /** @type {number} */
  25. this.restoringParallelismFactor = 0;
  26. /** @type {number} */
  27. this.integrationStartTime = 0;
  28. /** @type {number} */
  29. this.integrationEndTime = 0;
  30. /** @type {number} */
  31. this.integration = 0;
  32. /** @type {number} */
  33. this.integrationParallelismFactor = 0;
  34. /** @type {number} */
  35. this.buildingStartTime = 0;
  36. /** @type {number} */
  37. this.buildingEndTime = 0;
  38. /** @type {number} */
  39. this.building = 0;
  40. /** @type {number} */
  41. this.buildingParallelismFactor = 0;
  42. /** @type {number} */
  43. this.storingStartTime = 0;
  44. /** @type {number} */
  45. this.storingEndTime = 0;
  46. /** @type {number} */
  47. this.storing = 0;
  48. /** @type {number} */
  49. this.storingParallelismFactor = 0;
  50. /** @type {{ start: number, end: number }[] | undefined} */
  51. this.additionalFactoryTimes = undefined;
  52. /** @type {number} */
  53. this.additionalFactories = 0;
  54. /** @type {number} */
  55. this.additionalFactoriesParallelismFactor = 0;
  56. /**
  57. * @deprecated
  58. * @type {number}
  59. */
  60. this.additionalIntegration = 0;
  61. }
  62. markFactoryStart() {
  63. this.factoryStartTime = Date.now();
  64. }
  65. markFactoryEnd() {
  66. this.factoryEndTime = Date.now();
  67. this.factory = this.factoryEndTime - this.factoryStartTime;
  68. }
  69. markRestoringStart() {
  70. this.restoringStartTime = Date.now();
  71. }
  72. markRestoringEnd() {
  73. this.restoringEndTime = Date.now();
  74. this.restoring = this.restoringEndTime - this.restoringStartTime;
  75. }
  76. markIntegrationStart() {
  77. this.integrationStartTime = Date.now();
  78. }
  79. markIntegrationEnd() {
  80. this.integrationEndTime = Date.now();
  81. this.integration = this.integrationEndTime - this.integrationStartTime;
  82. }
  83. markBuildingStart() {
  84. this.buildingStartTime = Date.now();
  85. }
  86. markBuildingEnd() {
  87. this.buildingEndTime = Date.now();
  88. this.building = this.buildingEndTime - this.buildingStartTime;
  89. }
  90. markStoringStart() {
  91. this.storingStartTime = Date.now();
  92. }
  93. markStoringEnd() {
  94. this.storingEndTime = Date.now();
  95. this.storing = this.storingEndTime - this.storingStartTime;
  96. }
  97. // This depends on timing so we ignore it for coverage
  98. /* istanbul ignore next */
  99. /**
  100. * Merge this profile into another one
  101. * @param {ModuleProfile} realProfile the profile to merge into
  102. * @returns {void}
  103. */
  104. mergeInto(realProfile) {
  105. realProfile.additionalFactories = this.factory;
  106. (realProfile.additionalFactoryTimes =
  107. realProfile.additionalFactoryTimes || []).push({
  108. start: this.factoryStartTime,
  109. end: this.factoryEndTime
  110. });
  111. }
  112. }
  113. module.exports = ModuleProfile;