Skip to content

Commit 2286600

Browse files
committed
Add snippets for trigger based profiling section of ProfilingManager docs
1 parent 36730f7 commit 2286600

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@
22

33
import android.app.Activity;
44
import android.os.Bundle;
5+
import android.os.ProfilingManager;
6+
import android.os.ProfilingTrigger;
57
import android.util.Log;
8+
import java.util.List;
9+
import java.util.ArrayList;
610
import java.util.function.Consumer;
711
import java.util.concurrent.Executor;
12+
import java.util.concurrent.Executors;
813
import android.os.ProfilingResult;
914
import java.util.concurrent.Executors;
1015
import android.os.CancellationSignal;
16+
import android.view.Choreographer;
1117
import androidx.tracing.Trace;
1218
import androidx.core.os.Profiling;
1319
import androidx.core.os.SystemTraceRequestBuilder;
@@ -16,6 +22,8 @@
1622
public class ProfilingManagerJavaSnippets {
1723
public class MainActivityJava extends Activity {
1824

25+
public static final String TAG = "EDGAR";
26+
1927
@Override
2028
public void onCreate(Bundle savedInstanceState) {
2129
super.onCreate(savedInstanceState);
@@ -69,5 +77,39 @@ public void accept(ProfilingResult profilingResult) {
6977
stopSignal.cancel();
7078
}
7179
// [END android_profiling_manager_record_system_trace_java]
80+
81+
// [START android_profiling_manager_triggered_trace_java]
82+
public void recordWithTrigger() {
83+
ProfilingManager profilingManager = getApplicationContext().getSystemService(
84+
ProfilingManager.class);
85+
List<ProfilingTrigger> triggers = new ArrayList<>();
86+
ProfilingTrigger.Builder triggerBuilder = new ProfilingTrigger.Builder(
87+
ProfilingTrigger.TRIGGER_TYPE_APP_FULLY_DRAWN);
88+
triggerBuilder.setRateLimitingPeriodHours(1);
89+
triggers.add(triggerBuilder.build());
90+
91+
Executor mainExecutor = Executors.newSingleThreadExecutor();
92+
Consumer<ProfilingResult> resultCallback =
93+
new Consumer<ProfilingResult>() {
94+
@Override
95+
public void accept(ProfilingResult profilingResult) {
96+
// ...
97+
if (profilingResult.getErrorCode() == ProfilingResult.ERROR_NONE) {
98+
Log.d(TAG,
99+
"Received profiling result. file: " + profilingResult.getResultFilePath());
100+
}
101+
}
102+
};
103+
profilingManager.registerForAllProfilingResults(mainExecutor, resultCallback);
104+
profilingManager.addProfilingTriggers(triggers);
105+
106+
Choreographer.getInstance().postFrameCallback((f) -> {
107+
// This will cause the TRIGGER_TYPE_APP_FULLY_DRAWN to be emitted.
108+
reportFullyDrawn();
109+
});
110+
}
111+
// [END android_profiling_manager_triggered_trace_java]
112+
113+
72114
}
73115
}

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,28 @@ import android.os.Build
2121
import android.os.Bundle
2222
import android.os.CancellationSignal
2323
import android.os.ProfilingResult
24+
import android.os.ProfilingManager
25+
import android.os.ProfilingTrigger
2426
import android.util.Log
27+
import java.util.ArrayList
2528
import androidx.annotation.RequiresApi
2629
import androidx.core.os.BufferFillPolicy
2730
import androidx.core.os.SystemTraceRequestBuilder
2831
import androidx.core.os.requestProfiling
32+
import android.view.Choreographer
2933
import androidx.tracing.Trace
3034
import java.util.concurrent.Executor
35+
import java.util.concurrent.Executors
3136
import java.util.function.Consumer
3237
import kotlinx.coroutines.Dispatchers
3338
import kotlinx.coroutines.asExecutor
3439

3540
class ProfilingManagerKotlinSnippets {
3641
class MainActivity : Activity() {
42+
companion object {
43+
const val TAG = "MyApp"
44+
}
45+
3746
override fun onCreate(savedInstanceState: Bundle?) {
3847
super.onCreate(savedInstanceState)
3948
sampleRecordSystemTrace()
@@ -81,5 +90,34 @@ class ProfilingManagerKotlinSnippets {
8190
// Computations you want to profile
8291
}
8392
// [END android_profiling_manager_record_system_trace_kotlin]
93+
94+
// [START android_profiling_manager_triggered_trace]
95+
fun recordWithTrigger() {
96+
val profilingManager = applicationContext.getSystemService(ProfilingManager::class.java)
97+
98+
val triggers = ArrayList<ProfilingTrigger>()
99+
100+
val triggerBuilder = ProfilingTrigger.Builder(ProfilingTrigger.TRIGGER_TYPE_APP_FULLY_DRAWN)
101+
.setRateLimitingPeriodHours(1)
102+
103+
triggers.add(triggerBuilder.build())
104+
105+
val mainExecutor: Executor = Executors.newSingleThreadExecutor()
106+
107+
val resultCallback = Consumer<ProfilingResult> { profilingResult ->
108+
if (profilingResult.errorCode == ProfilingResult.ERROR_NONE) {
109+
Log.d(TAG, "Received profiling result. file: ${profilingResult.resultFilePath}")
110+
}
111+
}
112+
113+
profilingManager.registerForAllProfilingResults(mainExecutor, resultCallback)
114+
profilingManager.addProfilingTriggers(triggers)
115+
116+
Choreographer.getInstance().postFrameCallback { frameTimeNanos ->
117+
// This will cause the TRIGGER_TYPE_APP_FULLY_DRAWN to be emitted.
118+
reportFullyDrawn()
119+
}
120+
}
121+
// [END android_profiling_manager_triggered_trace]
84122
}
85123
}

0 commit comments

Comments
 (0)