Skip to content

performance_timeline

LargestContentfulPaint dataclass

See https://github.com/WICG/LargestContentfulPaint and largest_contentful_paint.idl

Source code in zendriver/cdp/performance_timeline.py
@dataclass
class LargestContentfulPaint:
    """
    See https://github.com/WICG/LargestContentfulPaint and largest_contentful_paint.idl
    """

    render_time: network.TimeSinceEpoch

    load_time: network.TimeSinceEpoch

    #: The number of pixels being painted.
    size: float

    #: The id attribute of the element, if available.
    element_id: typing.Optional[str] = None

    #: The URL of the image (may be trimmed).
    url: typing.Optional[str] = None

    node_id: typing.Optional[dom.BackendNodeId] = None

    def to_json(self) -> T_JSON_DICT:
        json: T_JSON_DICT = dict()
        json["renderTime"] = self.render_time.to_json()
        json["loadTime"] = self.load_time.to_json()
        json["size"] = self.size
        if self.element_id is not None:
            json["elementId"] = self.element_id
        if self.url is not None:
            json["url"] = self.url
        if self.node_id is not None:
            json["nodeId"] = self.node_id.to_json()
        return json

    @classmethod
    def from_json(cls, json: T_JSON_DICT) -> LargestContentfulPaint:
        return cls(
            render_time=network.TimeSinceEpoch.from_json(json["renderTime"]),
            load_time=network.TimeSinceEpoch.from_json(json["loadTime"]),
            size=float(json["size"]),
            element_id=(
                str(json["elementId"])
                if json.get("elementId", None) is not None
                else None
            ),
            url=str(json["url"]) if json.get("url", None) is not None else None,
            node_id=(
                dom.BackendNodeId.from_json(json["nodeId"])
                if json.get("nodeId", None) is not None
                else None
            ),
        )

element_id: typing.Optional[str] = None class-attribute instance-attribute

load_time: network.TimeSinceEpoch instance-attribute

node_id: typing.Optional[dom.BackendNodeId] = None class-attribute instance-attribute

render_time: network.TimeSinceEpoch instance-attribute

size: float instance-attribute

url: typing.Optional[str] = None class-attribute instance-attribute

__init__(render_time, load_time, size, element_id=None, url=None, node_id=None)

from_json(json) classmethod

Source code in zendriver/cdp/performance_timeline.py
@classmethod
def from_json(cls, json: T_JSON_DICT) -> LargestContentfulPaint:
    return cls(
        render_time=network.TimeSinceEpoch.from_json(json["renderTime"]),
        load_time=network.TimeSinceEpoch.from_json(json["loadTime"]),
        size=float(json["size"]),
        element_id=(
            str(json["elementId"])
            if json.get("elementId", None) is not None
            else None
        ),
        url=str(json["url"]) if json.get("url", None) is not None else None,
        node_id=(
            dom.BackendNodeId.from_json(json["nodeId"])
            if json.get("nodeId", None) is not None
            else None
        ),
    )

to_json()

Source code in zendriver/cdp/performance_timeline.py
def to_json(self) -> T_JSON_DICT:
    json: T_JSON_DICT = dict()
    json["renderTime"] = self.render_time.to_json()
    json["loadTime"] = self.load_time.to_json()
    json["size"] = self.size
    if self.element_id is not None:
        json["elementId"] = self.element_id
    if self.url is not None:
        json["url"] = self.url
    if self.node_id is not None:
        json["nodeId"] = self.node_id.to_json()
    return json

LayoutShift dataclass

See https://wicg.github.io/layout-instability/#sec-layout-shift and layout_shift.idl

Source code in zendriver/cdp/performance_timeline.py
@dataclass
class LayoutShift:
    """
    See https://wicg.github.io/layout-instability/#sec-layout-shift and layout_shift.idl
    """

    #: Score increment produced by this event.
    value: float

    had_recent_input: bool

    last_input_time: network.TimeSinceEpoch

    sources: typing.List[LayoutShiftAttribution]

    def to_json(self) -> T_JSON_DICT:
        json: T_JSON_DICT = dict()
        json["value"] = self.value
        json["hadRecentInput"] = self.had_recent_input
        json["lastInputTime"] = self.last_input_time.to_json()
        json["sources"] = [i.to_json() for i in self.sources]
        return json

    @classmethod
    def from_json(cls, json: T_JSON_DICT) -> LayoutShift:
        return cls(
            value=float(json["value"]),
            had_recent_input=bool(json["hadRecentInput"]),
            last_input_time=network.TimeSinceEpoch.from_json(json["lastInputTime"]),
            sources=[LayoutShiftAttribution.from_json(i) for i in json["sources"]],
        )

