1/*
2 * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15#ifndef SUBCOMMAND_LIST_H_
16#define SUBCOMMAND_LIST_H_
17
18#include <algorithm>
19#include <memory>
20#include <string>
21#include <vector>
22
23#include "debug_logger.h"
24#include "option.h"
25#include "perf_events.h"
26#include "subcommand.h"
27#include "utilities.h"
28
29namespace OHOS {
30namespace Developtools {
31namespace HiPerf {
32class SubCommandList : public SubCommand {
33public:
34    SubCommandList()
35        // clang-format off
36        : SubCommand("list", "List the supported event types.",
37        "Usage: hiperf list [event type name]\n"
38        "       List all supported event types on this devices.\n"
39        "   To list the events of a specific type, specify the type name\n"
40        "       hw          hardware events\n"
41        "       sw          software events\n"
42        "       tp          tracepoint events\n"
43        "       cache       hardware cache events\n"
44        "       raw         raw pmu events\n\n"
45        )
46    // clang-format on
47    {
48    }
49
50    bool OnSubCommand(std::vector<std::string> &args) override;
51
52    static void RegisterSubCommandList(void);
53
54private:
55    PerfEvents perfEvents_;
56
57    const std::map<std::string, perf_type_id> SUPPORT_NAME_OPTIONS = {
58        {"hw", PERF_TYPE_HARDWARE},    {"sw", PERF_TYPE_SOFTWARE}, {"tp", PERF_TYPE_TRACEPOINT},
59        {"cache", PERF_TYPE_HW_CACHE}, {"raw", PERF_TYPE_RAW},
60    };
61
62    bool ShowSupportEventsTypes(std::vector<perf_type_id> requestEventTypes);
63    void SetHM();
64};
65} // namespace HiPerf
66} // namespace Developtools
67} // namespace OHOS
68#endif // SUBCOMMAND_LIST_H_
69