From fefd41b58ab575ca43c04aff25f9a2d0bb2c7b9d Mon Sep 17 00:00:00 2001 From: Edgar Arriaga Date: Tue, 25 Nov 2025 22:41:40 +0000 Subject: [PATCH 1/2] ProfilingManager docs V2: snippets for ANR section --- .../ProfilingManagerJavaSnippets.java | 85 ++++++++++++++++++- misc/src/main/res/layout/activity_main.xml | 7 ++ 2 files changed, 91 insertions(+), 1 deletion(-) diff --git a/misc/src/main/java/com/example/snippets/profiling/ProfilingManagerJavaSnippets.java b/misc/src/main/java/com/example/snippets/profiling/ProfilingManagerJavaSnippets.java index 4c2d2d23b..2c7a1ed05 100644 --- a/misc/src/main/java/com/example/snippets/profiling/ProfilingManagerJavaSnippets.java +++ b/misc/src/main/java/com/example/snippets/profiling/ProfilingManagerJavaSnippets.java @@ -18,10 +18,13 @@ import androidx.core.os.Profiling; import androidx.core.os.SystemTraceRequestBuilder; import androidx.core.os.BufferFillPolicy; +import com.example.snippets.R; public class ProfilingManagerJavaSnippets { public class MainActivityJava extends Activity { - + // [START android_profiling_manager_anr_case_study_java_snippet_2] + private static final int NETWORK_TIMEOUT_MILLISECS = 2000; + // [END android_profiling_manager_anr_case_study_java_snippet_2] public static final String TAG = "ProfilingManager"; @Override @@ -125,5 +128,85 @@ public void setupProfileUploadWorker(String resultFilePath) { // Setup job to upload the profiling result file. } // [END android_profiling_manager_triggered_trace_setup_upload_job_java] + + // [START android_profiling_manager_anr_case_study_java_snippet_1] + public void addANRTrigger() { + ProfilingManager profilingManager = getApplicationContext().getSystemService(ProfilingManager.class); + List triggers = new ArrayList<>(); + ProfilingTrigger.Builder triggerBuilder = new ProfilingTrigger.Builder(ProfilingTrigger.TRIGGER_TYPE_ANR); + triggers.add(triggerBuilder.build()); + Executor mainExecutor = Executors.newSingleThreadExecutor(); + Consumer resultCallback = + profilingResult -> { + // Handle uploading trace to your back-end + }; + profilingManager.registerForAllProfilingResults(mainExecutor, resultCallback); + profilingManager.addProfilingTriggers(triggers); + } + // [END android_profiling_manager_anr_case_study_java_snippet_1] + + // [START android_profiling_manager_anr_case_study_java_snippet_2] + public void setupButtonCallback() { + findViewById(R.id.submit).setOnClickListener(submitButtonView -> { + Trace.beginSection("MyApp:SubmitButton"); + onClickSubmit(); + Trace.endSection(); + }); + } + + public void onClickSubmit() { + prepareNetworkRequest(); + + boolean networkRequestSuccess = false; + int maxAttempts = 10; + while (!networkRequestSuccess && maxAttempts > 0) { + networkRequestSuccess = performNetworkRequest(NETWORK_TIMEOUT_MILLISECS); + maxAttempts--; + } + + if (networkRequestSuccess) { + handleNetworkResponse(); + } + } + + boolean performNetworkRequest(int timeoutMiliseconds) { + // [START_EXCLUDE] + cpuIntensiveComputation(20); + try { + if (Math.random() < 0.2) { + // Simulate performing a network request by waiting a random period of time + int networkRequestTimeMs = (int)(Math.random() * timeoutMiliseconds); + Thread.sleep(networkRequestTimeMs); + return true; + } else { + // Simulate a timeout + Thread.sleep(timeoutMiliseconds); + } + } catch (InterruptedException e) {} + return false; + // [END_EXCLUDE] + } + + // [START_EXCLUDE silent] + void cpuIntensiveComputation(int durationMs) { + long start = System.currentTimeMillis(); + while (System.currentTimeMillis() - start < durationMs) {} + } + // [END_EXCLUDE silent] + + void prepareNetworkRequest() { + // [START_EXCLUDE] + cpuIntensiveComputation(1000); + // [END_EXCLUDE] + } + + public void handleNetworkResponse() { + Trace.beginSection("handleNetworkResponse"); + // [START_EXCLUDE] + cpuIntensiveComputation(2000); + // [END_EXCLUDE] + Trace.endSection(); + } + // [END android_profiling_manager_anr_case_study_java_snippet_2] } } diff --git a/misc/src/main/res/layout/activity_main.xml b/misc/src/main/res/layout/activity_main.xml index dbfa14759..1366cf438 100644 --- a/misc/src/main/res/layout/activity_main.xml +++ b/misc/src/main/res/layout/activity_main.xml @@ -40,4 +40,11 @@ app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> +