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.

388 lines
12 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: HeapProfiler (experimental)
from __future__ import annotations
from .util import event_class, T_JSON_DICT
from dataclasses import dataclass
import enum
import typing
from . import runtime
class HeapSnapshotObjectId(str):
'''
Heap snapshot object id.
'''
def to_json(self) -> str:
return self
@classmethod
def from_json(cls, json: str) -> HeapSnapshotObjectId:
return cls(json)
def __repr__(self):
return 'HeapSnapshotObjectId({})'.format(super().__repr__())
@dataclass
class SamplingHeapProfileNode:
'''
Sampling Heap Profile node. Holds callsite information, allocation statistics and child nodes.
'''
#: Function location.
call_frame: runtime.CallFrame
#: Allocations size in bytes for the node excluding children.
self_size: float
#: Node id. Ids are unique across all profiles collected between startSampling and stopSampling.
id_: int
#: Child nodes.
children: typing.List[SamplingHeapProfileNode]
def to_json(self):
json = dict()
json['callFrame'] = self.call_frame.to_json()
json['selfSize'] = self.self_size
json['id'] = self.id_
json['children'] = [i.to_json() for i in self.children]
return json
@classmethod
def from_json(cls, json):
return cls(
call_frame=runtime.CallFrame.from_json(json['callFrame']),
self_size=float(json['selfSize']),
id_=int(json['id']),
children=[SamplingHeapProfileNode.from_json(i) for i in json['children']],
)
@dataclass
class SamplingHeapProfileSample:
'''
A single sample from a sampling profile.
'''
#: Allocation size in bytes attributed to the sample.
size: float
#: Id of the corresponding profile tree node.
node_id: int
#: Time-ordered sample ordinal number. It is unique across all profiles retrieved
#: between startSampling and stopSampling.
ordinal: float
def to_json(self):
json = dict()
json['size'] = self.size
json['nodeId'] = self.node_id
json['ordinal'] = self.ordinal
return json
@classmethod
def from_json(cls, json):
return cls(
size=float(json['size']),
node_id=int(json['nodeId']),
ordinal=float(json['ordinal']),
)
@dataclass
class SamplingHeapProfile:
'''
Sampling profile.
'''
head: SamplingHeapProfileNode
samples: typing.List[SamplingHeapProfileSample]
def to_json(self):
json = dict()
json['head'] = self.head.to_json()
json['samples'] = [i.to_json() for i in self.samples]
return json
@classmethod
def from_json(cls, json):
return cls(
head=SamplingHeapProfileNode.from_json(json['head']),
samples=[SamplingHeapProfileSample.from_json(i) for i in json['samples']],
)
def add_inspected_heap_object(
heap_object_id: HeapSnapshotObjectId
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
Enables console to refer to the node with given id via $x (see Command Line API for more details
$x functions).
:param heap_object_id: Heap snapshot object id to be accessible by means of $x command line API.
'''
params: T_JSON_DICT = dict()
params['heapObjectId'] = heap_object_id.to_json()
cmd_dict: T_JSON_DICT = {
'method': 'HeapProfiler.addInspectedHeapObject',
'params': params,
}
json = yield cmd_dict
def collect_garbage() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
cmd_dict: T_JSON_DICT = {
'method': 'HeapProfiler.collectGarbage',
}
json = yield cmd_dict
def disable() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
cmd_dict: T_JSON_DICT = {
'method': 'HeapProfiler.disable',
}
json = yield cmd_dict
def enable() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
cmd_dict: T_JSON_DICT = {
'method': 'HeapProfiler.enable',
}
json = yield cmd_dict
def get_heap_object_id(
object_id: runtime.RemoteObjectId
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,HeapSnapshotObjectId]:
'''
:param object_id: Identifier of the object to get heap object id for.
:returns: Id of the heap snapshot object corresponding to the passed remote object id.
'''
params: T_JSON_DICT = dict()
params['objectId'] = object_id.to_json()
cmd_dict: T_JSON_DICT = {
'method': 'HeapProfiler.getHeapObjectId',
'params': params,
}
json = yield cmd_dict
return HeapSnapshotObjectId.from_json(json['heapSnapshotObjectId'])
def get_object_by_heap_object_id(
object_id: HeapSnapshotObjectId,
object_group: typing.Optional[str] = None
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,runtime.RemoteObject]:
'''
:param object_id:
:param object_group: *(Optional)* Symbolic group name that can be used to release multiple objects.
:returns: Evaluation result.
'''
params: T_JSON_DICT = dict()
params['objectId'] = object_id.to_json()
if object_group is not None:
params['objectGroup'] = object_group
cmd_dict: T_JSON_DICT = {
'method': 'HeapProfiler.getObjectByHeapObjectId',
'params': params,
}
json = yield cmd_dict
return runtime.RemoteObject.from_json(json['result'])
def get_sampling_profile() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,SamplingHeapProfile]:
'''
:returns: Return the sampling profile being collected.
'''
cmd_dict: T_JSON_DICT = {
'method': 'HeapProfiler.getSamplingProfile',
}
json = yield cmd_dict
return SamplingHeapProfile.from_json(json['profile'])
def start_sampling(
sampling_interval: typing.Optional[float] = None
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
:param sampling_interval: *(Optional)* Average sample interval in bytes. Poisson distribution is used for the intervals. The default value is 32768 bytes.
'''
params: T_JSON_DICT = dict()
if sampling_interval is not None:
params['samplingInterval'] = sampling_interval
cmd_dict: T_JSON_DICT = {
'method': 'HeapProfiler.startSampling',
'params': params,
}
json = yield cmd_dict
def start_tracking_heap_objects(
track_allocations: typing.Optional[bool] = None
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
:param track_allocations: *(Optional)*
'''
params: T_JSON_DICT = dict()
if track_allocations is not None:
params['trackAllocations'] = track_allocations
cmd_dict: T_JSON_DICT = {
'method': 'HeapProfiler.startTrackingHeapObjects',
'params': params,
}
json = yield cmd_dict
def stop_sampling() -> typing.Generator[T_JSON_DICT,T_JSON_DICT,SamplingHeapProfile]:
'''
:returns: Recorded sampling heap profile.
'''
cmd_dict: T_JSON_DICT = {
'method': 'HeapProfiler.stopSampling',
}
json = yield cmd_dict
return SamplingHeapProfile.from_json(json['profile'])
def stop_tracking_heap_objects(
report_progress: typing.Optional[bool] = None,
treat_global_objects_as_roots: typing.Optional[bool] = None,
capture_numeric_value: typing.Optional[bool] = None,
expose_internals: typing.Optional[bool] = None
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
:param report_progress: *(Optional)* If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken when the tracking is stopped.
:param treat_global_objects_as_roots: *(Optional)* Deprecated in favor of ```exposeInternals```.
:param capture_numeric_value: *(Optional)* If true, numerical values are included in the snapshot
:param expose_internals: **(EXPERIMENTAL)** *(Optional)* If true, exposes internals of the snapshot.
'''
params: T_JSON_DICT = dict()
if report_progress is not None:
params['reportProgress'] = report_progress
if treat_global_objects_as_roots is not None:
params['treatGlobalObjectsAsRoots'] = treat_global_objects_as_roots
if capture_numeric_value is not None:
params['captureNumericValue'] = capture_numeric_value
if expose_internals is not None:
params['exposeInternals'] = expose_internals
cmd_dict: T_JSON_DICT = {
'method': 'HeapProfiler.stopTrackingHeapObjects',
'params': params,
}
json = yield cmd_dict
def take_heap_snapshot(
report_progress: typing.Optional[bool] = None,
treat_global_objects_as_roots: typing.Optional[bool] = None,
capture_numeric_value: typing.Optional[bool] = None,
expose_internals: typing.Optional[bool] = None
) -> typing.Generator[T_JSON_DICT,T_JSON_DICT,None]:
'''
:param report_progress: *(Optional)* If true 'reportHeapSnapshotProgress' events will be generated while snapshot is being taken.
:param treat_global_objects_as_roots: *(Optional)* If true, a raw snapshot without artificial roots will be generated. Deprecated in favor of ```exposeInternals```.
:param capture_numeric_value: *(Optional)* If true, numerical values are included in the snapshot
:param expose_internals: **(EXPERIMENTAL)** *(Optional)* If true, exposes internals of the snapshot.
'''
params: T_JSON_DICT = dict()
if report_progress is not None:
params['reportProgress'] = report_progress
if treat_global_objects_as_roots is not None:
params['treatGlobalObjectsAsRoots'] = treat_global_objects_as_roots
if capture_numeric_value is not None:
params['captureNumericValue'] = capture_numeric_value
if expose_internals is not None:
params['exposeInternals'] = expose_internals
cmd_dict: T_JSON_DICT = {
'method': 'HeapProfiler.takeHeapSnapshot',
'params': params,
}
json = yield cmd_dict
@event_class('HeapProfiler.addHeapSnapshotChunk')
@dataclass
class AddHeapSnapshotChunk:
chunk: str
@classmethod
def from_json(cls, json: T_JSON_DICT) -> AddHeapSnapshotChunk:
return cls(
chunk=str(json['chunk'])
)
@event_class('HeapProfiler.heapStatsUpdate')
@dataclass
class HeapStatsUpdate:
'''
If heap objects tracking has been started then backend may send update for one or more fragments
'''
#: An array of triplets. Each triplet describes a fragment. The first integer is the fragment
#: index, the second integer is a total count of objects for the fragment, the third integer is
#: a total size of the objects for the fragment.
stats_update: typing.List[int]
@classmethod
def from_json(cls, json: T_JSON_DICT) -> HeapStatsUpdate:
return cls(
stats_update=[int(i) for i in json['statsUpdate']]
)
@event_class('HeapProfiler.lastSeenObjectId')
@dataclass
class LastSeenObjectId:
'''
If heap objects tracking has been started then backend regularly sends a current value for last
seen object id and corresponding timestamp. If the were changes in the heap since last event
then one or more heapStatsUpdate events will be sent before a new lastSeenObjectId event.
'''
last_seen_object_id: int
timestamp: float
@classmethod
def from_json(cls, json: T_JSON_DICT) -> LastSeenObjectId:
return cls(
last_seen_object_id=int(json['lastSeenObjectId']),
timestamp=float(json['timestamp'])
)
@event_class('HeapProfiler.reportHeapSnapshotProgress')
@dataclass
class ReportHeapSnapshotProgress:
done: int
total: int
finished: typing.Optional[bool]
@classmethod
def from_json(cls, json: T_JSON_DICT) -> ReportHeapSnapshotProgress:
return cls(
done=int(json['done']),
total=int(json['total']),
finished=bool(json['finished']) if 'finished' in json else None
)
@event_class('HeapProfiler.resetProfiles')
@dataclass
class ResetProfiles:
@classmethod
def from_json(cls, json: T_JSON_DICT) -> ResetProfiles:
return cls(
)