Move *DataModel ownership to base EventHandler class

This commit is contained in:
Christophe Bedard 2020-01-01 00:11:27 -05:00
parent dc27e43d35
commit 7a1c2f0334
5 changed files with 14 additions and 28 deletions

View file

@ -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."""
@ -113,19 +115,20 @@ class EventHandler(Dependant):
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 +137,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':

View file

@ -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:

View file

@ -33,13 +33,10 @@ class MemoryUsageHandler(EventHandler):
) -> None: ) -> None:
if type(self) is MemoryUsageHandler: if type(self) is MemoryUsageHandler:
raise RuntimeError('Do not instanciate MemoryUsageHandler directly!') raise RuntimeError('Do not instanciate MemoryUsageHandler 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,

View file

@ -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:

View file

@ -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: