Bug 1306493 - Part 5: Make we only have one VRMockDisplay in tests; r?kip draft
authorDaosheng Mu <daoshengmu@gmail.com>
Wed, 15 Mar 2017 13:50:34 +0800
changeset 499701 dee6e9d675897c1788dee467b3d0ee29e22cb02f
parent 499700 b42a4b88a3baf55301852dba585e945632d79e90
child 499702 ef89bd7eb18ee71e9d5bcc7dfed3f5dadf2ff410
push id49487
push userbmo:dmu@mozilla.com
push dateThu, 16 Mar 2017 03:47:12 +0000
reviewerskip
bugs1306493
milestone55.0a1
Bug 1306493 - Part 5: Make we only have one VRMockDisplay in tests; r?kip MozReview-Commit-ID: ACIszhHGUiQ
gfx/vr/ipc/VRManagerChild.cpp
gfx/vr/ipc/VRManagerChild.h
--- a/gfx/vr/ipc/VRManagerChild.cpp
+++ b/gfx/vr/ipc/VRManagerChild.cpp
@@ -40,16 +40,17 @@ void ReleaseVRManagerParentSingleton() {
 VRManagerChild::VRManagerChild()
   : TextureForwarder()
   , mDisplaysInitialized(false)
   , mInputFrameID(-1)
   , mMessageLoop(MessageLoop::current())
   , mFrameRequestCallbackCounter(0)
   , mBackend(layers::LayersBackend::LAYERS_NONE)
   , mPromiseID(0)
+  , mVRMockDisplay(nullptr)
 {
   MOZ_ASSERT(NS_IsMainThread());
 
   mStartTimeStamp = TimeStamp::Now();
 }
 
 VRManagerChild::~VRManagerChild()
 {
@@ -514,17 +515,21 @@ VRManagerChild::RecvReplyCreateVRService
                                                     const uint32_t& aPromiseID,
                                                     const uint32_t& aDeviceID)
 {
   RefPtr<dom::Promise> p;
   if (!mPromiseList.Get(aPromiseID, getter_AddRefs(p))) {
     MOZ_CRASH("We should always have a promise.");
   }
 
-  p->MaybeResolve(new VRMockDisplay(aID, aDeviceID));
+  // We only allow one VRMockDisplay in VR tests.
+  if (!mVRMockDisplay) {
+    mVRMockDisplay = new VRMockDisplay(aID, aDeviceID);
+  }
+  p->MaybeResolve(mVRMockDisplay);
   mPromiseList.Remove(aPromiseID);
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult
 VRManagerChild::RecvReplyCreateVRServiceTestController(const nsCString& aID,
                                                        const uint32_t& aPromiseID,
                                                        const uint32_t& aDeviceID)
--- a/gfx/vr/ipc/VRManagerChild.h
+++ b/gfx/vr/ipc/VRManagerChild.h
@@ -16,16 +16,17 @@
 #include "mozilla/layers/TextureForwarder.h"
 
 namespace mozilla {
 namespace dom {
 class GamepadManager;
 class Navigator;
 class VRDisplay;
 class VREventObserver;
+class VRMockDisplay;
 } // namespace dom
 namespace layers {
 class TextureClient;
 }
 namespace gfx {
 class VRLayerChild;
 class VRDisplayClient;
 
@@ -182,16 +183,17 @@ private:
   * It defer calling of TextureClient recycle callback.
   */
   nsDataHashtable<nsUint64HashKey, RefPtr<layers::TextureClient> > mTexturesWaitingRecycled;
 
   layers::LayersBackend mBackend;
   RefPtr<layers::SyncObject> mSyncObject;
   uint32_t mPromiseID;
   nsRefPtrHashtable<nsUint32HashKey, dom::Promise> mPromiseList;
+  RefPtr<dom::VRMockDisplay> mVRMockDisplay;
 
   DISALLOW_COPY_AND_ASSIGN(VRManagerChild);
 };
 
 } // namespace mozilla
 } // namespace gfx
 
 #endif // MOZILLA_GFX_VR_VRMANAGERCHILD_H