diff --git a/services/core/java/com/android/server/location/eventlog/LocationEventLog.java b/services/core/java/com/android/server/location/eventlog/LocationEventLog.java index 2ffc62a0731bf..66b23c4d7377a 100644 --- a/services/core/java/com/android/server/location/eventlog/LocationEventLog.java +++ b/services/core/java/com/android/server/location/eventlog/LocationEventLog.java @@ -58,13 +58,17 @@ public class LocationEventLog extends LocalEventLog { private static final int EVENT_LOCATION_ENABLED = 2; private static final int EVENT_PROVIDER_ENABLED = 3; private static final int EVENT_PROVIDER_MOCKED = 4; - private static final int EVENT_PROVIDER_REGISTER_CLIENT = 5; - private static final int EVENT_PROVIDER_UNREGISTER_CLIENT = 6; - private static final int EVENT_PROVIDER_UPDATE_REQUEST = 7; - private static final int EVENT_PROVIDER_RECEIVE_LOCATION = 8; - private static final int EVENT_PROVIDER_DELIVER_LOCATION = 9; - private static final int EVENT_PROVIDER_STATIONARY_THROTTLED = 10; - private static final int EVENT_LOCATION_POWER_SAVE_MODE_CHANGE = 11; + private static final int EVENT_PROVIDER_CLIENT_REGISTER = 5; + private static final int EVENT_PROVIDER_CLIENT_UNREGISTER = 6; + private static final int EVENT_PROVIDER_CLIENT_FOREGROUND = 7; + private static final int EVENT_PROVIDER_CLIENT_BACKGROUND = 8; + private static final int EVENT_PROVIDER_CLIENT_PERMITTED = 9; + private static final int EVENT_PROVIDER_CLIENT_UNPERMITTED = 10; + private static final int EVENT_PROVIDER_UPDATE_REQUEST = 11; + private static final int EVENT_PROVIDER_RECEIVE_LOCATION = 12; + private static final int EVENT_PROVIDER_DELIVER_LOCATION = 13; + private static final int EVENT_PROVIDER_STATIONARY_THROTTLED = 14; + private static final int EVENT_LOCATION_POWER_SAVE_MODE_CHANGE = 15; @GuardedBy("mAggregateStats") private final ArrayMap> mAggregateStats; @@ -126,13 +130,13 @@ public class LocationEventLog extends LocalEventLog { /** Logs a new client registration for a location provider. */ public void logProviderClientRegistered(String provider, CallerIdentity identity, LocationRequest request) { - addLogEvent(EVENT_PROVIDER_REGISTER_CLIENT, provider, identity, request); + addLogEvent(EVENT_PROVIDER_CLIENT_REGISTER, provider, identity, request); getAggregateStats(provider, identity).markRequestAdded(request.getIntervalMillis()); } /** Logs a client unregistration for a location provider. */ public void logProviderClientUnregistered(String provider, CallerIdentity identity) { - addLogEvent(EVENT_PROVIDER_UNREGISTER_CLIENT, provider, identity); + addLogEvent(EVENT_PROVIDER_CLIENT_UNREGISTER, provider, identity); getAggregateStats(provider, identity).markRequestRemoved(); } @@ -148,14 +152,34 @@ public class LocationEventLog extends LocalEventLog { /** Logs a client for a location provider entering the foreground state. */ public void logProviderClientForeground(String provider, CallerIdentity identity) { + if (Build.IS_DEBUGGABLE || D) { + addLogEvent(EVENT_PROVIDER_CLIENT_FOREGROUND, provider, identity); + } getAggregateStats(provider, identity).markRequestForeground(); } /** Logs a client for a location provider leaving the foreground state. */ public void logProviderClientBackground(String provider, CallerIdentity identity) { + if (Build.IS_DEBUGGABLE || D) { + addLogEvent(EVENT_PROVIDER_CLIENT_BACKGROUND, provider, identity); + } getAggregateStats(provider, identity).markRequestBackground(); } + /** Logs a client for a location provider entering the permitted state. */ + public void logProviderClientPermitted(String provider, CallerIdentity identity) { + if (Build.IS_DEBUGGABLE || D) { + addLogEvent(EVENT_PROVIDER_CLIENT_PERMITTED, provider, identity); + } + } + + /** Logs a client for a location provider leaving the permitted state. */ + public void logProviderClientUnpermitted(String provider, CallerIdentity identity) { + if (Build.IS_DEBUGGABLE || D) { + addLogEvent(EVENT_PROVIDER_CLIENT_UNPERMITTED, provider, identity); + } + } + /** Logs a change to the provider request for a location provider. */ public void logProviderUpdateRequest(String provider, ProviderRequest request) { addLogEvent(EVENT_PROVIDER_UPDATE_REQUEST, provider, request); @@ -201,12 +225,24 @@ public class LocationEventLog extends LocalEventLog { (Boolean) args[2]); case EVENT_PROVIDER_MOCKED: return new ProviderMockedEvent(timeDelta, (String) args[0], (Boolean) args[1]); - case EVENT_PROVIDER_REGISTER_CLIENT: - return new ProviderRegisterEvent(timeDelta, (String) args[0], true, + case EVENT_PROVIDER_CLIENT_REGISTER: + return new ProviderClientRegisterEvent(timeDelta, (String) args[0], true, (CallerIdentity) args[1], (LocationRequest) args[2]); - case EVENT_PROVIDER_UNREGISTER_CLIENT: - return new ProviderRegisterEvent(timeDelta, (String) args[0], false, + case EVENT_PROVIDER_CLIENT_UNREGISTER: + return new ProviderClientRegisterEvent(timeDelta, (String) args[0], false, (CallerIdentity) args[1], null); + case EVENT_PROVIDER_CLIENT_FOREGROUND: + return new ProviderClientForegroundEvent(timeDelta, (String) args[0], true, + (CallerIdentity) args[1]); + case EVENT_PROVIDER_CLIENT_BACKGROUND: + return new ProviderClientForegroundEvent(timeDelta, (String) args[0], false, + (CallerIdentity) args[1]); + case EVENT_PROVIDER_CLIENT_PERMITTED: + return new ProviderClientPermittedEvent(timeDelta, (String) args[0], true, + (CallerIdentity) args[1]); + case EVENT_PROVIDER_CLIENT_UNPERMITTED: + return new ProviderClientPermittedEvent(timeDelta, (String) args[0], false, + (CallerIdentity) args[1]); case EVENT_PROVIDER_UPDATE_REQUEST: return new ProviderUpdateEvent(timeDelta, (String) args[0], (ProviderRequest) args[1]); @@ -279,13 +315,13 @@ public class LocationEventLog extends LocalEventLog { } } - private static final class ProviderRegisterEvent extends ProviderEvent { + private static final class ProviderClientRegisterEvent extends ProviderEvent { private final boolean mRegistered; private final CallerIdentity mIdentity; @Nullable private final LocationRequest mLocationRequest; - ProviderRegisterEvent(long timeDelta, String provider, boolean registered, + ProviderClientRegisterEvent(long timeDelta, String provider, boolean registered, CallerIdentity identity, @Nullable LocationRequest locationRequest) { super(timeDelta, provider); mRegistered = registered; @@ -296,14 +332,52 @@ public class LocationEventLog extends LocalEventLog { @Override public String getLogString() { if (mRegistered) { - return mProvider + " provider " + "+registration " + mIdentity + " -> " + return mProvider + " provider +registration " + mIdentity + " -> " + mLocationRequest; } else { - return mProvider + " provider " + "-registration " + mIdentity; + return mProvider + " provider -registration " + mIdentity; } } } + private static final class ProviderClientForegroundEvent extends ProviderEvent { + + private final boolean mForeground; + private final CallerIdentity mIdentity; + + ProviderClientForegroundEvent(long timeDelta, String provider, boolean foreground, + CallerIdentity identity) { + super(timeDelta, provider); + mForeground = foreground; + mIdentity = identity; + } + + @Override + public String getLogString() { + return mProvider + " provider client " + mIdentity + " -> " + + (mForeground ? "foreground" : "background"); + } + } + + private static final class ProviderClientPermittedEvent extends ProviderEvent { + + private final boolean mPermitted; + private final CallerIdentity mIdentity; + + ProviderClientPermittedEvent(long timeDelta, String provider, boolean permitted, + CallerIdentity identity) { + super(timeDelta, provider); + mPermitted = permitted; + mIdentity = identity; + } + + @Override + public String getLogString() { + return mProvider + " provider client " + mIdentity + " -> " + + (mPermitted ? "permitted" : "unpermitted"); + } + } + private static final class ProviderUpdateEvent extends ProviderEvent { private final ProviderRequest mRequest; diff --git a/services/core/java/com/android/server/location/provider/LocationProviderManager.java b/services/core/java/com/android/server/location/provider/LocationProviderManager.java index 4b772f29e250b..9474f5de0ca13 100644 --- a/services/core/java/com/android/server/location/provider/LocationProviderManager.java +++ b/services/core/java/com/android/server/location/provider/LocationProviderManager.java @@ -523,6 +523,13 @@ public class LocationProviderManager extends } mPermitted = permitted; + + if (mForeground) { + EVENT_LOG.logProviderClientPermitted(mName, getIdentity()); + } else { + EVENT_LOG.logProviderClientUnpermitted(mName, getIdentity()); + } + return true; }