1a69a01cdSopenharmony_ci/* 2a69a01cdSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3a69a01cdSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4a69a01cdSopenharmony_ci * you may not use this file except in compliance with the License. 5a69a01cdSopenharmony_ci * You may obtain a copy of the License at 6a69a01cdSopenharmony_ci * 7a69a01cdSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8a69a01cdSopenharmony_ci * 9a69a01cdSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10a69a01cdSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11a69a01cdSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12a69a01cdSopenharmony_ci * See the License for the specific language governing permissions and 13a69a01cdSopenharmony_ci * limitations under the License. 14a69a01cdSopenharmony_ci */ 15a69a01cdSopenharmony_ci 16a69a01cdSopenharmony_ci#ifndef TEST_WUKONG_STATISTICS_COMPONMENT_H 17a69a01cdSopenharmony_ci#define TEST_WUKONG_STATISTICS_COMPONMENT_H 18a69a01cdSopenharmony_ci 19a69a01cdSopenharmony_ci#include <string> 20a69a01cdSopenharmony_ci 21a69a01cdSopenharmony_ci#include "statistics.h" 22a69a01cdSopenharmony_ci#include "wukong_define.h" 23a69a01cdSopenharmony_ci 24a69a01cdSopenharmony_cinamespace OHOS { 25a69a01cdSopenharmony_cinamespace WuKong { 26a69a01cdSopenharmony_ci 27a69a01cdSopenharmony_ciclass ComponmentStatisticsRecord { 28a69a01cdSopenharmony_cipublic: 29a69a01cdSopenharmony_ci std::string componmentType_ = ""; 30a69a01cdSopenharmony_ci uint32_t execTimes_ = 0; 31a69a01cdSopenharmony_ci uint32_t inputedTimes_ = 0; 32a69a01cdSopenharmony_ci uint32_t expectInputTimes_ = 0; 33a69a01cdSopenharmony_ci}; 34a69a01cdSopenharmony_ci 35a69a01cdSopenharmony_ciclass ComponmentStatisticsMsg { 36a69a01cdSopenharmony_cipublic: 37a69a01cdSopenharmony_ci /* 38a69a01cdSopenharmony_ci * @brief find componmentType position in componmentTypes_ 39a69a01cdSopenharmony_ci * @param componmentType 40a69a01cdSopenharmony_ci * @return index 41a69a01cdSopenharmony_ci */ 42a69a01cdSopenharmony_ci uint32_t ComponmentTypesIndex(const std::string &componmentType) 43a69a01cdSopenharmony_ci { 44a69a01cdSopenharmony_ci uint32_t index = componmentTypes_.size(); 45a69a01cdSopenharmony_ci TRACK_LOG_STR("componmentTypes_.size{%d}", index); 46a69a01cdSopenharmony_ci uint32_t findIndex = WuKongUtil::GetInstance()->FindElement(componmentTypes_, componmentType); 47a69a01cdSopenharmony_ci if (findIndex != INVALIDVALUE) { 48a69a01cdSopenharmony_ci DEBUG_LOG_STR("findIndex{%d}", findIndex); 49a69a01cdSopenharmony_ci index = findIndex; 50a69a01cdSopenharmony_ci } 51a69a01cdSopenharmony_ci TRACK_LOG_STR("current componmentType find index{%d}", index); 52a69a01cdSopenharmony_ci return index; 53a69a01cdSopenharmony_ci } 54a69a01cdSopenharmony_ci std::vector<std::string> componmentTypes_; 55a69a01cdSopenharmony_ci std::vector<std::shared_ptr<ComponmentStatisticsRecord>> componmentTypeRecord_; 56a69a01cdSopenharmony_ci uint32_t componmentTypeTotal_ = 0; 57a69a01cdSopenharmony_ci}; 58a69a01cdSopenharmony_ciclass StatisticsComponment : public Statistics { 59a69a01cdSopenharmony_cipublic: 60a69a01cdSopenharmony_ci StatisticsComponment() = default; 61a69a01cdSopenharmony_ci ~StatisticsComponment() = default; 62a69a01cdSopenharmony_ci void StatisticsDetail(std::vector<std::map<std::string, std::string>> srcDatas, 63a69a01cdSopenharmony_ci std::map<std::string, std::shared_ptr<Table>> &destTables); 64a69a01cdSopenharmony_ci 65a69a01cdSopenharmony_ciprivate: 66a69a01cdSopenharmony_ci /* 67a69a01cdSopenharmony_ci * @brief statistics msg update to line 68a69a01cdSopenharmony_ci * @param ComponmentStatisticsRecordPtr store statistics msg 69a69a01cdSopenharmony_ci * @param componmentTypeTotal Proportion to calculate the total 70a69a01cdSopenharmony_ci * @param line output 71a69a01cdSopenharmony_ci * @return void 72a69a01cdSopenharmony_ci */ 73a69a01cdSopenharmony_ci void UpdateLine(std::shared_ptr<ComponmentStatisticsRecord> ComponmentStatisticsRecordPtr, uint32_t componmentTypeTotal, 74a69a01cdSopenharmony_ci std::vector<std::string> &line); 75a69a01cdSopenharmony_ci /* 76a69a01cdSopenharmony_ci * @brief Realize secondary classification and update statistics of source data through bundleName and componment 77a69a01cdSopenharmony_ci * methods 78a69a01cdSopenharmony_ci * @param srcDatas filtered data 79a69a01cdSopenharmony_ci * @return void 80a69a01cdSopenharmony_ci */ 81a69a01cdSopenharmony_ci void SrcDatasPretreatment(std::vector<std::map<std::string, std::string>> srcDatas); 82a69a01cdSopenharmony_ci /* 83a69a01cdSopenharmony_ci * @brief Global Statistics for ComponmentTypesmethods 84a69a01cdSopenharmony_ci * @return void 85a69a01cdSopenharmony_ci */ 86a69a01cdSopenharmony_ci void GlobalComponmentTypeStatistics(); 87a69a01cdSopenharmony_ci 88a69a01cdSopenharmony_ci // bundle map ComponmentStatisticsMsgPtr 89a69a01cdSopenharmony_ci std::map<std::string, std::shared_ptr<ComponmentStatisticsMsg>> componmentStatisticsMsg_; 90a69a01cdSopenharmony_ci // all componmentType record for global statistics used 91a69a01cdSopenharmony_ci std::vector<std::string> globalComponmentTypes_; 92a69a01cdSopenharmony_ci std::vector<std::string> headers_ = {"type", "execTimes", "proportion", 93a69a01cdSopenharmony_ci "inputedTimes", "expectInputTimes", "coverage"}; 94a69a01cdSopenharmony_ci std::vector<std::vector<std::string>> record_; 95a69a01cdSopenharmony_ci uint32_t execCount_ = 0; 96a69a01cdSopenharmony_ci}; 97a69a01cdSopenharmony_ci} // namespace WuKong 98a69a01cdSopenharmony_ci} // namespace OHOS 99a69a01cdSopenharmony_ci#endif 100