22
33import android .app .Activity ;
44import android .os .Bundle ;
5+ import android .os .Build ;
56import android .os .ProfilingManager ;
67import android .os .ProfilingTrigger ;
8+ import android .content .Context ;
79import android .util .Log ;
810import java .util .List ;
911import java .util .ArrayList ;
1820import androidx .core .os .Profiling ;
1921import androidx .core .os .SystemTraceRequestBuilder ;
2022import 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 ;
2131import com .example .snippets .R ;
2232
2333public 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+ }
0 commit comments