42 lines
1.6 KiB
Diff
42 lines
1.6 KiB
Diff
|
changeset: 552978:b50cb0696eef
|
||
|
tag: tip
|
||
|
parent: 552976:2ce12e3e063c
|
||
|
user: stransky <stransky@redhat.com>
|
||
|
date: Fri Oct 02 12:19:53 2020 +0200
|
||
|
files: widget/gtk/WindowSurfaceWayland.cpp
|
||
|
description:
|
||
|
Bug 1668771 [Wayland] Use timeout for frame callbacks for basic compositor, r?jhorak
|
||
|
|
||
|
Differential Revision: https://phabricator.services.mozilla.com/D92200
|
||
|
|
||
|
|
||
|
diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
|
||
|
--- a/widget/gtk/WindowSurfaceWayland.cpp
|
||
|
+++ b/widget/gtk/WindowSurfaceWayland.cpp
|
||
|
@@ -37,6 +37,9 @@ extern mozilla::LazyLogModule gWidgetWay
|
||
|
// Maximal compositing timeout it miliseconds
|
||
|
#define COMPOSITING_TIMEOUT 200
|
||
|
|
||
|
+// Maximal timeout between frame callbacks
|
||
|
+#define FRAME_CALLBACK_TIMEOUT 20
|
||
|
+
|
||
|
namespace mozilla {
|
||
|
namespace widget {
|
||
|
|
||
|
@@ -941,8 +944,12 @@ void WindowSurfaceWayland::CommitWayland
|
||
|
if (waylandSurface == mLastCommittedSurface) {
|
||
|
LOGWAYLAND((" [%p] wait for frame callback.\n", (void*)this));
|
||
|
// We have an active frame callback pending from our recent surface.
|
||
|
- // It means we should defer the commit to FrameCallbackHandler().
|
||
|
- return;
|
||
|
+ // It means we should defer the commit to FrameCallbackHandler(),
|
||
|
+ // but only if we're under frame callback timeout range.
|
||
|
+ if (mLastCommitTime && (g_get_monotonic_time() / 1000) - mLastCommitTime <
|
||
|
+ FRAME_CALLBACK_TIMEOUT) {
|
||
|
+ return;
|
||
|
+ }
|
||
|
}
|
||
|
// If our stored wl_surface does not match the actual one it means the frame
|
||
|
// callback is no longer active and we should release it.
|
||
|
|