VirtualBox

Changeset 39288 in vbox for trunk/src/VBox/Main/src-client


Ignore:
Timestamp:
Nov 14, 2011 9:58:38 AM (13 years ago)
Author:
vboxsync
Message:

CrOpenGL: avoid blocked client polling & extra memcpy (block hgsmi command until completion)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/DisplayImpl.cpp

    r38995 r39288  
    29422942    {
    29432943        Assert(mhCrOglSvc);
    2944     }
    2945     else
    2946     {
    2947         mhCrOglSvc = NULL;
    2948     }
     2944        /* setup command completion callback */
     2945        VBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP_COMPLETION Completion;
     2946        Completion.Hdr.enmType = VBOXVDMACMD_CHROMIUM_CTL_TYPE_CRHGSMI_SETUP_COMPLETION;
     2947        Completion.Hdr.cbCmd = sizeof (Completion);
     2948        Completion.hCompletion = mpDrv->pVBVACallbacks;
     2949        Completion.pfnCompletion = mpDrv->pVBVACallbacks->pfnCrHgsmiCommandCompleteAsync;
     2950
     2951        int rc = VERR_INVALID_FUNCTION;
     2952        VBOXHGCMSVCPARM parm;
     2953        parm.type = VBOX_HGCM_SVC_PARM_PTR;
     2954        parm.u.pointer.addr = &Completion;
     2955        parm.u.pointer.size = 0;
     2956
     2957        rc = pVMMDev->hgcmHostCall("VBoxSharedCrOpenGL", SHCRGL_HOST_FN_CRHGSMI_CTL, 1, &parm);
     2958        if (RT_SUCCESS(rc))
     2959            return;
     2960
     2961        AssertMsgFailed(("VBOXVDMACMD_CHROMIUM_CTL_TYPE_CRHGSMI_SETUP_COMPLETION failed rc %d", rc));
     2962    }
     2963
     2964    mhCrOglSvc = NULL;
    29492965}
    29502966
     
    34953511        if (pVMMDev)
    34963512        {
    3497             rc = pVMMDev->hgcmHostFastCallAsync(mhCrOglSvc, SHCRGL_HOST_FN_CRHGSMI_CMD, &parm, Display::displayCrHgsmiCommandCompletion, this);
     3513            /* no completion callback is specified with this call,
     3514             * the CrOgl code will complete the CrHgsmi command once it processes it */
     3515            rc = pVMMDev->hgcmHostFastCallAsync(mhCrOglSvc, SHCRGL_HOST_FN_CRHGSMI_CMD, &parm, NULL, NULL);
    34983516            AssertRC(rc);
    34993517            if (RT_SUCCESS(rc))
     
    35343552}
    35353553
     3554
    35363555DECLCALLBACK(void) Display::displayCrHgsmiCommandProcess(PPDMIDISPLAYCONNECTOR pInterface, PVBOXVDMACMD_CHROMIUM_CMD pCmd)
    35373556{
     
    35503569DECLCALLBACK(void) Display::displayCrHgsmiCommandCompletion(int32_t result, uint32_t u32Function, PVBOXHGCMSVCPARM pParam, void *pvContext)
    35513570{
     3571    AssertMsgFailed(("not expected!"));
    35523572    Display *pDisplay = (Display *)pvContext;
    35533573    pDisplay->handleCrHgsmiCommandCompletion(result, u32Function, pParam);
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