summaryrefslogtreecommitdiff
path: root/services/print
diff options
context:
space:
mode:
authorPhilip P. Moltmann <moltmann@google.com>2017-06-19 10:55:09 -0700
committerPhilip P. Moltmann <moltmann@google.com>2017-07-25 11:32:24 -0700
commitc0a128dc2b3e7af35cb39d5157ca4de9147aa3c8 (patch)
tree7487e91db8af6ea68d13e89a75e26af7ce881c49 /services/print
parent6eb4d48817ed6ad5b6298bd5820185a3ae61692d (diff)
Dump print manager as proto
Test: incident_report print. Having no entries Change-Id: I3c7d611e44c0d3bf8e00775b1708bd82a334121a
Diffstat (limited to 'services/print')
-rw-r--r--services/print/java/com/android/server/print/PrintManagerService.java60
-rw-r--r--services/print/java/com/android/server/print/RemotePrintService.java98
-rw-r--r--services/print/java/com/android/server/print/RemotePrintSpooler.java20
-rw-r--r--services/print/java/com/android/server/print/UserState.java221
4 files changed, 311 insertions, 88 deletions
diff --git a/services/print/java/com/android/server/print/PrintManagerService.java b/services/print/java/com/android/server/print/PrintManagerService.java
index 6c417a9baf93..33d1fed4ef56 100644
--- a/services/print/java/com/android/server/print/PrintManagerService.java
+++ b/services/print/java/com/android/server/print/PrintManagerService.java
@@ -50,8 +50,10 @@ import android.printservice.PrintServiceInfo;
import android.printservice.recommendation.IRecommendationsChangeListener;
import android.printservice.recommendation.RecommendationInfo;
import android.provider.Settings;
+import android.service.print.PrintServiceDumpProto;
import android.util.Log;
import android.util.SparseArray;
+import android.util.proto.ProtoOutputStream;
import com.android.internal.content.PackageMonitor;
import com.android.internal.os.BackgroundThread;
@@ -638,19 +640,32 @@ public final class PrintManagerService extends SystemService {
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
fd = Preconditions.checkNotNull(fd);
- pw = Preconditions.checkNotNull(pw);
if (!DumpUtils.checkDumpPermission(mContext, LOG_TAG, pw)) return;
+ int opti = 0;
+ boolean dumpAsProto = false;
+ int user = UserHandle.USER_ALL;
+ while (opti < args.length) {
+ String opt = args[opti];
+ if (opt == null || opt.length() <= 0 || opt.charAt(0) != '-') {
+ break;
+ }
+ opti++;
+ if ("--proto".equals(opt)) {
+ dumpAsProto = true;
+ } else {
+ pw.println("Unknown argument: " + opt + "; use -h for help");
+ }
+ }
+
synchronized (mLock) {
final long identity = Binder.clearCallingIdentity();
try {
- pw.println("PRINT MANAGER STATE (dumpsys print)");
- final int userStateCount = mUserStates.size();
- for (int i = 0; i < userStateCount; i++) {
- UserState userState = mUserStates.valueAt(i);
- userState.dump(fd, pw, "");
- pw.println();
+ if (dumpAsProto) {
+ dumpLocked(new ProtoOutputStream(fd), UserHandle.of(user));
+ } else {
+ dumpLocked(fd, pw, UserHandle.of(user));
}
} finally {
Binder.restoreCallingIdentity(identity);
@@ -658,6 +673,37 @@ public final class PrintManagerService extends SystemService {
}
}
+ private void dumpLocked(@NonNull ProtoOutputStream proto, @NonNull UserHandle user) {
+ final int userStateCount = mUserStates.size();
+ for (int i = 0; i < userStateCount; i++) {
+ UserState userState = mUserStates.valueAt(i);
+
+ if (user.equals(UserHandle.ALL) || mUserStates.keyAt(i) == user.getIdentifier()) {
+ long token = proto.start(PrintServiceDumpProto.USER_STATES);
+ userState.dump(proto);
+ proto.end(token);
+ }
+ }
+
+ proto.flush();
+ }
+
+ private void dumpLocked(@NonNull FileDescriptor fd, @NonNull PrintWriter pw,
+ @NonNull UserHandle user) {
+ pw = Preconditions.checkNotNull(pw);
+
+ pw.println("PRINT MANAGER STATE (dumpsys print)");
+ final int userStateCount = mUserStates.size();
+ for (int i = 0; i < userStateCount; i++) {
+ UserState userState = mUserStates.valueAt(i);
+
+ if (user.equals(UserHandle.ALL) || mUserStates.keyAt(i) == user.getIdentifier()) {
+ userState.dump(fd, pw, "");
+ pw.println();
+ }
+ }
+ }
+
private void registerContentObservers() {
final Uri enabledPrintServicesUri = Settings.Secure.getUriFor(
Settings.Secure.DISABLED_PRINT_SERVICES);
diff --git a/services/print/java/com/android/server/print/RemotePrintService.java b/services/print/java/com/android/server/print/RemotePrintService.java
index fb78457538be..13462cd3e3e4 100644
--- a/services/print/java/com/android/server/print/RemotePrintService.java
+++ b/services/print/java/com/android/server/print/RemotePrintService.java
@@ -16,6 +16,9 @@
package com.android.server.print;
+import static com.android.internal.print.DumpUtils.writeComponentName;
+import static com.android.internal.print.DumpUtils.writePrinterId;
+
import android.annotation.FloatRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -42,7 +45,11 @@ import android.print.PrinterId;
import android.print.PrinterInfo;
import android.printservice.IPrintService;
import android.printservice.IPrintServiceClient;
+import android.service.print.ActivePrintServiceProto;
import android.util.Slog;
+import android.util.proto.ProtoOutputStream;
+
+import com.android.internal.annotations.GuardedBy;
import java.io.PrintWriter;
import java.lang.ref.WeakReference;
@@ -60,6 +67,8 @@ final class RemotePrintService implements DeathRecipient {
private static final boolean DEBUG = false;
+ private final Object mLock = new Object();
+
private final Context mContext;
private final ComponentName mComponentName;
@@ -94,6 +103,7 @@ final class RemotePrintService implements DeathRecipient {
private List<PrinterId> mDiscoveryPriorityList;
+ @GuardedBy("mLock")
private List<PrinterId> mTrackedPrinterList;
public static interface PrintServiceCallbacks {
@@ -443,11 +453,14 @@ final class RemotePrintService implements DeathRecipient {
}
private void handleStartPrinterStateTracking(final @NonNull PrinterId printerId) {
- // Take a note we are tracking the printer.
- if (mTrackedPrinterList == null) {
- mTrackedPrinterList = new ArrayList<PrinterId>();
+ synchronized (mLock) {
+ // Take a note we are tracking the printer.
+ if (mTrackedPrinterList == null) {
+ mTrackedPrinterList = new ArrayList<PrinterId>();
+ }
+ mTrackedPrinterList.add(printerId);
}
- mTrackedPrinterList.add(printerId);
+
if (!isBound()) {
ensureBound();
mPendingCommands.add(new Runnable() {
@@ -474,13 +487,16 @@ final class RemotePrintService implements DeathRecipient {
}
private void handleStopPrinterStateTracking(final PrinterId printerId) {
- // We are no longer tracking the printer.
- if (mTrackedPrinterList == null || !mTrackedPrinterList.remove(printerId)) {
- return;
- }
- if (mTrackedPrinterList.isEmpty()) {
- mTrackedPrinterList = null;
+ synchronized (mLock) {
+ // We are no longer tracking the printer.
+ if (mTrackedPrinterList == null || !mTrackedPrinterList.remove(printerId)) {
+ return;
+ }
+ if (mTrackedPrinterList.isEmpty()) {
+ mTrackedPrinterList = null;
+ }
}
+
if (!isBound()) {
ensureBound();
mPendingCommands.add(new Runnable() {
@@ -502,14 +518,37 @@ final class RemotePrintService implements DeathRecipient {
}
private void stopTrackingAllPrinters() {
- if (mTrackedPrinterList == null) {
- return;
+ synchronized (mLock) {
+ if (mTrackedPrinterList == null) {
+ return;
+ }
+ final int trackedPrinterCount = mTrackedPrinterList.size();
+ for (int i = trackedPrinterCount - 1; i >= 0; i--) {
+ PrinterId printerId = mTrackedPrinterList.get(i);
+ if (printerId.getServiceName().equals(mComponentName)) {
+ handleStopPrinterStateTracking(printerId);
+ }
+ }
}
- final int trackedPrinterCount = mTrackedPrinterList.size();
- for (int i = trackedPrinterCount - 1; i >= 0; i--) {
- PrinterId printerId = mTrackedPrinterList.get(i);
- if (printerId.getServiceName().equals(mComponentName)) {
- handleStopPrinterStateTracking(printerId);
+ }
+
+ public void dump(@NonNull ProtoOutputStream proto) {
+ writeComponentName(proto, ActivePrintServiceProto.COMPONENT_NAME, mComponentName);
+
+ proto.write(ActivePrintServiceProto.IS_DESTROYED, mDestroyed);
+ proto.write(ActivePrintServiceProto.IS_BOUND, isBound());
+ proto.write(ActivePrintServiceProto.HAS_DISCOVERY_SESSION, mHasPrinterDiscoverySession);
+ proto.write(ActivePrintServiceProto.HAS_ACTIVE_PRINT_JOBS, mHasActivePrintJobs);
+ proto.write(ActivePrintServiceProto.IS_DISCOVERING_PRINTERS,
+ mDiscoveryPriorityList != null);
+
+ synchronized (mLock) {
+ if (mTrackedPrinterList != null) {
+ int numTrackedPrinters = mTrackedPrinterList.size();
+ for (int i = 0; i < numTrackedPrinters; i++) {
+ writePrinterId(proto, ActivePrintServiceProto.TRACKED_PRINTERS,
+ mTrackedPrinterList.get(i));
+ }
}
}
}
@@ -529,8 +568,11 @@ final class RemotePrintService implements DeathRecipient {
.append(String.valueOf(mHasActivePrintJobs)).println();
pw.append(prefix).append(tab).append("isDiscoveringPrinters=")
.append(String.valueOf(mDiscoveryPriorityList != null)).println();
- pw.append(prefix).append(tab).append("trackedPrinters=")
- .append((mTrackedPrinterList != null) ? mTrackedPrinterList.toString() : "null");
+
+ synchronized (mLock) {
+ pw.append(prefix).append(tab).append("trackedPrinters=").append(
+ (mTrackedPrinterList != null) ? mTrackedPrinterList.toString() : "null");
+ }
}
private boolean isBound() {
@@ -574,7 +616,11 @@ final class RemotePrintService implements DeathRecipient {
mHasActivePrintJobs = false;
mHasPrinterDiscoverySession = false;
mDiscoveryPriorityList = null;
- mTrackedPrinterList = null;
+
+ synchronized (mLock) {
+ mTrackedPrinterList = null;
+ }
+
if (isBound()) {
try {
mPrintService.setClient(null);
@@ -617,11 +663,13 @@ final class RemotePrintService implements DeathRecipient {
if (mServiceDied && mDiscoveryPriorityList != null) {
handleStartPrinterDiscovery(mDiscoveryPriorityList);
}
- // If the service died and printers were tracked, start tracking.
- if (mServiceDied && mTrackedPrinterList != null) {
- final int trackedPrinterCount = mTrackedPrinterList.size();
- for (int i = 0; i < trackedPrinterCount; i++) {
- handleStartPrinterStateTracking(mTrackedPrinterList.get(i));
+ synchronized (mLock) {
+ // If the service died and printers were tracked, start tracking.
+ if (mServiceDied && mTrackedPrinterList != null) {
+ final int trackedPrinterCount = mTrackedPrinterList.size();
+ for (int i = 0; i < trackedPrinterCount; i++) {
+ handleStartPrinterStateTracking(mTrackedPrinterList.get(i));
+ }
}
}
// Finally, do all the pending work.
diff --git a/services/print/java/com/android/server/print/RemotePrintSpooler.java b/services/print/java/com/android/server/print/RemotePrintSpooler.java
index abd2244959cf..f654fcb60750 100644
--- a/services/print/java/com/android/server/print/RemotePrintSpooler.java
+++ b/services/print/java/com/android/server/print/RemotePrintSpooler.java
@@ -40,8 +40,10 @@ import android.print.PrintJobInfo;
import android.print.PrintManager;
import android.print.PrinterId;
import android.printservice.PrintService;
+import android.service.print.PrintSpoolerStateProto;
import android.util.Slog;
import android.util.TimedRemoteCaller;
+import android.util.proto.ProtoOutputStream;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.os.TransferPipe;
@@ -363,7 +365,7 @@ final class RemotePrintSpooler {
*
* @param printerId the id of the printer the icon belongs to
* @param icon the icon that was loaded
- * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon
*/
public final void onCustomPrinterIconLoaded(@NonNull PrinterId printerId,
@Nullable Icon icon) {
@@ -396,7 +398,7 @@ final class RemotePrintSpooler {
* @param printerId the id of the printer the icon should be loaded for
* @return the custom icon to be used for the printer or null if the icon is
* not yet available
- * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon()
+ * @see android.print.PrinterInfo.Builder#setHasCustomPrinterIcon
*/
public final @Nullable Icon getCustomPrinterIcon(@NonNull PrinterId printerId) {
throwIfCalledOnMainThread();
@@ -556,6 +558,20 @@ final class RemotePrintSpooler {
}
}
+ public void dump(@NonNull ProtoOutputStream proto) {
+ synchronized (mLock) {
+ proto.write(PrintSpoolerStateProto.IS_DESTROYED, mDestroyed);
+ proto.write(PrintSpoolerStateProto.IS_BOUND, mRemoteInstance != null);
+ }
+
+ try {
+ proto.write(PrintSpoolerStateProto.INTERNAL_STATE,
+ TransferPipe.dumpAsync(getRemoteInstanceLazy().asBinder(), "--proto"));
+ } catch (IOException | TimeoutException | RemoteException | InterruptedException e) {
+ Slog.e(LOG_TAG, "Failed to dump remote instance", e);
+ }
+ }
+
public void dump(FileDescriptor fd, PrintWriter pw, String prefix) {
synchronized (mLock) {
pw.append(prefix).append("destroyed=")
diff --git a/services/print/java/com/android/server/print/UserState.java b/services/print/java/com/android/server/print/UserState.java
index 5770c5079d94..58833bee1b98 100644
--- a/services/print/java/com/android/server/print/UserState.java
+++ b/services/print/java/com/android/server/print/UserState.java
@@ -20,6 +20,12 @@ import static android.content.pm.PackageManager.GET_META_DATA;
import static android.content.pm.PackageManager.GET_SERVICES;
import static android.content.pm.PackageManager.MATCH_DEBUG_TRIAGED_MISSING;
+import static com.android.internal.print.DumpUtils.writeComponentName;
+import static com.android.internal.print.DumpUtils.writePrintJobInfo;
+import static com.android.internal.print.DumpUtils.writePrinterId;
+import static com.android.internal.print.DumpUtils.writePrinterInfo;
+import static com.android.internal.print.DumpUtils.writeStringIfNotNull;
+
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.PendingIntent;
@@ -58,6 +64,10 @@ import android.printservice.recommendation.IRecommendationsChangeListener;
import android.printservice.recommendation.RecommendationInfo;
import android.provider.DocumentsContract;
import android.provider.Settings;
+import android.service.print.CachedPrintJobProto;
+import android.service.print.InstalledPrintServiceProto;
+import android.service.print.PrintUserStateProto;
+import android.service.print.PrinterDiscoverySessionProto;
import android.text.TextUtils;
import android.text.TextUtils.SimpleStringSplitter;
import android.util.ArrayMap;
@@ -65,6 +75,7 @@ import android.util.ArraySet;
import android.util.Log;
import android.util.Slog;
import android.util.SparseArray;
+import android.util.proto.ProtoOutputStream;
import com.android.internal.R;
import com.android.internal.logging.MetricsLogger;
@@ -803,55 +814,107 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks,
mDestroyed = true;
}
+ public void dump(@NonNull ProtoOutputStream proto) {
+ synchronized (mLock) {
+ proto.write(PrintUserStateProto.USER_ID, mUserId);
+
+ final int installedServiceCount = mInstalledServices.size();
+ for (int i = 0; i < installedServiceCount; i++) {
+ long token = proto.start(PrintUserStateProto.INSTALLED_SERVICES);
+ PrintServiceInfo installedService = mInstalledServices.get(i);
+
+ ResolveInfo resolveInfo = installedService.getResolveInfo();
+ writeComponentName(proto, InstalledPrintServiceProto.COMPONENT_NAME,
+ new ComponentName(resolveInfo.serviceInfo.packageName,
+ resolveInfo.serviceInfo.name));
+
+ writeStringIfNotNull(proto, InstalledPrintServiceProto.SETTINGS_ACTIVITY,
+ installedService.getSettingsActivityName());
+ writeStringIfNotNull(proto, InstalledPrintServiceProto.ADD_PRINTERS_ACTIVITY,
+ installedService.getAddPrintersActivityName());
+ writeStringIfNotNull(proto, InstalledPrintServiceProto.ADVANCED_OPTIONS_ACTIVITY,
+ installedService.getAdvancedOptionsActivityName());
+
+ proto.end(token);
+ }
+
+ for (ComponentName disabledService : mDisabledServices) {
+ writeComponentName(proto, PrintUserStateProto.DISABLED_SERVICES, disabledService);
+ }
+
+ final int activeServiceCount = mActiveServices.size();
+ for (int i = 0; i < activeServiceCount; i++) {
+ long token = proto.start(PrintUserStateProto.ACTIVE_SERVICES);
+ mActiveServices.valueAt(i).dump(proto);
+ proto.end(token);
+ }
+
+ mPrintJobForAppCache.dumpLocked(proto);
+
+ if (mPrinterDiscoverySession != null) {
+ long token = proto.start(PrintUserStateProto.DISCOVERY_SESSIONS);
+ mPrinterDiscoverySession.dumpLocked(proto);
+ proto.end(token);
+ }
+
+ }
+
+ long token = proto.start(PrintUserStateProto.PRINT_SPOOLER_STATE);
+ mSpooler.dump(proto);
+ proto.end(token);
+ }
+
public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String prefix) {
pw.append(prefix).append("user state ").append(String.valueOf(mUserId)).append(":");
pw.println();
String tab = " ";
- pw.append(prefix).append(tab).append("installed services:").println();
- final int installedServiceCount = mInstalledServices.size();
- for (int i = 0; i < installedServiceCount; i++) {
- PrintServiceInfo installedService = mInstalledServices.get(i);
- String installedServicePrefix = prefix + tab + tab;
- pw.append(installedServicePrefix).append("service:").println();
- ResolveInfo resolveInfo = installedService.getResolveInfo();
- ComponentName componentName = new ComponentName(
- resolveInfo.serviceInfo.packageName,
- resolveInfo.serviceInfo.name);
- pw.append(installedServicePrefix).append(tab).append("componentName=")
- .append(componentName.flattenToString()).println();
- pw.append(installedServicePrefix).append(tab).append("settingsActivity=")
- .append(installedService.getSettingsActivityName()).println();
- pw.append(installedServicePrefix).append(tab).append("addPrintersActivity=")
- .append(installedService.getAddPrintersActivityName()).println();
- pw.append(installedServicePrefix).append(tab).append("avancedOptionsActivity=")
- .append(installedService.getAdvancedOptionsActivityName()).println();
- }
-
- pw.append(prefix).append(tab).append("disabled services:").println();
- for (ComponentName disabledService : mDisabledServices) {
- String disabledServicePrefix = prefix + tab + tab;
- pw.append(disabledServicePrefix).append("service:").println();
- pw.append(disabledServicePrefix).append(tab).append("componentName=")
- .append(disabledService.flattenToString());
- pw.println();
- }
+ synchronized (mLock) {
+ pw.append(prefix).append(tab).append("installed services:").println();
+ final int installedServiceCount = mInstalledServices.size();
+ for (int i = 0; i < installedServiceCount; i++) {
+ PrintServiceInfo installedService = mInstalledServices.get(i);
+ String installedServicePrefix = prefix + tab + tab;
+ pw.append(installedServicePrefix).append("service:").println();
+ ResolveInfo resolveInfo = installedService.getResolveInfo();
+ ComponentName componentName = new ComponentName(
+ resolveInfo.serviceInfo.packageName,
+ resolveInfo.serviceInfo.name);
+ pw.append(installedServicePrefix).append(tab).append("componentName=")
+ .append(componentName.flattenToString()).println();
+ pw.append(installedServicePrefix).append(tab).append("settingsActivity=")
+ .append(installedService.getSettingsActivityName()).println();
+ pw.append(installedServicePrefix).append(tab).append("addPrintersActivity=")
+ .append(installedService.getAddPrintersActivityName()).println();
+ pw.append(installedServicePrefix).append(tab).append("avancedOptionsActivity=")
+ .append(installedService.getAdvancedOptionsActivityName()).println();
+ }
+
+ pw.append(prefix).append(tab).append("disabled services:").println();
+ for (ComponentName disabledService : mDisabledServices) {
+ String disabledServicePrefix = prefix + tab + tab;
+ pw.append(disabledServicePrefix).append("service:").println();
+ pw.append(disabledServicePrefix).append(tab).append("componentName=")
+ .append(disabledService.flattenToString());
+ pw.println();
+ }
- pw.append(prefix).append(tab).append("active services:").println();
- final int activeServiceCount = mActiveServices.size();
- for (int i = 0; i < activeServiceCount; i++) {
- RemotePrintService activeService = mActiveServices.valueAt(i);
- activeService.dump(pw, prefix + tab + tab);
- pw.println();
- }
+ pw.append(prefix).append(tab).append("active services:").println();
+ final int activeServiceCount = mActiveServices.size();
+ for (int i = 0; i < activeServiceCount; i++) {
+ RemotePrintService activeService = mActiveServices.valueAt(i);
+ activeService.dump(pw, prefix + tab + tab);
+ pw.println();
+ }
- pw.append(prefix).append(tab).append("cached print jobs:").println();
- mPrintJobForAppCache.dump(pw, prefix + tab + tab);
+ pw.append(prefix).append(tab).append("cached print jobs:").println();
+ mPrintJobForAppCache.dumpLocked(pw, prefix + tab + tab);
- pw.append(prefix).append(tab).append("discovery mediator:").println();
- if (mPrinterDiscoverySession != null) {
- mPrinterDiscoverySession.dump(pw, prefix + tab + tab);
+ pw.append(prefix).append(tab).append("discovery mediator:").println();
+ if (mPrinterDiscoverySession != null) {
+ mPrinterDiscoverySession.dumpLocked(pw, prefix + tab + tab);
+ }
}
pw.append(prefix).append(tab).append("print spooler:").println();
@@ -1611,7 +1674,40 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks,
}
}
- public void dump(PrintWriter pw, String prefix) {
+ public void dumpLocked(@NonNull ProtoOutputStream proto) {
+ proto.write(PrinterDiscoverySessionProto.IS_DESTROYED, mDestroyed);
+ proto.write(PrinterDiscoverySessionProto.IS_PRINTER_DISCOVERY_IN_PROGRESS,
+ !mStartedPrinterDiscoveryTokens.isEmpty());
+
+ final int observerCount = mDiscoveryObservers.beginBroadcast();
+ for (int i = 0; i < observerCount; i++) {
+ IPrinterDiscoveryObserver observer = mDiscoveryObservers.getBroadcastItem(i);
+ proto.write(PrinterDiscoverySessionProto.PRINTER_DISCOVERY_OBSERVERS,
+ observer.toString());
+ }
+ mDiscoveryObservers.finishBroadcast();
+
+ final int tokenCount = this.mStartedPrinterDiscoveryTokens.size();
+ for (int i = 0; i < tokenCount; i++) {
+ IBinder token = mStartedPrinterDiscoveryTokens.get(i);
+ proto.write(PrinterDiscoverySessionProto.DISCOVERY_REQUESTS, token.toString());
+ }
+
+ final int trackedPrinters = mStateTrackedPrinters.size();
+ for (int i = 0; i < trackedPrinters; i++) {
+ PrinterId printer = mStateTrackedPrinters.get(i);
+ writePrinterId(proto, PrinterDiscoverySessionProto.TRACKED_PRINTER_REQUESTS,
+ printer);
+ }
+
+ final int printerCount = mPrinters.size();
+ for (int i = 0; i < printerCount; i++) {
+ PrinterInfo printer = mPrinters.valueAt(i);
+ writePrinterInfo(mContext, proto, PrinterDiscoverySessionProto.PRINTER, printer);
+ }
+ }
+
+ public void dumpLocked(PrintWriter pw, String prefix) {
pw.append(prefix).append("destroyed=")
.append(String.valueOf(mDestroyed)).println();
@@ -1989,19 +2085,36 @@ final class UserState implements PrintSpoolerCallbacks, PrintServiceCallbacks,
}
}
- public void dump(PrintWriter pw, String prefix) {
- synchronized (mLock) {
- String tab = " ";
- final int bucketCount = mPrintJobsForRunningApp.size();
- for (int i = 0; i < bucketCount; i++) {
- final int appId = mPrintJobsForRunningApp.keyAt(i);
- pw.append(prefix).append("appId=" + appId).append(':').println();
- List<PrintJobInfo> bucket = mPrintJobsForRunningApp.valueAt(i);
- final int printJobCount = bucket.size();
- for (int j = 0; j < printJobCount; j++) {
- PrintJobInfo printJob = bucket.get(j);
- pw.append(prefix).append(tab).append(printJob.toString()).println();
- }
+ public void dumpLocked(PrintWriter pw, String prefix) {
+ String tab = " ";
+ final int bucketCount = mPrintJobsForRunningApp.size();
+ for (int i = 0; i < bucketCount; i++) {
+ final int appId = mPrintJobsForRunningApp.keyAt(i);
+ pw.append(prefix).append("appId=" + appId).append(':').println();
+ List<PrintJobInfo> bucket = mPrintJobsForRunningApp.valueAt(i);
+ final int printJobCount = bucket.size();
+ for (int j = 0; j < printJobCount; j++) {
+ PrintJobInfo printJob = bucket.get(j);
+ pw.append(prefix).append(tab).append(printJob.toString()).println();
+ }
+ }
+ }
+
+ public void dumpLocked(@NonNull ProtoOutputStream proto) {
+ final int bucketCount = mPrintJobsForRunningApp.size();
+ for (int i = 0; i < bucketCount; i++) {
+ final int appId = mPrintJobsForRunningApp.keyAt(i);
+ List<PrintJobInfo> bucket = mPrintJobsForRunningApp.valueAt(i);
+ final int printJobCount = bucket.size();
+ for (int j = 0; j < printJobCount; j++) {
+ long token = proto.start(PrintUserStateProto.CACHED_PRINT_JOBS);
+
+ proto.write(CachedPrintJobProto.APP_ID, appId);
+
+ writePrintJobInfo(mContext, proto, CachedPrintJobProto.PRINT_JOB,
+ bucket.get(j));
+
+ proto.end(token);
}
}
}