diff options
Diffstat (limited to 'perf2cfg/perf2cfg/events.py')
-rw-r--r-- | perf2cfg/perf2cfg/events.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/perf2cfg/perf2cfg/events.py b/perf2cfg/perf2cfg/events.py new file mode 100644 index 00000000..ecc5d90a --- /dev/null +++ b/perf2cfg/perf2cfg/events.py @@ -0,0 +1,53 @@ +# Copyright (C) 2020 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Sorts event names according to a predefined order. + +Attributes: + EVENT_SORT_ORDER (List[str]): A list of event names sorted as they should + appear in the output CFG file. + EVENT_SORT_MAP (Dict[str, int]): A mapping of event names to their index in + the event sort order list. +""" + +from typing import Iterable, List + +EVENT_SORT_ORDER = [ + 'cpu-cycles', + 'stalled-cycles-frontend', + 'stalled-cycles-backend', + 'instructions', + 'branch-instructions', + 'branch-misses', + 'cache-references', + 'cache-misses', + 'task-clock', + 'context-switches', + 'page-faults', +] + +EVENT_SORT_MAP = {name: i for i, name in enumerate(EVENT_SORT_ORDER)} + + +def sort_event_names(event_names: Iterable[str]) -> List[str]: + """Sorts event names according to a predefined order. + + Args: + event_names (Iterable[str]): An iterable of event names. + + Returns: + List[str]: A list of sorted event names. + """ + default_index = len(EVENT_SORT_MAP) + return sorted(event_names, + key=lambda name: EVENT_SORT_MAP.get(name, default_index)) |