* Copyright (c) 2024-2024 Huawei Device Co., Ltd.
* 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.
*/
#ifndef COMMAND_REPORTER_H_
#define COMMAND_REPORTER_H_
#include <string>
namespace OHOS::Developtools::HiPerf {
#define MAKE_ERROR_ITEM(GEN_ITEM) \
GEN_ITEM(NO_ERR), \
GEN_ITEM(PROCESS_CONTROL_FAIL), \
GEN_ITEM(PREPARE_SYS_KERNEL_FAIL), \
GEN_ITEM(PREPARE_PERF_EVENT_FAIL), \
GEN_ITEM(PREPARE_TACKING_FAIL), \
GEN_ITEM(CREATE_OUTPUT_FILE_FAIL), \
GEN_ITEM(PREPARE_VIRTUAL_RUNTIME_FAIL), \
GEN_ITEM(PREPARE_START_TRACKING_FAIL), \
GEN_ITEM(START_TRACKING_FAIL), \
GEN_ITEM(FINISH_WRITE_RECORD_FILE_FAIL), \
GEN_ITEM(POST_PROCESS_RECORD_FILE), \
GEN_ITEM(CHECK_RESTART_OPTION_FAIL), \
GEN_ITEM(CHECK_SELECT_CPU_PID_FAIL), \
GEN_ITEM(CHECK_STAT_OPTION_FAIL), \
GEN_ITEM(CHECK_APP_RUNNING_FAIL), \
GEN_ITEM(CHECK_OPTION_PID_FAIL), \
GEN_ITEM(CHECK_OPTION_PID_APP_FAIL), \
GEN_ITEM(PREPAIR_EVENTS_FAIL), \
GEN_ITEM(PREPARE_OUTPUT_FAIL), \
GEN_ITEM(LOAD_PERF_DATA_FAIL), \
GEN_ITEM(LOAD_SECOND_PERF_DATA_FAIL), \
GEN_ITEM(OUTPUT_REPORT_FAIL), \
GEN_ITEM(PREPARE_DUMP_OUTPUT_FAIL), \
GEN_ITEM(DUMP_ELF_FILE_ERROR), \
GEN_ITEM(DUMP_PROTO_FILE_ERROR), \
GEN_ITEM(ACCESS_DATA_FILE_FAIL), \
GEN_ITEM(OPEN_DATA_FILE_FAIL), \
GEN_ITEM(SET_SYMBOLS_PATH_FAIL), \
GEN_ITEM(OPTION_NOT_SUPPORT), \
GEN_ITEM(SUBCOMMAND_OPTIONS_ERROR), \
GEN_ITEM(CHECK_OUT_PUT_ERROR), \
GEN_ITEM(WRONG_CONTROL_CMD), \
GEN_ITEM(CHECK_DEBUG_APP_FAIL)
#define FOR_ERROR_ENUM(x) x
enum class HiperfError : int32_t {
MAKE_ERROR_ITEM(FOR_ERROR_ENUM)
};
class CommandReporter {
public:
explicit CommandReporter(const std::string& fullArgument);
~CommandReporter();
void ReportCommand();
std::string mainCommand_ = "";
std::string subCommand_ = "";
std::string caller_ = "";
std::string targetProcess_ = "";
HiperfError errorCode_ = HiperfError::NO_ERR;
private:
bool isReported_ = false;
CommandReporter(const CommandReporter&) = delete;
CommandReporter& operator=(const CommandReporter&) = delete;
CommandReporter(CommandReporter&&) = delete;
CommandReporter& operator=(CommandReporter&&) = delete;
};
}
#endif