Skip to content

Commit e4a5951

Browse files
author
Dianne Hackborn
committed
Fix issue #3154576: battery stats checkin should include UID -> packages+ map
Includes some other small fixes to battery collection and a few other things. Output of package info looks like this: 5,0,i,uid,1000,com.android.settings 5,0,i,uid,1000,com.android.providers.subscribedfeeds 5,0,i,uid,1000,com.android.providers.settings 5,0,i,uid,1000,com.android.server.vpn 5,0,i,uid,1000,android 5,0,i,uid,1000,com.android.systemui 5,0,i,uid,1000,com.google.android.backup 5,0,i,uid,1001,com.android.phone 5,0,i,uid,1001,com.android.providers.telephony 5,0,i,uid,1022,com.android.nfc 5,0,i,uid,10021,com.google.android.location 5,0,i,uid,10021,com.google.android.syncadapters.calendar 5,0,i,uid,10021,com.google.android.gsf 5,0,i,uid,10021,com.google.android.syncadapters.contacts 5,0,i,uid,10026,com.android.providers.downloads.ui 5,0,i,uid,10026,com.android.providers.media 5,0,i,uid,10026,com.android.providers.drm 5,0,i,uid,10026,com.android.providers.downloads 5,0,i,uid,10032,com.android.launcher 5,0,i,uid,10039,com.google.android.gm 5,0,i,uid,10041,com.google.android.gallery3d 5,0,i,uid,10049,com.android.providers.calendar Change-Id: I9e38f254eef146339113ad270f5c6e8b60fb7a1d
1 parent e3f6336 commit e4a5951

File tree

7 files changed

+235
-79
lines changed

7 files changed

+235
-79
lines changed

cmds/pm/src/com/android/commands/pm/Pm.java

