Skip to content

Commit

Permalink
Revert "Fix tst_QWidgetRepaintManager on XCB"
Browse files Browse the repository at this point in the history
This reverts commit 4096667.

Reason for revert: <Screen shot workaround is flaky.>

Change-Id: I6e01cc584c094d0d0b8c1544b9daf72d648dd002
Reviewed-by: Tor Arne Vestbø <[email protected]>
  • Loading branch information
ASpoerl committed Jan 10, 2023
1 parent a071bd6 commit cccdd89
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 37 deletions.
11 changes: 11 additions & 0 deletions tests/auto/widgets/kernel/qwidgetrepaintmanager/BLACKLIST
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Temporary for QTBUG-109036
[fastMove]
opensuse-leap

# Temporary for QTBUG-109036
[moveAccross]
opensuse-leap

# Temporary for QTBUG-109036
[moveInOutOverlapped]
opensuse-leap
Original file line number Diff line number Diff line change
Expand Up @@ -262,8 +262,6 @@ private slots:
void moveInOutOverlapped();

protected:
bool m_xcb = false;

/*
This helper compares the widget as rendered into the backingstore with the widget
as rendered via QWidget::grab. The latter always produces a fully rendered image,
Expand All @@ -281,44 +279,14 @@ private slots:
}

QImage backingstoreContent = platformBackingStore->toImage();

// QXcbBackingStore::toImage() is not reliable. Take a screenshot instead.
// X11 draws the screen in a thread, which is not a QThread.
// The first screenshot is therefore unlikely to contain the correct image.
// It is taken just to obtain size and format.
QWidget *window = nullptr;
if (m_xcb) {

// Widget must be shown to be caught on a screen shot
if (!w->isWindow()) {
qWarning() << "Hidden widget" << w << "cannot be compared on XCB";
return false;
}

window = w->window();
Q_ASSERT(window);

backingstoreContent = window->screen()->grabWindow(window->winId()).toImage();
}

if (!w->isWindow()) {
const qreal dpr = w->devicePixelRatioF();
const QPointF offset = w->mapTo(w->window(), QPointF(0, 0)) * dpr;
backingstoreContent = backingstoreContent.copy(offset.x(), offset.y(), w->width() * dpr, w->height() * dpr);
}

const QImage widgetRender = w->grab().toImage().convertToFormat(backingstoreContent.format());

// XCB: Process events, until screenshot equals widgetRender or timeout kicks in.
if (m_xcb) {
// Unuse result to hit MANUAL_DEBUG code path
Q_UNUSED(QTest::qWaitFor([&](){
backingstoreContent = window->screen()->grabWindow(window->winId()).toImage();
return widgetRender == backingstoreContent;
}));
}

const bool result = widgetRender == backingstoreContent;
const bool result = backingstoreContent == widgetRender;

#ifdef MANUAL_DEBUG
if (!result) {
Expand Down Expand Up @@ -366,10 +334,6 @@ void tst_QWidgetRepaintManager::initTestCase()

m_implementsScroll = widget.backingStore()->handle()->scroll(QRegion(widget.rect()), 1, 1);
qInfo() << QGuiApplication::platformName() << "QPA backend implements scroll:" << m_implementsScroll;

#if defined(QT_BUILD_INTERNAL)
m_xcb = QGuiApplication::platformName().contains("xcb", Qt::CaseInsensitive);
#endif
}

void tst_QWidgetRepaintManager::cleanup()
Expand Down

0 comments on commit cccdd89

Please sign in to comment.