Split out monitor start validation logic
So we can easily disable and customize what validation needs to be done before starting a trace. For instance not checking that the trace is enabled for transactions tracing.
Bug: 270949117
Test: atest FlickerLibTest
Change-Id: Ie719fa44acffda54977c20721027a91bfd9295e1
diff --git a/libraries/flicker/src/android/tools/device/traces/monitors/ScreenRecorder.kt b/libraries/flicker/src/android/tools/device/traces/monitors/ScreenRecorder.kt
index 29b19ba..fddd9b0 100644
--- a/libraries/flicker/src/android/tools/device/traces/monitors/ScreenRecorder.kt
+++ b/libraries/flicker/src/android/tools/device/traces/monitors/ScreenRecorder.kt
@@ -53,7 +53,7 @@
else -> recordingRunnable?.isFrameRecorded ?: false
}
- override fun start() {
+ override fun doStart() {
require(recordingThread == null) { "Screen recorder already running" }
val recordingThread = newRecordingThread()
diff --git a/libraries/flicker/src/android/tools/device/traces/monitors/TraceMonitor.kt b/libraries/flicker/src/android/tools/device/traces/monitors/TraceMonitor.kt
index c1bbc8f..7c7d789 100644
--- a/libraries/flicker/src/android/tools/device/traces/monitors/TraceMonitor.kt
+++ b/libraries/flicker/src/android/tools/device/traces/monitors/TraceMonitor.kt
@@ -20,7 +20,6 @@
import android.tools.common.io.TraceType
import android.tools.device.traces.DEFAULT_TRACE_CONFIG
import android.tools.device.traces.deleteIfExists
-import android.tools.device.traces.io.IResultData
import android.tools.device.traces.io.IoUtils
import android.tools.device.traces.io.ResultReader
import android.tools.device.traces.io.ResultWriter
@@ -33,8 +32,22 @@
abstract class TraceMonitor : ITransitionMonitor {
abstract val isEnabled: Boolean
abstract val traceType: TraceType
+ protected abstract fun doStart()
protected abstract fun doStop(): File
+ final override fun start() {
+ validateStart()
+ doStart()
+ }
+
+ open fun validateStart() {
+ if (this.isEnabled) {
+ throw UnsupportedOperationException(
+ "Trace already running. " + "This is likely due to chained 'withTracing' calls."
+ )
+ }
+ }
+
/** Stops monitor. */
final override fun stop(writer: ResultWriter) {
val artifact =
@@ -62,12 +75,6 @@
* @throws UnsupportedOperationException If tracing is already activated
*/
fun withTracing(writer: ResultWriter, predicate: () -> Unit) {
- if (this.isEnabled) {
- throw UnsupportedOperationException(
- "Trace already running. " + "This is likely due to chained 'withTracing' calls."
- )
- }
- val result: IResultData
try {
this.start()
predicate()
diff --git a/libraries/flicker/src/android/tools/device/traces/monitors/events/EventLogMonitor.kt b/libraries/flicker/src/android/tools/device/traces/monitors/events/EventLogMonitor.kt
index 9307e27..178f20f 100644
--- a/libraries/flicker/src/android/tools/device/traces/monitors/events/EventLogMonitor.kt
+++ b/libraries/flicker/src/android/tools/device/traces/monitors/events/EventLogMonitor.kt
@@ -35,7 +35,7 @@
private var traceStartTime: Timestamp? = null
- override fun start() {
+ override fun doStart() {
require(!isEnabled) { "Trace already running" }
isEnabled = true
traceStartTime = now()
diff --git a/libraries/flicker/src/android/tools/device/traces/monitors/surfaceflinger/LayersTraceMonitor.kt b/libraries/flicker/src/android/tools/device/traces/monitors/surfaceflinger/LayersTraceMonitor.kt
index 1c4e7ac..6458631 100644
--- a/libraries/flicker/src/android/tools/device/traces/monitors/surfaceflinger/LayersTraceMonitor.kt
+++ b/libraries/flicker/src/android/tools/device/traces/monitors/surfaceflinger/LayersTraceMonitor.kt
@@ -31,7 +31,7 @@
override val isEnabled
get() = windowManager.isLayerTracing
- override fun start() {
+ override fun doStart() {
windowManager.setLayerTracingFlags(traceFlags)
windowManager.isLayerTracing = true
}
diff --git a/libraries/flicker/src/android/tools/device/traces/monitors/surfaceflinger/TransactionsTraceMonitor.kt b/libraries/flicker/src/android/tools/device/traces/monitors/surfaceflinger/TransactionsTraceMonitor.kt
index e16c7e0..8914ebf 100644
--- a/libraries/flicker/src/android/tools/device/traces/monitors/surfaceflinger/TransactionsTraceMonitor.kt
+++ b/libraries/flicker/src/android/tools/device/traces/monitors/surfaceflinger/TransactionsTraceMonitor.kt
@@ -29,10 +29,14 @@
override val isEnabled = true
override val traceType = TraceType.TRANSACTION
- override fun start() {
+ override fun doStart() {
windowManager.setActiveTransactionTracing(true)
}
+ override fun validateStart() {
+ // No validation required
+ }
+
override fun doStop(): File {
windowManager.setActiveTransactionTracing(false)
return TRACE_DIR.resolve("transactions_trace$WINSCOPE_EXT")
diff --git a/libraries/flicker/src/android/tools/device/traces/monitors/wm/TransitionsTraceMonitor.kt b/libraries/flicker/src/android/tools/device/traces/monitors/wm/TransitionsTraceMonitor.kt
index 7e3aa8d..3dc76ee 100644
--- a/libraries/flicker/src/android/tools/device/traces/monitors/wm/TransitionsTraceMonitor.kt
+++ b/libraries/flicker/src/android/tools/device/traces/monitors/wm/TransitionsTraceMonitor.kt
@@ -30,7 +30,7 @@
override val isEnabled
get() = windowManager.isTransitionTraceEnabled
- override fun start() {
+ override fun doStart() {
windowManager.startTransitionTrace()
}
diff --git a/libraries/flicker/src/android/tools/device/traces/monitors/wm/WindowManagerTraceMonitor.kt b/libraries/flicker/src/android/tools/device/traces/monitors/wm/WindowManagerTraceMonitor.kt
index 65d701b..8996600 100644
--- a/libraries/flicker/src/android/tools/device/traces/monitors/wm/WindowManagerTraceMonitor.kt
+++ b/libraries/flicker/src/android/tools/device/traces/monitors/wm/WindowManagerTraceMonitor.kt
@@ -29,7 +29,7 @@
override val isEnabled
get() = windowManager.isWindowTraceEnabled
- override fun start() {
+ override fun doStart() {
windowManager.startWindowTrace()
}