diff options
author | 2024-08-16 14:30:28 +0000 | |
---|---|---|
committer | 2024-08-16 14:31:25 +0000 | |
commit | b46e37c027e95c2b2b7ff48989af633e4780642e (patch) | |
tree | 8461a972e4ad53530065bc997385e7d01e559823 /services/surfaceflinger/SurfaceFlinger.cpp | |
parent | 826e9f05eb593db46e61c3aca77276701ecf9a62 (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.cpp | 46 |
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) { |