You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

262 lines
6.6 KiB
Python

# DO NOT EDIT THIS FILE!
#
# This file is generated from the CDP specification. If you need to make
# changes, edit the generator and regenerate all of the modules.
#
# CDP domain: Memory (experimental)
from __future__ import annotations
from .util import event_class, T_JSON_DICT
from dataclasses import dataclass
import enum
import typing
class PressureLevel(enum.Enum):
'''
Memory pressure level.
'''
MODERATE = "moderate"
CRITICAL = "critical"
def to_json(self):
return self.value
@classmethod
def from_json(cls, json):
return cls(json)
@dataclass
class SamplingProfileNode:
'''
Heap profile sample.
'''
#: Size of the sampled allocation.
size: float
#: Total bytes attributed to this sample.
total: float
#: Execution stack at the point of allocation.
stack: typing.List[str]
def to_json(self):
json = dict()
json['size'] = self.size
json['total'] = self.total
json['stack'] = [i for i in self.stack]
return json
@classmethod
def from_json(cls, json):
return cls(
size=float(json['size']),
total=float(json['total']),
stack=[str(i) for i in json['stack']],
)
@dataclass
class SamplingProfile:
'''
Array of heap profile samples.
'''
samples: typing.List[SamplingProfileNode]
modules: typing.List[Module]
def to_json(self):
json = dict()
json['samples'] = [i.to_json() for i in self.samples]
json['modules'] = [i.to_json() for i in self.modules]
return json
@classmethod
def from_json(cls, json):
return cls(
samples=[SamplingProfileNode.from_json(i) for i in json['samples']],
modules=[Module.from_json(i) for i in json['modules']],
)
@dataclass
class Module:
'''
Executable module information
'''
#: Name of the module.
name: str
#: UUID of the module.
uuid: str
#: Base address where the module is loaded into memory. Encoded as a decimal
#: or hexadecimal (0x prefixed) string.
base_address: str
#: Size of the module in bytes.
size: float
def to_json(self):
json = dict()
json['name'] = self.name
json['uuid'] = self.uuid
json['baseAddress'] = self.base_address
json['size'] = self.size
return json
@classmethod
def from_json(cls, json):
return cls(
name=str(json['name']),
uuid=str(json['uuid']),
base_address=str(json['baseAddress']),
size=float(json['size']),
)
def get_dom_counters() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,typing.Tuple[int, int, int]]:
'''
:returns: A tuple with the following items:
0. **documents** -
1. **nodes** -
2. **jsEventListeners** -
'''
cmd_dict: T_JSON_DICT = {
'method': 'Memory.getDOMCounters',
}
json = yield cmd_dict
return (
int(json['documents']),
int(json['nodes']),
int(json['jsEventListeners'])
)
def prepare_for_leak_detection() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
cmd_dict: T_JSON_DICT = {
'method': 'Memory.prepareForLeakDetection',
}
json = yield cmd_dict
def forcibly_purge_java_script_memory() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Simulate OomIntervention by purging V8 memory.
'''
cmd_dict: T_JSON_DICT = {
'method': 'Memory.forciblyPurgeJavaScriptMemory',
}
json = yield cmd_dict
def set_pressure_notifications_suppressed(
suppressed: bool
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Enable/disable suppressing memory pressure notifications in all processes.
:param suppressed: If true, memory pressure notifications will be suppressed.
'''
params: T_JSON_DICT = dict()
params['suppressed'] = suppressed
cmd_dict: T_JSON_DICT = {
'method': 'Memory.setPressureNotificationsSuppressed',
'params': params,
}
json = yield cmd_dict
def simulate_pressure_notification(
level: PressureLevel
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Simulate a memory pressure notification in all processes.
:param level: Memory pressure level of the notification.
'''
params: T_JSON_DICT = dict()
params['level'] = level.to_json()
cmd_dict: T_JSON_DICT = {
'method': 'Memory.simulatePressureNotification',
'params': params,
}
json = yield cmd_dict
def start_sampling(
sampling_interval: typing.Optional[int] = None,
suppress_randomness: typing.Optional[bool] = None
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Start collecting native memory profile.
:param sampling_interval: *(Optional)* Average number of bytes between samples.
:param suppress_randomness: *(Optional)* Do not randomize intervals between samples.
'''
params: T_JSON_DICT = dict()
if sampling_interval is not None:
params['samplingInterval'] = sampling_interval
if suppress_randomness is not None:
params['suppressRandomness'] = suppress_randomness
cmd_dict: T_JSON_DICT = {
'method': 'Memory.startSampling',
'params': params,
}
json = yield cmd_dict
def stop_sampling() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Stop collecting native memory profile.
'''
cmd_dict: T_JSON_DICT = {
'method': 'Memory.stopSampling',
}
json = yield cmd_dict
def get_all_time_sampling_profile() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,SamplingProfile]:
'''
Retrieve native memory allocations profile
collected since renderer process startup.
:returns:
'''
cmd_dict: T_JSON_DICT = {
'method': 'Memory.getAllTimeSamplingProfile',
}
json = yield cmd_dict
return SamplingProfile.from_json(json['profile'])
def get_browser_sampling_profile() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,SamplingProfile]:
'''
Retrieve native memory allocations profile
collected since browser process startup.
:returns:
'''
cmd_dict: T_JSON_DICT = {
'method': 'Memory.getBrowserSamplingProfile',
}
json = yield cmd_dict
return SamplingProfile.from_json(json['profile'])
def get_sampling_profile() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,SamplingProfile]:
'''
Retrieve native memory allocations profile collected since last
``startSampling`` call.
:returns:
'''
cmd_dict: T_JSON_DICT = {
'method': 'Memory.getSamplingProfile',
}
json = yield cmd_dict
return SamplingProfile.from_json(json['profile'])