VirtualBox

Changeset 52309 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Aug 7, 2014 7:17:50 AM (10 years ago)
Author:
vboxsync
Message:

DisplayImpl: do not wait for InvalidateAndUpdateEMT completion, because it blocks the GUI if the request takes a long time to complete.

Location:
trunk/src/VBox/Main
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/DisplayImpl.h

    r52200 r52309  
    414414
    415415private:
    416     static void i_InvalidateAndUpdateEMT(Display *pDisplay, unsigned uId, bool fUpdateAll);
    417     static int  i_drawToScreenEMT(Display *pDisplay, ULONG aScreenId, BYTE *address, ULONG x, ULONG y, ULONG width, ULONG height);
     416    static int i_InvalidateAndUpdateEMT(Display *pDisplay, unsigned uId, bool fUpdateAll);
     417    static int i_drawToScreenEMT(Display *pDisplay, ULONG aScreenId, BYTE *address, ULONG x, ULONG y, ULONG width, ULONG height);
    418418
    419419    int  i_videoAccelRefreshProcess(void);
  • trunk/src/VBox/Main/src-client/DisplayImpl.cpp

    r52237 r52309  
    31603160}
    31613161
    3162 void Display::i_InvalidateAndUpdateEMT(Display *pDisplay, unsigned uId, bool fUpdateAll)
    3163 {
     3162int Display::i_InvalidateAndUpdateEMT(Display *pDisplay, unsigned uId, bool fUpdateAll)
     3163{
     3164    LogRelFlowFunc(("uId=%d, fUpdateAll %d\n", uId, fUpdateAll));
     3165
    31643166    unsigned uScreenId;
    31653167    for (uScreenId = (fUpdateAll ? 0 : uId); uScreenId < pDisplay->mcMonitors; uScreenId++)
     
    32443246            break;
    32453247    }
     3248    LogRelFlowFunc(("done\n"));
     3249    return VINF_SUCCESS;
    32463250}
    32473251
     
    32723276    alock.release();
    32733277
    3274     /* pdm.h says that this has to be called from the EMT thread */
    3275     int rcVBox = VMR3ReqCallVoidWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)Display::i_InvalidateAndUpdateEMT,
    3276                                       3, this, 0, true);
     3278    int rcVBox = VMR3ReqCallNoWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)Display::i_InvalidateAndUpdateEMT,
     3279                                    3, this, 0, true);
    32773280    alock.acquire();
    32783281
     
    32953298        return ptrVM.rc();
    32963299
    3297     /* pdm.h says that this has to be called from the EMT thread */
    3298     int rcVBox = VMR3ReqCallVoidWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)Display::i_InvalidateAndUpdateEMT,
    3299                                       3, this, aScreenId, false);
     3300    int rcVBox = VMR3ReqCallNoWaitU(ptrVM.rawUVM(), VMCPUID_ANY, (PFNRT)Display::i_InvalidateAndUpdateEMT,
     3301                                    3, this, aScreenId, false);
    33003302    if (RT_FAILURE(rcVBox))
    33013303        rc = setError(VBOX_E_IPRT_ERROR,
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette