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_field
from ..data_model import DataModel
class EventMetadata():
"""Container for event metadata."""
@ -113,19 +115,20 @@ class EventHandler(Dependant):
self,
*,
handler_map: HandlerMap,
data_model: DataModel = None,
**kwargs,
) -> None:
"""
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 data_model: the data model
"""
assert handler_map is not None and len(handler_map) > 0, \
f'empty map: {self.__class__.__name__}'
assert all(required_name in handler_map.keys() for required_name in self.required_events())
self._handler_map = handler_map
self._data_model = data_model
self._processor = None
@property
@ -134,9 +137,9 @@ class EventHandler(Dependant):
return self._handler_map
@property
def data(self) -> None:
def data(self) -> Union[DataModel, None]:
"""Get the data model."""
return None
return self._data_model
@property
def processor(self) -> 'Processor':

View file

@ -43,11 +43,10 @@ class CpuTimeHandler(EventHandler):
}
super().__init__(
handler_map=handler_map,
data_model=CpuTimeDataModel(),
**kwargs,
)
self._data_model = CpuTimeDataModel()
# Temporary buffers
# cpu_id -> start timestamp of the running thread
self._cpu_start: Dict[int, int] = {}
@ -58,10 +57,6 @@ class CpuTimeHandler(EventHandler):
'sched_switch',
}
@property
def data(self) -> CpuTimeDataModel:
return self._data_model
def _handle_sched_switch(
self, event: Dict, metadata: EventMetadata
) -> None:

View file

@ -33,13 +33,10 @@ class MemoryUsageHandler(EventHandler):
) -> None:
if type(self) is MemoryUsageHandler:
raise RuntimeError('Do not instanciate MemoryUsageHandler directly!')
super().__init__(**kwargs)
self._data_model = MemoryUsageDataModel()
@property
def data(self) -> MemoryUsageDataModel:
return self._data_model
super().__init__(
data_model=MemoryUsageDataModel(),
**kwargs,
)
def _update(
self,

View file

@ -66,10 +66,10 @@ class ProfileHandler(EventHandler):
}
super().__init__(
handler_map=handler_map,
data_model=ProfileDataModel(),
**kwargs,
)
self._data_model = ProfileDataModel()
self._address_to_func = {
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`."""
return int(addr, 16) if isinstance(addr, str) else addr
@property
def data(self) -> ProfileDataModel:
return self._data_model
def _handle_sched_switch(
self, event: Dict, metadata: EventMetadata
) -> None:

View file

@ -69,11 +69,10 @@ class Ros2Handler(EventHandler):
}
super().__init__(
handler_map=handler_map,
data_model=Ros2DataModel(),
**kwargs,
)
self._data_model = Ros2DataModel()
# Temporary buffers
self._callback_instances = {}
@ -83,10 +82,6 @@ class Ros2Handler(EventHandler):
'ros2:rcl_init',
}
@property
def data(self) -> Ros2DataModel:
return self._data_model
def _handle_rcl_init(
self, event: Dict, metadata: EventMetadata,
) -> None: