1 /*
2 * Copyright (c) 2022 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 "process_priority_info.h"
17 #include "memmgr_log.h"
18 #include "reclaim_priority_constants.h"
19
20 #include <sstream>
21
22 namespace OHOS {
23 namespace Memory {
24 namespace {
25 const std::string TAG = "ProcessPriorityInfo";
26 } // namespace
27
ProcessPriorityInfo(pid_t pid,int bundleUid,int priority)28 ProcessPriorityInfo::ProcessPriorityInfo(pid_t pid, int bundleUid, int priority)
29 {
30 this->uid_ = bundleUid;
31 this->pid_ = pid;
32 this->priority_ = priority;
33 this->isFreground = (priority == RECLAIM_PRIORITY_FOREGROUND) ? true : false;
34 this->isBackgroundRunning = false;
35 this->isSuspendDelay = false;
36 this->isEventStart = false;
37 this->isDistDeviceConnected = false;
38 this->extensionBindStatus = EXTENSION_STATUS_BIND_UNKOWN;
39 }
40
ProcessPriorityInfo(const ProcessPriorityInfo & copyProcess)41 ProcessPriorityInfo::ProcessPriorityInfo(const ProcessPriorityInfo ©Process)
42 {
43 this->uid_ = copyProcess.uid_;
44 this->pid_ = copyProcess.pid_;
45 this->priority_ = copyProcess.priority_;
46 this->isFreground = copyProcess.isFreground;
47 this->isBackgroundRunning = copyProcess.isBackgroundRunning;
48 this->isSuspendDelay = copyProcess.isSuspendDelay;
49 this->isEventStart = copyProcess.isEventStart;
50 this->isDistDeviceConnected = copyProcess.isDistDeviceConnected;
51 this->extensionBindStatus = copyProcess.extensionBindStatus;
52 for (auto connectors : copyProcess.extensionConnectors) {
53 this->AddExtensionConnector(connectors);
54 }
55 }
56
~ProcessPriorityInfo()57 ProcessPriorityInfo::~ProcessPriorityInfo()
58 {
59 extensionConnectors.clear();
60 }
61
SetPriority(int targetPriority)62 void ProcessPriorityInfo::SetPriority(int targetPriority)
63 {
64 priority_ = targetPriority;
65 HILOGD("set process[%{public}d] priority to %{public}d", pid_, priority_);
66 }
67
ExtensionConnectorsCount()68 int32_t ProcessPriorityInfo::ExtensionConnectorsCount()
69 {
70 return extensionConnectors.size();
71 }
72
AddExtensionConnector(int32_t pid)73 void ProcessPriorityInfo::AddExtensionConnector(int32_t pid)
74 {
75 extensionConnectors.insert(pid);
76 }
77
RemoveExtensionConnector(int32_t pid)78 void ProcessPriorityInfo::RemoveExtensionConnector(int32_t pid)
79 {
80 extensionConnectors.erase(pid);
81 }
82
ContainsConnector(int32_t pid)83 bool ProcessPriorityInfo::ContainsConnector(int32_t pid)
84 {
85 return extensionConnectors.count(pid) != 0;
86 }
87
ConnectorsToString()88 std::string ProcessPriorityInfo::ConnectorsToString()
89 {
90 std::stringstream ss;
91 ss << "[";
92 for (auto connector : extensionConnectors) {
93 ss << connector << " ";
94 }
95 ss << "]";
96 return ss.str();
97 }
98 } // namespace Memory
99 } // namespace OHOS
100