had_recent_input: bool instance-attribute

last_input_time: network.TimeSinceEpoch instance-attribute

sources: typing.List[LayoutShiftAttribution] instance-attribute

value: float instance-attribute

__init__(value, had_recent_input, last_input_time, sources)

from_json(json) classmethod

Source code in zendriver/cdp/performance_timeline.py
@classmethod
def from_json(cls, json: T_JSON_DICT) -> LayoutShift:
    return cls(
        value=float(json["value"]),
        had_recent_input=bool(json["hadRecentInput"]),
        last_input_time=network.TimeSinceEpoch.from_json(json["lastInputTime"]),
        sources=[LayoutShiftAttribution.from_json(i) for i in json["sources"]],
    )

to_json()

Source code in zendriver/cdp/performance_timeline.py
def to_json(self) -> T_JSON_DICT:
    json: T_JSON_DICT = dict()
    json["value"] = self.value
    json["hadRecentInput"] = self.had_recent_input
    json["lastInputTime"] = self.last_input_time.to_json()
    json["sources"] = [i.to_json() for i in self.sources]
    return json

LayoutShiftAttribution dataclass

Source code in zendriver/cdp/performance_timeline.py
@dataclass
class LayoutShiftAttribution:
    previous_rect: dom.Rect

    current_rect: dom.Rect

    node_id: typing.Optional[dom.BackendNodeId] = None

    def to_json(self) -> T_JSON_DICT:
        json: T_JSON_DICT = dict()
        json["previousRect"] = self.previous_rect.to_json()
        json["currentRect"] = self.current_rect.to_json()
        if self.node_id is not None:
            json["nodeId"] = self.node_id.to_json()
        return json

    @classmethod
    def from_json(cls, json: T_JSON_DICT) -> LayoutShiftAttribution:
        return cls(
            previous_rect=dom.Rect.from_json(json["previousRect"]),
            current_rect=dom.Rect.from_json(json["currentRect"]),
            node_id=(
                dom.BackendNodeId.from_json(json["nodeId"])
                if json.get("nodeId", None) is not None
                else None
            ),
        )

current_rect: dom.Rect instance-attribute

node_id: typing.Optional[dom.BackendNodeId] = None class-attribute instance-attribute

previous_rect: dom.Rect instance-attribute

__init__(previous_rect, current_rect, node_id=None)

from_json(json) classmethod

Source code in zendriver/cdp/performance_timeline.py
@classmethod
def from_json(cls, json: T_JSON_DICT) -> LayoutShiftAttribution:
    return cls(
        previous_rect=dom.Rect.from_json(json["previousRect"]),
        current_rect=dom.Rect.from_json(json["currentRect"]),
        node_id=(
            dom.BackendNodeId.from_json(json["nodeId"])
            if json.get("nodeId", None) is not None
            else None
        ),
    )

to_json()

Source code in zendriver/cdp/performance_timeline.py
def to_json(self) -> T_JSON_DICT:
    json: T_JSON_DICT = dict()
    json["previousRect"] = self.previous_rect.to_json()
    json["currentRect"] = self.current_rect.to_json()
    if self.node_id is not None:
        json["nodeId"] = self.node_id.to_json()
    return json

TimelineEvent dataclass

Source code in zendriver/cdp/performance_timeline.py
@dataclass
class TimelineEvent:
    #: Identifies the frame that this event is related to. Empty for non-frame targets.
    frame_id: page.FrameId

    #: The event type, as specified in https://w3c.github.io/performance-timeline/#dom-performanceentry-entrytype
    #: This determines which of the optional "details" fields is present.
    type_: str

    #: Name may be empty depending on the type.
    name: str

    #: Time in seconds since Epoch, monotonically increasing within document lifetime.
    time: network.TimeSinceEpoch

    #: Event duration, if applicable.
    duration: typing.Optional[float] = None

    lcp_details: typing.Optional[LargestContentfulPaint] = None

    layout_shift_details: typing.Optional[LayoutShift] = None

    def to_json(self) -> T_JSON_DICT:
        json: T_JSON_DICT = dict()
        json["frameId"] = self.frame_id.to_json()
        json["type"] = self.type_
        json["name"] = self.name
        json["time"] = self.time.to_json()
        if self.duration is not None:
            json["duration"] = self.duration
        if self.lcp_details is not None:
            json["lcpDetails"] = self.lcp_details.to_json()
        if self.layout_shift_details is not None:
            json["layoutShiftDetails"] = self.layout_shift_details.to_json()
        return json

    @classmethod
    def from_json(cls, json: T_JSON_DICT) -> TimelineEvent:
        return cls(
            frame_id=page.FrameId.from_json(json["frameId"]),
            type_=str(json["type"]),
            name=str(json["name"]),
            time=network.TimeSinceEpoch.from_json(json["time"]),
            duration=(
                float(json["duration"])
                if json.get("duration", None) is not None
                else None
            ),
            lcp_details=(
                LargestContentfulPaint.from_json(json["lcpDetails"])
                if json.get("lcpDetails", None) is not None
                else None
            ),
            layout_shift_details=(
                LayoutShift.from_json(json["layoutShiftDetails"])
                if json.get("layoutShiftDetails", None) is not None
                else None
            ),
        )

