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

Commit 4e0f0bbc authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Parse and write new corner radii and client drawn radii fields" into main

parents bbf0e156 1297618f
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();
    }