Home Reference Source Test Repository

src/core/perf_monitor.js

import subscribe from "./decorators/subscribe";
import channel from "./decorators/channel";
import RizzoEvents from "./rizzo_events";
import { mark, measure } from "./utils/perf";

/**
 * Records some performance data about our component rendering.
 */
export default class PerfMonitor {
  get loadCritical() {
    return `mark_${RizzoEvents.LOAD_CRITICAL}`;
  }
  get loadBelow() {
    return `mark_${RizzoEvents.LOAD_BELOW}`;
  }
  constructor() {
    this.subscribe();
  }
  /**
   * Listens for when our critical code is loaded and creates a perf mark
   */
  @subscribe(RizzoEvents.LOAD_CRITICAL)
  @channel("events")
  loadCritical() {
    mark(this.loadCritical);
  }
  /**
   * Listens for when our below the fold code is loaded and creates a perf mark
   */
  @subscribe(RizzoEvents.LOAD_BELOW)
  loadBelow() {
    mark(this.loadBelow);

    measure(`mark_critical_to_below`, this.loadCritical, this.loadBelow);
    measure(`mark_critical`, "domContentLoadedEventEnd", this.loadCritical);
  }
}