summaryrefslogtreecommitdiff
path: root/services/surfaceflinger
diff options
context:
space:
mode:
authorChavi Weingarten <chaviw@google.com>2020-01-14 17:57:29 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-01-14 17:57:29 +0000
commitb168232839544cc033bb98e18d3e478afb5ea929 (patch)
tree21683291c16b36a9d28e55bed006a3ac921c0483 /services/surfaceflinger
parent5ada2be22e5265c1d1423987770a922820caccbe (diff)
parent08f3cb2b8eb777fd5f7fc0245544c051dae5124d (diff)
downloadnative-b168232839544cc033bb98e18d3e478afb5ea929.tar.gz
Merge "Add layers to proto by traversing children"
Diffstat (limited to 'services/surfaceflinger')
-rw-r--r--services/surfaceflinger/Layer.cpp12
-rw-r--r--services/surfaceflinger/Layer.h3
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp19
-rw-r--r--services/surfaceflinger/layerproto/layers.proto2
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 {