blob: 76ba67235b0a33dd202f765dc9494fe2325e5131 [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.util.ArrayList;
import java.util.List;
import java.util.Set;
import com.google.common.collect.ImmutableMap;
/**
* PowerReport contains the summary of all power used on a device
* as reported by batterystats or statsd, based on the power profile.
*/
public class PowerReport {
private AppList<AppPower> mApps;
private double mTotalPowerMah;
private PowerReport() {
}
/**
* The total power used by this device for this PowerReport.
*/
public double getTotalPowerMah() {
return mTotalPowerMah;
}
public List<AppPower> getAllApps() {
return mApps.getAllApps();
}
public List<AppPower> getRegularApps() {
return mApps.getRegularApps();
}
public List<AppPower> findApp(String pkg) {
return mApps.findApp(pkg);
}
public AppPower findApp(SpecialApp specialApp) {
return mApps.findApp(specialApp);
}
public static PowerReport createReport(PowerProfile profile, ActivityReport activityReport) {
final PowerReport.Builder powerReport = new PowerReport.Builder();
for (final AppActivity appActivity: activityReport.getAllApps()) {
final AppPower.Builder appPower = new AppPower.Builder();
appPower.setAttribution(appActivity.getAttribution());
for (final ImmutableMap.Entry<Component,ComponentActivity> entry:
appActivity.getComponentActivities().entrySet()) {
final ComponentPower componentPower = entry.getValue()
.applyProfile(activityReport, profile);
if (componentPower != null) {
appPower.addComponentPower(entry.getKey(), componentPower);
}
}
powerReport.add(appPower);
}
return powerReport.build();
}
private static class Builder {
private AppList.Builder mApps = new AppList.Builder();
public Builder() {
}
public PowerReport build() {
final PowerReport report = new PowerReport();
report.mApps = mApps.build();
for (AppPower app: report.mApps.getAllApps()) {
report.mTotalPowerMah += app.getAppPowerMah();
}
return report;
}
public void add(AppPower.Builder app) {
mApps.put(app.getAttribution(), app);
}
}
}