Loading libs/gui/tests/RegionSampling_test.cpp +44 −14 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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(); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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(); Loading Loading @@ -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(); Loading @@ -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(); Loading @@ -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); Loading @@ -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); } Loading libs/nativewindow/AHardwareBuffer.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -300,7 +300,9 @@ int AHardwareBuffer_lockPlanes(AHardwareBuffer* buffer, uint64_t usage, if (result == 0) { outPlanes->planeCount = 3; outPlanes->planes[0].data = yuvData.y; if (format == AHARDWAREBUFFER_FORMAT_YCbCr_P010) { // P010 is word-aligned 10-bit semiplaner, and YCbCr_422_I is a single interleaved plane if (format == AHARDWAREBUFFER_FORMAT_YCbCr_P010 || format == AHARDWAREBUFFER_FORMAT_YCbCr_422_I) { outPlanes->planes[0].pixelStride = 2; } else { outPlanes->planes[0].pixelStride = 1; Loading services/surfaceflinger/CompositionEngine/src/Output.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1102,7 +1102,7 @@ void Output::prepareFrame() { } ftl::Future<std::monostate> Output::presentFrameAndReleaseLayersAsync(bool flushEvenWhenDisabled) { return ftl::Future<bool>(std::move(mHwComposerAsyncWorker->send([&]() { return ftl::Future<bool>(std::move(mHwComposerAsyncWorker->send([this, flushEvenWhenDisabled]() { presentFrameAndReleaseLayers(flushEvenWhenDisabled); return true; }))) Loading services/surfaceflinger/DisplayDevice.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -467,6 +467,12 @@ bool DisplayDevice::onKernelTimerChanged(std::optional<DisplayModeId> desiredMod return false; } void DisplayDevice::onVrrIdle(bool idle) { if (mRefreshRateOverlay) { mRefreshRateOverlay->onVrrIdle(idle); } } void DisplayDevice::animateOverlay() { if (mRefreshRateOverlay) { mRefreshRateOverlay->animate(); Loading services/surfaceflinger/DisplayDevice.h +1 −0 Original line number Diff line number Diff line Loading @@ -196,6 +196,7 @@ public: bool isRefreshRateOverlayEnabled() const { return mRefreshRateOverlay != nullptr; } void animateOverlay(); bool onKernelTimerChanged(std::optional<DisplayModeId>, bool timerExpired); void onVrrIdle(bool idle); // Enables an overlay to be display with the hdr/sdr ratio void enableHdrSdrRatioOverlay(bool enable) REQUIRES(kMainThreadContext); Loading Loading
libs/gui/tests/RegionSampling_test.cpp +44 −14 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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(); Loading @@ -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); Loading @@ -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); Loading @@ -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); Loading @@ -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(); Loading Loading @@ -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(); Loading @@ -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(); Loading @@ -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); Loading @@ -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); } Loading
libs/nativewindow/AHardwareBuffer.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -300,7 +300,9 @@ int AHardwareBuffer_lockPlanes(AHardwareBuffer* buffer, uint64_t usage, if (result == 0) { outPlanes->planeCount = 3; outPlanes->planes[0].data = yuvData.y; if (format == AHARDWAREBUFFER_FORMAT_YCbCr_P010) { // P010 is word-aligned 10-bit semiplaner, and YCbCr_422_I is a single interleaved plane if (format == AHARDWAREBUFFER_FORMAT_YCbCr_P010 || format == AHARDWAREBUFFER_FORMAT_YCbCr_422_I) { outPlanes->planes[0].pixelStride = 2; } else { outPlanes->planes[0].pixelStride = 1; Loading
services/surfaceflinger/CompositionEngine/src/Output.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1102,7 +1102,7 @@ void Output::prepareFrame() { } ftl::Future<std::monostate> Output::presentFrameAndReleaseLayersAsync(bool flushEvenWhenDisabled) { return ftl::Future<bool>(std::move(mHwComposerAsyncWorker->send([&]() { return ftl::Future<bool>(std::move(mHwComposerAsyncWorker->send([this, flushEvenWhenDisabled]() { presentFrameAndReleaseLayers(flushEvenWhenDisabled); return true; }))) Loading
services/surfaceflinger/DisplayDevice.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -467,6 +467,12 @@ bool DisplayDevice::onKernelTimerChanged(std::optional<DisplayModeId> desiredMod return false; } void DisplayDevice::onVrrIdle(bool idle) { if (mRefreshRateOverlay) { mRefreshRateOverlay->onVrrIdle(idle); } } void DisplayDevice::animateOverlay() { if (mRefreshRateOverlay) { mRefreshRateOverlay->animate(); Loading
services/surfaceflinger/DisplayDevice.h +1 −0 Original line number Diff line number Diff line Loading @@ -196,6 +196,7 @@ public: bool isRefreshRateOverlayEnabled() const { return mRefreshRateOverlay != nullptr; } void animateOverlay(); bool onKernelTimerChanged(std::optional<DisplayModeId>, bool timerExpired); void onVrrIdle(bool idle); // Enables an overlay to be display with the hdr/sdr ratio void enableHdrSdrRatioOverlay(bool enable) REQUIRES(kMainThreadContext); Loading