diff options
| author | 2024-05-16 06:11:46 +0000 | |
|---|---|---|
| committer | 2024-05-16 06:11:46 +0000 | |
| commit | c3b69933d06799a6fa5ab274669983a472df2f5f (patch) | |
| tree | 28c81025d2663b62e040ee214a2407c6104e37ac | |
| parent | 2fbbc54678818eafa045506817ff64eb904ffe39 (diff) | |
| parent | 1aaf01103bf8f2f5a7accb9b4665c9a2e5c1bca4 (diff) | |
Merge "Extend DataSourceParams" into main
7 files changed, 101 insertions, 22 deletions
diff --git a/core/java/android/tracing/perfetto/DataSource.java b/core/java/android/tracing/perfetto/DataSource.java index b9ab82cb63a9..aa84173983e0 100644 --- a/core/java/android/tracing/perfetto/DataSource.java +++ b/core/java/android/tracing/perfetto/DataSource.java @@ -130,7 +130,8 @@ public abstract class DataSource<DataSourceInstanceType extends DataSourceInstan * @param params Params to initialize the datasource with. */ public void register(DataSourceParams params) { - nativeRegisterDataSource(this.mNativeObj, params.bufferExhaustedPolicy); + nativeRegisterDataSource(this.mNativeObj, params.bufferExhaustedPolicy, + params.willNotifyOnStop, params.noFlush); } /** @@ -163,8 +164,8 @@ public abstract class DataSource<DataSourceInstanceType extends DataSourceInstan return this.createInstance(inputStream, instanceIndex); } - private static native void nativeRegisterDataSource( - long dataSourcePtr, int bufferExhaustedPolicy); + private static native void nativeRegisterDataSource(long dataSourcePtr, + int bufferExhaustedPolicy, boolean willNotifyOnStop, boolean noFlush); private static native long nativeCreate(DataSource thiz, String name); private static native void nativeFlushAll(long nativeDataSourcePointer); diff --git a/core/java/android/tracing/perfetto/DataSourceParams.java b/core/java/android/tracing/perfetto/DataSourceParams.java index 6cd04e3d9a8b..e50f9d722fad 100644 --- a/core/java/android/tracing/perfetto/DataSourceParams.java +++ b/core/java/android/tracing/perfetto/DataSourceParams.java @@ -46,12 +46,67 @@ public class DataSourceParams { // after a while. public static final int PERFETTO_DS_BUFFER_EXHAUSTED_POLICY_STALL_AND_ABORT = 1; - public static DataSourceParams DEFAULTS = - new DataSourceParams(PERFETTO_DS_BUFFER_EXHAUSTED_POLICY_DROP); + public static DataSourceParams DEFAULTS = new DataSourceParams.Builder().build(); - public DataSourceParams(@PerfettoDsBufferExhausted int bufferExhaustedPolicy) { + private DataSourceParams(@PerfettoDsBufferExhausted int bufferExhaustedPolicy, + boolean willNotifyOnStop, boolean noFlush) { this.bufferExhaustedPolicy = bufferExhaustedPolicy; + this.willNotifyOnStop = willNotifyOnStop; + this.noFlush = noFlush; } public final @PerfettoDsBufferExhausted int bufferExhaustedPolicy; + public final boolean willNotifyOnStop; + public final boolean noFlush; + + /** + * DataSource Parameters builder + * + * @hide + */ + public static final class Builder { + /** + * Specify behavior when running out of shared memory buffer space. + */ + public Builder setBufferExhaustedPolicy(@PerfettoDsBufferExhausted int value) { + this.mBufferExhaustedPolicy = value; + return this; + } + + /** + * If true, the data source is expected to ack the stop request through the + * NotifyDataSourceStopped() IPC. If false, the service won't wait for an ack. + * Set this parameter to false when dealing with potentially frozen producers + * that wouldn't be able to quickly ack the stop request. + * + * Default value: true + */ + public Builder setWillNotifyOnStop(boolean value) { + this.mWillNotifyOnStop = value; + return this; + } + + /** + * If true, the service won't emit flush requests for this data source. This + * allows the service to reduce the flush-related IPC traffic and better deal + * with frozen producers (see go/perfetto-frozen). + */ + public Builder setNoFlush(boolean value) { + this.mNoFlush = value; + return this; + } + + /** + * Build the DataSource parameters. + */ + public DataSourceParams build() { + return new DataSourceParams( + this.mBufferExhaustedPolicy, this.mWillNotifyOnStop, this.mNoFlush); + } + + private @PerfettoDsBufferExhausted int mBufferExhaustedPolicy = + PERFETTO_DS_BUFFER_EXHAUSTED_POLICY_DROP; + private boolean mWillNotifyOnStop = true; + private boolean mNoFlush = false; + } } diff --git a/core/java/com/android/internal/inputmethod/ImeTracingPerfettoImpl.java b/core/java/com/android/internal/inputmethod/ImeTracingPerfettoImpl.java index 91b80ddaa836..24cd1c9cd7de 100644 --- a/core/java/com/android/internal/inputmethod/ImeTracingPerfettoImpl.java +++ b/core/java/com/android/internal/inputmethod/ImeTracingPerfettoImpl.java @@ -52,8 +52,14 @@ final class ImeTracingPerfettoImpl extends ImeTracing { ImeTracingPerfettoImpl() { Producer.init(InitArguments.DEFAULTS); - mDataSource.register( - new DataSourceParams(PERFETTO_DS_BUFFER_EXHAUSTED_POLICY_STALL_AND_ABORT)); + DataSourceParams params = + new DataSourceParams.Builder() + .setBufferExhaustedPolicy( + PERFETTO_DS_BUFFER_EXHAUSTED_POLICY_STALL_AND_ABORT) + .setNoFlush(true) + .setWillNotifyOnStop(false) + .build(); + mDataSource.register(params); } diff --git a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java index ee33eb4f014b..efe6ab349903 100644 --- a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java +++ b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java @@ -131,8 +131,13 @@ public class PerfettoProtoLogImpl implements IProtoLog { Runnable cacheUpdater ) { Producer.init(InitArguments.DEFAULTS); - mDataSource.register(new DataSourceParams( - DataSourceParams.PERFETTO_DS_BUFFER_EXHAUSTED_POLICY_STALL_AND_ABORT)); + DataSourceParams params = + new DataSourceParams.Builder() + .setBufferExhaustedPolicy( + DataSourceParams + .PERFETTO_DS_BUFFER_EXHAUSTED_POLICY_STALL_AND_ABORT) + .build(); + mDataSource.register(params); this.mViewerConfigInputStreamProvider = viewerConfigInputStreamProvider; this.mViewerConfigReader = viewerConfigReader; this.mLogGroups = logGroups; diff --git a/core/jni/android_tracing_PerfettoDataSource.cpp b/core/jni/android_tracing_PerfettoDataSource.cpp index f82ebfe8c947..243155257b4d 100644 --- a/core/jni/android_tracing_PerfettoDataSource.cpp +++ b/core/jni/android_tracing_PerfettoDataSource.cpp @@ -256,10 +256,12 @@ void nativeFlushAll(JNIEnv* env, jclass clazz, jlong ptr) { } void nativeRegisterDataSource(JNIEnv* env, jclass clazz, jlong datasource_ptr, - jint buffer_exhausted_policy) { + jint buffer_exhausted_policy, jboolean will_notify_on_stop, + jboolean no_flush) { sp<PerfettoDataSource> datasource = reinterpret_cast<PerfettoDataSource*>(datasource_ptr); struct PerfettoDsParams params = PerfettoDsParamsDefault(); + params.will_notify_on_stop = will_notify_on_stop; params.buffer_exhausted_policy = (PerfettoDsBufferExhaustedPolicy)buffer_exhausted_policy; params.user_arg = reinterpret_cast<void*>(datasource.get()); @@ -325,13 +327,15 @@ void nativeRegisterDataSource(JNIEnv* env, jclass clazz, jlong datasource_ptr, datasource_instance->onStart(env); }; - params.on_flush_cb = [](struct PerfettoDsImpl*, PerfettoDsInstanceIndex, void*, void* inst_ctx, - struct PerfettoDsOnFlushArgs*) { - JNIEnv* env = GetOrAttachJNIEnvironment(gVm, JNI_VERSION_1_6); + if (!no_flush) { + params.on_flush_cb = [](struct PerfettoDsImpl*, PerfettoDsInstanceIndex, void*, + void* inst_ctx, struct PerfettoDsOnFlushArgs*) { + JNIEnv* env = GetOrAttachJNIEnvironment(gVm, JNI_VERSION_1_6); - auto* datasource_instance = static_cast<PerfettoDataSourceInstance*>(inst_ctx); - datasource_instance->onFlush(env); - }; + auto* datasource_instance = static_cast<PerfettoDataSourceInstance*>(inst_ctx); + datasource_instance->onFlush(env); + }; + } params.on_stop_cb = [](struct PerfettoDsImpl*, PerfettoDsInstanceIndex inst_id, void* user_arg, void* inst_ctx, struct PerfettoDsOnStopArgs*) { @@ -422,7 +426,7 @@ const JNINativeMethod gMethods[] = { (void*)nativeCreate}, {"nativeFlushAll", "(J)V", (void*)nativeFlushAll}, {"nativeGetFinalizer", "()J", (void*)nativeGetFinalizer}, - {"nativeRegisterDataSource", "(JI)V", (void*)nativeRegisterDataSource}, + {"nativeRegisterDataSource", "(JIZZ)V", (void*)nativeRegisterDataSource}, {"nativeGetPerfettoInstanceLocked", "(JI)Landroid/tracing/perfetto/DataSourceInstance;", (void*)nativeGetPerfettoInstanceLocked}, {"nativeReleasePerfettoInstanceLocked", "(JI)V", diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/tracing/PerfettoTransitionTracer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/tracing/PerfettoTransitionTracer.java index 1897560deed7..d558f953bc36 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/tracing/PerfettoTransitionTracer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/tracing/PerfettoTransitionTracer.java @@ -49,8 +49,12 @@ public class PerfettoTransitionTracer implements TransitionTracer { public PerfettoTransitionTracer() { Producer.init(InitArguments.DEFAULTS); - mDataSource.register( - new DataSourceParams(PERFETTO_DS_BUFFER_EXHAUSTED_POLICY_STALL_AND_ABORT)); + DataSourceParams params = + new DataSourceParams.Builder() + .setBufferExhaustedPolicy( + PERFETTO_DS_BUFFER_EXHAUSTED_POLICY_STALL_AND_ABORT) + .build(); + mDataSource.register(params); } /** diff --git a/services/core/java/com/android/server/wm/PerfettoTransitionTracer.java b/services/core/java/com/android/server/wm/PerfettoTransitionTracer.java index 498182dab9c3..3606a34e23e0 100644 --- a/services/core/java/com/android/server/wm/PerfettoTransitionTracer.java +++ b/services/core/java/com/android/server/wm/PerfettoTransitionTracer.java @@ -41,8 +41,12 @@ class PerfettoTransitionTracer implements TransitionTracer { PerfettoTransitionTracer() { Producer.init(InitArguments.DEFAULTS); - mDataSource.register( - new DataSourceParams(PERFETTO_DS_BUFFER_EXHAUSTED_POLICY_STALL_AND_ABORT)); + DataSourceParams params = + new DataSourceParams.Builder() + .setBufferExhaustedPolicy( + PERFETTO_DS_BUFFER_EXHAUSTED_POLICY_STALL_AND_ABORT) + .build(); + mDataSource.register(params); } /** |