Status Update
Comments
cc...@google.com <cc...@google.com>
en...@meta.com <en...@meta.com> #2
@@ -26,6 +26,7 @@ import androidx.benchmark.Shell
import androidx.benchmark.ShellScript
import androidx.benchmark.inMemoryTrace
import androidx.benchmark.perfetto.PerfettoTraceProcessor
+import java.io.FileNotFoundException
import java.io.IOException
import java.io.InputStream
import java.io.OutputStream
@@ -57,7 +58,7 @@ internal class PerfettoHttpServer {
private const val PATH_RESTORE_INITIAL_TABLES = "/restore_initial_tables"
private const val TAG = "PerfettoHttpServer"
- private const val SERVER_START_TIMEOUT_MS = 5000
+ private const val SERVER_START_TIMEOUT_MS = 60000
private const val READ_TIMEOUT_SECONDS = 300000
private const val SERVER_PROCESS_NAME = "trace_processor_shell"
@@ -186,6 +187,8 @@ internal class PerfettoHttpServer {
return@inMemoryTrace statusResult.api_version != null && statusResult.api_version > 0
} catch (e: ConnectException) {
false
+ } catch (e: FileNotFoundException) {
+ false
}
}
ma...@google.com <ma...@google.com> #3
Looking at the source code for (FileNotFoundException
is fired when the url does not exist.
This should never happen unless there is another server running on the same port but in that case the process should not be alive (and we'd fire an IllegalStateException
).
My best guess it that the perfetto http server hadn't fully started. Did you try your adding the catch exception alone and see if it still crashes?
Also, was this reproducible with any device or just one? We made some changes to perfetto http server so it should be possible to pass the timeout externally now (
Adding the catch for that exception sounds reasonable so I'm going ahead and adding that.
ap...@google.com <ap...@google.com> #4
Branch: androidx-main
commit 032bde26a7352064404c6738eee29747c49be043
Author: Marcello Albano <maralb@google.com>
Date: Mon Apr 22 16:21:02 2024
Avoid crashing when perfetto trace processor is slow to start
In
and, while the process is running, query an end point might return an
error, in which case a `FileNotFoundException` is thrown. Since we
already check for the process to be running, it's ok to "catch" this
state of the perfetto trace processor and wait for it for the timeout
duration.
Bug: 329145808
Test: ./gradlew benchmark:benchmark-macro:test
Relnote: Avoid crashing when perfetto trace processor is slow to start
Change-Id: I988418daa69ec33343364f7ad7c5fca26a39a5fa
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/server/PerfettoHttpServer.kt
ma...@google.com <ma...@google.com>
en...@meta.com <en...@meta.com> #5
ma...@google.com <ma...@google.com> #8
Oh sorry, I forgot that used also in Macrobenchmark. It sounds reasonable to me. Will open a PR. Thanks!
ap...@google.com <ap...@google.com> #9
Branch: androidx-main
commit 8c32f5e6f64a40fc30c85da98646f814ef2fdb0e
Author: Marcello Albano <maralb@google.com>
Date: Tue Apr 30 09:46:58 2024
Increased default start timeout for perfetto trace processor
Test: n/a
Bug: 329145808
Change-Id: I87e8c9ec3472db0aafb908b590a9a91f6e9e5ed8
M benchmark/benchmark-macro/src/main/java/androidx/benchmark/perfetto/PerfettoTraceProcessor.kt
en...@meta.com <en...@meta.com> #10
Thank you!
pr...@google.com <pr...@google.com> #11
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.benchmark:benchmark-macro:1.3.0-alpha05
Description
Component used: Version used: Benchmark-Macro v1.2.3 Devices/Android versions reproduced on: Android emulator (API 30)
If this is a bug in the library, we would appreciate if you could attach:
Using v1.2.3 of the benchmark-macro library on an emulator is yielding the below error which hangs my test.
I have attempted to add android:usesCleartextTraffic="true" to my instrumentation apk and confirmed that it was present in the merged manifest for the instrumentation apk. I also did a get request to the same url via adb shell which yielded a http status code 200 via "nc localhost 9001" with a "GET /status HTTP/1.1" request which yielded the following response for the perfetto server:
I do notice that the perfetto log for starting the server successfully happens after the failure so I'm wondering if there's a race between the 2 processes.
Error stack trace: