1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci 16094332d3Sopenharmony_ci#ifndef THERMAL_DFX_H 17094332d3Sopenharmony_ci#define THERMAL_DFX_H 18094332d3Sopenharmony_ci 19094332d3Sopenharmony_ci#include <atomic> 20094332d3Sopenharmony_ci#include <fstream> 21094332d3Sopenharmony_ci#include <map> 22094332d3Sopenharmony_ci#include <memory> 23094332d3Sopenharmony_ci#include <string> 24094332d3Sopenharmony_ci#include <thread> 25094332d3Sopenharmony_ci 26094332d3Sopenharmony_ci#include "nocopyable.h" 27094332d3Sopenharmony_ci#include "thermal_hdf_config.h" 28094332d3Sopenharmony_ci 29094332d3Sopenharmony_cinamespace OHOS { 30094332d3Sopenharmony_cinamespace HDI { 31094332d3Sopenharmony_cinamespace Thermal { 32094332d3Sopenharmony_cinamespace V1_1 { 33094332d3Sopenharmony_ciclass ThermalDfx : public NoCopyable { 34094332d3Sopenharmony_cipublic: 35094332d3Sopenharmony_ci ThermalDfx(); 36094332d3Sopenharmony_ci ~ThermalDfx(); 37094332d3Sopenharmony_ci 38094332d3Sopenharmony_ci void Init(); 39094332d3Sopenharmony_ci void DoWork(); 40094332d3Sopenharmony_ci uint32_t GetInterval(); 41094332d3Sopenharmony_ci static ThermalDfx& GetInstance(); 42094332d3Sopenharmony_ci static void DestroyInstance(); 43094332d3Sopenharmony_ci 44094332d3Sopenharmony_ciprivate: 45094332d3Sopenharmony_ci std::string CanonicalizeSpecPath(const char* src); 46094332d3Sopenharmony_ci bool Compress(const std::string& dataFile, const std::string& destFile); 47094332d3Sopenharmony_ci void CreateLogFile(); 48094332d3Sopenharmony_ci void ProcessLogInfo(std::string& logFile, bool isEmpty); 49094332d3Sopenharmony_ci void WriteToEmptyFile(std::ofstream& wStream, std::string& currentTime); 50094332d3Sopenharmony_ci void WriteToFile(std::ofstream& wStream, std::string& currentTime); 51094332d3Sopenharmony_ci void CompressFile(); 52094332d3Sopenharmony_ci bool PrepareWriteDfxLog(); 53094332d3Sopenharmony_ci std::string GetFileNameIndex(const uint32_t index); 54094332d3Sopenharmony_ci int32_t GetIntParameter(const std::string& key, const int32_t def, const int32_t minValue); 55094332d3Sopenharmony_ci bool GetBoolParameter(const std::string& key, const bool def); 56094332d3Sopenharmony_ci void WidthWatchCallback(const std::string& value); 57094332d3Sopenharmony_ci void IntervalWatchCallback(const std::string& value); 58094332d3Sopenharmony_ci void EnableWatchCallback(const std::string& value); 59094332d3Sopenharmony_ci static void InfoChangedCallback(const char* key, const char* value, void* context); 60094332d3Sopenharmony_ci 61094332d3Sopenharmony_ci std::atomic_uint8_t width_; 62094332d3Sopenharmony_ci std::atomic_uint32_t interval_; 63094332d3Sopenharmony_ci std::atomic_bool enable_; 64094332d3Sopenharmony_ci static std::mutex mutexInstance_; 65094332d3Sopenharmony_ci static std::shared_ptr<ThermalDfx> instance_; 66094332d3Sopenharmony_ci}; 67094332d3Sopenharmony_ci} // V1_1 68094332d3Sopenharmony_ci} // Thermal 69094332d3Sopenharmony_ci} // HDI 70094332d3Sopenharmony_ci} // OHOS 71094332d3Sopenharmony_ci#endif // THERMAL_DFX_H 72