Verified Commit 03b8672a authored by Chris Martin's avatar Chris Martin Committed by ma1
Browse files

Bug 2024240 - Clean up LinuxGamepadService lifecycle interactions with event...

Bug 2024240 - Clean up LinuxGamepadService lifecycle interactions with event dispatching.  a=diannaS DONTBUILD

Original Revision: https://phabricator.services.mozilla.com/D290238

Differential Revision: https://phabricator.services.mozilla.com/D291596
parent 60165727
Loading
Loading
Loading
Loading
+24 −13
Original line number Diff line number Diff line
@@ -111,7 +111,8 @@ class LinuxGamepadService {
};

// singleton instance
LinuxGamepadService* gService = nullptr;
LinuxGamepadService* gService MOZ_GUARDED_BY(mozilla::sMainThreadCapability) =
    nullptr;

void LinuxGamepadService::AddDevice(struct udev_device* dev) {
  RefPtr<GamepadPlatformService> service =
@@ -489,7 +490,9 @@ gboolean LinuxGamepadService::OnGamepadData(GIOChannel* source,
gboolean LinuxGamepadService::OnUdevMonitor(GIOChannel* source,
                                            GIOCondition condition,
                                            gpointer data) {
  if (condition & (G_IO_ERR | G_IO_HUP)) {
  mozilla::AssertIsOnMainThread();

  if (!gService || condition & (G_IO_ERR | G_IO_HUP)) {
    return FALSE;
  }

@@ -502,21 +505,29 @@ gboolean LinuxGamepadService::OnUdevMonitor(GIOChannel* source,
namespace mozilla::dom {

void StartGamepadMonitoring() {
  if (gService) {
    return;
  }
  MOZ_ASSERT(!NS_IsMainThread());

  NS_DispatchToMainThread(NS_NewRunnableFunction("StartGamepadMonitoring", [] {
    AssertIsOnMainThread();
    if (!gService) {
      gService = new LinuxGamepadService();
      gService->Startup();
    }
  }));
}

void StopGamepadMonitoring() {
  if (!gService) {
    return;
  }
  MOZ_ASSERT(!NS_IsMainThread());

  NS_DispatchToMainThread(NS_NewRunnableFunction("StopGamepadMonitoring", [] {
    AssertIsOnMainThread();
    if (gService) {
      gService->Shutdown();
      delete gService;
      gService = nullptr;
    }
  }));
}

void SetGamepadLightIndicatorColor(const Tainted<GamepadHandle>& aGamepadHandle,
                                   const Tainted<uint32_t>& aLightColorIndex,