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
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(
|
|
|
|
)
|