Revert "Integrate layer tracing with perfetto"
This reverts commit 22cbec5335e84a18ed913d3272609828e7c9c649.
Reason for revert: 298512106
Change-Id: Ief74f64ace55cd3a2a802be5f8890654aa8c757d
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index b30469d..e24c0db 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -320,6 +320,8 @@
const char* KERNEL_IDLE_TIMER_PROP = "graphics.display.kernel_idle_timer.enabled";
+static const int MAX_TRACING_MEMORY = 1024 * 1024 * 1024; // 1GB
+
// ---------------------------------------------------------------------------
int64_t SurfaceFlinger::dispSyncPresentTimeOffset;
bool SurfaceFlinger::useHwcForRgbToYuv;
@@ -481,7 +483,6 @@
if (!mIsUserBuild && base::GetBoolProperty("debug.sf.enable_transaction_tracing"s, true)) {
mTransactionTracing.emplace();
- mLayerTracing.setTransactionTracing(*mTransactionTracing);
}
mIgnoreHdrCameraLayers = ignore_hdr_camera_layers(false);
@@ -826,17 +827,6 @@
initScheduler(display);
dispatchDisplayHotplugEvent(display->getPhysicalId(), true);
- mLayerTracing.setTakeLayersSnapshotProtoFunction([&](uint32_t traceFlags) {
- auto snapshot = perfetto::protos::LayersSnapshotProto{};
- mScheduler
- ->schedule([&]() FTL_FAKE_GUARD(mStateLock) FTL_FAKE_GUARD(kMainThreadContext) {
- snapshot = takeLayersSnapshotProto(traceFlags, TimePoint::now(),
- mLastCommittedVsyncId, true);
- })
- .wait();
- return snapshot;
- });
-
// Commit secondary display(s).
processDisplayChangesLocked();
@@ -2388,6 +2378,11 @@
mTimeStats->incrementMissedFrames();
}
+ if (mTracingEnabledChanged) {
+ mLayerTracingEnabled = mLayerTracing.isEnabled();
+ mTracingEnabledChanged = false;
+ }
+
// If a mode set is pending and the fence hasn't fired yet, wait for the next commit.
if (std::any_of(frameTargets.begin(), frameTargets.end(),
[this](const auto& pair) FTL_FAKE_GUARD(mStateLock)
@@ -2514,9 +2509,11 @@
if (!mustComposite) {
updateInputFlinger(vsyncId, pacesetterFrameTarget.frameBeginTime());
}
- doActiveLayersTracingIfNeeded(false, mVisibleRegionsDirty,
- pacesetterFrameTarget.frameBeginTime(), vsyncId);
+ if (mLayerTracingEnabled && !mLayerTracing.flagIsSet(LayerTracing::TRACE_COMPOSITION)) {
+ // This will block and tracing should only be enabled for debugging.
+ addToLayerTracing(mVisibleRegionsDirty, pacesetterFrameTarget.frameBeginTime(), vsyncId);
+ }
mLastCommittedVsyncId = vsyncId;
persistDisplayBrightness(mustComposite);
@@ -2738,8 +2735,10 @@
mLayersWithQueuedFrames.clear();
mLayersIdsWithQueuedFrames.clear();
- doActiveLayersTracingIfNeeded(true, mVisibleRegionsDirty, pacesetterTarget.frameBeginTime(),
- vsyncId);
+ if (mLayerTracingEnabled && mLayerTracing.flagIsSet(LayerTracing::TRACE_COMPOSITION)) {
+ // This will block and should only be used for debugging.
+ addToLayerTracing(mVisibleRegionsDirty, pacesetterTarget.frameBeginTime(), vsyncId);
+ }
updateInputFlinger(vsyncId, pacesetterTarget.frameBeginTime());
@@ -6367,6 +6366,11 @@
StringAppendF(&result, " transaction time: %f us\n", inTransactionDuration / 1000.0);
+ /*
+ * Tracing state
+ */
+ mLayerTracing.dump(result);
+
result.append("\nTransaction tracing: ");
if (mTransactionTracing) {
result.append("enabled\n");
@@ -6718,13 +6722,42 @@
case 1024: {
return NAME_NOT_FOUND;
}
- // Deprecated, use perfetto to start/stop the layer tracing
- case 1025: {
- return NAME_NOT_FOUND;
+ case 1025: { // Set layer tracing
+ n = data.readInt32();
+ bool tracingEnabledChanged;
+ if (n == 1) {
+ int64_t fixedStartingTime = data.readInt64();
+ ALOGD("LayerTracing enabled");
+ tracingEnabledChanged = mLayerTracing.enable();
+ if (tracingEnabledChanged) {
+ const TimePoint startingTime = fixedStartingTime
+ ? TimePoint::fromNs(fixedStartingTime)
+ : TimePoint::now();
+
+ mScheduler
+ ->schedule([this, startingTime]() FTL_FAKE_GUARD(
+ mStateLock) FTL_FAKE_GUARD(kMainThreadContext) {
+ constexpr bool kVisibleRegionDirty = true;
+ addToLayerTracing(kVisibleRegionDirty, startingTime,
+ mLastCommittedVsyncId);
+ })
+ .wait();
+ }
+ } else if (n == 2) {
+ std::string filename = std::string(data.readCString());
+ ALOGD("LayerTracing disabled. Trace wrote to %s", filename.c_str());
+ tracingEnabledChanged = mLayerTracing.disable(filename.c_str());
+ } else {
+ ALOGD("LayerTracing disabled");
+ tracingEnabledChanged = mLayerTracing.disable();
+ }
+ mTracingEnabledChanged = tracingEnabledChanged;
+ reply->writeInt32(NO_ERROR);
+ return NO_ERROR;
}
- // Deprecated, execute "adb shell perfetto --query" to see the ongoing tracing sessions
- case 1026: {
- return NAME_NOT_FOUND;
+ case 1026: { // Get layer tracing status
+ reply->writeBool(mLayerTracing.isEnabled());
+ return NO_ERROR;
}
// Is a DisplayColorSetting supported?
case 1027: {
@@ -6752,9 +6785,19 @@
case 1028: { // Unused.
return NAME_NOT_FOUND;
}
- // Deprecated, use perfetto to set the active layer tracing buffer size
+ // Set buffer size for SF tracing (value in KB)
case 1029: {
- return NAME_NOT_FOUND;
+ n = data.readInt32();
+ if (n <= 0 || n > MAX_TRACING_MEMORY) {
+ ALOGW("Invalid buffer size: %d KB", n);
+ reply->writeInt32(BAD_VALUE);
+ return BAD_VALUE;
+ }
+
+ ALOGD("Updating trace buffer to %d KB", n);
+ mLayerTracing.setBufferSize(n * 1024);
+ reply->writeInt32(NO_ERROR);
+ return NO_ERROR;
}
// Is device color managed?
case 1030: {
@@ -6794,9 +6837,13 @@
}
return NO_ERROR;
}
- // Deprecated, use perfetto to set layer trace flags
+ // Set trace flags
case 1033: {
- return NAME_NOT_FOUND;
+ n = data.readUint32();
+ ALOGD("Updating trace flags to 0x%x", n);
+ mLayerTracing.setTraceFlags(n);
+ reply->writeInt32(NO_ERROR);
+ return NO_ERROR;
}
case 1034: {
n = data.readInt32();
@@ -6955,6 +7002,9 @@
if (mTransactionTracing) {
mTransactionTracing->writeToFile();
}
+ if (mLayerTracingEnabled) {
+ mLayerTracing.writeToFile();
+ }
reply->writeInt32(NO_ERROR);
return NO_ERROR;
}
@@ -8741,50 +8791,19 @@
return update;
}
-void SurfaceFlinger::doActiveLayersTracingIfNeeded(bool isCompositionComputed,
- bool visibleRegionDirty, TimePoint time,
- VsyncId vsyncId) {
- if (!mLayerTracing.isActiveTracingStarted()) {
- return;
- }
- if (isCompositionComputed !=
- mLayerTracing.isActiveTracingFlagSet(LayerTracing::Flag::TRACE_COMPOSITION)) {
- return;
- }
- if (!visibleRegionDirty &&
- !mLayerTracing.isActiveTracingFlagSet(LayerTracing::Flag::TRACE_BUFFERS)) {
- return;
- }
- auto snapshot = takeLayersSnapshotProto(mLayerTracing.getActiveTracingFlags(), time, vsyncId,
- visibleRegionDirty);
- mLayerTracing.addProtoSnapshotToOstream(std::move(snapshot), LayerTracing::Mode::MODE_ACTIVE);
-}
-
-perfetto::protos::LayersSnapshotProto SurfaceFlinger::takeLayersSnapshotProto(
- uint32_t traceFlags, TimePoint time, VsyncId vsyncId, bool visibleRegionDirty) {
- ATRACE_CALL();
- perfetto::protos::LayersSnapshotProto snapshot;
- snapshot.set_elapsed_realtime_nanos(time.ns());
- snapshot.set_vsync_id(ftl::to_underlying(vsyncId));
- snapshot.set_where(visibleRegionDirty ? "visibleRegionsDirty" : "bufferLatched");
- snapshot.set_excludes_composition_state((traceFlags & LayerTracing::Flag::TRACE_COMPOSITION) ==
- 0);
-
- auto layers = dumpDrawingStateProto(traceFlags);
- if (traceFlags & LayerTracing::Flag::TRACE_EXTRA) {
+void SurfaceFlinger::addToLayerTracing(bool visibleRegionDirty, TimePoint time, VsyncId vsyncId) {
+ const uint32_t tracingFlags = mLayerTracing.getFlags();
+ perfetto::protos::LayersProto layers(dumpDrawingStateProto(tracingFlags));
+ if (tracingFlags & LayerTracing::TRACE_EXTRA) {
dumpOffscreenLayersProto(layers);
}
- *snapshot.mutable_layers() = std::move(layers);
-
- if (traceFlags & LayerTracing::Flag::TRACE_HWC) {
- std::string hwcDump;
+ std::string hwcDump;
+ if (tracingFlags & LayerTracing::TRACE_HWC) {
dumpHwc(hwcDump);
- snapshot.set_hwc_blob(std::move(hwcDump));
}
-
- *snapshot.mutable_displays() = dumpDisplayProto();
-
- return snapshot;
+ auto displays = dumpDisplayProto();
+ mLayerTracing.notify(visibleRegionDirty, time.ns(), ftl::to_underlying(vsyncId), &layers,
+ std::move(hwcDump), &displays);
}
// sfdo functions