Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1297618f authored by Surbhi Kadam's avatar Surbhi Kadam
Browse files

Parse and write new corner radii and client drawn radii fields

Added new corner radii, requested radii and client drawn radii fields
to proto for debugging

Flag: EXEMPT log only update
Test: presubmit
Bug: 406554726
Change-Id: I39848bfcf89b8607c57b102ab66a3c395e1ed2fd
parent c724e6ba
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -29,6 +29,16 @@ using gui::WindowInfo;

namespace surfaceflinger {

void LayerProtoHelper::writeCornerRadiiToProto(
        float tl, float tr, float bl, float br,
        const std::function<perfetto::protos::CornerRadiiProto*()>& getCornerRadiiProto) {
    perfetto::protos::CornerRadiiProto* radii_proto = getCornerRadiiProto();
    radii_proto->set_tl(tl);
    radii_proto->set_tr(tr);
    radii_proto->set_bl(bl);
    radii_proto->set_br(br);
}

void LayerProtoHelper::writePositionToProto(
        const float x, const float y,
        std::function<perfetto::protos::PositionProto*()> getPositionProto) {
@@ -411,6 +421,21 @@ void LayerProtoHelper::writeSnapshotToProto(perfetto::protos::LayerProto* layerI
            (snapshot.roundedCorner.radii.topLeft.x + snapshot.roundedCorner.radii.topLeft.y) /
            2.0);
    layerInfo->set_background_blur_radius(snapshot.backgroundBlurRadius);
    LayerProtoHelper::writeCornerRadiiToProto(snapshot.roundedCorner.radii.topLeft.x,
                                              snapshot.roundedCorner.radii.topRight.x,
                                              snapshot.roundedCorner.radii.bottomLeft.x,
                                              snapshot.roundedCorner.radii.bottomRight.x,
                                              [&]() { return layerInfo->mutable_corner_radii(); });
    LayerProtoHelper::writeCornerRadiiToProto(snapshot.roundedCorner.requestedRadii.topLeft.x,
                                              snapshot.roundedCorner.requestedRadii.topRight.x,
                                              snapshot.roundedCorner.requestedRadii.bottomLeft.x,
                                              snapshot.roundedCorner.requestedRadii.bottomRight.x,
                                              [&]() { return layerInfo->mutable_corner_radii(); });
    LayerProtoHelper::writeCornerRadiiToProto(snapshot.roundedCorner.clientDrawnRadii.topLeft.x,
                                              snapshot.roundedCorner.clientDrawnRadii.topRight.x,
                                              snapshot.roundedCorner.clientDrawnRadii.bottomLeft.x,
                                              snapshot.roundedCorner.clientDrawnRadii.bottomRight.x,
                                              [&]() { return layerInfo->mutable_corner_radii(); });
    layerInfo->set_is_trusted_overlay(snapshot.trustedOverlay == gui::TrustedOverlay::ENABLED);
    // TODO(b/339701674) update protos
    LayerProtoHelper::writeToProtoDeprecated(transform, layerInfo->mutable_transform());
@@ -420,7 +445,6 @@ void LayerProtoHelper::writeSnapshotToProto(perfetto::protos::LayerProto* layerI
                                   [&]() { return layerInfo->mutable_bounds(); });
    LayerProtoHelper::writeToProto(snapshot.surfaceDamage,
                                   [&]() { return layerInfo->mutable_damage_region(); });

    if (requestedState.hasColorTransform) {
        LayerProtoHelper::writeToProto(snapshot.colorTransform,
                                       layerInfo->mutable_color_transform());
+3 −0
Original line number Diff line number Diff line
@@ -35,6 +35,9 @@ namespace android {
namespace surfaceflinger {
class LayerProtoHelper {
public:
    static void writeCornerRadiiToProto(
            float tl, float tr, float bl, float br,
            const std::function<perfetto::protos::CornerRadiiProto*()>& getCornerRadiiProto);
    static void writePositionToProto(
            const float x, const float y,
            std::function<perfetto::protos::PositionProto*()> getPositionProto);
+26 −0
Original line number Diff line number Diff line
@@ -123,8 +123,20 @@ perfetto::protos::LayerState TransactionProtoParser::toProto(
        matrixProto->set_dtdy(layer.matrix.dtdy);
    }
    if (layer.what & layer_state_t::eCornerRadiusChanged) {
        perfetto::protos::LayerState_CornerRadii* radiiProto = proto.mutable_corner_radii();
        radiiProto->set_tl(layer.cornerRadii.topLeft.x);
        radiiProto->set_tr(layer.cornerRadii.topRight.x);
        radiiProto->set_bl(layer.cornerRadii.bottomLeft.x);
        radiiProto->set_br(layer.cornerRadii.bottomRight.x);
        // TODO(b/430109627): Remove usage of deprecated corner_radius field
        proto.set_corner_radius(layer.cornerRadii.topLeft.x);
    }
    if (layer.what & layer_state_t::eClientDrawnCornerRadiusChanged) {
        perfetto::protos::LayerState_CornerRadii* radiiProto = proto.mutable_corner_radii();
        radiiProto->set_tl(layer.clientDrawnCornerRadii.topLeft.x);
        radiiProto->set_tr(layer.clientDrawnCornerRadii.topRight.x);
        radiiProto->set_bl(layer.clientDrawnCornerRadii.bottomLeft.x);
    }
    if (layer.what & layer_state_t::eBackgroundBlurRadiusChanged) {
        proto.set_background_blur_radius(layer.backgroundBlurRadius);
    }
@@ -395,8 +407,22 @@ void TransactionProtoParser::fromProto(const perfetto::protos::LayerState& proto
        layer.matrix.dtdy = matrixProto.dtdy();
    }
    if (proto.what() & layer_state_t::eCornerRadiusChanged) {
        const perfetto::protos::LayerState_CornerRadii& radiiProto = proto.corner_radii();
        layer.cornerRadii.topLeft.x = radiiProto.tl();
        layer.cornerRadii.topRight.x = radiiProto.tr();
        layer.cornerRadii.bottomLeft.x = radiiProto.bl();
        layer.cornerRadii.bottomRight.y = radiiProto.br();
        // TODO(b/430109627): Remove usage of deprecated corner_radius field
        layer.cornerRadii.topLeft.x = proto.corner_radius();
    }
    if (proto.what() & layer_state_t::eClientDrawnCornerRadiusChanged) {
        const perfetto::protos::LayerState_CornerRadii& radiiProto =
                proto.client_drawn_corner_radii();
        layer.clientDrawnCornerRadii.topLeft.x = radiiProto.tl();
        layer.clientDrawnCornerRadii.topRight.x = radiiProto.tr();
        layer.clientDrawnCornerRadii.bottomLeft.x = radiiProto.bl();
        layer.clientDrawnCornerRadii.bottomRight.y = radiiProto.br();
    }
    if (proto.what() & layer_state_t::eBackgroundBlurRadiusChanged) {
        layer.backgroundBlurRadius = proto.background_blur_radius();
    }