1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.server.power.stats; 18 19 import android.annotation.NonNull; 20 import android.os.PersistableBundle; 21 22 import com.android.internal.os.PowerStats; 23 24 public class WifiPowerStatsLayout extends PowerStatsLayout { 25 private static final String TAG = "WifiPowerStatsLayout"; 26 private static final int UNSPECIFIED = -1; 27 private static final String EXTRA_POWER_REPORTING_SUPPORTED = "prs"; 28 private static final String EXTRA_DEVICE_RX_TIME_POSITION = "dt-rx"; 29 private static final String EXTRA_DEVICE_TX_TIME_POSITION = "dt-tx"; 30 private static final String EXTRA_DEVICE_SCAN_TIME_POSITION = "dt-scan"; 31 private static final String EXTRA_DEVICE_BASIC_SCAN_TIME_POSITION = "dt-basic-scan"; 32 private static final String EXTRA_DEVICE_BATCHED_SCAN_TIME_POSITION = "dt-batch-scan"; 33 private static final String EXTRA_DEVICE_IDLE_TIME_POSITION = "dt-idle"; 34 private static final String EXTRA_DEVICE_ACTIVE_TIME_POSITION = "dt-on"; 35 private static final String EXTRA_UID_RX_BYTES_POSITION = "urxb"; 36 private static final String EXTRA_UID_TX_BYTES_POSITION = "utxb"; 37 private static final String EXTRA_UID_RX_PACKETS_POSITION = "urxp"; 38 private static final String EXTRA_UID_TX_PACKETS_POSITION = "utxp"; 39 private static final String EXTRA_UID_SCAN_TIME_POSITION = "ut-scan"; 40 private static final String EXTRA_UID_BATCH_SCAN_TIME_POSITION = "ut-bscan"; 41 42 private boolean mPowerReportingSupported; 43 private int mDeviceRxTimePosition; 44 private int mDeviceTxTimePosition; 45 private int mDeviceIdleTimePosition; 46 private int mDeviceScanTimePosition; 47 private int mDeviceBasicScanTimePosition; 48 private int mDeviceBatchedScanTimePosition; 49 private int mDeviceActiveTimePosition; 50 private int mUidRxBytesPosition; 51 private int mUidTxBytesPosition; 52 private int mUidRxPacketsPosition; 53 private int mUidTxPacketsPosition; 54 private int mUidScanTimePosition; 55 private int mUidBatchScanTimePosition; 56 WifiPowerStatsLayout()57 WifiPowerStatsLayout() { 58 } 59 WifiPowerStatsLayout(@onNull PowerStats.Descriptor descriptor)60 WifiPowerStatsLayout(@NonNull PowerStats.Descriptor descriptor) { 61 super(descriptor); 62 } 63 addDeviceWifiActivity(boolean powerReportingSupported)64 void addDeviceWifiActivity(boolean powerReportingSupported) { 65 mPowerReportingSupported = powerReportingSupported; 66 if (mPowerReportingSupported) { 67 mDeviceActiveTimePosition = UNSPECIFIED; 68 mDeviceRxTimePosition = addDeviceSection(1, "rx"); 69 mDeviceTxTimePosition = addDeviceSection(1, "tx"); 70 mDeviceIdleTimePosition = addDeviceSection(1, "idle"); 71 mDeviceScanTimePosition = addDeviceSection(1, "scan"); 72 } else { 73 mDeviceActiveTimePosition = addDeviceSection(1, "rx-tx"); 74 mDeviceRxTimePosition = UNSPECIFIED; 75 mDeviceTxTimePosition = UNSPECIFIED; 76 mDeviceIdleTimePosition = UNSPECIFIED; 77 mDeviceScanTimePosition = UNSPECIFIED; 78 } 79 mDeviceBasicScanTimePosition = addDeviceSection(1, "basic-scan", FLAG_OPTIONAL); 80 mDeviceBatchedScanTimePosition = addDeviceSection(1, "batched-scan", FLAG_OPTIONAL); 81 } 82 addUidNetworkStats()83 void addUidNetworkStats() { 84 mUidRxPacketsPosition = addUidSection(1, "rx-pkts"); 85 mUidRxBytesPosition = addUidSection(1, "rx-B"); 86 mUidTxPacketsPosition = addUidSection(1, "tx-pkts"); 87 mUidTxBytesPosition = addUidSection(1, "tx-B"); 88 mUidScanTimePosition = addUidSection(1, "scan", FLAG_OPTIONAL); 89 mUidBatchScanTimePosition = addUidSection(1, "batched-scan", FLAG_OPTIONAL); 90 } 91 isPowerReportingSupported()92 public boolean isPowerReportingSupported() { 93 return mPowerReportingSupported; 94 } 95 setDeviceRxTime(long[] stats, long durationMillis)96 public void setDeviceRxTime(long[] stats, long durationMillis) { 97 stats[mDeviceRxTimePosition] = durationMillis; 98 } 99 getDeviceRxTime(long[] stats)100 public long getDeviceRxTime(long[] stats) { 101 return stats[mDeviceRxTimePosition]; 102 } 103 setDeviceTxTime(long[] stats, long durationMillis)104 public void setDeviceTxTime(long[] stats, long durationMillis) { 105 stats[mDeviceTxTimePosition] = durationMillis; 106 } 107 getDeviceTxTime(long[] stats)108 public long getDeviceTxTime(long[] stats) { 109 return stats[mDeviceTxTimePosition]; 110 } 111 setDeviceScanTime(long[] stats, long durationMillis)112 public void setDeviceScanTime(long[] stats, long durationMillis) { 113 stats[mDeviceScanTimePosition] = durationMillis; 114 } 115 getDeviceScanTime(long[] stats)116 public long getDeviceScanTime(long[] stats) { 117 return stats[mDeviceScanTimePosition]; 118 } 119 setDeviceBasicScanTime(long[] stats, long durationMillis)120 public void setDeviceBasicScanTime(long[] stats, long durationMillis) { 121 stats[mDeviceBasicScanTimePosition] = durationMillis; 122 } 123 getDeviceBasicScanTime(long[] stats)124 public long getDeviceBasicScanTime(long[] stats) { 125 return stats[mDeviceBasicScanTimePosition]; 126 } 127 setDeviceBatchedScanTime(long[] stats, long durationMillis)128 public void setDeviceBatchedScanTime(long[] stats, long durationMillis) { 129 stats[mDeviceBatchedScanTimePosition] = durationMillis; 130 } 131 getDeviceBatchedScanTime(long[] stats)132 public long getDeviceBatchedScanTime(long[] stats) { 133 return stats[mDeviceBatchedScanTimePosition]; 134 } 135 setDeviceIdleTime(long[] stats, long durationMillis)136 public void setDeviceIdleTime(long[] stats, long durationMillis) { 137 stats[mDeviceIdleTimePosition] = durationMillis; 138 } 139 getDeviceIdleTime(long[] stats)140 public long getDeviceIdleTime(long[] stats) { 141 return stats[mDeviceIdleTimePosition]; 142 } 143 setDeviceActiveTime(long[] stats, long durationMillis)144 public void setDeviceActiveTime(long[] stats, long durationMillis) { 145 stats[mDeviceActiveTimePosition] = durationMillis; 146 } 147 getDeviceActiveTime(long[] stats)148 public long getDeviceActiveTime(long[] stats) { 149 return stats[mDeviceActiveTimePosition]; 150 } 151 setUidRxBytes(long[] stats, long count)152 public void setUidRxBytes(long[] stats, long count) { 153 stats[mUidRxBytesPosition] = count; 154 } 155 getUidRxBytes(long[] stats)156 public long getUidRxBytes(long[] stats) { 157 return stats[mUidRxBytesPosition]; 158 } 159 setUidTxBytes(long[] stats, long count)160 public void setUidTxBytes(long[] stats, long count) { 161 stats[mUidTxBytesPosition] = count; 162 } 163 getUidTxBytes(long[] stats)164 public long getUidTxBytes(long[] stats) { 165 return stats[mUidTxBytesPosition]; 166 } 167 setUidRxPackets(long[] stats, long count)168 public void setUidRxPackets(long[] stats, long count) { 169 stats[mUidRxPacketsPosition] = count; 170 } 171 getUidRxPackets(long[] stats)172 public long getUidRxPackets(long[] stats) { 173 return stats[mUidRxPacketsPosition]; 174 } 175 setUidTxPackets(long[] stats, long count)176 public void setUidTxPackets(long[] stats, long count) { 177 stats[mUidTxPacketsPosition] = count; 178 } 179 getUidTxPackets(long[] stats)180 public long getUidTxPackets(long[] stats) { 181 return stats[mUidTxPacketsPosition]; 182 } 183 setUidScanTime(long[] stats, long count)184 public void setUidScanTime(long[] stats, long count) { 185 stats[mUidScanTimePosition] = count; 186 } 187 getUidScanTime(long[] stats)188 public long getUidScanTime(long[] stats) { 189 return stats[mUidScanTimePosition]; 190 } 191 setUidBatchScanTime(long[] stats, long count)192 public void setUidBatchScanTime(long[] stats, long count) { 193 stats[mUidBatchScanTimePosition] = count; 194 } 195 getUidBatchedScanTime(long[] stats)196 public long getUidBatchedScanTime(long[] stats) { 197 return stats[mUidBatchScanTimePosition]; 198 } 199 200 /** 201 * Copies the elements of the stats array layout into <code>extras</code> 202 */ toExtras(PersistableBundle extras)203 public void toExtras(PersistableBundle extras) { 204 super.toExtras(extras); 205 extras.putBoolean(EXTRA_POWER_REPORTING_SUPPORTED, mPowerReportingSupported); 206 extras.putInt(EXTRA_DEVICE_RX_TIME_POSITION, mDeviceRxTimePosition); 207 extras.putInt(EXTRA_DEVICE_TX_TIME_POSITION, mDeviceTxTimePosition); 208 extras.putInt(EXTRA_DEVICE_SCAN_TIME_POSITION, mDeviceScanTimePosition); 209 extras.putInt(EXTRA_DEVICE_BASIC_SCAN_TIME_POSITION, mDeviceBasicScanTimePosition); 210 extras.putInt(EXTRA_DEVICE_BATCHED_SCAN_TIME_POSITION, mDeviceBatchedScanTimePosition); 211 extras.putInt(EXTRA_DEVICE_IDLE_TIME_POSITION, mDeviceIdleTimePosition); 212 extras.putInt(EXTRA_DEVICE_ACTIVE_TIME_POSITION, mDeviceActiveTimePosition); 213 extras.putInt(EXTRA_UID_RX_BYTES_POSITION, mUidRxBytesPosition); 214 extras.putInt(EXTRA_UID_TX_BYTES_POSITION, mUidTxBytesPosition); 215 extras.putInt(EXTRA_UID_RX_PACKETS_POSITION, mUidRxPacketsPosition); 216 extras.putInt(EXTRA_UID_TX_PACKETS_POSITION, mUidTxPacketsPosition); 217 extras.putInt(EXTRA_UID_SCAN_TIME_POSITION, mUidScanTimePosition); 218 extras.putInt(EXTRA_UID_BATCH_SCAN_TIME_POSITION, mUidBatchScanTimePosition); 219 } 220 221 /** 222 * Retrieves elements of the stats array layout from <code>extras</code> 223 */ fromExtras(PersistableBundle extras)224 public void fromExtras(PersistableBundle extras) { 225 super.fromExtras(extras); 226 mPowerReportingSupported = extras.getBoolean(EXTRA_POWER_REPORTING_SUPPORTED); 227 mDeviceRxTimePosition = extras.getInt(EXTRA_DEVICE_RX_TIME_POSITION); 228 mDeviceTxTimePosition = extras.getInt(EXTRA_DEVICE_TX_TIME_POSITION); 229 mDeviceScanTimePosition = extras.getInt(EXTRA_DEVICE_SCAN_TIME_POSITION); 230 mDeviceBasicScanTimePosition = extras.getInt(EXTRA_DEVICE_BASIC_SCAN_TIME_POSITION); 231 mDeviceBatchedScanTimePosition = extras.getInt(EXTRA_DEVICE_BATCHED_SCAN_TIME_POSITION); 232 mDeviceIdleTimePosition = extras.getInt(EXTRA_DEVICE_IDLE_TIME_POSITION); 233 mDeviceActiveTimePosition = extras.getInt(EXTRA_DEVICE_ACTIVE_TIME_POSITION); 234 mUidRxBytesPosition = extras.getInt(EXTRA_UID_RX_BYTES_POSITION); 235 mUidTxBytesPosition = extras.getInt(EXTRA_UID_TX_BYTES_POSITION); 236 mUidRxPacketsPosition = extras.getInt(EXTRA_UID_RX_PACKETS_POSITION); 237 mUidTxPacketsPosition = extras.getInt(EXTRA_UID_TX_PACKETS_POSITION); 238 mUidScanTimePosition = extras.getInt(EXTRA_UID_SCAN_TIME_POSITION); 239 mUidBatchScanTimePosition = extras.getInt(EXTRA_UID_BATCH_SCAN_TIME_POSITION); 240 } 241 } 242