Backed out changeset 164d45cee724 (bug 1796130) for causing linux nightly crashes as Bug 1799252. a=backout

This commit is contained in:
Cosmin Sabou 2022-11-05 13:41:58 +02:00
Родитель 47fe7cb3f9
Коммит fbb44fc021
2 изменённых файлов: 13 добавлений и 24 удалений

Просмотреть файл

@ -38,18 +38,19 @@ namespace mozilla {
static void WaylandVsyncSourceCallbackHandler(void* aData,
struct wl_callback* aCallback,
uint32_t aTime) {
RefPtr<WaylandVsyncSource> context(static_cast<WaylandVsyncSource*>(aData));
context->FrameCallback(aCallback, aTime);
WaylandVsyncSource* context = (WaylandVsyncSource*)aData;
wl_callback_destroy(aCallback);
context->FrameCallback(aTime);
}
static void WaylandVsyncSourceCallbackHandler(void* aData, uint32_t aTime) {
WaylandVsyncSource* context = (WaylandVsyncSource*)aData;
context->FrameCallback(aTime);
}
static const struct wl_callback_listener WaylandVsyncSourceCallbackListener = {
WaylandVsyncSourceCallbackHandler};
static void NativeLayerRootWaylandVsyncCallback(void* aData, uint32_t aTime) {
RefPtr<WaylandVsyncSource> context(static_cast<WaylandVsyncSource*>(aData));
context->FrameCallback(nullptr, aTime);
}
static float GetFPS(TimeDuration aVsyncRate) {
return 1000.0 / aVsyncRate.ToMilliseconds();
}
@ -206,7 +207,7 @@ void WaylandVsyncSource::SetupFrameCallback(const MutexAutoLock& aProofOfLock) {
if (mNativeLayerRoot) {
LOG(" use mNativeLayerRoot");
mNativeLayerRoot->RequestFrameCallback(&NativeLayerRootWaylandVsyncCallback,
mNativeLayerRoot->RequestFrameCallback(&WaylandVsyncSourceCallbackHandler,
this);
} else {
MozContainerSurfaceLock lock(mContainer);
@ -221,9 +222,8 @@ void WaylandVsyncSource::SetupFrameCallback(const MutexAutoLock& aProofOfLock) {
}
LOG(" register frame callback");
MozClearPointer(mCallback, wl_callback_destroy);
mCallback = wl_surface_frame(surface);
wl_callback_add_listener(mCallback, &WaylandVsyncSourceCallbackListener,
wl_callback* callback = wl_surface_frame(surface);
wl_callback_add_listener(callback, &WaylandVsyncSourceCallbackListener,
this);
wl_surface_commit(surface);
wl_display_flush(WaylandDisplayGet()->GetDisplay());
@ -286,7 +286,7 @@ void WaylandVsyncSource::IdleCallback() {
}
}
void WaylandVsyncSource::FrameCallback(wl_callback* aCallback, uint32_t aTime) {
void WaylandVsyncSource::FrameCallback(uint32_t aTime) {
LOG("WaylandVsyncSource::FrameCallback");
MOZ_DIAGNOSTIC_ASSERT(NS_IsMainThread());
@ -294,20 +294,11 @@ void WaylandVsyncSource::FrameCallback(wl_callback* aCallback, uint32_t aTime) {
// This might enable vsync.
RefPtr window = mWindow;
window->NotifyOcclusionState(OcclusionState::VISIBLE);
// NotifyOcclusionState can destroy us.
if (window->IsDestroyed()) {
return;
}
}
MutexAutoLock lock(mMutex);
mCallbackRequested = false;
if (aCallback) {
MOZ_RELEASE_ASSERT(aCallback == mCallback);
MozClearPointer(mCallback, wl_callback_destroy);
}
if (!mVsyncEnabled || !mMonitorEnabled) {
// We are unwanted by either our creator or our consumer, so we just stop
// here without setting up a new frame callback.
@ -413,7 +404,6 @@ void WaylandVsyncSource::Shutdown() {
mVsyncEnabled = false;
mCallbackRequested = false;
MozClearHandleID(mIdleTimerID, g_source_remove);
MozClearPointer(mCallback, wl_callback_destroy);
}
} // namespace mozilla

Просмотреть файл

@ -55,7 +55,7 @@ class WaylandVsyncSource final : public gfx::VsyncSource {
void EnableMonitor();
void DisableMonitor();
void FrameCallback(wl_callback* aCallback, uint32_t aTime);
void FrameCallback(uint32_t aTime);
void IdleCallback();
TimeDuration GetVsyncRate() override;
@ -87,7 +87,6 @@ class WaylandVsyncSource final : public gfx::VsyncSource {
TimeDuration mVsyncRate MOZ_GUARDED_BY(mMutex);
TimeStamp mLastVsyncTimeStamp MOZ_GUARDED_BY(mMutex);
guint mIdleTimerID MOZ_GUARDED_BY(mMutex) = 0;
wl_callback* mCallback MOZ_GUARDED_BY(mMutex) = nullptr;
nsWindow* const mWindow; // Main thread only, except for logging.
const guint mIdleTimeout;