--- src/3rdparty/chromium/ui/gfx/gpu_fence.cc.orig 2026-08-11 12:42:19 UTC +++ src/3rdparty/chromium/ui/gfx/gpu_fence.cc @@ -9,6 +9,10 @@ #include "base/time/time.h" #include "build/build_config.h" +#if BUILDFLAG(IS_BSD) +#include +#endif + #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) #include #endif @@ -42,7 +46,13 @@ void GpuFence::Wait() { return; } -#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(IS_BSD) + int fd = fence_handle_.Peek(); + if (fd >= 0) { + struct pollfd fds = {fd, POLLIN, 0}; + poll(&fds, 1, -1); + } +#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) static const int kInfiniteSyncWaitTimeout = -1; DCHECK_GE(fence_handle_.Peek(), 0); if (sync_wait(fence_handle_.Peek(), kInfiniteSyncWaitTimeout) < 0) { @@ -57,7 +67,10 @@ GpuFence::FenceStatus GpuFence::GetStatusChangeTime(in GpuFence::FenceStatus GpuFence::GetStatusChangeTime(int fd, base::TimeTicks* time) { DCHECK_NE(fd, -1); -#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(IS_BSD) + // sync_fence_info is not available on FreeBSD. + return FenceStatus::kInvalid; +#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) auto info = std::unique_ptr{ sync_fence_info(fd), sync_fence_info_free};