Add some tracing for release fences
* Fix FenceMonitor to cleanly teardown
* App-side tracing for BBQ release callbacks
* Trace future compleition in TxnCallbackInvoker
Bug: 360932099
Bug: 357762453
Flag: EXEMPT debugging
Test: builds
Test: perfetto
Change-Id: I188c04da1e249b672b428837c328568d9e7a1e66
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index c8bb068..c17ea3b 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -769,6 +769,10 @@
// Older fences for the same layer stack can be dropped when a new fence arrives.
// An assumption here is that RenderEngine performs work sequentially, so an
// incoming fence will not fire before an existing fence.
+ SFTRACE_NAME(
+ ftl::Concat("Adding additional fence for: ", ftl::truncated<20>(mName.c_str()),
+ ", Replacing?: ", mAdditionalPreviousReleaseFences.contains(layerStack))
+ .c_str());
mAdditionalPreviousReleaseFences.emplace_or_replace(layerStack,
std::move(futureFenceResult));
}
diff --git a/services/surfaceflinger/TransactionCallbackInvoker.cpp b/services/surfaceflinger/TransactionCallbackInvoker.cpp
index c6856ae..2b20648 100644
--- a/services/surfaceflinger/TransactionCallbackInvoker.cpp
+++ b/services/surfaceflinger/TransactionCallbackInvoker.cpp
@@ -30,6 +30,7 @@
#include <binder/IInterface.h>
#include <common/FlagManager.h>
#include <common/trace.h>
+#include <ftl/concat.h>
#include <utils/RefBase.h>
namespace android {
@@ -129,6 +130,9 @@
if (FlagManager::getInstance().ce_fence_promise()) {
for (auto& future : handle->previousReleaseFences) {
+ SFTRACE_NAME(ftl::Concat("Merging fence for layer: ",
+ ftl::truncated<20>(handle->name.c_str()))
+ .c_str());
mergeFence(handle->name.c_str(), future.get().value_or(Fence::NO_FENCE), prevFence);
}
} else {