Skip to content

Commit cf99c0c

Browse files
ProfilingManager Docs V2: Add trace upload job snippets (#746)
* ProfilingManager Docs V2: Add trace upload job snippets * Apply Spotless * revert java version change * refactor: consolidate job upload collection to reuse existing functions --------- Co-authored-by: edgararriagag <211581399+edgararriagag@users.noreply.github.com> Co-authored-by: Yacine Rezgui <rezgui.y@gmail.com>
1 parent 8ddb21f commit cf99c0c

File tree

4 files changed

+99
-16
lines changed

4 files changed

+99
-16
lines changed

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ androidx-test-junit = "1.3.0"
2929
androidx-window = "1.5.1"
3030
androidx-window-core = "1.5.1"
3131
androidx-window-java = "1.5.1"
32+
androidx-work-runtime = "2.11.0"
3233
androidx-xr-arcore = "1.0.0-alpha09"
3334
androidx-xr-compose = "1.0.0-alpha09"
3435
androidx-xr-scenecore = "1.0.0-alpha10"
@@ -195,6 +196,7 @@ androidx-webkit = { module = "androidx.webkit:webkit", version.ref = "webkit" }
195196
androidx-window = { module = "androidx.window:window", version.ref = "androidx-window" }
196197
androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidx-window-core" }
197198
androidx-window-java = { module = "androidx.window:window-java", version.ref = "androidx-window-java" }
199+
androidx-work-runtime = { module = "androidx.work:work-runtime", version.ref = "androidx-work-runtime" }
198200
androidx-work-runtime-ktx = "androidx.work:work-runtime-ktx:2.11.0"
199201
androidx-xr-arcore = { module = "androidx.xr.arcore:arcore", version.ref = "androidx-xr-arcore" }
200202
androidx-xr-compose = { module = "androidx.xr.compose:compose", version.ref = "androidx-xr-compose" }

misc/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ dependencies {
6161
implementation(libs.androidx.media3.common)
6262
implementation(libs.androidx.media3.exoplayer)
6363
implementation(libs.androidx.tracing)
64+
implementation(libs.androidx.work.runtime)
6465

6566
implementation(libs.hilt.android)
6667
implementation(libs.androidx.hilt.navigation.compose)

misc/src/main/java/com/example/snippets/profiling/ProfilingManagerJavaSnippets.java

Lines changed: 61 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import android.app.Activity;
44
import android.os.Bundle;
5+
import android.os.Build;
56
import android.os.ProfilingManager;
67
import android.os.ProfilingTrigger;
8+
import android.content.Context;
79
import android.util.Log;
810
import java.util.List;
911
import java.util.ArrayList;
@@ -18,10 +20,20 @@
1820
import androidx.core.os.Profiling;
1921
import androidx.core.os.SystemTraceRequestBuilder;
2022
import androidx.core.os.BufferFillPolicy;
23+
import androidx.annotation.RequiresApi;
24+
import androidx.work.OneTimeWorkRequest;
25+
import androidx.work.WorkManager;
26+
import androidx.work.Worker;
27+
import androidx.work.WorkerParameters;
28+
import androidx.work.Constraints;
29+
import androidx.work.NetworkType;
30+
import androidx.work.Data;
2131
import com.example.snippets.R;
2232

2333
public class ProfilingManagerJavaSnippets {
34+
2435
public class MainActivityJava extends Activity {
36+
2537
// [START android_profiling_manager_anr_case_study_java_snippet_2]
2638
private static final int NETWORK_TIMEOUT_MILLISECS = 2000;
2739
// [END android_profiling_manager_anr_case_study_java_snippet_2]
@@ -48,6 +60,7 @@ public void accept(ProfilingResult profilingResult) {
4860
Log.d(
4961
"ProfileTest",
5062
"Received profiling result file=" + profilingResult.getResultFilePath());
63+
setupProfileUploadWorker(profilingResult.getResultFilePath());
5164
} else {
5265
Log.e(
5366
"ProfileTest",
@@ -123,17 +136,13 @@ public void accept(ProfilingResult profilingResult) {
123136
}
124137
// [END android_profiling_manager_triggered_trace_java]
125138

126-
// [START android_profiling_manager_triggered_trace_setup_upload_job_java]
127-
public void setupProfileUploadWorker(String resultFilePath) {
128-
// Setup job to upload the profiling result file.
129-
}
130-
// [END android_profiling_manager_triggered_trace_setup_upload_job_java]
131-
132139
// [START android_profiling_manager_anr_case_study_java_snippet_1]
133140
public void addANRTrigger() {
134-
ProfilingManager profilingManager = getApplicationContext().getSystemService(ProfilingManager.class);
141+
ProfilingManager profilingManager = getApplicationContext().getSystemService(
142+
ProfilingManager.class);
135143
List<ProfilingTrigger> triggers = new ArrayList<>();
136-
ProfilingTrigger.Builder triggerBuilder = new ProfilingTrigger.Builder(ProfilingTrigger.TRIGGER_TYPE_ANR);
144+
ProfilingTrigger.Builder triggerBuilder = new ProfilingTrigger.Builder(
145+
ProfilingTrigger.TRIGGER_TYPE_ANR);
137146
triggers.add(triggerBuilder.build());
138147
Executor mainExecutor = Executors.newSingleThreadExecutor();
139148
Consumer<ProfilingResult> resultCallback =
@@ -175,22 +184,24 @@ boolean performNetworkRequest(int timeoutMiliseconds) {
175184
try {
176185
if (Math.random() < 0.2) {
177186
// Simulate performing a network request by waiting a random period of time
178-
int networkRequestTimeMs = (int)(Math.random() * timeoutMiliseconds);
187+
int networkRequestTimeMs = (int) (Math.random() * timeoutMiliseconds);
179188
Thread.sleep(networkRequestTimeMs);
180189
return true;
181190
} else {
182191
// Simulate a timeout
183192
Thread.sleep(timeoutMiliseconds);
184193
}
185-
} catch (InterruptedException e) {}
194+
} catch (InterruptedException e) {
195+
}
186196
return false;
187197
// [END_EXCLUDE]
188198
}
189199

190200
// [START_EXCLUDE silent]
191201
void cpuIntensiveComputation(int durationMs) {
192202
long start = System.currentTimeMillis();
193-
while (System.currentTimeMillis() - start < durationMs) {}
203+
while (System.currentTimeMillis() - start < durationMs) {
204+
}
194205
}
195206
// [END_EXCLUDE silent]
196207

@@ -208,5 +219,43 @@ public void handleNetworkResponse() {
208219
Trace.endSection();
209220
}
210221
// [END android_profiling_manager_anr_case_study_java_snippet_2]
222+
223+
// [START android_profiling_manager_trace_upload_job_java]
224+
public static class TraceUploadWorker extends Worker {
225+
226+
public TraceUploadWorker(
227+
@androidx.annotation.NonNull Context context,
228+
@androidx.annotation.NonNull WorkerParameters workerParams) {
229+
super(context, workerParams);
230+
}
231+
232+
@androidx.annotation.NonNull
233+
@Override
234+
public Result doWork() {
235+
// Perform your uploading work here
236+
Log.d("ProfileTest", "Uploading trace: " + getInputData().getString("PROFILE_PATH"));
237+
238+
return Result.success();
239+
}
240+
}
241+
242+
public void setupProfileUploadWorker(String profileFilepath) {
243+
WorkManager workMgr = WorkManager.getInstance(getApplicationContext());
244+
OneTimeWorkRequest.Builder workRequestBuilder = new OneTimeWorkRequest.Builder(
245+
TraceUploadWorker.class);
246+
247+
Constraints constraints = new Constraints.Builder()
248+
.setRequiredNetworkType(NetworkType.UNMETERED)
249+
.setRequiresDeviceIdle(true)
250+
.build();
251+
workRequestBuilder.setConstraints(constraints);
252+
253+
Data.Builder inputDataBuilder = new Data.Builder();
254+
inputDataBuilder.putString("PROFILE_PATH", profileFilepath);
255+
workRequestBuilder.setInputData(inputDataBuilder.build());
256+
257+
workMgr.enqueue(workRequestBuilder.build());
258+
}
259+
// [END android_profiling_manager_trace_upload_job_java]
211260
}
212-
}
261+
}

misc/src/main/java/com/example/snippets/profiling/ProfilingManagerKotlinSnippets.kt

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.example.snippets.profiling
1818

1919
import android.app.Activity
20+
import android.content.Context
2021
import android.os.Build
2122
import android.os.Bundle
2223
import android.os.CancellationSignal
@@ -30,6 +31,13 @@ import androidx.core.os.BufferFillPolicy
3031
import androidx.core.os.SystemTraceRequestBuilder
3132
import androidx.core.os.requestProfiling
3233
import androidx.tracing.Trace
34+
import androidx.work.Constraints
35+
import androidx.work.Data
36+
import androidx.work.NetworkType
37+
import androidx.work.OneTimeWorkRequest
38+
import androidx.work.WorkManager
39+
import androidx.work.Worker
40+
import androidx.work.WorkerParameters
3341
import java.util.ArrayList
3442
import java.util.concurrent.Executor
3543
import java.util.concurrent.Executors
@@ -131,10 +139,33 @@ class ProfilingManagerKotlinSnippets {
131139
}
132140
// [END android_profiling_manager_triggered_trace]
133141

134-
// [START android_profiling_manager_triggered_trace_setup_upload_job]
135-
fun setupProfileUploadWorker(resultFilePath: String?) {
136-
// Setup job to upload the profiling result file.
142+
// [START android_profiling_manager_trace_upload_job_kotlin] // [START android_profiling_manager_trace_upload_job_kotlin]
143+
class TraceUploadWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
144+
override fun doWork(): Result {
145+
// Perform your uploading work here
146+
Log.d("ProfileTest", "Uploading trace: " + inputData.getString("PROFILE_PATH"))
147+
148+
return Result.success()
149+
}
150+
}
151+
152+
fun setupProfileUploadWorker(profileFilepath: String?) {
153+
val workMgr = WorkManager.getInstance(applicationContext)
154+
val workRequestBuilder = OneTimeWorkRequest.Builder(TraceUploadWorker::class)
155+
156+
val constraints = Constraints.Builder()
157+
.setRequiredNetworkType(NetworkType.UNMETERED)
158+
.setRequiresDeviceIdle(true)
159+
.setRequiresCharging(true)
160+
.build()
161+
workRequestBuilder.setConstraints(constraints)
162+
163+
val inputDataBuilder = Data.Builder()
164+
inputDataBuilder.putString("PROFILE_PATH", profileFilepath)
165+
workRequestBuilder.setInputData(inputDataBuilder.build())
166+
167+
workMgr.enqueue(workRequestBuilder.build())
137168
}
138-
// [END android_profiling_manager_triggered_trace_setup_upload_job]
169+
// [END android_profiling_manager_trace_upload_job_kotlin]
139170
}
140171
}

0 commit comments

Comments
 (0)