1d590543dSopenharmony_ci/* 2d590543dSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3d590543dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d590543dSopenharmony_ci * you may not use this file except in compliance with the License. 5d590543dSopenharmony_ci * You may obtain a copy of the License at 6d590543dSopenharmony_ci * 7d590543dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d590543dSopenharmony_ci * 9d590543dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d590543dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d590543dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d590543dSopenharmony_ci * See the License for the specific language governing permissions and 13d590543dSopenharmony_ci * limitations under the License. 14d590543dSopenharmony_ci */ 15d590543dSopenharmony_ci 16d590543dSopenharmony_ci#ifndef STATS_HELPER_H 17d590543dSopenharmony_ci#define STATS_HELPER_H 18d590543dSopenharmony_ci 19d590543dSopenharmony_ci#include <cinttypes> 20d590543dSopenharmony_ci 21d590543dSopenharmony_ci#include "stats_log.h" 22d590543dSopenharmony_ci#include "stats_utils.h" 23d590543dSopenharmony_ci 24d590543dSopenharmony_cinamespace OHOS { 25d590543dSopenharmony_cinamespace PowerMgr { 26d590543dSopenharmony_ciclass StatsHelper { 27d590543dSopenharmony_cipublic: 28d590543dSopenharmony_ci class ActiveTimer { 29d590543dSopenharmony_ci public: 30d590543dSopenharmony_ci ActiveTimer() = default; 31d590543dSopenharmony_ci ~ActiveTimer() = default; 32d590543dSopenharmony_ci bool StartRunning() 33d590543dSopenharmony_ci { 34d590543dSopenharmony_ci if (isRunning_) { 35d590543dSopenharmony_ci STATS_HILOGD(COMP_SVC, "Active timer was already started"); 36d590543dSopenharmony_ci return false; 37d590543dSopenharmony_ci } 38d590543dSopenharmony_ci startTimeMs_ = GetOnBatteryBootTimeMs(); 39d590543dSopenharmony_ci isRunning_ = true; 40d590543dSopenharmony_ci STATS_HILOGD(COMP_SVC, "Active timer is started"); 41d590543dSopenharmony_ci return true; 42d590543dSopenharmony_ci } 43d590543dSopenharmony_ci 44d590543dSopenharmony_ci bool StopRunning() 45d590543dSopenharmony_ci { 46d590543dSopenharmony_ci if (!isRunning_) { 47d590543dSopenharmony_ci STATS_HILOGD(COMP_SVC, "No related active timer is running"); 48d590543dSopenharmony_ci return false; 49d590543dSopenharmony_ci } 50d590543dSopenharmony_ci auto stopTimeMs = GetOnBatteryBootTimeMs(); 51d590543dSopenharmony_ci totalTimeMs_ += stopTimeMs - startTimeMs_; 52d590543dSopenharmony_ci isRunning_ = false; 53d590543dSopenharmony_ci STATS_HILOGD(COMP_SVC, "Active timer is stopped"); 54d590543dSopenharmony_ci return true; 55d590543dSopenharmony_ci } 56d590543dSopenharmony_ci 57d590543dSopenharmony_ci int64_t GetRunningTimeMs() 58d590543dSopenharmony_ci { 59d590543dSopenharmony_ci if (isRunning_) { 60d590543dSopenharmony_ci auto tmpStopTimeMs = GetOnBatteryBootTimeMs(); 61d590543dSopenharmony_ci totalTimeMs_ += tmpStopTimeMs - startTimeMs_; 62d590543dSopenharmony_ci startTimeMs_ = tmpStopTimeMs; 63d590543dSopenharmony_ci } 64d590543dSopenharmony_ci return totalTimeMs_; 65d590543dSopenharmony_ci } 66d590543dSopenharmony_ci 67d590543dSopenharmony_ci void AddRunningTimeMs(int64_t avtiveTime) 68d590543dSopenharmony_ci { 69d590543dSopenharmony_ci if (avtiveTime > StatsUtils::DEFAULT_VALUE) { 70d590543dSopenharmony_ci totalTimeMs_ += avtiveTime; 71d590543dSopenharmony_ci STATS_HILOGD(COMP_SVC, "Add on active Time: %{public}" PRId64 "", avtiveTime); 72d590543dSopenharmony_ci } else { 73d590543dSopenharmony_ci STATS_HILOGW(COMP_SVC, "Invalid active time, ignore"); 74d590543dSopenharmony_ci } 75d590543dSopenharmony_ci } 76d590543dSopenharmony_ci 77d590543dSopenharmony_ci void Reset() 78d590543dSopenharmony_ci { 79d590543dSopenharmony_ci isRunning_ = false; 80d590543dSopenharmony_ci startTimeMs_ = GetOnBatteryBootTimeMs(); 81d590543dSopenharmony_ci totalTimeMs_ = StatsUtils::DEFAULT_VALUE; 82d590543dSopenharmony_ci } 83d590543dSopenharmony_ci private: 84d590543dSopenharmony_ci bool isRunning_ = false; 85d590543dSopenharmony_ci int64_t startTimeMs_ = StatsUtils::DEFAULT_VALUE; 86d590543dSopenharmony_ci int64_t totalTimeMs_ = StatsUtils::DEFAULT_VALUE; 87d590543dSopenharmony_ci }; 88d590543dSopenharmony_ci 89d590543dSopenharmony_ci class Counter { 90d590543dSopenharmony_ci public: 91d590543dSopenharmony_ci Counter() = default; 92d590543dSopenharmony_ci ~Counter() = default; 93d590543dSopenharmony_ci void AddCount(int64_t count) 94d590543dSopenharmony_ci { 95d590543dSopenharmony_ci if (count > StatsUtils::DEFAULT_VALUE) { 96d590543dSopenharmony_ci if (IsOnBattery()) { 97d590543dSopenharmony_ci totalCount_ += count; 98d590543dSopenharmony_ci } 99d590543dSopenharmony_ci STATS_HILOGD(COMP_SVC, "Add data bytes: %{public}" PRId64 ", total data bytes is: %{public}" PRId64 "", 100d590543dSopenharmony_ci count, totalCount_); 101d590543dSopenharmony_ci } else { 102d590543dSopenharmony_ci STATS_HILOGW(COMP_SVC, "Invalid data counts"); 103d590543dSopenharmony_ci } 104d590543dSopenharmony_ci } 105d590543dSopenharmony_ci 106d590543dSopenharmony_ci int64_t GetCount() 107d590543dSopenharmony_ci { 108d590543dSopenharmony_ci return totalCount_; 109d590543dSopenharmony_ci } 110d590543dSopenharmony_ci 111d590543dSopenharmony_ci void Reset() 112d590543dSopenharmony_ci { 113d590543dSopenharmony_ci totalCount_ = StatsUtils::DEFAULT_VALUE; 114d590543dSopenharmony_ci } 115d590543dSopenharmony_ci private: 116d590543dSopenharmony_ci int64_t totalCount_ = StatsUtils::DEFAULT_VALUE; 117d590543dSopenharmony_ci }; 118d590543dSopenharmony_ci static void SetOnBattery(bool onBattery); 119d590543dSopenharmony_ci static void SetScreenOff(bool screenOff); 120d590543dSopenharmony_ci static int64_t GetOnBatteryBootTimeMs(); 121d590543dSopenharmony_ci static int64_t GetOnBatteryUpTimeMs(); 122d590543dSopenharmony_ci static bool IsOnBattery(); 123d590543dSopenharmony_ci static bool IsOnBatteryScreenOff(); 124d590543dSopenharmony_ci static int64_t GetBootTimeMs(); 125d590543dSopenharmony_ci static int64_t GetUpTimeMs(); 126d590543dSopenharmony_ciprivate: 127d590543dSopenharmony_ci static int64_t latestUnplugBootTimeMs_; 128d590543dSopenharmony_ci static int64_t latestUnplugUpTimeMs_; 129d590543dSopenharmony_ci static int64_t onBatteryBootTimeMs_; 130d590543dSopenharmony_ci static int64_t onBatteryUpTimeMs_; 131d590543dSopenharmony_ci static bool onBattery_; 132d590543dSopenharmony_ci static bool screenOff_; 133d590543dSopenharmony_ci}; 134d590543dSopenharmony_ci} // namespace PowerMgr 135d590543dSopenharmony_ci} // namespace OHOS 136d590543dSopenharmony_ci#endif // STATS_HELPER_H