perf jevents: Move json encoding to its own functions

Have dedicated encode functions rather than having them embedded in
MetricGroup. This is to provide some uniformity in the Metric ToXXX
routines.

Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: Thomas Falcon <thomas.falcon@intel.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
Ian Rogers 2025-12-02 09:50:05 -08:00 committed by Namhyung Kim
parent b90e94aed9
commit 3f31651a06

View File

@ -484,15 +484,6 @@ class Metric:
def ToMetricGroupDescriptions(self, root: bool = True) -> Dict[str, str]:
return {}
class _MetricJsonEncoder(json.JSONEncoder):
"""Special handling for Metric objects."""
def default(self, o):
if isinstance(o, Metric):
return o.ToPerfJson()
return json.JSONEncoder.default(self, o)
class MetricGroup:
"""A group of metrics.
@ -523,8 +514,11 @@ class MetricGroup:
return result
def ToPerfJson(self) -> str:
return json.dumps(sorted(self.Flatten()), indent=2, cls=_MetricJsonEncoder)
def ToPerfJson(self) -> List[Dict[str, str]]:
result = []
for x in sorted(self.Flatten()):
result.append(x.ToPerfJson())
return result
def ToMetricGroupDescriptions(self, root: bool = True) -> Dict[str, str]:
result = {self.name: self.description} if self.description else {}
@ -533,7 +527,23 @@ class MetricGroup:
return result
def __str__(self) -> str:
return self.ToPerfJson()
return str(self.ToPerfJson())
def JsonEncodeMetric(x: MetricGroup):
class MetricJsonEncoder(json.JSONEncoder):
"""Special handling for Metric objects."""
def default(self, o):
if isinstance(o, Metric) or isinstance(o, MetricGroup):
return o.ToPerfJson()
return json.JSONEncoder.default(self, o)
return json.dumps(x, indent=2, cls=MetricJsonEncoder)
def JsonEncodeMetricGroupDescriptions(x: MetricGroup):
return json.dumps(x.ToMetricGroupDescriptions(), indent=2)
class _RewriteIfExpToSelect(ast.NodeTransformer):