Performance.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibWeb/Bindings/PerformancePrototype.h>
  7. #include <LibWeb/DOM/Document.h>
  8. #include <LibWeb/DOM/Event.h>
  9. #include <LibWeb/DOM/EventDispatcher.h>
  10. #include <LibWeb/HTML/Window.h>
  11. #include <LibWeb/HighResolutionTime/Performance.h>
  12. #include <LibWeb/NavigationTiming/PerformanceTiming.h>
  13. namespace Web::HighResolutionTime {
  14. Performance::Performance(HTML::Window& window)
  15. : DOM::EventTarget(window.realm())
  16. , m_window(window)
  17. {
  18. set_prototype(&window.ensure_web_prototype<Bindings::PerformancePrototype>("Performance"));
  19. m_timer.start();
  20. }
  21. Performance::~Performance() = default;
  22. void Performance::visit_edges(Cell::Visitor& visitor)
  23. {
  24. Base::visit_edges(visitor);
  25. visitor.visit(m_window.ptr());
  26. visitor.visit(m_timing.ptr());
  27. }
  28. JS::GCPtr<NavigationTiming::PerformanceTiming> Performance::timing()
  29. {
  30. if (!m_timing)
  31. m_timing = heap().allocate<NavigationTiming::PerformanceTiming>(realm(), *m_window);
  32. return m_timing;
  33. }
  34. double Performance::time_origin() const
  35. {
  36. auto origin = m_timer.origin_time();
  37. return (origin.tv_sec * 1000.0) + (origin.tv_usec / 1000.0);
  38. }
  39. }