blob: 0e268c21d01dfa8f53200d9c5f3cad9a415db99b [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.powermodel.component;
import com.android.powermodel.ActivityReport;
import com.android.powermodel.AttributionKey;
import com.android.powermodel.Component;
import com.android.powermodel.ComponentActivity;
import com.android.powermodel.PowerProfile;
import com.android.powermodel.util.Conversion;
/**
* Encapsulates the work done by the remaining
*/
public class ModemRemainderActivity extends ComponentActivity {
/**
* Construct a new ModemRemainderActivity.
*/
public ModemRemainderActivity(AttributionKey attribution) {
super(attribution);
}
/**
* Number of milliseconds spent at each of the signal strengths.
*/
public long[] strengthTimeMs;
/**
* Number of milliseconds spent scanning for a network.
*/
public long scanningTimeMs;
/**
* Number of milliseconds that the radio is active for reasons other
* than an app transmitting and receiving data.
*/
public long activeTimeMs;
@Override
public ModemRemainderPower applyProfile(ActivityReport activityReport, PowerProfile profile) {
// Profile
final ModemProfile modemProfile = (ModemProfile)profile.getComponent(Component.MODEM);
if (modemProfile == null) {
return null;
}
// Activity
final ModemRemainderPower result = new ModemRemainderPower();
result.attribution = this.attribution;
result.activity = this;
// strengthMah
// TODO: If the array lengths don't match... then?
result.strengthMah = new double[this.strengthTimeMs.length];
for (int i=0; i<this.strengthTimeMs.length; i++) {
result.strengthMah[i] = Conversion.msToHr(
this.strengthTimeMs[i] * modemProfile.getTxMa()[i]);
result.powerMah += result.strengthMah[i];
}
// scanningMah
result.scanningMah = Conversion.msToHr(this.scanningTimeMs * modemProfile.getScanningMa());
result.powerMah += result.scanningMah;
// activeMah
result.activeMah = Conversion.msToHr(
this.activeTimeMs * ModemAppActivity.getAverageModemPowerMa(modemProfile));
result.powerMah += result.activeMah;
return result;
}
}