diff options
author | Chavi Weingarten <chaviw@google.com> | 2020-01-14 17:57:29 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-01-14 17:57:29 +0000 |
commit | b168232839544cc033bb98e18d3e478afb5ea929 (patch) | |
tree | 21683291c16b36a9d28e55bed006a3ac921c0483 /services/surfaceflinger | |
parent | 5ada2be22e5265c1d1423987770a922820caccbe (diff) | |
parent | 08f3cb2b8eb777fd5f7fc0245544c051dae5124d (diff) | |
download | native-b168232839544cc033bb98e18d3e478afb5ea929.tar.gz |
Merge "Add layers to proto by traversing children"
Diffstat (limited to 'services/surfaceflinger')
-rw-r--r-- | services/surfaceflinger/Layer.cpp | 12 | ||||
-rw-r--r-- | services/surfaceflinger/Layer.h | 3 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 19 | ||||
-rw-r--r-- | services/surfaceflinger/layerproto/layers.proto | 2 |
4 files changed, 21 insertions, 15 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 5bc0860f20..37714f55c1 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -1893,6 +1893,16 @@ void Layer::setInputInfo(const InputWindowInfo& info) { setTransactionFlags(eTransactionNeeded); } +void Layer::writeToProto(LayersProto& layersProto, uint32_t traceFlags) const { + LayerProto* layerProto = layersProto.add_layers(); + writeToProtoDrawingState(layerProto, traceFlags); + writeToProtoCommonState(layerProto, LayerVector::StateSet::Drawing, traceFlags); + + for (const sp<Layer>& layer : mDrawingChildren) { + layer->writeToProto(layersProto, traceFlags); + } +} + void Layer::writeToProtoDrawingState(LayerProto* layerInfo, uint32_t traceFlags) const { ui::Transform transform = getTransform(); @@ -2014,6 +2024,8 @@ void Layer::writeToProtoCommonState(LayerProto* layerInfo, LayerVector::StateSet } else { layerInfo->set_z_order_relative_of(-1); } + + layerInfo->set_is_relative_of(state.isRelativeOf); } if (traceFlags & SurfaceTracing::TRACE_INPUT) { diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index 553408c151..76edfa5fcb 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -454,6 +454,9 @@ public: bool isRemovedFromCurrentState() const; + void writeToProto(LayersProto& layersProto, + uint32_t traceFlags = SurfaceTracing::TRACE_ALL) const; + // Write states that are modified by the main thread. This includes drawing // state as well as buffer data. This should be called in the main or tracing // thread. diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 47f1505060..65d02adeef 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -4257,12 +4257,9 @@ void SurfaceFlinger::dumpWideColorInfo(std::string& result) const { LayersProto SurfaceFlinger::dumpDrawingStateProto(uint32_t traceFlags) const { LayersProto layersProto; - mDrawingState.traverseInZOrder([&](Layer* layer) { - LayerProto* layerProto = layersProto.add_layers(); - layer->writeToProtoDrawingState(layerProto, traceFlags); - layer->writeToProtoCommonState(layerProto, LayerVector::StateSet::Drawing, traceFlags); - }); - + for (const sp<Layer>& layer : mDrawingState.layersSortedByZ) { + layer->writeToProto(layersProto, traceFlags); + } return layersProto; } @@ -4286,15 +4283,7 @@ void SurfaceFlinger::dumpOffscreenLayersProto(LayersProto& layersProto, uint32_t traceFlags); layerProto->set_parent(offscreenRootLayerId); - // Add children - offscreenLayer->traverseInZOrder(LayerVector::StateSet::Drawing, [&](Layer* layer) { - if (layer == offscreenLayer) { - return; - } - LayerProto* childProto = layersProto.add_layers(); - layer->writeToProtoDrawingState(childProto, traceFlags); - layer->writeToProtoCommonState(childProto, LayerVector::StateSet::Drawing, traceFlags); - }); + offscreenLayer->writeToProto(layersProto, traceFlags); } } diff --git a/services/surfaceflinger/layerproto/layers.proto b/services/surfaceflinger/layerproto/layers.proto index 23df1bbd2c..41ecafadd2 100644 --- a/services/surfaceflinger/layerproto/layers.proto +++ b/services/surfaceflinger/layerproto/layers.proto @@ -102,6 +102,8 @@ message LayerProto { // layer or set by a parent layer. float shadow_radius = 49; ColorTransformProto color_transform = 50; + + bool is_relative_of = 51; } message PositionProto { |