Skip to content

Commit 093f9b7

Browse files
mikejurkaAndroid (Google) Code Review
authored andcommitted
Merge "Adding logging to debug widget deletions"
2 parents 26ae7db + 7bb9883 commit 093f9b7

File tree

1 file changed

+72
-43
lines changed

1 file changed

+72
-43
lines changed

services/java/com/android/server/AppWidgetService.java

Lines changed: 72 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,10 @@ public void disconnect() {
172172
boolean mSafeMode;
173173
boolean mStateLoaded;
174174

175+
// These are for debugging only -- widgets are going missing in some rare instances
176+
ArrayList<Provider> mDeletedProviders = new ArrayList<Provider>();
177+
ArrayList<Host> mDeletedHosts = new ArrayList<Host>();
178+
175179
AppWidgetService(Context context) {
176180
mContext = context;
177181
mPackageManager = context.getPackageManager();
@@ -219,6 +223,55 @@ private void ensureStateLoadedLocked() {
219223
}
220224
}
221225

226+
private void dumpProvider(Provider p, int index, PrintWriter pw) {
227+
AppWidgetProviderInfo info = p.info;
228+
pw.print(" ["); pw.print(index); pw.print("] provider ");
229+
pw.print(info.provider.flattenToShortString());
230+
pw.println(':');
231+
pw.print(" min=("); pw.print(info.minWidth);
232+
pw.print("x"); pw.print(info.minHeight);
233+
pw.print(") minResize=("); pw.print(info.minResizeWidth);
234+
pw.print("x"); pw.print(info.minResizeHeight);
235+
pw.print(") updatePeriodMillis=");
236+
pw.print(info.updatePeriodMillis);
237+
pw.print(" resizeMode=");
238+
pw.print(info.resizeMode);
239+
pw.print(" autoAdvanceViewId=");
240+
pw.print(info.autoAdvanceViewId);
241+
pw.print(" initialLayout=#");
242+
pw.print(Integer.toHexString(info.initialLayout));
243+
pw.print(" zombie="); pw.println(p.zombie);
244+
}
245+
246+
private void dumpHost(Host host, int index, PrintWriter pw) {
247+
pw.print(" ["); pw.print(index); pw.print("] hostId=");
248+
pw.print(host.hostId); pw.print(' ');
249+
pw.print(host.packageName); pw.print('/');
250+
pw.print(host.uid); pw.println(':');
251+
pw.print(" callbacks="); pw.println(host.callbacks);
252+
pw.print(" instances.size="); pw.print(host.instances.size());
253+
pw.print(" zombie="); pw.println(host.zombie);
254+
}
255+
256+
private void dumpAppWidgetId(AppWidgetId id, int index, PrintWriter pw) {
257+
pw.print(" ["); pw.print(index); pw.print("] id=");
258+
pw.println(id.appWidgetId);
259+
pw.print(" hostId=");
260+
pw.print(id.host.hostId); pw.print(' ');
261+
pw.print(id.host.packageName); pw.print('/');
262+
pw.println(id.host.uid);
263+
if (id.provider != null) {
264+
pw.print(" provider=");
265+
pw.println(id.provider.info.provider.flattenToShortString());
266+
}
267+
if (id.host != null) {
268+
pw.print(" host.callbacks="); pw.println(id.host.callbacks);
269+
}
270+
if (id.views != null) {
271+
pw.print(" views="); pw.println(id.views);
272+
}
273+
}
274+
222275
@Override
223276
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
224277
if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
@@ -233,61 +286,35 @@ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
233286
int N = mInstalledProviders.size();
234287
pw.println("Providers:");
235288
for (int i=0; i<N; i++) {
236-
Provider p = mInstalledProviders.get(i);
237-
AppWidgetProviderInfo info = p.info;
238-
pw.print(" ["); pw.print(i); pw.print("] provider ");
239-
pw.print(info.provider.flattenToShortString());
240-
pw.println(':');
241-
pw.print(" min=("); pw.print(info.minWidth);
242-
pw.print("x"); pw.print(info.minHeight);
243-
pw.print(") minResize=("); pw.print(info.minResizeWidth);
244-
pw.print("x"); pw.print(info.minResizeHeight);
245-
pw.print(") updatePeriodMillis=");
246-
pw.print(info.updatePeriodMillis);
247-
pw.print(" resizeMode=");
248-
pw.print(info.resizeMode);
249-
pw.print(" autoAdvanceViewId=");
250-
pw.print(info.autoAdvanceViewId);
251-
pw.print(" initialLayout=#");
252-
pw.print(Integer.toHexString(info.initialLayout));
253-
pw.print(" zombie="); pw.println(p.zombie);
289+
dumpProvider(mInstalledProviders.get(i), i, pw);
254290
}
255291

256292
N = mAppWidgetIds.size();
257293
pw.println(" ");
258294
pw.println("AppWidgetIds:");
259295
for (int i=0; i<N; i++) {
260-
AppWidgetId id = mAppWidgetIds.get(i);
261-
pw.print(" ["); pw.print(i); pw.print("] id=");
262-
pw.println(id.appWidgetId);
263-
pw.print(" hostId=");
264-
pw.print(id.host.hostId); pw.print(' ');
265-
pw.print(id.host.packageName); pw.print('/');
266-
pw.println(id.host.uid);
267-
if (id.provider != null) {
268-
pw.print(" provider=");
269-
pw.println(id.provider.info.provider.flattenToShortString());
270-
}
271-
if (id.host != null) {
272-
pw.print(" host.callbacks="); pw.println(id.host.callbacks);
273-
}
274-
if (id.views != null) {
275-
pw.print(" views="); pw.println(id.views);
276-
}
296+
dumpAppWidgetId(mAppWidgetIds.get(i), i, pw);
277297
}
278298

279299
N = mHosts.size();
280300
pw.println(" ");
281301
pw.println("Hosts:");
282302
for (int i=0; i<N; i++) {
283-
Host host = mHosts.get(i);
284-
pw.print(" ["); pw.print(i); pw.print("] hostId=");
285-
pw.print(host.hostId); pw.print(' ');
286-
pw.print(host.packageName); pw.print('/');
287-
pw.print(host.uid); pw.println(':');
288-
pw.print(" callbacks="); pw.println(host.callbacks);
289-
pw.print(" instances.size="); pw.print(host.instances.size());
290-
pw.print(" zombie="); pw.println(host.zombie);
303+
dumpHost(mHosts.get(i), i, pw);
304+
}
305+
306+
N = mDeletedProviders.size();
307+
pw.println(" ");
308+
pw.println("Deleted Providers:");
309+
for (int i=0; i<N; i++) {
310+
dumpProvider(mDeletedProviders.get(i), i, pw);
311+
}
312+
313+
N = mDeletedHosts.size();
314+
pw.println(" ");
315+
pw.println("Deleted Hosts:");
316+
for (int i=0; i<N; i++) {
317+
dumpHost(mDeletedHosts.get(i), i, pw);
291318
}
292319
}
293320
}
@@ -363,6 +390,7 @@ void deleteHostLocked(Host host) {
363390
}
364391
host.instances.clear();
365392
mHosts.remove(host);
393+
mDeletedHosts.add(host);
366394
// it's gone or going away, abruptly drop the callback connection
367395
host.callbacks = null;
368396
}
@@ -934,6 +962,7 @@ void removeProviderLocked(int index, Provider p) {
934962
}
935963
p.instances.clear();
936964
mInstalledProviders.remove(index);
965+
mDeletedProviders.add(p);
937966
// no need to send the DISABLE broadcast, since the receiver is gone anyway
938967
cancelBroadcasts(p);
939968
}

0 commit comments

Comments
 (0)