forked from mirrors/gecko-dev
Backed out changeset 1099d6f15f9f (bug 1265824) Backed out changeset b5ba15b1a70f (bug 1265824) Backed out changeset 51795de4adaf (bug 1265824) Backed out changeset be68741ff4ce (bug 1265824) Backed out changeset 4731dc56702d (bug 1265824) Backed out changeset 984133e9614b (bug 1265824) Backed out changeset efce316a4425 (bug 1265824) Backed out changeset 367abce30668 (bug 1265824)
70 lines
1.9 KiB
C++
70 lines
1.9 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/. */
|
|
|
|
#include "mozilla/layers/TextureSourceProvider.h"
|
|
#include "mozilla/layers/TextureHost.h"
|
|
|
|
namespace mozilla {
|
|
namespace layers {
|
|
|
|
TextureSourceProvider::~TextureSourceProvider()
|
|
{
|
|
ReadUnlockTextures();
|
|
}
|
|
|
|
void
|
|
TextureSourceProvider::ReadUnlockTextures()
|
|
{
|
|
for (auto& texture : mUnlockAfterComposition) {
|
|
texture->ReadUnlock();
|
|
}
|
|
mUnlockAfterComposition.Clear();
|
|
}
|
|
|
|
void
|
|
TextureSourceProvider::UnlockAfterComposition(TextureHost* aTexture)
|
|
{
|
|
mUnlockAfterComposition.AppendElement(aTexture);
|
|
}
|
|
|
|
bool
|
|
TextureSourceProvider::NotifyNotUsedAfterComposition(TextureHost* aTextureHost)
|
|
{
|
|
mNotifyNotUsedAfterComposition.AppendElement(aTextureHost);
|
|
|
|
// If Compositor holds many TextureHosts without compositing,
|
|
// the TextureHosts should be flushed to reduce memory consumption.
|
|
const int thresholdCount = 5;
|
|
const double thresholdSec = 2.0f;
|
|
if (mNotifyNotUsedAfterComposition.Length() > thresholdCount) {
|
|
TimeStamp lastCompositionEndTime = GetLastCompositionEndTime();
|
|
TimeDuration duration = lastCompositionEndTime ? TimeStamp::Now() - lastCompositionEndTime : TimeDuration();
|
|
// Check if we could flush
|
|
if (duration.ToSeconds() > thresholdSec) {
|
|
FlushPendingNotifyNotUsed();
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void
|
|
TextureSourceProvider::FlushPendingNotifyNotUsed()
|
|
{
|
|
for (auto& textureHost : mNotifyNotUsedAfterComposition) {
|
|
textureHost->CallNotifyNotUsed();
|
|
}
|
|
mNotifyNotUsedAfterComposition.Clear();
|
|
}
|
|
|
|
void
|
|
TextureSourceProvider::Destroy()
|
|
{
|
|
ReadUnlockTextures();
|
|
FlushPendingNotifyNotUsed();
|
|
}
|
|
|
|
} // namespace layers
|
|
} // namespace mozilla
|