2222// THE SOFTWARE.
2323package com.microsoft.identity.common.internal.activebrokerdiscovery
2424
25+ import IBrokerDiscoveryClientTelemetryCallback
2526import android.content.Context
2627import android.os.Bundle
2728import com.microsoft.identity.common.exception.BrokerCommunicationException
@@ -66,15 +67,6 @@ class BrokerDiscoveryClient(private val brokerCandidates: Set<BrokerData>,
6667 private val isPackageInstalled : (BrokerData ) -> Boolean ,
6768 private val isValidBroker : (BrokerData ) -> Boolean ) : IBrokerDiscoveryClient {
6869
69- interface IBrokerDiscoveryClientTelemetryCallback {
70- fun onReadFromCache ()
71- fun onShouldUseAccountManager ()
72- fun onFinishCheckingIfPackageIsInstalled (timeSpent : Long )
73- fun onFinishCheckingIfSupportedByTargetedBroker (timeSpent : Long )
74- fun onFinishQueryingResultFromBroker (timeSpent : Long )
75- fun onFinishCheckingIfValidBroker (timeSpent : Long )
76- }
77-
7870 companion object {
7971 val TAG = BrokerDiscoveryClient ::class .simpleName
8072
@@ -108,8 +100,6 @@ class BrokerDiscoveryClient(private val brokerCandidates: Set<BrokerData>,
108100
109101 const val ERROR_BUNDLE_KEY = " ERROR_BUNDLE_KEY"
110102
111- public val sTelemetryCallback: IBrokerDiscoveryClientTelemetryCallback ? = null
112-
113103 /* *
114104 * Per-process Thread-safe, coroutine-safe Mutex of this class.
115105 * This is to prevent the IPC mechanism from being unnecessarily triggered due to race condition.
@@ -286,24 +276,35 @@ class BrokerDiscoveryClient(private val brokerCandidates: Set<BrokerData>,
286276
287277 override fun getActiveBroker (shouldSkipCache : Boolean ): BrokerData ? {
288278 return runBlocking {
289- return @runBlocking getActiveBrokerAsync(shouldSkipCache)
279+ return @runBlocking getActiveBrokerAsync(shouldSkipCache, null )
280+ }
281+ }
282+
283+ override fun getActiveBroker (
284+ shouldSkipCache : Boolean ,
285+ telemetryCallback : IBrokerDiscoveryClientTelemetryCallback
286+ ): BrokerData ? {
287+ return runBlocking {
288+ return @runBlocking getActiveBrokerAsync(shouldSkipCache, telemetryCallback)
290289 }
291290 }
292291
293- private suspend fun getActiveBrokerAsync (shouldSkipCache : Boolean ): BrokerData ? {
292+ private suspend fun getActiveBrokerAsync (shouldSkipCache : Boolean ,
293+ telemetryCallback : IBrokerDiscoveryClientTelemetryCallback ? ): BrokerData ? {
294294 val methodTag = " $TAG :getActiveBrokerAsync"
295295 classLevelLock.withLock {
296296 if (! shouldSkipCache) {
297297 if (cache.shouldUseAccountManager()) {
298- sTelemetryCallback?.onShouldUseAccountManager ()
298+ telemetryCallback?.onUseAccountManager ()
299299 return getActiveBrokerFromAccountManager()
300300 }
301+ val timeStartReadingFromCache = System .nanoTime()
301302 cache.getCachedActiveBroker()?.let {
302- sTelemetryCallback ?.onReadFromCache()
303+ telemetryCallback ?.onReadFromCache(System .nanoTime() - timeStartReadingFromCache )
303304
304- val startTime1 = System .nanoTime()
305+ val timeStartIsPackageInstalled = System .nanoTime()
305306 val isPackageInstalled= isPackageInstalled(it)
306- sTelemetryCallback ?.onFinishCheckingIfPackageIsInstalled(System .nanoTime() - startTime1 )
307+ telemetryCallback ?.onFinishCheckingIfPackageIsInstalled(System .nanoTime() - timeStartIsPackageInstalled )
307308 if (! isPackageInstalled) {
308309 Logger .info(
309310 methodTag,
@@ -313,9 +314,9 @@ class BrokerDiscoveryClient(private val brokerCandidates: Set<BrokerData>,
313314 return @let
314315 }
315316
316- val startTime2 = System .nanoTime()
317+ val timeStartIsValidBroker = System .nanoTime()
317318 val isValidBroker= isValidBroker(it)
318- sTelemetryCallback ?.onFinishCheckingIfValidBroker(System .nanoTime() - startTime2 )
319+ telemetryCallback ?.onFinishCheckingIfValidBroker(System .nanoTime() - timeStartIsValidBroker )
319320 if (! isValidBroker) {
320321 Logger .info(
321322 methodTag,
@@ -325,10 +326,10 @@ class BrokerDiscoveryClient(private val brokerCandidates: Set<BrokerData>,
325326 return @let
326327 }
327328
328- val startTime3 = System .nanoTime()
329+ val timeStartIsSupportedByTargetedBroker = System .nanoTime()
329330 val isSupportedByTargetedBroker =
330331 ipcStrategy.isSupportedByTargetedBroker(it.packageName)
331- sTelemetryCallback ?.onFinishCheckingIfSupportedByTargetedBroker(System .nanoTime() - startTime3 )
332+ telemetryCallback ?.onFinishCheckingIfSupportedByTargetedBroker(System .nanoTime() - timeStartIsSupportedByTargetedBroker )
332333 if (! isSupportedByTargetedBroker){
333334 Logger .info(
334335 methodTag,
@@ -343,14 +344,14 @@ class BrokerDiscoveryClient(private val brokerCandidates: Set<BrokerData>,
343344 }
344345 }
345346
346- val startTime4 = System .nanoTime()
347+ val timeStartQueryFromBroker = System .nanoTime()
347348 val brokerData = queryFromBroker(
348349 brokerCandidates = brokerCandidates,
349350 ipcStrategy = ipcStrategy,
350351 isPackageInstalled = isPackageInstalled,
351352 isValidBroker = isValidBroker
352353 )
353- sTelemetryCallback?.onFinishCheckingIfPackageIsInstalled (System .nanoTime() - startTime4 )
354+ telemetryCallback?.onFinishQueryingResultFromBroker (System .nanoTime() - timeStartQueryFromBroker )
354355
355356 if (brokerData != null ) {
356357 cache.setCachedActiveBroker(brokerData)
@@ -369,6 +370,7 @@ class BrokerDiscoveryClient(private val brokerCandidates: Set<BrokerData>,
369370 )
370371 )
371372
373+ telemetryCallback?.onUseAccountManager()
372374 val accountManagerResult = getActiveBrokerFromAccountManager()
373375 Logger .info(
374376 methodTag, " Tried getting active broker from account manager, " +
0 commit comments