Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. interface IEntry {
  2. type: string;
  3. name: string;
  4. startTime: number | null;
  5. }
  6.  
  7. class Entry implements IEntry {
  8. type: string = 'mark';
  9. name: string;
  10. startTime: number | null = null;
  11.  
  12. constructor(name: string, startTime: number) {
  13. this.name = name;
  14. this.startTime = startTime;
  15. }
  16. }
  17.  
  18. interface IMeasurement extends IEntry {
  19. duration: number | null;
  20. }
  21.  
  22. class Measurement extends Entry implements IMeasurement {
  23. type: string = 'measurement';
  24. duration: number = null;
  25.  
  26. constructor(name: string, startTime: number, duration: number) {
  27. super(name, startTime);
  28. this.duration = duration;
  29. }
  30. }
  31.  
  32. export class PerformanceMeasurement {
  33. initTiming: number|null = null;
  34. private entries: Array<IEntry|IMeasurement> = [];
  35. private now: () => number = require("performance-now");
  36.  
  37. constructor() {
  38. this.initTiming = this.now();
  39. }
  40.  
  41. public mark(name: string): void {
  42. let entry = new Entry(name, this.now());
  43. this.entries.push(entry);
  44. }
  45.  
  46. public mesure(name: string, startMark: string, endMark: string): void {
  47. let startTime:number = this.getEntry(startMark).startTime;
  48. let endTime:number = this.getEntry(endMark).startTime;
  49. let duration = endTime - startTime;
  50.  
  51. let measurement = new Measurement(name, this.now(), duration);
  52. this.entries.push(measurement);
  53. }
  54.  
  55. public getEntry(name: string): IEntry {
  56. let filteredEntries = this.entries.filter(entry => entry.name === name);
  57. return filteredEntries[0];
  58. }
  59.  
  60. public getEntries(): Array<IEntry|IMeasurement> {
  61. return this.entries;
  62. }
  63.  
  64. }
  65.  
  66. let PM = new PerformanceMeasurement();
  67. PM.mark('asd');
  68. PM.mark('dsa');
  69. PM.mesure('zxc', 'asd', 'dsa');
  70. console.log(PM.getEntry('asd'));
  71. console.log(PM.getEntry('dsa'));
  72. console.log(PM.getEntry('zxc'));
  73. console.log(PM.getEntries());
  74. console.log(PM);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement