diff --git a/azure-communication-ui/azure-communication-ui-demo-app/src/main/java/com/azure/android/communication/ui/callingcompositedemoapp/CallLauncherActivity.kt b/azure-communication-ui/azure-communication-ui-demo-app/src/main/java/com/azure/android/communication/ui/callingcompositedemoapp/CallLauncherActivity.kt
index d2701044b..861496e0f 100644
--- a/azure-communication-ui/azure-communication-ui-demo-app/src/main/java/com/azure/android/communication/ui/callingcompositedemoapp/CallLauncherActivity.kt
+++ b/azure-communication-ui/azure-communication-ui-demo-app/src/main/java/com/azure/android/communication/ui/callingcompositedemoapp/CallLauncherActivity.kt
@@ -11,6 +11,7 @@ import androidx.activity.viewModels
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import com.azure.android.communication.ui.callingcompositedemoapp.databinding.ActivityCallLauncherBinding
+import com.azure.android.communication.ui.callingcompositedemoapp.diagnostics.FpsDiagnostics
import com.azure.android.communication.ui.callingcompositedemoapp.diagnostics.MemoryViewer
import com.azure.android.communication.ui.callingcompositedemoapp.launcher.CallingCompositeLauncher
import java.util.UUID
@@ -113,12 +114,19 @@ class CallLauncherActivity : AppCompatActivity() {
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- memoryDiagnosticsCheckBox.visibility = View.VISIBLE
- memoryDiagnosticsCheckBox.setOnCheckedChangeListener { _, isChecked ->
- if (isChecked) {
- MemoryViewer.getMemoryViewer(application).show()
- } else {
- MemoryViewer.getMemoryViewer(application).hide()
+ val diagnostics =
+ applicationContext.resources.getBoolean(R.bool.diagnostics)
+
+ if (diagnostics) {
+ diagnosticsCheckBox.visibility = View.VISIBLE
+ diagnosticsCheckBox.setOnCheckedChangeListener { _, isChecked ->
+ if (isChecked) {
+ MemoryViewer.getMemoryViewer(application).show()
+ FpsDiagnostics.getFpsDiagnostics(application).start()
+ } else {
+ MemoryViewer.getMemoryViewer(application).hide()
+ FpsDiagnostics.getFpsDiagnostics(application).stop()
+ }
}
}
}
@@ -148,9 +156,10 @@ class CallLauncherActivity : AppCompatActivity() {
override fun onResume() {
super.onResume()
- // helps to turn on memory profiling when permissions change
- if (binding.memoryDiagnosticsCheckBox.isChecked) {
+ // helps to turn on memory, fps profiling when permissions change
+ if (binding.diagnosticsCheckBox.isChecked) {
MemoryViewer.getMemoryViewer(application).show()
+ FpsDiagnostics.getFpsDiagnostics(application).start()
}
}
@@ -216,7 +225,10 @@ class CallLauncherActivity : AppCompatActivity() {
}
private fun saveState(outState: Bundle?) {
- outState?.putBoolean(isTokenFunctionOptionSelected, callLauncherViewModel.isTokenFunctionOptionSelected)
+ outState?.putBoolean(
+ isTokenFunctionOptionSelected,
+ callLauncherViewModel.isTokenFunctionOptionSelected
+ )
outState?.putBoolean(isKotlinLauncherOptionSelected, callLauncherViewModel.isKotlinLauncher)
}
}
diff --git a/azure-communication-ui/azure-communication-ui-demo-app/src/main/java/com/azure/android/communication/ui/callingcompositedemoapp/diagnostics/FpsDiagnostics.kt b/azure-communication-ui/azure-communication-ui-demo-app/src/main/java/com/azure/android/communication/ui/callingcompositedemoapp/diagnostics/FpsDiagnostics.kt
new file mode 100644
index 000000000..fbe7dc1f6
--- /dev/null
+++ b/azure-communication-ui/azure-communication-ui-demo-app/src/main/java/com/azure/android/communication/ui/callingcompositedemoapp/diagnostics/FpsDiagnostics.kt
@@ -0,0 +1,37 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.android.communication.ui.callingcompositedemoapp.diagnostics
+
+import android.app.Application
+import com.microsoft.office.outlook.magnifierlib.Magnifier
+import com.microsoft.office.outlook.magnifierlib.frame.FPSMonitorConfig
+
+class FpsDiagnostics private constructor(
+ private val context: Application,
+) {
+
+ companion object {
+ private lateinit var fpsDiagnostics: FpsDiagnostics
+ fun getFpsDiagnostics(context: Application): FpsDiagnostics {
+ if (!::fpsDiagnostics.isInitialized) {
+ fpsDiagnostics = FpsDiagnostics(context)
+ }
+ return fpsDiagnostics
+ }
+ }
+
+ fun start() {
+ Magnifier.startMonitorFPS(
+ FPSMonitorConfig.Builder(context)
+ .lowPercentage(40 / 60f) // show red tips, (2.0f / 3.0f) by default
+ .mediumPercentage(50 / 60f) // show yellow tips, (5.0f / 6.0f) by default
+ .refreshRate(60f) // defaultDisplay.refreshRate by default
+ .build()
+ )
+ }
+
+ fun stop() {
+ Magnifier.stopMonitorFPS()
+ }
+}
diff --git a/azure-communication-ui/azure-communication-ui-demo-app/src/main/res/layout/activity_call_launcher.xml b/azure-communication-ui/azure-communication-ui-demo-app/src/main/res/layout/activity_call_launcher.xml
index 9ce18dd65..a1f0023c3 100644
--- a/azure-communication-ui/azure-communication-ui-demo-app/src/main/res/layout/activity_call_launcher.xml
+++ b/azure-communication-ui/azure-communication-ui-demo-app/src/main/res/layout/activity_call_launcher.xml
@@ -138,9 +138,9 @@
diff --git a/azure-communication-ui/azure-communication-ui-demo-app/src/main/res/values-night/themes.xml b/azure-communication-ui/azure-communication-ui-demo-app/src/main/res/values-night/themes.xml
index 6ad3bc0f2..3f5b9b2bd 100644
--- a/azure-communication-ui/azure-communication-ui-demo-app/src/main/res/values-night/themes.xml
+++ b/azure-communication-ui/azure-communication-ui-demo-app/src/main/res/values-night/themes.xml
@@ -1,3 +1,8 @@
+
+