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

Commit 49943cf4 authored by Vishnu Nair's avatar Vishnu Nair Committed by Android (Google) Code Review
Browse files

Merge "Fix region sampling for secure layers" into main

parents 1693ba47 871886ee
Loading
Loading
Loading
Loading
+44 −14
Original line number Diff line number Diff line
@@ -239,8 +239,9 @@ protected:
    float const luma_green = 0.7152;
    uint32_t const rgba_blue = 0xFFFF0000;
    float const luma_blue = 0.0722;
    float const error_margin = 0.01;
    float const error_margin = 0.1;
    float const luma_gray = 0.50;
    static constexpr std::chrono::milliseconds EVENT_WAIT_TIME_MS = 5000ms;
};

TEST_F(RegionSamplingTest, invalidLayerHandle_doesNotCrash) {
@@ -261,7 +262,7 @@ TEST_F(RegionSamplingTest, invalidLayerHandle_doesNotCrash) {
    composer->removeRegionSamplingListener(listener);
}

TEST_F(RegionSamplingTest, DISABLED_CollectsLuma) {
TEST_F(RegionSamplingTest, CollectsLuma) {
    fill_render(rgba_green);

    sp<gui::ISurfaceComposer> composer = ComposerServiceAIDL::getComposerService();
@@ -273,7 +274,30 @@ TEST_F(RegionSamplingTest, DISABLED_CollectsLuma) {
    sampleArea.bottom = 200;
    composer->addRegionSamplingListener(sampleArea, mTopLayer->getHandle(), listener);

    EXPECT_TRUE(listener->wait_event(300ms)) << "timed out waiting for luma event to be received";
    EXPECT_TRUE(listener->wait_event(EVENT_WAIT_TIME_MS))
            << "timed out waiting for luma event to be received";
    EXPECT_NEAR(listener->luma(), luma_green, error_margin);

    composer->removeRegionSamplingListener(listener);
}

TEST_F(RegionSamplingTest, CollectsLumaForSecureLayer) {
    fill_render(rgba_green);
    SurfaceComposerClient::Transaction()
            .setFlags(mContentLayer, layer_state_t::eLayerSecure, layer_state_t::eLayerSecure)
            .apply(/*synchronous=*/true);

    sp<gui::ISurfaceComposer> composer = ComposerServiceAIDL::getComposerService();
    sp<Listener> listener = new Listener();
    gui::ARect sampleArea;
    sampleArea.left = 100;
    sampleArea.top = 100;
    sampleArea.right = 200;
    sampleArea.bottom = 200;
    composer->addRegionSamplingListener(sampleArea, mTopLayer->getHandle(), listener);

    EXPECT_TRUE(listener->wait_event(EVENT_WAIT_TIME_MS))
            << "timed out waiting for luma event to be received";
    EXPECT_NEAR(listener->luma(), luma_green, error_margin);

    composer->removeRegionSamplingListener(listener);
@@ -291,13 +315,14 @@ TEST_F(RegionSamplingTest, DISABLED_CollectsChangingLuma) {
    sampleArea.bottom = 200;
    composer->addRegionSamplingListener(sampleArea, mTopLayer->getHandle(), listener);

    EXPECT_TRUE(listener->wait_event(300ms)) << "timed out waiting for luma event to be received";
    EXPECT_TRUE(listener->wait_event(EVENT_WAIT_TIME_MS))
            << "timed out waiting for luma event to be received";
    EXPECT_NEAR(listener->luma(), luma_green, error_margin);

    listener->reset();

    fill_render(rgba_blue);
    EXPECT_TRUE(listener->wait_event(300ms))
    EXPECT_TRUE(listener->wait_event(EVENT_WAIT_TIME_MS))
            << "timed out waiting for 2nd luma event to be received";
    EXPECT_NEAR(listener->luma(), luma_blue, error_margin);

@@ -323,10 +348,10 @@ TEST_F(RegionSamplingTest, DISABLED_CollectsLumaFromTwoRegions) {
    graySampleArea.bottom = 200;
    composer->addRegionSamplingListener(graySampleArea, mTopLayer->getHandle(), grayListener);

    EXPECT_TRUE(grayListener->wait_event(300ms))
    EXPECT_TRUE(grayListener->wait_event(EVENT_WAIT_TIME_MS))
            << "timed out waiting for luma event to be received";
    EXPECT_NEAR(grayListener->luma(), luma_gray, error_margin);
    EXPECT_TRUE(greenListener->wait_event(300ms))
    EXPECT_TRUE(greenListener->wait_event(EVENT_WAIT_TIME_MS))
            << "timed out waiting for luma event to be received";
    EXPECT_NEAR(greenListener->luma(), luma_green, error_margin);

@@ -334,7 +359,7 @@ TEST_F(RegionSamplingTest, DISABLED_CollectsLumaFromTwoRegions) {
    composer->removeRegionSamplingListener(grayListener);
}

TEST_F(RegionSamplingTest, DISABLED_TestIfInvalidInputParameters) {
TEST_F(RegionSamplingTest, TestIfInvalidInputParameters) {
    sp<gui::ISurfaceComposer> composer = ComposerServiceAIDL::getComposerService();
    sp<Listener> listener = new Listener();

@@ -369,7 +394,7 @@ TEST_F(RegionSamplingTest, DISABLED_TestIfInvalidInputParameters) {
    composer->removeRegionSamplingListener(listener);
}

TEST_F(RegionSamplingTest, DISABLED_TestCallbackAfterRemoveListener) {
TEST_F(RegionSamplingTest, TestCallbackAfterRemoveListener) {
    fill_render(rgba_green);
    sp<gui::ISurfaceComposer> composer = ComposerServiceAIDL::getComposerService();
    sp<Listener> listener = new Listener();
@@ -381,7 +406,8 @@ TEST_F(RegionSamplingTest, DISABLED_TestCallbackAfterRemoveListener) {
    composer->addRegionSamplingListener(sampleArea, mTopLayer->getHandle(), listener);
    fill_render(rgba_green);

    EXPECT_TRUE(listener->wait_event(300ms)) << "timed out waiting for luma event to be received";
    EXPECT_TRUE(listener->wait_event(EVENT_WAIT_TIME_MS))
            << "timed out waiting for luma event to be received";
    EXPECT_NEAR(listener->luma(), luma_green, error_margin);

    listener->reset();
@@ -404,11 +430,13 @@ TEST_F(RegionSamplingTest, DISABLED_CollectsLumaFromMovingLayer) {
    // Test: listener in (100, 100). See layer before move, no layer after move.
    fill_render(rgba_blue);
    composer->addRegionSamplingListener(sampleAreaA, mTopLayer->getHandle(), listener);
    EXPECT_TRUE(listener->wait_event(300ms)) << "timed out waiting for luma event to be received";
    EXPECT_TRUE(listener->wait_event(EVENT_WAIT_TIME_MS))
            << "timed out waiting for luma event to be received";
    EXPECT_NEAR(listener->luma(), luma_blue, error_margin);
    listener->reset();
    SurfaceComposerClient::Transaction{}.setPosition(mContentLayer, 600, 600).apply();
    EXPECT_TRUE(listener->wait_event(300ms)) << "timed out waiting for luma event to be received";
    EXPECT_TRUE(listener->wait_event(EVENT_WAIT_TIME_MS))
            << "timed out waiting for luma event to be received";
    EXPECT_NEAR(listener->luma(), luma_gray, error_margin);
    composer->removeRegionSamplingListener(listener);

@@ -420,11 +448,13 @@ TEST_F(RegionSamplingTest, DISABLED_CollectsLumaFromMovingLayer) {
    sampleAreaA.right = sampleArea.right;
    sampleAreaA.bottom = sampleArea.bottom;
    composer->addRegionSamplingListener(sampleAreaA, mTopLayer->getHandle(), listener);
    EXPECT_TRUE(listener->wait_event(300ms)) << "timed out waiting for luma event to be received";
    EXPECT_TRUE(listener->wait_event(EVENT_WAIT_TIME_MS))
            << "timed out waiting for luma event to be received";
    EXPECT_NEAR(listener->luma(), luma_gray, error_margin);
    listener->reset();
    SurfaceComposerClient::Transaction{}.setPosition(mContentLayer, 600, 600).apply();
    EXPECT_TRUE(listener->wait_event(300ms)) << "timed out waiting for luma event to be received";
    EXPECT_TRUE(listener->wait_event(EVENT_WAIT_TIME_MS))
            << "timed out waiting for luma event to be received";
    EXPECT_NEAR(listener->luma(), luma_green, error_margin);
    composer->removeRegionSamplingListener(listener);
}
+7 −9
Original line number Diff line number Diff line
@@ -22,22 +22,20 @@ namespace android {
std::unique_ptr<RenderArea> DisplayRenderArea::create(wp<const DisplayDevice> displayWeak,
                                                      const Rect& sourceCrop, ui::Size reqSize,
                                                      ui::Dataspace reqDataSpace,
                                                      bool hintForSeamlessTransition,
                                                      bool allowSecureLayers) {
                                                      ftl::Flags<Options> options) {
    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,
                                      hintForSeamlessTransition, allowSecureLayers));
        return std::unique_ptr<DisplayRenderArea>(new DisplayRenderArea(std::move(display),
                                                                        sourceCrop, reqSize,
                                                                        reqDataSpace, options));
    }
    return nullptr;
}

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

@@ -46,7 +44,7 @@ const ui::Transform& DisplayRenderArea::getTransform() const {
}

bool DisplayRenderArea::isSecure() const {
    return mAllowSecureLayers && mDisplay->isSecure();
    return mOptions.test(Options::CAPTURE_SECURE_LAYERS) && mDisplay->isSecure();
}

sp<const DisplayDevice> DisplayRenderArea::getDisplayDevice() const {
+2 −3
Original line number Diff line number Diff line
@@ -29,8 +29,7 @@ class DisplayRenderArea : public RenderArea {
public:
    static std::unique_ptr<RenderArea> create(wp<const DisplayDevice>, const Rect& sourceCrop,
                                              ui::Size reqSize, ui::Dataspace,
                                              bool hintForSeamlessTransition,
                                              bool allowSecureLayers = true);
                                              ftl::Flags<Options> options);

    const ui::Transform& getTransform() const override;
    bool isSecure() const override;
@@ -39,7 +38,7 @@ public:

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

    const sp<const DisplayDevice> mDisplay;
    const Rect mSourceCrop;
+4 −5
Original line number Diff line number Diff line
@@ -27,10 +27,9 @@ namespace android {

LayerRenderArea::LayerRenderArea(sp<Layer> layer, frontend::LayerSnapshot layerSnapshot,
                                 const Rect& crop, ui::Size reqSize, ui::Dataspace reqDataSpace,
                                 bool allowSecureLayers, const ui::Transform& layerTransform,
                                 const Rect& layerBufferSize, bool hintForSeamlessTransition)
      : RenderArea(reqSize, CaptureFill::CLEAR, reqDataSpace, hintForSeamlessTransition,
                   allowSecureLayers),
                                 const ui::Transform& layerTransform, const Rect& layerBufferSize,
                                 ftl::Flags<RenderArea::Options> options)
      : RenderArea(reqSize, CaptureFill::CLEAR, reqDataSpace, options),
        mLayer(std::move(layer)),
        mLayerSnapshot(std::move(layerSnapshot)),
        mLayerBufferSize(layerBufferSize),
@@ -42,7 +41,7 @@ const ui::Transform& LayerRenderArea::getTransform() const {
}

bool LayerRenderArea::isSecure() const {
    return mAllowSecureLayers;
    return mOptions.test(Options::CAPTURE_SECURE_LAYERS);
}

sp<const DisplayDevice> LayerRenderArea::getDisplayDevice() const {
+2 −2
Original line number Diff line number Diff line
@@ -33,9 +33,9 @@ class SurfaceFlinger;
class LayerRenderArea : public RenderArea {
public:
    LayerRenderArea(sp<Layer> layer, frontend::LayerSnapshot layerSnapshot, const Rect& crop,
                    ui::Size reqSize, ui::Dataspace reqDataSpace, bool allowSecureLayers,
                    ui::Size reqSize, ui::Dataspace reqDataSpace,
                    const ui::Transform& layerTransform, const Rect& layerBufferSize,
                    bool hintForSeamlessTransition);
                    ftl::Flags<RenderArea::Options> options);

    const ui::Transform& getTransform() const override;
    bool isSecure() const override;
Loading