Merge branch 'move-datamode-ownership-to-eventhandler' into 'master'
Move DataModel ownership to EventHandler See merge request micro-ROS/ros_tracing/tracetools_analysis!45
This commit is contained in:
commit
d35c4c3b51
5 changed files with 18 additions and 31 deletions
|
@ -27,6 +27,8 @@ from tracetools_read import DictEvent
|
||||||
from tracetools_read import get_event_name
|
from tracetools_read import get_event_name
|
||||||
from tracetools_read import get_field
|
from tracetools_read import get_field
|
||||||
|
|
||||||
|
from ..data_model import DataModel
|
||||||
|
|
||||||
|
|
||||||
class EventMetadata():
|
class EventMetadata():
|
||||||
"""Container for event metadata."""
|
"""Container for event metadata."""
|
||||||
|
@ -105,27 +107,29 @@ class EventHandler(Dependant):
|
||||||
"""
|
"""
|
||||||
Base event handling class.
|
Base event handling class.
|
||||||
|
|
||||||
Provides handling functions for some events, depending on the name.
|
Provides handling functions for some events, depending on the name. Passes that on to a data
|
||||||
Passes that on to a data model. To be subclassed.
|
model. Should be subclassed, but it is not necessary since the handling functions can be
|
||||||
|
anything; therefore it does not raise any error if it is directly instantiated.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
handler_map: HandlerMap,
|
handler_map: HandlerMap,
|
||||||
|
data_model: DataModel = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Create an EventHandler.
|
Create an EventHandler.
|
||||||
|
|
||||||
TODO make subclasses pass on their *DataModel to this class
|
|
||||||
|
|
||||||
:param handler_map: the mapping from event name to handling method
|
:param handler_map: the mapping from event name to handling method
|
||||||
|
:param data_model: the data model
|
||||||
"""
|
"""
|
||||||
assert handler_map is not None and len(handler_map) > 0, \
|
assert handler_map is not None and len(handler_map) > 0, \
|
||||||
f'empty map: {self.__class__.__name__}'
|
f'empty map: {self.__class__.__name__}'
|
||||||
assert all(required_name in handler_map.keys() for required_name in self.required_events())
|
assert all(required_name in handler_map.keys() for required_name in self.required_events())
|
||||||
self._handler_map = handler_map
|
self._handler_map = handler_map
|
||||||
|
self._data_model = data_model
|
||||||
self._processor = None
|
self._processor = None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -134,9 +138,9 @@ class EventHandler(Dependant):
|
||||||
return self._handler_map
|
return self._handler_map
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def data(self) -> None:
|
def data(self) -> Union[DataModel, None]:
|
||||||
"""Get the data model."""
|
"""Get the data model."""
|
||||||
return None
|
return self._data_model
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def processor(self) -> 'Processor':
|
def processor(self) -> 'Processor':
|
||||||
|
|
|
@ -43,11 +43,10 @@ class CpuTimeHandler(EventHandler):
|
||||||
}
|
}
|
||||||
super().__init__(
|
super().__init__(
|
||||||
handler_map=handler_map,
|
handler_map=handler_map,
|
||||||
|
data_model=CpuTimeDataModel(),
|
||||||
**kwargs,
|
**kwargs,
|
||||||
)
|
)
|
||||||
|
|
||||||
self._data_model = CpuTimeDataModel()
|
|
||||||
|
|
||||||
# Temporary buffers
|
# Temporary buffers
|
||||||
# cpu_id -> start timestamp of the running thread
|
# cpu_id -> start timestamp of the running thread
|
||||||
self._cpu_start: Dict[int, int] = {}
|
self._cpu_start: Dict[int, int] = {}
|
||||||
|
@ -58,10 +57,6 @@ class CpuTimeHandler(EventHandler):
|
||||||
'sched_switch',
|
'sched_switch',
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
|
||||||
def data(self) -> CpuTimeDataModel:
|
|
||||||
return self._data_model
|
|
||||||
|
|
||||||
def _handle_sched_switch(
|
def _handle_sched_switch(
|
||||||
self, event: Dict, metadata: EventMetadata
|
self, event: Dict, metadata: EventMetadata
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
|
@ -32,14 +32,11 @@ class MemoryUsageHandler(EventHandler):
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> None:
|
) -> None:
|
||||||
if type(self) is MemoryUsageHandler:
|
if type(self) is MemoryUsageHandler:
|
||||||
raise RuntimeError('Do not instanciate MemoryUsageHandler directly!')
|
raise RuntimeError('Do not instantiate directly!')
|
||||||
super().__init__(**kwargs)
|
super().__init__(
|
||||||
|
data_model=MemoryUsageDataModel(),
|
||||||
self._data_model = MemoryUsageDataModel()
|
**kwargs,
|
||||||
|
)
|
||||||
@property
|
|
||||||
def data(self) -> MemoryUsageDataModel:
|
|
||||||
return self._data_model
|
|
||||||
|
|
||||||
def _update(
|
def _update(
|
||||||
self,
|
self,
|
||||||
|
|
|
@ -66,10 +66,10 @@ class ProfileHandler(EventHandler):
|
||||||
}
|
}
|
||||||
super().__init__(
|
super().__init__(
|
||||||
handler_map=handler_map,
|
handler_map=handler_map,
|
||||||
|
data_model=ProfileDataModel(),
|
||||||
**kwargs,
|
**kwargs,
|
||||||
)
|
)
|
||||||
|
|
||||||
self._data_model = ProfileDataModel()
|
|
||||||
self._address_to_func = {
|
self._address_to_func = {
|
||||||
self.addr_to_int(addr): name for addr, name in address_to_func.items()
|
self.addr_to_int(addr): name for addr, name in address_to_func.items()
|
||||||
}
|
}
|
||||||
|
@ -100,10 +100,6 @@ class ProfileHandler(EventHandler):
|
||||||
"""Transform an address into an `int` if it's a hex `str`."""
|
"""Transform an address into an `int` if it's a hex `str`."""
|
||||||
return int(addr, 16) if isinstance(addr, str) else addr
|
return int(addr, 16) if isinstance(addr, str) else addr
|
||||||
|
|
||||||
@property
|
|
||||||
def data(self) -> ProfileDataModel:
|
|
||||||
return self._data_model
|
|
||||||
|
|
||||||
def _handle_sched_switch(
|
def _handle_sched_switch(
|
||||||
self, event: Dict, metadata: EventMetadata
|
self, event: Dict, metadata: EventMetadata
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
|
@ -69,11 +69,10 @@ class Ros2Handler(EventHandler):
|
||||||
}
|
}
|
||||||
super().__init__(
|
super().__init__(
|
||||||
handler_map=handler_map,
|
handler_map=handler_map,
|
||||||
|
data_model=Ros2DataModel(),
|
||||||
**kwargs,
|
**kwargs,
|
||||||
)
|
)
|
||||||
|
|
||||||
self._data_model = Ros2DataModel()
|
|
||||||
|
|
||||||
# Temporary buffers
|
# Temporary buffers
|
||||||
self._callback_instances = {}
|
self._callback_instances = {}
|
||||||
|
|
||||||
|
@ -83,10 +82,6 @@ class Ros2Handler(EventHandler):
|
||||||
'ros2:rcl_init',
|
'ros2:rcl_init',
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
|
||||||
def data(self) -> Ros2DataModel:
|
|
||||||
return self._data_model
|
|
||||||
|
|
||||||
def _handle_rcl_init(
|
def _handle_rcl_init(
|
||||||
self, event: Dict, metadata: EventMetadata,
|
self, event: Dict, metadata: EventMetadata,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue