Add tracing thread for RenderEngine's fences
RenderEngine doesn't always render to FramebufferSurface, so tracing
that is built into BufferQueue is lost. Add a tracing thread so that
screenshots and caching can also have GPU work traced.
Bug: 280684246
Bug: 269822044
Test: perfetto
Change-Id: I067430f6b6b588dd3046d1cf66d0a3fc8465746d
diff --git a/libs/renderengine/skia/SkiaRenderEngine.cpp b/libs/renderengine/skia/SkiaRenderEngine.cpp
index cfea85f..5854135 100644
--- a/libs/renderengine/skia/SkiaRenderEngine.cpp
+++ b/libs/renderengine/skia/SkiaRenderEngine.cpp
@@ -39,10 +39,10 @@
#include <SkPath.h>
#include <SkPoint.h>
#include <SkPoint3.h>
+#include <SkRRect.h>
#include <SkRect.h>
#include <SkRefCnt.h>
#include <SkRegion.h>
-#include <SkRRect.h>
#include <SkRuntimeEffect.h>
#include <SkSamplingOptions.h>
#include <SkScalar.h>
@@ -51,9 +51,11 @@
#include <SkString.h>
#include <SkSurface.h>
#include <SkTileMode.h>
-#include <src/core/SkTraceEventCommon.h>
#include <android-base/stringprintf.h>
+#include <gui/FenceMonitor.h>
#include <gui/TraceUtils.h>
+#include <pthread.h>
+#include <src/core/SkTraceEventCommon.h>
#include <sync/sync.h>
#include <ui/BlurRegion.h>
#include <ui/DataspaceUtils.h>
@@ -63,6 +65,7 @@
#include <cmath>
#include <cstdint>
+#include <deque>
#include <memory>
#include <numeric>
@@ -229,7 +232,6 @@
static inline SkPoint3 getSkPoint3(const android::vec3& vector) {
return SkPoint3::Make(vector.x, vector.y, vector.z);
}
-
} // namespace
namespace android {
@@ -1134,8 +1136,13 @@
activeSurface->flush();
}
- base::unique_fd drawFence = flushAndSubmit(grContext);
- resultPromise->set_value(sp<Fence>::make(std::move(drawFence)));
+ auto drawFence = sp<Fence>::make(flushAndSubmit(grContext));
+
+ if (ATRACE_ENABLED()) {
+ static gui::FenceMonitor sMonitor("RE Completion");
+ sMonitor.queueFence(drawFence);
+ }
+ resultPromise->set_value(std::move(drawFence));
}
size_t SkiaRenderEngine::getMaxTextureSize() const {