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

Commit 2ae2cc97 authored by Dominik Laskowski's avatar Dominik Laskowski Committed by Android (Google) Code Review
Browse files

Merge "SF: Initialize all displays on boot/restart" into main

parents b2e2eefa a42d5399
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -416,26 +416,36 @@ public:
};

struct DisplayState {
    enum {
    enum : uint32_t {
        eSurfaceChanged = 0x01,
        eLayerStackChanged = 0x02,
        eDisplayProjectionChanged = 0x04,
        eDisplaySizeChanged = 0x08,
        eFlagsChanged = 0x10
        eFlagsChanged = 0x10,

        eAllChanged = ~0u
    };

    // Not for direct use. Prefer constructor below for new displays.
    DisplayState();

    DisplayState(sp<IBinder> token, ui::LayerStack layerStack)
          : what(eAllChanged),
            token(std::move(token)),
            layerStack(layerStack),
            layerStackSpaceRect(Rect::INVALID_RECT),
            orientedDisplaySpaceRect(Rect::INVALID_RECT) {}

    void merge(const DisplayState& other);
    void sanitize(int32_t permissions);

    uint32_t what = 0;
    uint32_t flags = 0;
    sp<IBinder> token;
    sp<IGraphicBufferProducer> surface;

    ui::LayerStack layerStack = ui::DEFAULT_LAYER_STACK;

    // These states define how layers are projected onto the physical display.
    // These states define how layers are projected onto the physical or virtual display.
    //
    // Layers are first clipped to `layerStackSpaceRect'.  They are then translated and
    // scaled from `layerStackSpaceRect' to `orientedDisplaySpaceRect'.  Finally, they are rotated
@@ -446,10 +456,17 @@ struct DisplayState {
    // will be scaled by a factor of 2 and translated by (20, 10). When orientation is 1, layers
    // will be additionally rotated by 90 degrees around the origin clockwise and translated by (W,
    // 0).
    //
    // Rect::INVALID_RECT sizes the space to the active resolution of the physical display, or the
    // default dimensions of the virtual display surface.
    //
    ui::Rotation orientation = ui::ROTATION_0;
    Rect layerStackSpaceRect = Rect::EMPTY_RECT;
    Rect orientedDisplaySpaceRect = Rect::EMPTY_RECT;

    // Exclusive to virtual displays: The sink surface into which the virtual display is rendered,
    // and an optional resolution that overrides its default dimensions.
    sp<IGraphicBufferProducer> surface;
    uint32_t width = 0;
    uint32_t height = 0;

+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ public:
    virtual void createClientCompositionCache(uint32_t cacheSize) = 0;

    // Sends the brightness setting to HWC
    virtual void applyDisplayBrightness(const bool applyImmediately) = 0;
    virtual void applyDisplayBrightness(bool applyImmediately) = 0;

protected:
    ~Display() = default;
+1 −1
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ public:
            const compositionengine::DisplayColorProfileCreationArgs&) override;
    void createRenderSurface(const compositionengine::RenderSurfaceCreationArgs&) override;
    void createClientCompositionCache(uint32_t cacheSize) override;
    void applyDisplayBrightness(const bool applyImmediately) override;
    void applyDisplayBrightness(bool applyImmediately) override;
    void setSecure(bool secure) override;

    // Internal helpers used by chooseCompositionStrategy()
+5 −6
Original line number Diff line number Diff line
@@ -204,13 +204,12 @@ void Display::setReleasedLayers(const compositionengine::CompositionRefreshArgs&
    setReleasedLayers(std::move(releasedLayers));
}

void Display::applyDisplayBrightness(const bool applyImmediately) {
void Display::applyDisplayBrightness(bool applyImmediately) {
    if (const auto displayId = ftl::Optional(getDisplayId()).and_then(PhysicalDisplayId::tryCast);
        displayId && getState().displayBrightness) {
        auto& hwc = getCompositionEngine().getHwComposer();
    const auto halDisplayId = HalDisplayId::tryCast(*getDisplayId());
    if (const auto physicalDisplayId = PhysicalDisplayId::tryCast(*halDisplayId);
        physicalDisplayId && getState().displayBrightness) {
        const status_t result =
                hwc.setDisplayBrightness(*physicalDisplayId, *getState().displayBrightness,
                hwc.setDisplayBrightness(*displayId, *getState().displayBrightness,
                                         getState().displayBrightnessNits,
                                         Hwc2::Composer::DisplayBrightnessOptions{
                                                 .applyImmediately = applyImmediately})
+8 −15
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ DisplayDevice::DisplayDevice(DisplayDeviceCreationArgs& args)
        mActiveModeFpsTrace(concatId("ActiveModeFps")),
        mRenderRateFpsTrace(concatId("RenderRateFps")),
        mPhysicalOrientation(args.physicalOrientation),
        mPowerMode(ftl::Concat("PowerMode ", getId().value).c_str(), args.initialPowerMode),
        mIsPrimary(args.isPrimary),
        mRequestedRefreshRate(args.requestedRefreshRate),
        mRefreshRateSelector(std::move(args.refreshRateSelector)),
@@ -105,9 +106,7 @@ DisplayDevice::DisplayDevice(DisplayDeviceCreationArgs& args)

    mCompositionDisplay->getRenderSurface()->initialize();

    if (const auto powerModeOpt = args.initialPowerMode) {
        setPowerMode(*powerModeOpt);
    }
    setPowerMode(args.initialPowerMode);

    // initialize the display orientation transform.
    setProjection(ui::ROTATION_0, Rect::INVALID_RECT, Rect::INVALID_RECT);
@@ -172,6 +171,7 @@ auto DisplayDevice::getFrontEndInfo() const -> frontend::DisplayInfo {
}

void DisplayDevice::setPowerMode(hal::PowerMode mode) {
    // TODO(b/241285876): Skip this for virtual displays.
    if (mode == hal::PowerMode::OFF || mode == hal::PowerMode::ON) {
        if (mStagedBrightness && mBrightness != mStagedBrightness) {
            getCompositionDisplay()->setNextBrightness(*mStagedBrightness);
@@ -181,33 +181,26 @@ void DisplayDevice::setPowerMode(hal::PowerMode mode) {
        getCompositionDisplay()->applyDisplayBrightness(true);
    }

    if (mPowerMode) {
        *mPowerMode = mode;
    } else {
        mPowerMode.emplace("PowerMode -" + to_string(getId()), mode);
    }
    mPowerMode = mode;

    getCompositionDisplay()->setCompositionEnabled(isPoweredOn());
}

void DisplayDevice::tracePowerMode() {
    // assign the same value for tracing
    if (mPowerMode) {
        const hal::PowerMode powerMode = *mPowerMode;
        *mPowerMode = powerMode;
    }
    // Assign the same value for tracing.
    mPowerMode = mPowerMode.get();
}

void DisplayDevice::enableLayerCaching(bool enable) {
    getCompositionDisplay()->setLayerCachingEnabled(enable);
}

std::optional<hal::PowerMode> DisplayDevice::getPowerMode() const {
hal::PowerMode DisplayDevice::getPowerMode() const {
    return mPowerMode;
}

bool DisplayDevice::isPoweredOn() const {
    return mPowerMode && *mPowerMode != hal::PowerMode::OFF;
    return mPowerMode != hal::PowerMode::OFF;
}

void DisplayDevice::setActiveMode(DisplayModeId modeId, Fps vsyncRate, Fps renderFps) {
Loading