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

Commit d3714c2e authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "SF: Support to determine if the non-virtual displays are secure"

parents 2f67fa55 6c6d348e
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -179,6 +179,7 @@ HWComposer::HWComposer(
        config.height = mFbDev->height;
        config.xdpi = mFbDev->xdpi;
        config.ydpi = mFbDev->ydpi;
        config.secure = true; //XXX: Assuming primary is always true
        config.refresh = nsecs_t(1e9 / mFbDev->fps);
        disp.configs.push_back(config);
        disp.currentConfig = 0;
@@ -350,6 +351,10 @@ static const uint32_t DISPLAY_ATTRIBUTES[] = {
    HWC_DISPLAY_HEIGHT,
    HWC_DISPLAY_DPI_X,
    HWC_DISPLAY_DPI_Y,
    //To specify if display is secure
    //Primary is considered as secure always
    //HDMI can be secure based on HDCP
    HWC_DISPLAY_SECURE,
    HWC_DISPLAY_NO_ATTRIBUTE,
};
#define NUM_DISPLAY_ATTRIBUTES (sizeof(DISPLAY_ATTRIBUTES) / sizeof(DISPLAY_ATTRIBUTES)[0])
@@ -405,6 +410,9 @@ status_t HWComposer::queryDisplayProperties(int disp) {
                case HWC_DISPLAY_DPI_Y:
                    config.ydpi = values[i] / 1000.0f;
                    break;
                case HWC_DISPLAY_SECURE:
                    config.secure = values[i];
                    break;
                default:
                    ALOG_ASSERT(false, "unknown display attribute[%zu] %#x",
                            i, DISPLAY_ATTRIBUTES[i]);
@@ -439,6 +447,8 @@ status_t HWComposer::setVirtualDisplayProperties(int32_t id,
    config.width = w;
    config.height = h;
    config.xdpi = config.ydpi = getDefaultDensity(w, h);
    //XXXX: No need to set secure for virtual display's as its initiated by
    //the frameworks
    return NO_ERROR;
}

@@ -514,6 +524,12 @@ float HWComposer::getDpiY(int disp) const {
    return mDisplayData[disp].configs[currentConfig].ydpi;
}

bool HWComposer::isSecure(int disp) const {
    size_t currentConfig = mDisplayData[disp].currentConfig;
    return mDisplayData[disp].configs[currentConfig].secure;
}


nsecs_t HWComposer::getRefreshPeriod(int disp) const {
    size_t currentConfig = mDisplayData[disp].currentConfig;
    return mDisplayData[disp].configs[currentConfig].refresh;
@@ -1240,9 +1256,9 @@ void HWComposer::dump(String8& result) const {
            result.appendFormat("  Display[%zd] configurations (* current):\n", i);
            for (size_t c = 0; c < disp.configs.size(); ++c) {
                const DisplayConfig& config(disp.configs[c]);
                result.appendFormat("    %s%zd: %ux%u, xdpi=%f, ydpi=%f, refresh=%" PRId64 "\n",
                result.appendFormat("    %s%zd: %ux%u, xdpi=%f, ydpi=%f, secure=%d refresh=%" PRId64 "\n",
                        c == disp.currentConfig ? "* " : "", c, config.width, config.height,
                        config.xdpi, config.ydpi, config.refresh);
                        config.xdpi, config.ydpi, config.secure, config.refresh);
            }

            if (disp.list) {
+2 −0
Original line number Diff line number Diff line
@@ -274,6 +274,7 @@ public:
        uint32_t height;
        float xdpi;
        float ydpi;
        bool secure;
        nsecs_t refresh;
    };

@@ -283,6 +284,7 @@ public:
    sp<Fence> getDisplayFence(int disp) const;
    uint32_t getFormat(int disp) const;
    bool isConnected(int disp) const;
    bool isSecure(int disp) const;

    // These return the values for the current config of a given display index.
    // To get the values for all configs, use getConfigs below.
+11 −9
Original line number Diff line number Diff line
@@ -278,13 +278,13 @@ void SurfaceFlinger::destroyDisplay(const sp<IBinder>& display) {
    setTransactionFlags(eDisplayTransactionNeeded);
}

void SurfaceFlinger::createBuiltinDisplayLocked(DisplayDevice::DisplayType type) {
void SurfaceFlinger::createBuiltinDisplayLocked(DisplayDevice::DisplayType type,
                                                bool secure) {
    ALOGW_IF(mBuiltinDisplays[type],
            "Overwriting display token for display type %d", type);
    mBuiltinDisplays[type] = new BBinder();
    DisplayDeviceState info(type);
    // All non-virtual displays are currently considered secure.
    info.isSecure = true;
    info.isSecure = secure;
    mCurrentState.displays.add(mBuiltinDisplays[type], info);
}

@@ -444,9 +444,9 @@ void SurfaceFlinger::init() {
        DisplayDevice::DisplayType type((DisplayDevice::DisplayType)i);
        // set-up the displays that are already connected
        if (mHwc->isConnected(i) || type==DisplayDevice::DISPLAY_PRIMARY) {
            // All non-virtual displays are currently considered secure.
            bool isSecure = true;
            createBuiltinDisplayLocked(type);
            // query from hwc if the non-virtual display is secure.
            bool isSecure = mHwc->isSecure(i);;
            createBuiltinDisplayLocked(type, isSecure);
            wp<IBinder> token = mBuiltinDisplays[i];

            sp<IGraphicBufferProducer> producer;
@@ -626,8 +626,8 @@ status_t SurfaceFlinger::getDisplayConfigs(const sp<IBinder>& display,
        info.presentationDeadline =
                hwConfig.refresh - SF_VSYNC_EVENT_PHASE_OFFSET_NS + 1000000;

        // All non-virtual displays are currently considered secure.
        info.secure = true;
        // set secure info based on the hwcConfig
        info.secure = hwConfig.secure;

        configs->push_back(info);
    }
@@ -840,7 +840,9 @@ void SurfaceFlinger::onHotplugReceived(int type, bool connected) {
    if (uint32_t(type) < DisplayDevice::NUM_BUILTIN_DISPLAY_TYPES) {
        Mutex::Autolock _l(mStateLock);
        if (connected) {
            createBuiltinDisplayLocked((DisplayDevice::DisplayType)type);
            // query from hwc if the connected display is secure
            bool secure = mHwc->isSecure(type);;
            createBuiltinDisplayLocked((DisplayDevice::DisplayType)type, secure);
        } else {
            mCurrentState.displays.removeItem(mBuiltinDisplays[type]);
            mBuiltinDisplays[type].clear();
+2 −1
Original line number Diff line number Diff line
@@ -357,7 +357,8 @@ private:
    void initializeDisplays();

    // Create an IBinder for a builtin display and add it to current state
    void createBuiltinDisplayLocked(DisplayDevice::DisplayType type);
    void createBuiltinDisplayLocked(DisplayDevice::DisplayType type,
                                    bool secure);

    // NOTE: can only be called from the main thread or with mStateLock held
    sp<const DisplayDevice> getDisplayDevice(const wp<IBinder>& dpy) const {