148f512ceSopenharmony_ci/* 248f512ceSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 348f512ceSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 448f512ceSopenharmony_ci * you may not use this file except in compliance with the License. 548f512ceSopenharmony_ci * You may obtain a copy of the License at 648f512ceSopenharmony_ci * 748f512ceSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 848f512ceSopenharmony_ci * 948f512ceSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1048f512ceSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1148f512ceSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1248f512ceSopenharmony_ci * See the License for the specific language governing permissions and 1348f512ceSopenharmony_ci * limitations under the License. 1448f512ceSopenharmony_ci */ 1548f512ceSopenharmony_ci 1648f512ceSopenharmony_ci#include <sys/utsname.h> 1748f512ceSopenharmony_ci#include "subcommand_list.h" 1848f512ceSopenharmony_ci 1948f512ceSopenharmony_ciusing namespace std; 2048f512ceSopenharmony_cinamespace OHOS { 2148f512ceSopenharmony_cinamespace Developtools { 2248f512ceSopenharmony_cinamespace HiPerf { 2348f512ceSopenharmony_cibool SubCommandList::OnSubCommand(vector<string> &args) 2448f512ceSopenharmony_ci{ 2548f512ceSopenharmony_ci vector<perf_type_id> requestEventTypes; 2648f512ceSopenharmony_ci 2748f512ceSopenharmony_ci SetHM(); 2848f512ceSopenharmony_ci 2948f512ceSopenharmony_ci if (args.empty()) { 3048f512ceSopenharmony_ci // all the list 3148f512ceSopenharmony_ci for (auto it : PERF_TYPES) { 3248f512ceSopenharmony_ci requestEventTypes.push_back(it.first); 3348f512ceSopenharmony_ci } 3448f512ceSopenharmony_ci } else { 3548f512ceSopenharmony_ci string requestEventType = args.front().c_str(); 3648f512ceSopenharmony_ci auto it = SUPPORT_NAME_OPTIONS.find(requestEventType); 3748f512ceSopenharmony_ci if (it == SUPPORT_NAME_OPTIONS.end()) { 3848f512ceSopenharmony_ci printf("not support option: '%s'\n", requestEventType.c_str()); 3948f512ceSopenharmony_ci return false; 4048f512ceSopenharmony_ci } else { 4148f512ceSopenharmony_ci requestEventTypes.push_back(it->second); 4248f512ceSopenharmony_ci } 4348f512ceSopenharmony_ci } 4448f512ceSopenharmony_ci ShowSupportEventsTypes(requestEventTypes); 4548f512ceSopenharmony_ci return true; 4648f512ceSopenharmony_ci} 4748f512ceSopenharmony_cibool SubCommandList::ShowSupportEventsTypes(vector<perf_type_id> requestEventTypes) 4848f512ceSopenharmony_ci{ 4948f512ceSopenharmony_ci // each type 5048f512ceSopenharmony_ci for (perf_type_id id : requestEventTypes) { 5148f512ceSopenharmony_ci // each config 5248f512ceSopenharmony_ci auto configs = perfEvents_.GetSupportEvents(id); 5348f512ceSopenharmony_ci printf("\nSupported events for %s:\n", PERF_TYPES.at(id).c_str()); 5448f512ceSopenharmony_ci for (auto config : configs) { 5548f512ceSopenharmony_ci printf("\t%s\n", config.second.c_str()); 5648f512ceSopenharmony_ci } 5748f512ceSopenharmony_ci if (configs.size() == 0) { 5848f512ceSopenharmony_ci return false; // support nothing 5948f512ceSopenharmony_ci } 6048f512ceSopenharmony_ci } 6148f512ceSopenharmony_ci std::cout << std::endl; 6248f512ceSopenharmony_ci return true; 6348f512ceSopenharmony_ci}; 6448f512ceSopenharmony_ci 6548f512ceSopenharmony_civoid SubCommandList::RegisterSubCommandList() 6648f512ceSopenharmony_ci{ 6748f512ceSopenharmony_ci SubCommand::RegisterSubCommand("list", make_unique<SubCommandList>()); 6848f512ceSopenharmony_ci} 6948f512ceSopenharmony_ci 7048f512ceSopenharmony_civoid SubCommandList::SetHM() 7148f512ceSopenharmony_ci{ 7248f512ceSopenharmony_ci utsname unameBuf; 7348f512ceSopenharmony_ci if ((uname(&unameBuf)) == 0) { 7448f512ceSopenharmony_ci std::string osrelease = unameBuf.release; 7548f512ceSopenharmony_ci isHM_ = osrelease.find(HMKERNEL) != std::string::npos; 7648f512ceSopenharmony_ci } 7748f512ceSopenharmony_ci perfEvents_.SetHM(isHM_); 7848f512ceSopenharmony_ci HLOGD("Set isHM_: %d", isHM_); 7948f512ceSopenharmony_ci} 8048f512ceSopenharmony_ci} // namespace HiPerf 8148f512ceSopenharmony_ci} // namespace Developtools 8248f512ceSopenharmony_ci} // namespace OHOS 83