Commit 16ce9c4a authored by sotaro's avatar sotaro
Browse files

Bug 1555544 - Change function name from CancelWaitForRecycle() to...

Bug 1555544 - Change function name from CancelWaitForRecycle() to CancelWaitForNotifyNotUsed() r=jgilbert

CancelWaitForRecycle() does not cancel wait for recycling. It cancels wait for end of usage on host side.

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

--HG--
extra : moz-landing-system : lando
parent 41de040e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -276,7 +276,7 @@ SurfaceFactory::~SurfaceFactory() {
  while (!mRecycleTotalPool.empty()) {
    RefPtr<layers::SharedSurfaceTextureClient> tex = *mRecycleTotalPool.begin();
    StopRecycling(tex);
    tex->CancelWaitForRecycle();
    tex->CancelWaitForNotifyNotUsed();
  }

  MOZ_RELEASE_ASSERT(mRecycleTotalPool.empty(),
+1 −1
Original line number Diff line number Diff line
@@ -499,7 +499,7 @@ void CanvasClientSharedSurface::OnDetach() { ClearSurfaces(); }

void CanvasClientSharedSurface::ClearSurfaces() {
  if (mFront) {
    mFront->CancelWaitForRecycle();
    mFront->CancelWaitForNotifyNotUsed();
  }
  mFront = nullptr;
  mNewFront = nullptr;
+8 −8
Original line number Diff line number Diff line
@@ -793,7 +793,7 @@ void TextureClient::SetAddedToCompositableClient() {
  }
}

static void CancelTextureClientRecycle(uint64_t aTextureId,
static void CancelTextureClientNotifyNotUsed(uint64_t aTextureId,
                                             LayersIPCChannel* aAllocator) {
  if (!aAllocator) {
    return;
@@ -804,17 +804,17 @@ static void CancelTextureClientRecycle(uint64_t aTextureId,
    return;
  }
  if (MessageLoop::current() == msgLoop) {
    aAllocator->CancelWaitForRecycle(aTextureId);
    aAllocator->CancelWaitForNotifyNotUsed(aTextureId);
  } else {
    msgLoop->PostTask(NewRunnableFunction("CancelTextureClientRecycleRunnable",
                                          CancelTextureClientRecycle,
                                          aTextureId, aAllocator));
    msgLoop->PostTask(NewRunnableFunction(
        "CancelTextureClientNotifyNotUsedRunnable",
        CancelTextureClientNotifyNotUsed, aTextureId, aAllocator));
  }
}

void TextureClient::CancelWaitForRecycle() {
void TextureClient::CancelWaitForNotifyNotUsed() {
  if (GetFlags() & TextureFlags::RECYCLE) {
    CancelTextureClientRecycle(mSerial, GetAllocator());
    CancelTextureClientNotifyNotUsed(mSerial, GetAllocator());
    return;
  }
}
+1 −1
Original line number Diff line number Diff line
@@ -596,7 +596,7 @@ class TextureClient : public AtomicRefCountedWithFinalize<TextureClient> {
  uint64_t GetSerial() const { return mSerial; }
  void GPUVideoDesc(SurfaceDescriptorGPUVideo* aOutDesc);

  void CancelWaitForRecycle();
  void CancelWaitForNotifyNotUsed();

  /**
   * Set last transaction id of CompositableForwarder.
+7 −7
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@ void CompositorBridgeChild::AfterDestroy() {

void CompositorBridgeChild::Destroy() {
  // This must not be called from the destructor!
  mTexturesWaitingRecycled.clear();
  mTexturesWaitingNotifyNotUsed.clear();

  // Destroying the layer manager may cause all sorts of things to happen, so
  // let's make sure there is still a reference to keep this alive whatever
@@ -834,23 +834,23 @@ void CompositorBridgeChild::HoldUntilCompositableRefReleasedIfNecessary(
  }

  aClient->SetLastFwdTransactionId(GetFwdTransactionId());
  mTexturesWaitingRecycled.emplace(aClient->GetSerial(), aClient);
  mTexturesWaitingNotifyNotUsed.emplace(aClient->GetSerial(), aClient);
}

void CompositorBridgeChild::NotifyNotUsed(uint64_t aTextureId,
                                          uint64_t aFwdTransactionId) {
  auto it = mTexturesWaitingRecycled.find(aTextureId);
  if (it != mTexturesWaitingRecycled.end()) {
  auto it = mTexturesWaitingNotifyNotUsed.find(aTextureId);
  if (it != mTexturesWaitingNotifyNotUsed.end()) {
    if (aFwdTransactionId < it->second->GetLastFwdTransactionId()) {
      // Released on host side, but client already requested newer use texture.
      return;
    }
    mTexturesWaitingRecycled.erase(it);
    mTexturesWaitingNotifyNotUsed.erase(it);
  }
}

void CompositorBridgeChild::CancelWaitForRecycle(uint64_t aTextureId) {
  mTexturesWaitingRecycled.erase(aTextureId);
void CompositorBridgeChild::CancelWaitForNotifyNotUsed(uint64_t aTextureId) {
  mTexturesWaitingNotifyNotUsed.erase(aTextureId);
}

TextureClientPool* CompositorBridgeChild::GetTexturePool(
Loading