gecko-dev/gfx/vr/gfxVRMutex.h
thomasmo 5f5804e41b Bug 1562777 - Refactor ShMem code from VR classes into separate class r=kip
This change brings the related ShMem code from VRManager and VRService into a
new class, VRShMem. This is to support future work where this ShMem will be used
for other efforts. Having this code in the same class will enable it to be more
easily shared in these efforts.
Until the new class replaces the code in VRManager and VRService, it can be
exercised and validated with two instances of vrtesthost, with the -testmgr and
-testsvc parameters.

Differential Revision: https://phabricator.services.mozilla.com/D36649

--HG--
extra : moz-landing-system : lando
2019-07-03 15:50:28 +00:00

64 lines
1.6 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef GFX_VR_MUTEX_H
#define GFX_VR_MUTEX_H
namespace mozilla {
namespace gfx {
#if defined(XP_WIN)
class WaitForMutex {
public:
explicit WaitForMutex(HANDLE handle) : mHandle(handle), mStatus(false) {
MOZ_ASSERT(mHandle);
DWORD dwWaitResult;
dwWaitResult = WaitForSingleObject(mHandle, // handle to mutex
INFINITE); // no time-out interval
switch (dwWaitResult) {
// The thread got ownership of the mutex
case WAIT_OBJECT_0:
mStatus = true;
break;
// The thread got ownership of an abandoned mutex
// The shmem is in an indeterminate state
case WAIT_ABANDONED:
mStatus = false;
break;
default:
mStatus = false;
break;
}
}
~WaitForMutex() {
if (mHandle && !ReleaseMutex(mHandle)) {
# ifdef MOZILLA_INTERNAL_API
nsAutoCString msg;
msg.AppendPrintf("WaitForMutex %d ReleaseMutex error \"%lu\".", mHandle,
GetLastError());
NS_WARNING(msg.get());
# endif
MOZ_ASSERT(false, "Failed to release mutex.");
}
}
bool GetStatus() { return mStatus; }
private:
HANDLE mHandle;
bool mStatus;
};
#endif
} // namespace gfx
} // namespace mozilla
#endif /* GFX_VR_MUTEX_H */