1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.tools.traces.monitors.wm
18 
19 import android.tools.io.TraceType
20 import android.tools.traces.executeShellCommand
21 import android.tools.traces.monitors.LOG_TAG
22 import android.tools.traces.monitors.TraceMonitor
23 import android.tools.traces.wm.TransitionsTrace
24 import android.util.Log
25 import java.io.File
26 
27 /** Captures [TransitionsTrace] from SurfaceFlinger. */
28 open class LegacyShellTransitionTraceMonitor : TraceMonitor() {
29     override val traceType = TraceType.LEGACY_SHELL_TRANSITION
30     final override var isEnabled = false
31         private set
32 
doStartnull33     override fun doStart() {
34         require(!isEnabled) { "Trace already running" }
35         isEnabled = true
36         Log.d(LOG_TAG, "Running '$START_TRACING_COMMAND'")
37         executeShellCommand(START_TRACING_COMMAND)
38     }
39 
doStopnull40     override fun doStop(): File {
41         require(isEnabled) { "Trace not running" }
42         isEnabled = false
43         Log.d(LOG_TAG, "Running '$START_TRACING_COMMAND'")
44         executeShellCommand(STOP_TRACING_COMMAND)
45 
46         return TRACE_DIR.resolve(traceType.fileName)
47     }
48 
49     companion object {
50         private const val BASE_TRACING_COMMAND =
51             "dumpsys activity service SystemUIService WMShell transitions tracing"
52         const val START_TRACING_COMMAND = "$BASE_TRACING_COMMAND start"
53         const val STOP_TRACING_COMMAND = "$BASE_TRACING_COMMAND stop"
54     }
55 }
56