1/* 2 * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. 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#ifndef FTRACE_FS_OPS_H 16#define FTRACE_FS_OPS_H 17 18#include <string> 19#include <vector> 20 21#include "ftrace_namespace.h" 22 23#ifndef MOCKABLE 24#define MOCKABLE virtual 25#endif 26 27FTRACE_NS_BEGIN 28class FtraceFsOps { 29public: 30 static FtraceFsOps& GetInstance(); 31 static std::string GetFtraceRoot(); 32 bool IsHmKernel(); 33 int WriteTraceFile(const std::string& path, const std::string& content); 34 int WriteTraceFile(const std::string& path, const std::string& content, int flags); 35 std::string ReadTraceFile(const std::string& path) const; 36 37 MOCKABLE std::string GetKernelSymbols() const; 38 MOCKABLE std::string GetPrintkFormats() const; 39 40 MOCKABLE std::string GetProcessComm(int pid); 41 MOCKABLE std::string GetThreadComm(int pid, int tid); 42 43 // for ftrace status nodes 44 bool SetSavedCmdLinesSize(uint32_t size); 45 MOCKABLE std::string GetSavedCmdLines() const; 46 MOCKABLE std::string GetSavedTgids() const; 47 MOCKABLE std::string GetPerCpuStats(int cpu) const; 48 MOCKABLE std::string GetRawTracePath(int cpu) const; 49 std::string GetHmRawTracePath() const; 50 MOCKABLE std::string GetPageHeaderFormat() const; 51 MOCKABLE std::string GetEventDataFormat(const std::string& type, const std::string& name) const; 52 MOCKABLE std::vector<std::pair<std::string, std::string>> GetPlatformEvents(); 53 54 // for ftrace control nodes 55 MOCKABLE bool ClearTraceBuffer(); 56 MOCKABLE bool SetRecordCmdOption(bool enable); 57 MOCKABLE bool SetRecordTgidOption(bool enable); 58 MOCKABLE bool SetBufferSizeKb(int sizeKb); 59 MOCKABLE bool SetTraceClock(const std::string& clock); 60 MOCKABLE std::string GetTraceClock(); 61 MOCKABLE bool AppendSetEvent(const std::string& type, const std::string& name); 62 MOCKABLE bool ClearSetEvent(); 63 MOCKABLE bool EnableEvent(const std::string& type, const std::string& name); 64 MOCKABLE bool DisableEvent(const std::string& type, const std::string& name); 65 MOCKABLE bool DisableCategories(const std::string& categories); 66 MOCKABLE bool EnableTracing(); 67 MOCKABLE bool DisableTracing(); 68 69 // for UT 70 void SetFtraceRoot(std::string path) 71 { 72 ftraceRoot_ = path; 73 } 74 75private: 76 FtraceFsOps(); 77 MOCKABLE ~FtraceFsOps(); 78 DISALLOW_COPY_AND_MOVE(FtraceFsOps); 79 80private: 81 std::string ftraceRoot_; 82}; 83FTRACE_NS_END 84 85#endif // FTRACE_FS_OPS_H