Commit 4bec908c authored by Kan-Ru Chen (陳侃如)'s avatar Kan-Ru Chen (陳侃如)
Browse files

Bug 814822 - Notify wake lock change when content crashes. r=jlebar

parent a0dbf6da
Loading
Loading
Loading
Loading
+23 −7
Original line number Diff line number Diff line
@@ -54,24 +54,38 @@ static bool sInitialized = false;
static bool sIsShuttingDown = false;

static PLDHashOperator
RemoveChildFromList(const nsAString& aKey, ProcessLockTable* aTable, void* aUserArg)
CountWakeLocks(const uint64_t& aKey, LockCount aCount, void* aUserArg)
{
  MOZ_ASSERT(aUserArg);

  uint64_t childID = *static_cast<uint64_t*>(aUserArg);
  aTable->Remove(childID);
  LockCount* totalCount = static_cast<LockCount*>(aUserArg);
  totalCount->numLocks += aCount.numLocks;
  totalCount->numHidden += aCount.numHidden;

  return PL_DHASH_NEXT;
}

static PLDHashOperator
CountWakeLocks(const uint64_t& aKey, LockCount aCount, void* aUserArg)
RemoveChildFromList(const nsAString& aKey, ProcessLockTable* aTable, void* aUserArg)
{
  MOZ_ASSERT(aUserArg);

  LockCount* totalCount = static_cast<LockCount*>(aUserArg);
  totalCount->numLocks += aCount.numLocks;
  totalCount->numHidden += aCount.numHidden;
  uint64_t childID = *static_cast<uint64_t*>(aUserArg);
  if (aTable->Get(childID, NULL)) {
    aTable->Remove(childID);
    if (sActiveListeners) {
      LockCount totalCount;
      WakeLockInformation info;
      aTable->EnumerateRead(CountWakeLocks, &totalCount);
      if (!totalCount.numLocks) {
        sLockTable->Remove(aKey);
      }
      info.numLocks() = totalCount.numLocks;
      info.numHidden() = totalCount.numHidden;
      info.topic() = aKey;
      NotifyWakeLockChange(info);
    }
  }

  return PL_DHASH_NEXT;
}
@@ -162,6 +176,8 @@ ModifyWakeLockInternal(const nsAString& aTopic,
                       hal::WakeLockControl aHiddenAdjust,
                       uint64_t aProcessID)
{
  MOZ_ASSERT(NS_IsMainThread());

  if (sIsShuttingDown) {
    return;
  }