duration: typing.Optional[float] = None class-attribute instance-attribute

frame_id: page.FrameId instance-attribute

layout_shift_details: typing.Optional[LayoutShift] = None class-attribute instance-attribute

lcp_details: typing.Optional[LargestContentfulPaint] = None class-attribute instance-attribute

name: str instance-attribute

time: network.TimeSinceEpoch instance-attribute

type_: str instance-attribute

__init__(frame_id, type_, name, time, duration=None, lcp_details=None, layout_shift_details=None)

from_json(json) classmethod

Source code in zendriver/cdp/performance_timeline.py
@classmethod
def from_json(cls, json: T_JSON_DICT) -> TimelineEvent:
    return cls(
        frame_id=page.FrameId.from_json(json["frameId"]),
        type_=str(json["type"]),
        name=str(json["name"]),
        time=network.TimeSinceEpoch.from_json(json["time"]),
        duration=(
            float(json["duration"])
            if json.get("duration", None) is not None
            else None
        ),
        lcp_details=(
            LargestContentfulPaint.from_json(json["lcpDetails"])
            if json.get("lcpDetails", None) is not None
            else None
        ),
        layout_shift_details=(
            LayoutShift.from_json(json["layoutShiftDetails"])
            if json.get("layoutShiftDetails", None) is not None
            else None
        ),
    )

to_json()

Source code in zendriver/cdp/performance_timeline.py
def to_json(self) -> T_JSON_DICT:
    json: T_JSON_DICT = dict()
    json["frameId"] = self.frame_id.to_json()
    json["type"] = self.type_
    json["name"] = self.name
    json["time"] = self.time.to_json()
    if self.duration is not None:
        json["duration"] = self.duration
    if self.lcp_details is not None:
        json["lcpDetails"] = self.lcp_details.to_json()
    if self.layout_shift_details is not None:
        json["layoutShiftDetails"] = self.layout_shift_details.to_json()
    return json

TimelineEventAdded dataclass

Sent when a performance timeline event is added. See reportPerformanceTimeline method.

Source code in zendriver/cdp/performance_timeline.py
@event_class("PerformanceTimeline.timelineEventAdded")
@dataclass
class TimelineEventAdded:
    """
    Sent when a performance timeline event is added. See reportPerformanceTimeline method.
    """

    event: TimelineEvent

    @classmethod
    def from_json(cls, json: T_JSON_DICT) -> TimelineEventAdded:
        return cls(event=TimelineEvent.from_json(json["event"]))

event: TimelineEvent instance-attribute

__init__(event)

from_json(json) classmethod

Source code in zendriver/cdp/performance_timeline.py
@classmethod
def from_json(cls, json: T_JSON_DICT) -> TimelineEventAdded:
    return cls(event=TimelineEvent.from_json(json["event"]))

enable(event_types)

Previously buffered events would be reported before method returns. See also: timelineEventAdded

Parameters:

Name Type Description Default
event_types List[str]

The types of event to report, as specified in https://w3c.github.io/performance-timeline/#dom-performanceentry-entrytype The specified filter overrides any previous filters, passing empty filter disables recording. Note that not all types exposed to the web platform are currently supported.

required
Source code in zendriver/cdp/performance_timeline.py
def enable(
    event_types: typing.List[str],
) -> typing.Generator[T_JSON_DICT, T_JSON_DICT, None]:
    """
    Previously buffered events would be reported before method returns.
    See also: timelineEventAdded

    :param event_types: The types of event to report, as specified in https://w3c.github.io/performance-timeline/#dom-performanceentry-entrytype The specified filter overrides any previous filters, passing empty filter disables recording. Note that not all types exposed to the web platform are currently supported.
    """
    params: T_JSON_DICT = dict()
    params["eventTypes"] = [i for i in event_types]
    cmd_dict: T_JSON_DICT = {
        "method": "PerformanceTimeline.enable",
        "params": params,
    }
    json = yield cmd_dict