blob: 1a61737a4b2f055efd74c35fcda1ced00855b52e [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;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
import org.junit.Test;
import org.junit.Assert;
import com.android.powermodel.component.ModemAppPower;
import com.android.powermodel.component.ModemRemainderPower;
/**
* Tests {@link PowerReport}.
*/
public class PowerReportTest {
private static final double EPSILON = 0.001;
private static final double MS_PER_HR = 3600000.0;
private static final double AVERAGE_MODEM_POWER = ((11+16+19+22+73+132) / 6.0);
private static final double GMAIL_MODEM_MAH = ((9925+5577) / (double)(97840+72941))
* 5113727 * AVERAGE_MODEM_POWER * (1.0 / 3600 / 1000);
private static final double GMAIL_MAH
= GMAIL_MODEM_MAH;
private static final double REMAINDER_MODEM_MAH
= (1.0 / 3600 / 1000)
* ((3066958 * 16) + (0 * 19) + (34678 * 22) + (1643364 * 73) + (7045084 * 132)
+ (2443805 * 12)
+ (4923676 * AVERAGE_MODEM_POWER));
private static final double REMAINDER_MAH
= REMAINDER_MODEM_MAH;
private static final double TOTAL_MAH
= GMAIL_MAH
+ REMAINDER_MAH;
private static InputStream loadPowerProfileStream() {
return PowerProfileTest.class.getResourceAsStream("/power_profile.xml");
}
private static InputStream loadCsvStream() {
return BatteryStatsReaderTest.class.getResourceAsStream("/bs.csv");
}
private static PowerReport loadPowerReport() throws Exception {
final PowerProfile profile = PowerProfile.parse(loadPowerProfileStream());
final ActivityReport activity = BatteryStatsReader.parse(loadCsvStream());
return PowerReport.createReport(profile, activity);
}
@Test public void testModemApp() throws Exception {
final PowerReport report = loadPowerReport();
final List<AppPower> gmailList = report.findApp("com.google.android.gm");
Assert.assertEquals(1, gmailList.size());
final AppPower gmail = gmailList.get(0);
final ModemAppPower modem = (ModemAppPower)gmail.getComponentPower(Component.MODEM);
Assert.assertNotNull(modem);
Assert.assertEquals(GMAIL_MODEM_MAH, modem.powerMah, EPSILON);
}
@Test public void testModemRemainder() throws Exception {
final PowerReport report = loadPowerReport();
final AppPower remainder = report.findApp(SpecialApp.REMAINDER);
Assert.assertNotNull(remainder);
final ModemRemainderPower modem
= (ModemRemainderPower)remainder.getComponentPower(Component.MODEM);
Assert.assertNotNull(modem);
Assert.assertArrayEquals(new double[] {
3066958 * 16.0 / MS_PER_HR,
0 * 19.0 / MS_PER_HR,
34678 * 22.0 / MS_PER_HR,
1643364 * 73.0 / MS_PER_HR,
7045084 * 132.0 / MS_PER_HR },
modem.strengthMah, EPSILON);
Assert.assertEquals(2443805 * 12 / MS_PER_HR, modem.scanningMah, EPSILON);
Assert.assertEquals(4923676 * AVERAGE_MODEM_POWER / MS_PER_HR, modem.activeMah, EPSILON);
Assert.assertEquals(REMAINDER_MODEM_MAH, modem.powerMah, EPSILON);
}
@Test public void testAppTotal() throws Exception {
final PowerReport report = loadPowerReport();
final List<AppPower> gmailList = report.findApp("com.google.android.gm");
Assert.assertEquals(1, gmailList.size());
final AppPower gmail = gmailList.get(0);
Assert.assertEquals(GMAIL_MAH, gmail.getAppPowerMah(), EPSILON);
}
@Test public void testRemainderTotal() throws Exception {
final PowerReport report = loadPowerReport();
final AppPower remainder = report.findApp(SpecialApp.REMAINDER);
Assert.assertNotNull(remainder);
Assert.assertEquals(REMAINDER_MAH, remainder.getAppPowerMah(), EPSILON);
}
@Test public void testTotal() throws Exception {
final PowerReport report = loadPowerReport();
Assert.assertEquals(TOTAL_MAH, report.getTotalPowerMah(), EPSILON);
}
}