在桌面复制API中获取帧之间的CPU使用率高,具有不同的超时间隔

我正在尝试使用 16ms 的超时时间来捕获屏幕,并且在全屏4k 60fps下测试捕获时,我得到了 60-65 FPS 视频。在这种情况下,CPU使用率大约为 0-1%。但是,当鼠标光标在屏幕上移动时,FPS和CPU使用率分别提高了 100+帧 25-30%。因此,存在一个问题:如果将超时设置为16,为什么我的 FPS 会大于70?

如果超时设置为0:使用相同的值捕获 FPS量,但是 CPU使用率保持稳定为。在这种情况下,超时错误的数量会大大增加。这与上一个问题有某种联系吗?

do
{
    hr = lDeskDupl->AcquireNextFrame(
        TimeoutMS,&lFrameInfo,&lDesktopResource);

    if (SUCCEEDED(hr)) {
        accumFramesCount += lFrameInfo.accumulatedFrames;
        break;
    }

    if (hr == DXGI_ERROR_INVALID_CALL) 
    {
        lDeskDupl->ReleaseFrame();
    }

    if (hr == DXGI_ERROR_WAIT_TIMEOUT)
    {
        timeoutsCount++;
    }
} 
while (true);
qiuxia_mm 回答:在桌面复制API中获取帧之间的CPU使用率高,具有不同的超时间隔

答案在AcquireNextFrame文档中:

  

AcquireNextFrame在操作系统更新桌面位图图像或更改硬件指针的形状或位置时获取新的桌面框架。 AcquireNextFrame所获取的新框架可能仅更新了桌面图像,仅更新了指针形状或位置,或两者都更新了。

移动鼠标时,您会在超时之前从Desktop Duplication API获取更新。这样,您的更新量就超过了超时值的含义。

对于异常高的CPU负载,很可能是API出现问题:是的,没有明显的原因,鼠标移动与CPU过度消耗相关。也许是一些与自旋锁相关的问题。

本文链接:https://www.f2er.com/3147740.html

大家都在问