Serenity Operating System
at master 52 lines 1.4 kB view raw
1/* 2 * Copyright (c) 2020, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 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 14namespace Web::HighResolutionTime { 15 16Performance::Performance(HTML::Window& window) 17 : DOM::EventTarget(window.realm()) 18 , m_window(window) 19{ 20 m_timer.start(); 21} 22 23Performance::~Performance() = default; 24 25JS::ThrowCompletionOr<void> Performance::initialize(JS::Realm& realm) 26{ 27 MUST_OR_THROW_OOM(Base::initialize(realm)); 28 set_prototype(&Bindings::ensure_web_prototype<Bindings::PerformancePrototype>(realm, "Performance")); 29 30 return {}; 31} 32 33void Performance::visit_edges(Cell::Visitor& visitor) 34{ 35 Base::visit_edges(visitor); 36 visitor.visit(m_window.ptr()); 37 visitor.visit(m_timing.ptr()); 38} 39 40JS::GCPtr<NavigationTiming::PerformanceTiming> Performance::timing() 41{ 42 if (!m_timing) 43 m_timing = heap().allocate<NavigationTiming::PerformanceTiming>(realm(), *m_window).release_allocated_value_but_fixme_should_propagate_errors(); 44 return m_timing; 45} 46 47double Performance::time_origin() const 48{ 49 return static_cast<double>(m_timer.origin_time().to_milliseconds()); 50} 51 52}