Merge changes I47b91c0c,I630c0e49 into main
* changes: Report sent query count Report service info callback metrics data
This commit is contained in:
@@ -172,6 +172,8 @@ public class NsdService extends INsdManager.Stub {
|
||||
private static final int MAX_SERVICES_COUNT_METRIC_PER_CLIENT = 100;
|
||||
@VisibleForTesting
|
||||
static final int NO_TRANSACTION = -1;
|
||||
private static final int NO_SENT_QUERY_COUNT = 0;
|
||||
private static final int DISCOVERY_QUERY_SENT_CALLBACK = 1000;
|
||||
private static final SharedLog LOGGER = new SharedLog("serviceDiscovery");
|
||||
|
||||
private final Context mContext;
|
||||
@@ -288,7 +290,8 @@ public class NsdService extends INsdManager.Stub {
|
||||
public void onSearchFailedToStart() { }
|
||||
|
||||
@Override
|
||||
public void onDiscoveryQuerySent(@NonNull List<String> subtypes, int transactionId) { }
|
||||
public void onDiscoveryQuerySent(@NonNull List<String> subtypes,
|
||||
int sentQueryTransactionId) { }
|
||||
|
||||
@Override
|
||||
public void onFailedToParseMdnsResponse(int receivedPacketNumber, int errorCode) { }
|
||||
@@ -315,6 +318,13 @@ public class NsdService extends INsdManager.Stub {
|
||||
NsdManager.SERVICE_LOST,
|
||||
new MdnsEvent(mClientRequestId, serviceInfo));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDiscoveryQuerySent(@NonNull List<String> subtypes,
|
||||
int sentQueryTransactionId) {
|
||||
mNsdStateMachine.sendMessage(MDNS_DISCOVERY_MANAGER_EVENT, mTransactionId,
|
||||
DISCOVERY_QUERY_SENT_CALLBACK, new MdnsEvent(mClientRequestId));
|
||||
}
|
||||
}
|
||||
|
||||
private class ResolutionListener extends MdnsListener {
|
||||
@@ -330,6 +340,13 @@ public class NsdService extends INsdManager.Stub {
|
||||
NsdManager.RESOLVE_SERVICE_SUCCEEDED,
|
||||
new MdnsEvent(mClientRequestId, serviceInfo, isServiceFromCache));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDiscoveryQuerySent(@NonNull List<String> subtypes,
|
||||
int sentQueryTransactionId) {
|
||||
mNsdStateMachine.sendMessage(MDNS_DISCOVERY_MANAGER_EVENT, mTransactionId,
|
||||
DISCOVERY_QUERY_SENT_CALLBACK, new MdnsEvent(mClientRequestId));
|
||||
}
|
||||
}
|
||||
|
||||
private class ServiceInfoListener extends MdnsListener {
|
||||
@@ -360,6 +377,13 @@ public class NsdService extends INsdManager.Stub {
|
||||
NsdManager.SERVICE_UPDATED_LOST,
|
||||
new MdnsEvent(mClientRequestId, serviceInfo));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDiscoveryQuerySent(@NonNull List<String> subtypes,
|
||||
int sentQueryTransactionId) {
|
||||
mNsdStateMachine.sendMessage(MDNS_DISCOVERY_MANAGER_EVENT, mTransactionId,
|
||||
DISCOVERY_QUERY_SENT_CALLBACK, new MdnsEvent(mClientRequestId));
|
||||
}
|
||||
}
|
||||
|
||||
private class SocketRequestMonitor implements MdnsSocketProvider.SocketRequestMonitor {
|
||||
@@ -465,15 +489,19 @@ public class NsdService extends INsdManager.Stub {
|
||||
*/
|
||||
private static class MdnsEvent {
|
||||
final int mClientRequestId;
|
||||
@NonNull
|
||||
@Nullable
|
||||
final MdnsServiceInfo mMdnsServiceInfo;
|
||||
final boolean mIsServiceFromCache;
|
||||
|
||||
MdnsEvent(int clientRequestId, @NonNull MdnsServiceInfo mdnsServiceInfo) {
|
||||
MdnsEvent(int clientRequestId) {
|
||||
this(clientRequestId, null /* mdnsServiceInfo */, false /* isServiceFromCache */);
|
||||
}
|
||||
|
||||
MdnsEvent(int clientRequestId, @Nullable MdnsServiceInfo mdnsServiceInfo) {
|
||||
this(clientRequestId, mdnsServiceInfo, false /* isServiceFromCache */);
|
||||
}
|
||||
|
||||
MdnsEvent(int clientRequestId, @NonNull MdnsServiceInfo mdnsServiceInfo,
|
||||
MdnsEvent(int clientRequestId, @Nullable MdnsServiceInfo mdnsServiceInfo,
|
||||
boolean isServiceFromCache) {
|
||||
mClientRequestId = clientRequestId;
|
||||
mMdnsServiceInfo = mdnsServiceInfo;
|
||||
@@ -1114,6 +1142,7 @@ public class NsdService extends INsdManager.Stub {
|
||||
resolveServiceType, listener, options);
|
||||
storeDiscoveryManagerRequestMap(clientRequestId, transactionId, listener,
|
||||
clientInfo, info.getNetwork());
|
||||
clientInfo.onServiceInfoCallbackRegistered(transactionId);
|
||||
clientInfo.log("Register a ServiceInfoListener " + transactionId
|
||||
+ " for service type:" + resolveServiceType);
|
||||
break;
|
||||
@@ -1140,7 +1169,7 @@ public class NsdService extends INsdManager.Stub {
|
||||
if (request instanceof DiscoveryManagerRequest) {
|
||||
stopDiscoveryManagerRequest(
|
||||
request, clientRequestId, transactionId, clientInfo);
|
||||
clientInfo.onServiceInfoCallbackUnregistered(clientRequestId);
|
||||
clientInfo.onServiceInfoCallbackUnregistered(clientRequestId, request);
|
||||
clientInfo.log("Unregister the ServiceInfoListener " + transactionId);
|
||||
} else {
|
||||
loge("Unregister failed with non-DiscoveryManagerRequest.");
|
||||
@@ -1410,17 +1439,25 @@ public class NsdService extends INsdManager.Stub {
|
||||
|
||||
final MdnsEvent event = (MdnsEvent) obj;
|
||||
final int clientRequestId = event.mClientRequestId;
|
||||
final ClientRequest request = clientInfo.mClientRequests.get(clientRequestId);
|
||||
if (request == null) {
|
||||
Log.e(TAG, "Unknown client request. clientRequestId=" + clientRequestId);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Deal with the discovery sent callback
|
||||
if (code == DISCOVERY_QUERY_SENT_CALLBACK) {
|
||||
request.onQuerySent();
|
||||
return true;
|
||||
}
|
||||
|
||||
// Deal with other callbacks.
|
||||
final NsdServiceInfo info = buildNsdServiceInfoFromMdnsEvent(event, code);
|
||||
// Errors are already logged if null
|
||||
if (info == null) return false;
|
||||
mServiceLogs.log(String.format(
|
||||
"MdnsDiscoveryManager event code=%s transactionId=%d",
|
||||
NsdManager.nameOf(code), transactionId));
|
||||
final ClientRequest request = clientInfo.mClientRequests.get(clientRequestId);
|
||||
if (request == null) {
|
||||
Log.e(TAG, "Unknown client request. clientRequestId=" + clientRequestId);
|
||||
return false;
|
||||
}
|
||||
switch (code) {
|
||||
case NsdManager.SERVICE_FOUND:
|
||||
clientInfo.onServiceFound(clientRequestId, info, request);
|
||||
@@ -1478,11 +1515,17 @@ public class NsdService extends INsdManager.Stub {
|
||||
|
||||
final List<InetAddress> addresses = getInetAddresses(serviceInfo);
|
||||
info.setHostAddresses(addresses);
|
||||
clientInfo.onServiceUpdated(clientRequestId, info);
|
||||
clientInfo.onServiceUpdated(clientRequestId, info, request);
|
||||
// Set the ServiceFromCache flag only if the service is actually being
|
||||
// retrieved from the cache. This flag should not be overridden by later
|
||||
// service updates, which may not be cached.
|
||||
if (event.mIsServiceFromCache) {
|
||||
request.setServiceFromCache(true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case NsdManager.SERVICE_UPDATED_LOST:
|
||||
clientInfo.onServiceUpdatedLost(clientRequestId);
|
||||
clientInfo.onServiceUpdatedLost(clientRequestId, request);
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
@@ -2218,6 +2261,7 @@ public class NsdService extends INsdManager.Stub {
|
||||
private int mLostServiceCount = 0;
|
||||
private final Set<String> mServices = new ArraySet<>();
|
||||
private boolean mIsServiceFromCache = false;
|
||||
private int mSentQueryCount = NO_SENT_QUERY_COUNT;
|
||||
|
||||
private ClientRequest(int transactionId, long startTimeMs) {
|
||||
mTransactionId = transactionId;
|
||||
@@ -2258,6 +2302,14 @@ public class NsdService extends INsdManager.Stub {
|
||||
public boolean isServiceFromCache() {
|
||||
return mIsServiceFromCache;
|
||||
}
|
||||
|
||||
public void onQuerySent() {
|
||||
mSentQueryCount++;
|
||||
}
|
||||
|
||||
public int getSentQueryCount() {
|
||||
return mSentQueryCount;
|
||||
}
|
||||
}
|
||||
|
||||
private static class LegacyClientRequest extends ClientRequest {
|
||||
@@ -2392,10 +2444,18 @@ public class NsdService extends INsdManager.Stub {
|
||||
request.calculateRequestDurationMs(mClock.elapsedRealtime()),
|
||||
request.getFoundServiceCount(),
|
||||
request.getLostServiceCount(),
|
||||
request.getServicesCount());
|
||||
request.getServicesCount(),
|
||||
request.getSentQueryCount());
|
||||
} else if (listener instanceof ResolutionListener) {
|
||||
mMetrics.reportServiceResolutionStop(transactionId,
|
||||
request.calculateRequestDurationMs(mClock.elapsedRealtime()));
|
||||
} else if (listener instanceof ServiceInfoListener) {
|
||||
mMetrics.reportServiceInfoCallbackUnregistered(transactionId,
|
||||
request.calculateRequestDurationMs(mClock.elapsedRealtime()),
|
||||
request.getFoundServiceCount(),
|
||||
request.getLostServiceCount(),
|
||||
request.isServiceFromCache(),
|
||||
request.getSentQueryCount());
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@@ -2418,7 +2478,8 @@ public class NsdService extends INsdManager.Stub {
|
||||
request.calculateRequestDurationMs(mClock.elapsedRealtime()),
|
||||
request.getFoundServiceCount(),
|
||||
request.getLostServiceCount(),
|
||||
request.getServicesCount());
|
||||
request.getServicesCount(),
|
||||
NO_SENT_QUERY_COUNT);
|
||||
break;
|
||||
case NsdManager.RESOLVE_SERVICE:
|
||||
stopResolveService(transactionId);
|
||||
@@ -2526,7 +2587,8 @@ public class NsdService extends INsdManager.Stub {
|
||||
request.calculateRequestDurationMs(mClock.elapsedRealtime()),
|
||||
request.getFoundServiceCount(),
|
||||
request.getLostServiceCount(),
|
||||
request.getServicesCount());
|
||||
request.getServicesCount(),
|
||||
request.getSentQueryCount());
|
||||
try {
|
||||
mCb.onStopDiscoverySucceeded(listenerKey);
|
||||
} catch (RemoteException e) {
|
||||
@@ -2594,7 +2656,8 @@ public class NsdService extends INsdManager.Stub {
|
||||
mMetrics.reportServiceResolved(
|
||||
request.mTransactionId,
|
||||
request.calculateRequestDurationMs(mClock.elapsedRealtime()),
|
||||
request.isServiceFromCache());
|
||||
request.isServiceFromCache(),
|
||||
request.getSentQueryCount());
|
||||
try {
|
||||
mCb.onResolveServiceSucceeded(listenerKey, info);
|
||||
} catch (RemoteException e) {
|
||||
@@ -2622,6 +2685,7 @@ public class NsdService extends INsdManager.Stub {
|
||||
}
|
||||
|
||||
void onServiceInfoCallbackRegistrationFailed(int listenerKey, int error) {
|
||||
mMetrics.reportServiceInfoCallbackRegistrationFailed(NO_TRANSACTION);
|
||||
try {
|
||||
mCb.onServiceInfoCallbackRegistrationFailed(listenerKey, error);
|
||||
} catch (RemoteException e) {
|
||||
@@ -2629,7 +2693,12 @@ public class NsdService extends INsdManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
void onServiceUpdated(int listenerKey, NsdServiceInfo info) {
|
||||
void onServiceInfoCallbackRegistered(int transactionId) {
|
||||
mMetrics.reportServiceInfoCallbackRegistered(transactionId);
|
||||
}
|
||||
|
||||
void onServiceUpdated(int listenerKey, NsdServiceInfo info, ClientRequest request) {
|
||||
request.onServiceFound(info.getServiceName());
|
||||
try {
|
||||
mCb.onServiceUpdated(listenerKey, info);
|
||||
} catch (RemoteException e) {
|
||||
@@ -2637,7 +2706,8 @@ public class NsdService extends INsdManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
void onServiceUpdatedLost(int listenerKey) {
|
||||
void onServiceUpdatedLost(int listenerKey, ClientRequest request) {
|
||||
request.onServiceLost();
|
||||
try {
|
||||
mCb.onServiceUpdatedLost(listenerKey);
|
||||
} catch (RemoteException e) {
|
||||
@@ -2645,7 +2715,14 @@ public class NsdService extends INsdManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
void onServiceInfoCallbackUnregistered(int listenerKey) {
|
||||
void onServiceInfoCallbackUnregistered(int listenerKey, ClientRequest request) {
|
||||
mMetrics.reportServiceInfoCallbackUnregistered(
|
||||
request.mTransactionId,
|
||||
request.calculateRequestDurationMs(mClock.elapsedRealtime()),
|
||||
request.getFoundServiceCount(),
|
||||
request.getLostServiceCount(),
|
||||
request.isServiceFromCache(),
|
||||
request.getSentQueryCount());
|
||||
try {
|
||||
mCb.onServiceInfoCallbackUnregistered(listenerKey);
|
||||
} catch (RemoteException e) {
|
||||
|
||||
Reference in New Issue
Block a user