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

Commit 70a63e5f authored by Melody Hsu's avatar Melody Hsu
Browse files

Remove useIdentityTransform from DisplayCaptureArgs.

Screenshots do not set useIdentityTransfrom to true with
a rotated display. The default value is false in
SurfaceFlinger and is not relevant for captureLayers,
which is the API that will be used for screenshots going
forward. Rotation flags are no longer relevant in
DisplayRenderArea and rotation values can be simplified
to 0 rotation by default.

Bug: 293445881
Test: atest LayerStateTest
Test: presubmit
Change-Id: Id0cce05458c3daa4078097057f00fd856df1e092
parent d1886a2b
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -930,7 +930,6 @@ status_t DisplayCaptureArgs::writeToParcel(Parcel* output) const {
    SAFE_PARCEL(output->writeStrongBinder, displayToken);
    SAFE_PARCEL(output->writeUint32, width);
    SAFE_PARCEL(output->writeUint32, height);
    SAFE_PARCEL(output->writeBool, useIdentityTransform);
    return NO_ERROR;
}

@@ -940,7 +939,6 @@ status_t DisplayCaptureArgs::readFromParcel(const Parcel* input) {
    SAFE_PARCEL(input->readStrongBinder, &displayToken);
    SAFE_PARCEL(input->readUint32, &width);
    SAFE_PARCEL(input->readUint32, &height);
    SAFE_PARCEL(input->readBool, &useIdentityTransform);
    return NO_ERROR;
}

+0 −1
Original line number Diff line number Diff line
@@ -76,7 +76,6 @@ struct DisplayCaptureArgs : CaptureArgs {
    sp<IBinder> displayToken;
    uint32_t width{0};
    uint32_t height{0};
    bool useIdentityTransform{false};

    status_t writeToParcel(Parcel* output) const override;
    status_t readFromParcel(const Parcel* input) override;
+4 −29
Original line number Diff line number Diff line
@@ -18,41 +18,26 @@
#include "DisplayDevice.h"

namespace android {
namespace {

RenderArea::RotationFlags applyDeviceOrientation(bool useIdentityTransform,
                                                 const DisplayDevice& display) {
    if (!useIdentityTransform) {
        return RenderArea::RotationFlags::ROT_0;
    }

    return ui::Transform::toRotationFlags(display.getOrientation());
}

} // namespace

std::unique_ptr<RenderArea> DisplayRenderArea::create(wp<const DisplayDevice> displayWeak,
                                                      const Rect& sourceCrop, ui::Size reqSize,
                                                      ui::Dataspace reqDataSpace,
                                                      bool useIdentityTransform,
                                                      bool hintForSeamlessTransition,
                                                      bool allowSecureLayers) {
    if (auto display = displayWeak.promote()) {
        // Using new to access a private constructor.
        return std::unique_ptr<DisplayRenderArea>(
                new DisplayRenderArea(std::move(display), sourceCrop, reqSize, reqDataSpace,
                                      useIdentityTransform, hintForSeamlessTransition,
                                      allowSecureLayers));
                                      hintForSeamlessTransition, allowSecureLayers));
    }
    return nullptr;
}

DisplayRenderArea::DisplayRenderArea(sp<const DisplayDevice> display, const Rect& sourceCrop,
                                     ui::Size reqSize, ui::Dataspace reqDataSpace,
                                     bool useIdentityTransform, bool hintForSeamlessTransition,
                                     bool allowSecureLayers)
                                     bool hintForSeamlessTransition, bool allowSecureLayers)
      : RenderArea(reqSize, CaptureFill::OPAQUE, reqDataSpace, hintForSeamlessTransition,
                   allowSecureLayers, applyDeviceOrientation(useIdentityTransform, *display)),
                   allowSecureLayers),
        mDisplay(std::move(display)),
        mSourceCrop(sourceCrop) {}

@@ -73,17 +58,7 @@ Rect DisplayRenderArea::getSourceCrop() const {
    if (mSourceCrop.isEmpty()) {
        return mDisplay->getLayerStackSpaceRect();
    }

    // Correct for the orientation when the screen capture request contained
    // useIdentityTransform. This will cause the rotation flag to be non 0 since
    // it needs to rotate based on the screen orientation to allow the screenshot
    // to be taken in the ROT_0 orientation
    const auto flags = getRotationFlags();
    int width = mDisplay->getLayerStackSpaceRect().getWidth();
    int height = mDisplay->getLayerStackSpaceRect().getHeight();
    ui::Transform rotation;
    rotation.set(flags, width, height);
    return rotation.transform(mSourceCrop);
    return mSourceCrop;
}

} // namespace android
+1 −3
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ class DisplayRenderArea : public RenderArea {
public:
    static std::unique_ptr<RenderArea> create(wp<const DisplayDevice>, const Rect& sourceCrop,
                                              ui::Size reqSize, ui::Dataspace,
                                              bool useIdentityTransform,
                                              bool hintForSeamlessTransition,
                                              bool allowSecureLayers = true);

@@ -40,8 +39,7 @@ public:

private:
    DisplayRenderArea(sp<const DisplayDevice>, const Rect& sourceCrop, ui::Size reqSize,
                      ui::Dataspace, bool useIdentityTransform, bool hintForSeamlessTransition,
                      bool allowSecureLayers = true);
                      ui::Dataspace, bool hintForSeamlessTransition, bool allowSecureLayers = true);

    const sp<const DisplayDevice> mDisplay;
    const Rect mSourceCrop;
+1 −3
Original line number Diff line number Diff line
@@ -276,13 +276,11 @@ void RegionSamplingThread::captureSample() {
    }

    const Rect sampledBounds = sampleRegion.bounds();
    constexpr bool kUseIdentityTransform = false;
    constexpr bool kHintForSeamlessTransition = false;

    SurfaceFlinger::RenderAreaFuture renderAreaFuture = ftl::defer([=] {
        return DisplayRenderArea::create(displayWeak, sampledBounds, sampledBounds.getSize(),
                                         ui::Dataspace::V0_SRGB, kUseIdentityTransform,
                                         kHintForSeamlessTransition);
                                         ui::Dataspace::V0_SRGB, kHintForSeamlessTransition);
    });

    std::unordered_set<sp<IRegionSamplingListener>, SpHash<IRegionSamplingListener>> listeners;
Loading