Lines changed: 68 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ public void run(String[] args) {
152152
* pm list permission-groups
153153
* pm list permissions
154154
* pm list features
155+
* pm list libraries
155156
* pm list instrumentation
156157
*/
157158
private void runList() {
@@ -169,6 +170,8 @@ private void runList() {
169170
runListPermissions();
170171
} else if ("features".equals(type)) {
171172
runListFeatures();
173+
} else if ("libraries".equals(type)) {
174+
runListLibraries();
172175
} else if ("instrumentation".equals(type)) {
173176
runListInstrumentation();
174177
} else {
@@ -181,6 +184,8 @@ private void runList() {
181184
* Lists all the installed packages.
182185
*/
183186
private void runListPackages(boolean showApplicationPackage) {
187+
int getFlags = 0;
188+
boolean listDisabled = false, listEnabled = false;
184189
try {
185190
String opt;
186191
while ((opt=nextOption()) != null) {
@@ -190,6 +195,12 @@ private void runListPackages(boolean showApplicationPackage) {
190195
showApplicationPackage = true;
191196
} else if (opt.equals("-f")) {
192197
showApplicationPackage = true;
198+
} else if (opt.equals("-d")) {
199+
listDisabled = true;
200+
} else if (opt.equals("-e")) {
201+
listEnabled = true;
202+
} else if (opt.equals("-u")) {
203+
getFlags |= PackageManager.GET_UNINSTALLED_PACKAGES;
193204
} else {
194205
System.err.println("Error: Unknown option: " + opt);
195206
showUsage();
@@ -202,18 +213,26 @@ private void runListPackages(boolean showApplicationPackage) {
202213
return;
203214
}
204215

216+
String filter = nextArg();
217+
205218
try {
206-
List<PackageInfo> packages = mPm.getInstalledPackages(0 /* all */);
219+
List<PackageInfo> packages = mPm.getInstalledPackages(getFlags);
207220

208221
int count = packages.size();
209222
for (int p = 0 ; p < count ; p++) {
210223
PackageInfo info = packages.get(p);
211-
System.out.print("package:");
212-
if (showApplicationPackage) {
213-
System.out.print(info.applicationInfo.sourceDir);
214-
System.out.print("=");
224+
if (filter != null && !info.packageName.contains(filter)) {
225+
continue;
226+
}
227+
if ((!listDisabled || !info.applicationInfo.enabled) &&
228+
(!listEnabled || info.applicationInfo.enabled)) {
229+
System.out.print("package:");
230+
if (showApplicationPackage) {
231+
System.out.print(info.applicationInfo.sourceDir);
232+
System.out.print("=");
233+
}
234+
System.out.println(info.packageName);
215235
}
216-
System.out.println(info.packageName);
217236
}
218237
} catch (RemoteException e) {
219238
System.err.println(e.toString());
@@ -259,6 +278,42 @@ public int compare(FeatureInfo o1, FeatureInfo o2) {
259278
}
260279
}
261280

281+
/**
282+
* Lists all of the libraries supported by the current device.
283+
*
284+
* pm list libraries
285+
*/
286+
private void runListLibraries() {
287+
try {
288+
List<String> list = new ArrayList<String>();
289+
String[] rawList = mPm.getSystemSharedLibraryNames();
290+
for (int i=0; i<rawList.length; i++) {
291+
list.add(rawList[i]);
292+
}
293+
294+
295+
// Sort by name
296+
Collections.sort(list, new Comparator<String>() {
297+
public int compare(String o1, String o2) {
298+
if (o1 == o2) return 0;
299+
if (o1 == null) return -1;
300+
if (o2 == null) return 1;
301+
return o1.compareTo(o2);
302+
}
303+
});
304+
305+
int count = (list != null) ? list.size() : 0;
306+
for (int p = 0; p < count; p++) {
307+
String lib = list.get(p);
308+
System.out.print("library:");
309+
System.out.println(lib);
310+
}
311+
} catch (RemoteException e) {
312+
System.err.println(e.toString());
313+
System.err.println(PM_NOT_RUNNING_ERR);
314+
}
315+
}
316+
262317
/**
263318
* Lists all of the installed instrumentation, or all for a given package
264319
*
@@ -880,20 +935,25 @@ private String nextArg() {
880935

881936
private static void showUsage() {
882937
System.err.println("usage: pm [list|path|install|uninstall]");
883-
System.err.println(" pm list packages [-f]");
938+
System.err.println(" pm list packages [-f] [-d] [-e] [-u] [FILTER]");
884939
System.err.println(" pm list permission-groups");
885940
System.err.println(" pm list permissions [-g] [-f] [-d] [-u] [GROUP]");
886941
System.err.println(" pm list instrumentation [-f] [TARGET-PACKAGE]");
887942
System.err.println(" pm list features");
943+
System.err.println(" pm list libraries");
888944
System.err.println(" pm path PACKAGE");
889945
System.err.println(" pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] [-s] [-f] PATH");
890946
System.err.println(" pm uninstall [-k] PACKAGE");
891947
System.err.println(" pm enable PACKAGE_OR_COMPONENT");
892948
System.err.println(" pm disable PACKAGE_OR_COMPONENT");
893949
System.err.println(" pm setInstallLocation [0/auto] [1/internal] [2/external]");
894950
System.err.println("");
895-
System.err.println("The list packages command prints all packages. Options:");
951+
System.err.println("The list packages command prints all packages, optionally only");
952+
System.err.println("those whose package name contains the text in FILTER. Options:");
896953
System.err.println(" -f: see their associated file.");
954+
System.err.println(" -d: filter to include disbled packages.");
955+
System.err.println(" -e: filter to include enabled packages.");
956+
System.err.println(" -u: also include uninstalled packages.");
897957
System.err.println("");
898958
System.err.println("The list permission-groups command prints all known");
899959
System.err.println("permission groups.");

core/java/android/content/pm/PackageParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ public static PackageInfo generatePackageInfo(PackageParser.Package p,
195195
pi.versionName = p.mVersionName;
196196
pi.sharedUserId = p.mSharedUserId;
197197
pi.sharedUserLabel = p.mSharedUserLabel;
198-
pi.applicationInfo = p.applicationInfo;
198+
pi.applicationInfo = generateApplicationInfo(p, flags);
199199
pi.installLocation = p.installLocation;
200200
pi.firstInstallTime = firstInstallTime;
201201
pi.lastUpdateTime = lastUpdateTime;

core/java/android/os/BatteryStats.java

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@
1717
package android.os;
1818

1919
import java.io.PrintWriter;
20+
import java.util.ArrayList;
2021
import java.util.Formatter;
22+
import java.util.List;
2123
import java.util.Map;
2224

25+
import android.content.pm.ApplicationInfo;
2326
import android.util.Log;
2427
import android.util.Printer;
2528
import android.util.SparseArray;
@@ -120,6 +123,7 @@ public abstract class BatteryStats implements Parcelable {
120123
private static final long BYTES_PER_GB = 1073741824; //1024^3
121124

122125

126+
private static final String UID_DATA = "uid";
123127
private static final String APK_DATA = "apk";
124128
private static final String PROCESS_DATA = "pr";
125129
private static final String SENSOR_DATA = "sr";
@@ -1460,7 +1464,7 @@ public final void dumpLocked(PrintWriter pw, String prefix, int which, int reqUi
14601464

14611465
for (int iu=0; iu<NU; iu++) {
14621466
final int uid = uidStats.keyAt(iu);
1463-
if (reqUid >= 0 && uid != reqUid) {
1467+
if (reqUid >= 0 && uid != reqUid && uid != Process.SYSTEM_UID) {
14641468
continue;
14651469
}
14661470

@@ -1877,7 +1881,7 @@ public void dumpLocked(PrintWriter pw) {
18771881
}
18781882

18791883
@SuppressWarnings("unused")
1880-
public void dumpCheckinLocked(PrintWriter pw, String[] args) {
1884+
public void dumpCheckinLocked(PrintWriter pw, String[] args, List<ApplicationInfo> apps) {
18811885
boolean isUnpluggedOnly = false;
18821886

18831887
for (String arg : args) {
@@ -1887,6 +1891,33 @@ public void dumpCheckinLocked(PrintWriter pw, String[] args) {
18871891
}
18881892
}
18891893

1894+
if (apps != null) {
1895+
SparseArray<ArrayList<String>> uids = new SparseArray<ArrayList<String>>();
1896+
for (int i=0; i<apps.size(); i++) {
1897+
ApplicationInfo ai = apps.get(i);
1898+
ArrayList<String> pkgs = uids.get(ai.uid);
1899+
if (pkgs == null) {
1900+
pkgs = new ArrayList<String>();
1901+
uids.put(ai.uid, pkgs);
1902+
}
1903+
pkgs.add(ai.packageName);
1904+
}
1905+
SparseArray<? extends Uid> uidStats = getUidStats();
1906+
final int NU = uidStats.size();
1907+
String[] lineArgs = new String[2];
1908+
for (int i=0; i<NU; i++) {
1909+
int uid = uidStats.keyAt(i);
1910+
ArrayList<String> pkgs = uids.get(uid);
1911+
if (pkgs != null) {
1912+
for (int j=0; j<pkgs.size(); j++) {
1913+
lineArgs[0] = Integer.toString(uid);
1914+
lineArgs[1] = pkgs.get(j);
1915+
dumpLine(pw, 0 /* uid */, "i" /* category */, UID_DATA,
1916+
(Object[])lineArgs);
1917+
}
1918+
}
1919+
}
1920+
}
18901921
if (isUnpluggedOnly) {
18911922
dumpCheckinLocked(pw, STATS_SINCE_UNPLUGGED, -1);
18921923
}

0 commit comments

Comments
 (0)