summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/SurfaceFlinger.cpp
diff options
context:
space:
mode:
author Vishnu Nair <vishnun@google.com> 2024-08-16 14:30:28 +0000
committer Vishnu Nair <vishnun@google.com> 2024-08-16 14:31:25 +0000
commitb46e37c027e95c2b2b7ff48989af633e4780642e (patch)
tree8461a972e4ad53530065bc997385e7d01e559823 /services/surfaceflinger/SurfaceFlinger.cpp
parent826e9f05eb593db46e61c3aca77276701ecf9a62 (diff)
Include offscreen layers in generated trace
Flag: EXEMPT bugfix Bug: 359854186 Test: winscope Change-Id: Ia8572b4df1ac2921af3c4c686fc75062e1544c8c
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp46
1 files changed, 10 insertions, 36 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 9be9fee9ee..79f11fb652 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -5977,9 +5977,16 @@ perfetto::protos::LayersProto SurfaceFlinger::dumpDrawingStateProto(uint32_t tra
}
}
- return LayerProtoFromSnapshotGenerator(mLayerSnapshotBuilder, mFrontEndDisplayInfos,
- mLegacyLayers, traceFlags)
- .generate(mLayerHierarchyBuilder.getHierarchy());
+ auto traceGenerator =
+ LayerProtoFromSnapshotGenerator(mLayerSnapshotBuilder, mFrontEndDisplayInfos,
+ mLegacyLayers, traceFlags)
+ .with(mLayerHierarchyBuilder.getHierarchy());
+
+ if (traceFlags & LayerTracing::Flag::TRACE_EXTRA) {
+ traceGenerator.withOffscreenLayers(mLayerHierarchyBuilder.getOffscreenHierarchy());
+ }
+
+ return traceGenerator.generate();
}
google::protobuf::RepeatedPtrField<perfetto::protos::DisplayProto>
@@ -6013,36 +6020,6 @@ void SurfaceFlinger::dumpHwc(std::string& result) const {
getHwComposer().dump(result);
}
-void SurfaceFlinger::dumpOffscreenLayersProto(perfetto::protos::LayersProto& layersProto,
- uint32_t traceFlags) const {
- // Add a fake invisible root layer to the proto output and parent all the offscreen layers to
- // it.
- perfetto::protos::LayerProto* rootProto = layersProto.add_layers();
- const int32_t offscreenRootLayerId = INT32_MAX - 2;
- rootProto->set_id(offscreenRootLayerId);
- rootProto->set_name("Offscreen Root");
- rootProto->set_parent(-1);
-
- perfetto::protos::LayersProto offscreenLayers =
- LayerProtoFromSnapshotGenerator(mLayerSnapshotBuilder, mFrontEndDisplayInfos,
- mLegacyLayers, traceFlags)
- .generate(mLayerHierarchyBuilder.getOffscreenHierarchy());
-
- for (int i = 0; i < offscreenLayers.layers_size(); i++) {
- perfetto::protos::LayerProto* layerProto = offscreenLayers.mutable_layers()->Mutable(i);
- if (layerProto->parent() == -1) {
- layerProto->set_parent(offscreenRootLayerId);
- // Add layer as child of the fake root
- rootProto->add_children(layerProto->id());
- }
- }
-
- layersProto.mutable_layers()->Reserve(layersProto.layers_size() +
- offscreenLayers.layers_size());
- std::copy(offscreenLayers.layers().begin(), offscreenLayers.layers().end(),
- RepeatedFieldBackInserter(layersProto.mutable_layers()));
-}
-
perfetto::protos::LayersProto SurfaceFlinger::dumpProtoFromMainThread(uint32_t traceFlags) {
return mScheduler
->schedule([=, this]() FTL_FAKE_GUARD(kMainThreadContext) {
@@ -8582,9 +8559,6 @@ perfetto::protos::LayersSnapshotProto SurfaceFlinger::takeLayersSnapshotProto(
0);
auto layers = dumpDrawingStateProto(traceFlags);
- if (traceFlags & LayerTracing::Flag::TRACE_EXTRA) {
- dumpOffscreenLayersProto(layers);
- }
*snapshot.mutable_layers() = std::move(layers);
if (traceFlags & LayerTracing::Flag::TRACE_HWC) {