• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 #ifndef CLOUD_DAEMON_STATISTIC_H
17 #define CLOUD_DAEMON_STATISTIC_H
18 
19 #include <mutex>
20 #include <string>
21 
22 #define FILE_TYPE_MAX 3
23 #define OPEN_SIZE_MAX 9
24 #define OPEN_TIME_MAX 7
25 #define READ_SIZE_MAX 6
26 #define READ_TIME_MAX 10
27 #define VIDEO_READ_INFO 2
28 
29 enum VideoReadInfoIndex {
30     CACHE_SUM = 0,
31     READ_SUM,
32 };
33 
34 enum ReadSize {
35     READ_SIZE_128K = 0,
36     READ_SIZE_256K,
37     READ_SIZE_512K,
38     READ_SIZE_1M,
39     READ_SIZE_2M,
40     READ_SIZE_4M
41 };
42 
43 namespace OHOS {
44 namespace FileManagement {
45 namespace CloudFile {
46 using namespace std;
47 
48 struct CloudDaemonStatisticInfo {
49 public:
CloudDaemonStatisticInfoCloudDaemonStatisticInfo50     CloudDaemonStatisticInfo() : openSizeStat(OPEN_SIZE_MAX, 0),
51         openTimeStat(FILE_TYPE_MAX, vector<uint64_t>(OPEN_TIME_MAX, 0)),
52         readSizeStat(READ_SIZE_MAX, 0),
53         readTimeStat(READ_SIZE_MAX, vector<uint64_t>(READ_TIME_MAX, 0)),
54         videoReadInfo(VIDEO_READ_INFO, 0),
55         bundleName("")
56     {
57     }
58     ~CloudDaemonStatisticInfo() = default;
59 
60     vector<uint64_t> openSizeStat;
61     vector<vector<uint64_t>> openTimeStat;
62     vector<uint64_t> readSizeStat;
63     vector<vector<uint64_t>> readTimeStat;
64     vector<uint32_t> videoReadInfo;
65     std::string bundleName;
66 };
67 
68 class CloudDaemonStatistic final {
69 public:
70     static CloudDaemonStatistic &GetInstance();
71     CloudDaemonStatistic(const CloudDaemonStatistic&) = delete;
72     CloudDaemonStatistic& operator=(const CloudDaemonStatistic&) = delete;
73 
74     /* size should be BYTE based, time should be MS based */
75     void UpdateOpenSizeStat(uint64_t size);
76     void UpdateOpenTimeStat(uint32_t type, uint64_t time);
77     void UpdateReadSizeStat(uint64_t size);
78     void UpdateReadTimeStat(uint64_t size, uint64_t time);
79     void UpdateStatData();
80     void UpdateReadInfo(uint32_t index);
81     void UpdateBundleName(const std::string &bundleName);
82     mutex mutex_;
83 private:
84     CloudDaemonStatistic() = default;
85     ~CloudDaemonStatistic() = default;
86     void AddFileData(CloudDaemonStatisticInfo &info);
87     void ClearStat();
88     void OutputToFile();
89     int32_t CheckFileStat();
90     void SumTwoReadStat(const CloudDaemonStatisticInfo &info);
91     int32_t ReportReadStat(const CloudDaemonStatisticInfo &info);
92     void HandleBundleName(const CloudDaemonStatisticInfo &info);
93 
94     vector<uint64_t> openSizeStat_ = vector<uint64_t>(OPEN_SIZE_MAX, 0);
95     vector<vector<uint64_t>> openTimeStat_ =
96         vector<vector<uint64_t>>(FILE_TYPE_MAX, vector<uint64_t>(OPEN_TIME_MAX, 0));
97     vector<uint64_t> readSizeStat_ = vector<uint64_t>(READ_SIZE_MAX, 0);
98     vector<vector<uint64_t>> readTimeStat_ =
99         vector<vector<uint64_t>>(READ_SIZE_MAX, vector<uint64_t>(READ_TIME_MAX, 0));
100     vector<uint32_t> videoReadInfo_ = vector<uint32_t>(VIDEO_READ_INFO, 0);
101     std::string bundleName_{""};
102 };
103 } // namespace CloudFile
104 } // namespace FileManagement
105 } // namespace OHOS
106 
107 #endif // CLOUD_DAEMON_STATISTIC_H
108