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

Commit 8f966bf6 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Use a strongly typed Pid in WindowInfo" into udc-qpr-dev am: 73ab4db8

parents 030279b0 73ab4db8
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ status_t WindowInfo::writeToParcel(android::Parcel* parcel) const {

    // Ensure that the size of custom types are what we expect for writing into the parcel.
    static_assert(sizeof(inputConfig) == 4u);
    static_assert(sizeof(ownerPid.val()) == 4u);
    static_assert(sizeof(ownerUid.val()) == 4u);

    // clang-format off
@@ -116,7 +117,7 @@ status_t WindowInfo::writeToParcel(android::Parcel* parcel) const {
        parcel->writeFloat(transform.dsdy()) ?:
        parcel->writeFloat(transform.ty()) ?:
        parcel->writeInt32(static_cast<int32_t>(touchOcclusionMode)) ?:
        parcel->writeInt32(ownerPid) ?:
        parcel->writeInt32(ownerPid.val()) ?:
        parcel->writeInt32(ownerUid.val()) ?:
        parcel->writeUtf8AsUtf16(packageName) ?:
        parcel->writeInt32(inputConfig.get()) ?:
@@ -148,7 +149,7 @@ status_t WindowInfo::readFromParcel(const android::Parcel* parcel) {
    }

    float dsdx, dtdx, tx, dtdy, dsdy, ty;
    int32_t lpFlags, lpType, touchOcclusionModeInt, inputConfigInt, ownerUidInt;
    int32_t lpFlags, lpType, touchOcclusionModeInt, inputConfigInt, ownerPidInt, ownerUidInt;
    sp<IBinder> touchableRegionCropHandleSp;

    // clang-format off
@@ -168,7 +169,7 @@ status_t WindowInfo::readFromParcel(const android::Parcel* parcel) {
        parcel->readFloat(&dsdy) ?:
        parcel->readFloat(&ty) ?:
        parcel->readInt32(&touchOcclusionModeInt) ?:
        parcel->readInt32(&ownerPid) ?:
        parcel->readInt32(&ownerPidInt) ?:
        parcel->readInt32(&ownerUidInt) ?:
        parcel->readUtf8FromUtf16(&packageName) ?:
        parcel->readInt32(&inputConfigInt) ?:
@@ -191,6 +192,7 @@ status_t WindowInfo::readFromParcel(const android::Parcel* parcel) {
    transform.set({dsdx, dtdx, tx, dtdy, dsdy, ty, 0, 0, 1});
    touchOcclusionMode = static_cast<TouchOcclusionMode>(touchOcclusionModeInt);
    inputConfig = ftl::Flags<InputConfig>(inputConfigInt);
    ownerPid = Pid{ownerPidInt};
    ownerUid = Uid{static_cast<uid_t>(ownerUidInt)};
    touchableRegionCropHandle = touchableRegionCropHandleSp;

+1 −1
Original line number Diff line number Diff line
@@ -186,7 +186,7 @@ void SurfaceComposerClientFuzzer::getWindowInfo(gui::WindowInfo* windowInfo) {
    windowInfo->touchableRegion = Region(getRect(&mFdp));
    windowInfo->replaceTouchableRegionWithCrop = mFdp.ConsumeBool();
    windowInfo->touchOcclusionMode = mFdp.PickValueInArray(kMode);
    windowInfo->ownerPid = mFdp.ConsumeIntegral<int32_t>();
    windowInfo->ownerPid = gui::Pid{mFdp.ConsumeIntegral<pid_t>()};
    windowInfo->ownerUid = gui::Uid{mFdp.ConsumeIntegral<uid_t>()};
    windowInfo->packageName = mFdp.ConsumeRandomLengthString(kRandomStringMaxBytes);
    windowInfo->inputConfig = mFdp.PickValueInArray(kFeatures);
+15 −0
Original line number Diff line number Diff line
@@ -22,6 +22,21 @@

namespace android::gui {

// Type-safe wrapper for a PID.
struct Pid : ftl::Constructible<Pid, pid_t>, ftl::Equatable<Pid>, ftl::Orderable<Pid> {
    using Constructible::Constructible;

    const static Pid INVALID;

    constexpr auto val() const { return ftl::to_underlying(*this); }

    constexpr bool isValid() const { return val() >= 0; }

    std::string toString() const { return std::to_string(val()); }
};

const inline Pid Pid::INVALID{-1};

// Type-safe wrapper for a UID.
// We treat the unsigned equivalent of -1 as a singular invalid value.
struct Uid : ftl::Constructible<Uid, uid_t>, ftl::Equatable<Uid>, ftl::Orderable<Uid> {
+2 −2
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@
#include <binder/Parcelable.h>
#include <ftl/flags.h>
#include <ftl/mixins.h>
#include <gui/Uid.h>
#include <gui/PidUid.h>
#include <gui/constants.h>
#include <ui/Rect.h>
#include <ui/Region.h>
@@ -225,7 +225,7 @@ struct WindowInfo : public Parcelable {
    Region touchableRegion;

    TouchOcclusionMode touchOcclusionMode = TouchOcclusionMode::BLOCK_UNTRUSTED;
    int32_t ownerPid = -1;
    Pid ownerPid = Pid::INVALID;
    Uid ownerUid = Uid::INVALID;
    std::string packageName;
    ftl::Flags<InputConfig> inputConfig;
+1 −1
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ TEST(WindowInfo, Parcelling) {
    i.alpha = 0.7;
    i.transform.set({0.4, -1, 100, 0.5, 0, 40, 0, 0, 1});
    i.touchOcclusionMode = TouchOcclusionMode::ALLOW;
    i.ownerPid = 19;
    i.ownerPid = gui::Pid{19};
    i.ownerUid = gui::Uid{24};
    i.packageName = "com.example.package";
    i.inputConfig = WindowInfo::InputConfig::NOT_FOCUSABLE;
Loading