1 /* 2 * Copyright (c) 2025 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 16 #include <gtest/gtest.h> 17 #include <map> 18 #include <sys/stat.h> 19 20 #ifdef __LP64__ 21 constexpr size_t BASELINE_BBOX_DETECTOR_PIPELINE = 4; 22 constexpr size_t BASELINE_BDFR_PLUGIN_CONFIG = 4; 23 constexpr size_t BASELINE_COMPOSE_RULE = 4; 24 constexpr size_t BASELINE_CRASHVALIDATOR_PLUGIN_CONFIG = 4; 25 constexpr size_t BASELINE_EXTRACT_RULE = 12; 26 constexpr size_t BASELINE_FAULTLOGGER_PIPELINE = 4; 27 28 constexpr size_t BASELINE_LIBBDFR = 528; 29 constexpr size_t BASELINE_LIBCRASHVALIDATOR = 52; 30 constexpr size_t BASELINE_LIBFAULTLOGGER = 64; 31 constexpr size_t BASELINE_LIBFAULTLOGGER_NAPI = 52; 32 #else 33 constexpr size_t BASELINE_BBOX_DETECTOR_PIPELINE = 4; 34 constexpr size_t BASELINE_BDFR_PLUGIN_CONFIG = 4; 35 constexpr size_t BASELINE_COMPOSE_RULE = 4; 36 constexpr size_t BASELINE_CRASHVALIDATOR_PLUGIN_CONFIG = 4; 37 constexpr size_t BASELINE_EXTRACT_RULE = 12; 38 constexpr size_t BASELINE_FAULTLOGGER_PIPELINE = 4; 39 40 constexpr size_t BASELINE_LIBBDFR = 432; 41 constexpr size_t BASELINE_LIBCRASHVALIDATOR = 72; 42 constexpr size_t BASELINE_LIBFAULTLOGGER = 48; 43 constexpr size_t BASELINE_LIBFAULTLOGGER_NAPI = 40; 44 #endif 45 46 class FaultloggerRomBaseLine : public testing::Test { 47 public: SetUp()48 void SetUp() {}; TearDown()49 void TearDown() {}; 50 51 const std::map<std::string, size_t> dfrBaseline_ = { 52 {GetSystemLibPath("libbdfr.z.so"), BASELINE_LIBBDFR}, 53 {GetSystemLibPath("chipset-pub-sdk/libfaultlogger.z.so"), BASELINE_LIBFAULTLOGGER}, 54 {GetSystemLibPath("module/libfaultlogger_napi.z.so"), BASELINE_LIBFAULTLOGGER_NAPI}, 55 {GetSystemLibPath("libcrashvalidator.z.so"), BASELINE_LIBCRASHVALIDATOR}, 56 {"/system/etc/hiview/bdfr_plugin_config", BASELINE_BDFR_PLUGIN_CONFIG}, 57 {"/system/etc/hiview/compose_rule.json", BASELINE_COMPOSE_RULE}, 58 {"/system/etc/hiview/extract_rule.json", BASELINE_EXTRACT_RULE}, 59 {"/system/etc/hiview/crashvalidator_plugin_config", BASELINE_CRASHVALIDATOR_PLUGIN_CONFIG}, 60 {"/system/etc/hiview/dispatch_rule/BBoxDetectorPipeline", BASELINE_BBOX_DETECTOR_PIPELINE}, 61 {"/system/etc/hiview/dispatch_rule/faultloggerPipeline", BASELINE_FAULTLOGGER_PIPELINE}, 62 }; 63 GetSystemLibPath(std::string filePath)64 static std::string GetSystemLibPath(std::string filePath) 65 { 66 #ifdef __LP64__ 67 return "/system/lib64/" + filePath; 68 #else 69 return "/system/lib/" + filePath; 70 #endif 71 } 72 GetFilesExpansionRatio(const std::map<std::string,size_t> & fileList)73 double GetFilesExpansionRatio(const std::map<std::string, size_t>& fileList) 74 { 75 size_t baselineTotalSize = 0; 76 size_t realTotalSize = 0; 77 constexpr size_t byteConvertKb = 1024; 78 constexpr size_t alignLen = 4; 79 for (auto &[filePath, baselineSize] : fileList) { 80 struct stat fileStat; 81 int ret = stat(filePath.c_str(), &fileStat); 82 if (ret != 0) { 83 GTEST_LOG_(ERROR) << "Get " << filePath << "stat failed."; 84 return -1.0f; 85 } 86 auto fileSizeAlign = (fileStat.st_size + byteConvertKb * alignLen - 1) / byteConvertKb; 87 fileSizeAlign = fileSizeAlign / alignLen * alignLen; 88 if (fileSizeAlign > baselineSize) { 89 double fileSize = fileStat.st_size / static_cast<double>(byteConvertKb); 90 constexpr size_t precision = 2; 91 GTEST_LOG_(WARNING) << std::fixed << std::setprecision(precision) 92 << filePath << " exceeds the baseline. (" 93 << fileSize << "KB/" << fileSizeAlign << "KB/" << baselineSize << "KB)"; 94 } 95 baselineTotalSize += baselineSize; 96 realTotalSize += fileSizeAlign; 97 } 98 GTEST_LOG_(INFO) 99 << "Current 4KB alignment size:" << realTotalSize << "KB/" << baselineTotalSize << "KB)"; 100 return static_cast<double>(realTotalSize) / static_cast<double>(baselineTotalSize); 101 } 102 }; 103 104 /** 105 * @tc.name: FaultloggerBaseline001 106 * @tc.desc: check ROM size 107 * @tc.type: FUNC 108 */ 109 HWTEST_F(FaultloggerRomBaseLine, FaultloggerBaseline001, testing::ext::TestSize.Level3) 110 { 111 // To ensure that the use case passes the tentative 1.15 and is later changed to 1.05 112 constexpr double maxRatio = 1.15f; 113 double ratioBaseline = GetFilesExpansionRatio(dfrBaseline_); 114 ASSERT_LT(ratioBaseline, maxRatio); 115 } 116