From d6759d46f96fe2c8955751b0fe8037d6c8a75464 Mon Sep 17 00:00:00 2001 From: Yi Jin Date: Thu, 12 Oct 2017 15:08:49 -0700 Subject: [PATCH] Enable dumpsys package in incidentd Test: manually tested on device. Change-Id: I963fd42684d9e2302f64fdd6cd729e077a9b37ac --- core/java/android/content/pm/FeatureInfo.java | 13 ++++++++++ core/proto/android/content/featureinfo.proto | 29 ++++++++++++++++++++++ core/proto/android/os/incident.proto | 6 ++++- core/proto/android/service/package.proto | 8 +++--- .../android/server/pm/PackageManagerService.java | 6 +---- .../core/java/com/android/server/pm/Settings.java | 6 +---- .../com/android/server/pm/SharedUserSetting.java | 9 +++++++ 7 files changed, 61 insertions(+), 16 deletions(-) create mode 100644 core/proto/android/content/featureinfo.proto diff --git a/core/java/android/content/pm/FeatureInfo.java b/core/java/android/content/pm/FeatureInfo.java index 9ee6fa2431a3..ff9fd8ec31c5 100644 --- a/core/java/android/content/pm/FeatureInfo.java +++ b/core/java/android/content/pm/FeatureInfo.java @@ -18,6 +18,7 @@ package android.content.pm; import android.os.Parcel; import android.os.Parcelable; +import android.util.proto.ProtoOutputStream; /** * Definition of a single optional hardware or software feature of an Android @@ -113,6 +114,18 @@ public class FeatureInfo implements Parcelable { dest.writeInt(flags); } + /** @hide */ + public void writeToProto(ProtoOutputStream proto, long fieldId) { + long token = proto.start(fieldId); + if (name != null) { + proto.write(FeatureInfoProto.NAME, name); + } + proto.write(FeatureInfoProto.VERSION, version); + proto.write(FeatureInfoProto.GLES_VERSION, getGlEsVersion()); + proto.write(FeatureInfoProto.FLAGS, flags); + proto.end(token); + } + public static final Creator CREATOR = new Creator() { @Override public FeatureInfo createFromParcel(Parcel source) { diff --git a/core/proto/android/content/featureinfo.proto b/core/proto/android/content/featureinfo.proto new file mode 100644 index 000000000000..a7501204b43f --- /dev/null +++ b/core/proto/android/content/featureinfo.proto @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2016 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. + */ + +syntax = "proto2"; + +option java_package = "android.content.pm"; +option java_multiple_files = true; + +package android.content.pm; + +message FeatureInfoProto { + optional string name = 1; + optional int32 version = 2; + optional string gles_version = 3; + optional int32 flags = 4; +} diff --git a/core/proto/android/os/incident.proto b/core/proto/android/os/incident.proto index c9d7b4966cef..5a5454e2f6ae 100644 --- a/core/proto/android/os/incident.proto +++ b/core/proto/android/os/incident.proto @@ -100,7 +100,11 @@ message IncidentProto { (section).args = "diskstats --proto" ]; - optional android.service.pm.PackageServiceDumpProto package = 3008; + optional android.service.pm.PackageServiceDumpProto package = 3008 [ + (section).type = SECTION_DUMPSYS, + (section).args = "package --proto" + ]; + optional android.service.power.PowerServiceDumpProto power = 3009; optional android.service.print.PrintServiceDumpProto print = 3010; diff --git a/core/proto/android/service/package.proto b/core/proto/android/service/package.proto index be82e2d549f9..aa1a575a5c93 100644 --- a/core/proto/android/service/package.proto +++ b/core/proto/android/service/package.proto @@ -17,6 +17,8 @@ syntax = "proto2"; package android.service.pm; +import "frameworks/base/core/proto/android/content/featureinfo.proto"; + option java_multiple_files = true; option java_outer_classname = "PackageServiceProto"; @@ -36,10 +38,6 @@ message PackageServiceDumpProto { // Should be filled if is_jar is false optional string apk = 4; } - message FeatureProto { - optional string name = 1; - optional int32 version = 2; - } message SharedUserProto { optional int32 user_id = 1; optional string name = 2; @@ -49,7 +47,7 @@ message PackageServiceDumpProto { optional PackageShortProto required_verifier_package = 1; optional PackageShortProto verifier_package = 2; repeated SharedLibraryProto shared_libraries = 3; - repeated FeatureProto features = 4; + repeated android.content.pm.FeatureInfoProto features = 4; repeated PackageProto packages = 5; repeated SharedUserProto shared_users = 6; // Messages from the settings problem file diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index d2f242695891..1a153bc412d7 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -21857,11 +21857,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); synchronized (mAvailableFeatures) { final int count = mAvailableFeatures.size(); for (int i = 0; i < count; i++) { - final FeatureInfo feat = mAvailableFeatures.valueAt(i); - final long featureToken = proto.start(PackageServiceDumpProto.FEATURES); - proto.write(PackageServiceDumpProto.FeatureProto.NAME, feat.name); - proto.write(PackageServiceDumpProto.FeatureProto.VERSION, feat.version); - proto.end(featureToken); + mAvailableFeatures.valueAt(i).writeToProto(proto, PackageServiceDumpProto.FEATURES); } } } diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 56595c947ed4..191b43a66d51 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -4929,11 +4929,7 @@ public final class Settings { void dumpSharedUsersProto(ProtoOutputStream proto) { final int count = mSharedUsers.size(); for (int i = 0; i < count; i++) { - final SharedUserSetting su = mSharedUsers.valueAt(i); - final long sharedUserToken = proto.start(PackageServiceDumpProto.SHARED_USERS); - proto.write(PackageServiceDumpProto.SharedUserProto.USER_ID, su.userId); - proto.write(PackageServiceDumpProto.SharedUserProto.NAME, su.name); - proto.end(sharedUserToken); + mSharedUsers.valueAt(i).writeToProto(proto, PackageServiceDumpProto.SHARED_USERS); } } diff --git a/services/core/java/com/android/server/pm/SharedUserSetting.java b/services/core/java/com/android/server/pm/SharedUserSetting.java index a0dadae37624..877da144730f 100644 --- a/services/core/java/com/android/server/pm/SharedUserSetting.java +++ b/services/core/java/com/android/server/pm/SharedUserSetting.java @@ -18,7 +18,9 @@ package com.android.server.pm; import android.annotation.Nullable; import android.content.pm.PackageParser; +import android.service.pm.PackageServiceDumpProto; import android.util.ArraySet; +import android.util.proto.ProtoOutputStream; import java.util.ArrayList; import java.util.Collection; @@ -53,6 +55,13 @@ public final class SharedUserSetting extends SettingBase { + name + "/" + userId + "}"; } + public void writeToProto(ProtoOutputStream proto, long fieldId) { + long token = proto.start(fieldId); + proto.write(PackageServiceDumpProto.SharedUserProto.USER_ID, userId); + proto.write(PackageServiceDumpProto.SharedUserProto.NAME, name); + proto.end(token); + } + void removePackage(PackageSetting packageSetting) { if (packages.remove(packageSetting)) { // recalculate the pkgFlags for this shared user if needed -- 2.11.0