mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1145764 - Add some default-disabled logging to TextureClientPool. r=nical
This commit is contained in:
parent
ea87960696
commit
3357340ee8
@ -11,6 +11,9 @@
|
||||
|
||||
#include "nsComponentManagerUtils.h"
|
||||
|
||||
#define TCP_LOG(...)
|
||||
//#define TCP_LOG(...) printf_stderr(__VA_ARGS__);
|
||||
|
||||
namespace mozilla {
|
||||
namespace layers {
|
||||
|
||||
@ -32,6 +35,8 @@ TextureClientPool::TextureClientPool(gfx::SurfaceFormat aFormat,
|
||||
, mOutstandingClients(0)
|
||||
, mSurfaceAllocator(aAllocator)
|
||||
{
|
||||
TCP_LOG("TexturePool %p created with max size %u and timeout %u\n",
|
||||
this, mMaxTextureClients, aShrinkTimeoutMsec);
|
||||
mTimer = do_CreateInstance("@mozilla.org/timer;1");
|
||||
if (aFormat == gfx::SurfaceFormat::UNKNOWN) {
|
||||
gfxWarning() << "Creating texture pool for SurfaceFormat::UNKNOWN format";
|
||||
@ -89,6 +94,8 @@ TextureClientPool::GetTextureClient()
|
||||
DebugOnly<bool> ok = TestClientPool("fetch", textureClient, this);
|
||||
MOZ_ASSERT(ok);
|
||||
#endif
|
||||
TCP_LOG("TexturePool %p giving %p from pool; size %u outstanding %u\n",
|
||||
this, textureClient.get(), mTextureClients.size(), mOutstandingClients);
|
||||
return textureClient;
|
||||
}
|
||||
|
||||
@ -113,6 +120,8 @@ TextureClientPool::GetTextureClient()
|
||||
textureClient->mPoolTracker = this;
|
||||
}
|
||||
#endif
|
||||
TCP_LOG("TexturePool %p giving new %p; size %u outstanding %u\n",
|
||||
this, textureClient.get(), mTextureClients.size(), mOutstandingClients);
|
||||
return textureClient;
|
||||
}
|
||||
|
||||
@ -130,6 +139,8 @@ TextureClientPool::ReturnTextureClient(TextureClient *aClient)
|
||||
MOZ_ASSERT(mOutstandingClients > mTextureClientsDeferred.size());
|
||||
mOutstandingClients--;
|
||||
mTextureClients.push(aClient);
|
||||
TCP_LOG("TexturePool %p had client %p returned; size %u outstanding %u\n",
|
||||
this, aClient, mTextureClients.size(), mOutstandingClients);
|
||||
|
||||
// Shrink down if we're beyond our maximum size
|
||||
ShrinkToMaximumSize();
|
||||
@ -137,6 +148,7 @@ TextureClientPool::ReturnTextureClient(TextureClient *aClient)
|
||||
// Kick off the pool shrinking timer if there are still more unused texture
|
||||
// clients than our desired minimum cache size.
|
||||
if (mTextureClients.size() > sMinCacheSize) {
|
||||
TCP_LOG("TexturePool %p scheduling a shrink-to-min-size\n", this);
|
||||
mTimer->InitWithFuncCallback(ShrinkCallback, this, mShrinkTimeoutMsec,
|
||||
nsITimer::TYPE_ONE_SHOT);
|
||||
}
|
||||
@ -153,6 +165,8 @@ TextureClientPool::ReturnTextureClientDeferred(TextureClient *aClient)
|
||||
MOZ_ASSERT(ok);
|
||||
#endif
|
||||
mTextureClientsDeferred.push(aClient);
|
||||
TCP_LOG("TexturePool %p had client %p defer-returned, size %u outstanding %u\n",
|
||||
this, aClient, mTextureClientsDeferred.size(), mOutstandingClients);
|
||||
ShrinkToMaximumSize();
|
||||
}
|
||||
|
||||
@ -160,6 +174,8 @@ void
|
||||
TextureClientPool::ShrinkToMaximumSize()
|
||||
{
|
||||
uint32_t totalClientsOutstanding = mTextureClients.size() + mOutstandingClients;
|
||||
TCP_LOG("TexturePool %p shrinking to max size %u; total outstanding %u\n",
|
||||
this, mMaxTextureClients, totalClientsOutstanding);
|
||||
|
||||
// We're over our desired maximum size, immediately shrink down to the
|
||||
// maximum, or zero if we have too many outstanding texture clients.
|
||||
@ -169,6 +185,9 @@ TextureClientPool::ShrinkToMaximumSize()
|
||||
if (mTextureClientsDeferred.size()) {
|
||||
MOZ_ASSERT(mOutstandingClients > 0);
|
||||
mOutstandingClients--;
|
||||
TCP_LOG("TexturePool %p dropped deferred client %p; %u remaining\n",
|
||||
this, mTextureClientsDeferred.top().get(),
|
||||
mTextureClientsDeferred.size() - 1);
|
||||
mTextureClientsDeferred.pop();
|
||||
} else {
|
||||
if (!mTextureClients.size()) {
|
||||
@ -176,8 +195,11 @@ TextureClientPool::ShrinkToMaximumSize()
|
||||
// with none in the pool. This can happen for pathological cases, or
|
||||
// it could mean that mMaxTextureClients needs adjusting for whatever
|
||||
// device we're running on.
|
||||
TCP_LOG("TexturePool %p encountering pathological case!\n", this);
|
||||
break;
|
||||
}
|
||||
TCP_LOG("TexturePool %p dropped non-deferred client %p; %u remaining\n",
|
||||
this, mTextureClients.top().get(), mTextureClients.size() - 1);
|
||||
mTextureClients.pop();
|
||||
}
|
||||
totalClientsOutstanding--;
|
||||
@ -187,7 +209,10 @@ TextureClientPool::ShrinkToMaximumSize()
|
||||
void
|
||||
TextureClientPool::ShrinkToMinimumSize()
|
||||
{
|
||||
TCP_LOG("TexturePool %p shrinking to minimum size %u\n", this, sMinCacheSize);
|
||||
while (mTextureClients.size() > sMinCacheSize) {
|
||||
TCP_LOG("TexturePool %p popped %p; shrunk to %u\n",
|
||||
this, mTextureClients.top().get(), mTextureClients.size() - 1);
|
||||
mTextureClients.pop();
|
||||
}
|
||||
}
|
||||
@ -195,6 +220,8 @@ TextureClientPool::ShrinkToMinimumSize()
|
||||
void
|
||||
TextureClientPool::ReturnDeferredClients()
|
||||
{
|
||||
TCP_LOG("TexturePool %p returning %u deferred clients to pool\n",
|
||||
this, mTextureClientsDeferred.size());
|
||||
while (!mTextureClientsDeferred.empty()) {
|
||||
mTextureClients.push(mTextureClientsDeferred.top());
|
||||
mTextureClientsDeferred.pop();
|
||||
@ -207,20 +234,35 @@ TextureClientPool::ReturnDeferredClients()
|
||||
// Kick off the pool shrinking timer if there are still more unused texture
|
||||
// clients than our desired minimum cache size.
|
||||
if (mTextureClients.size() > sMinCacheSize) {
|
||||
TCP_LOG("TexturePool %p kicking off shrink-to-min timer\n", this);
|
||||
mTimer->InitWithFuncCallback(ShrinkCallback, this, mShrinkTimeoutMsec,
|
||||
nsITimer::TYPE_ONE_SHOT);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
TextureClientPool::ReportClientLost()
|
||||
{
|
||||
MOZ_ASSERT(mOutstandingClients > mTextureClientsDeferred.size());
|
||||
mOutstandingClients--;
|
||||
TCP_LOG("TexturePool %p getting report client lost; down to %u outstanding\n",
|
||||
this, mOutstandingClients);
|
||||
}
|
||||
|
||||
void
|
||||
TextureClientPool::Clear()
|
||||
{
|
||||
TCP_LOG("TexturePool %p getting cleared\n", this);
|
||||
while (!mTextureClients.empty()) {
|
||||
TCP_LOG("TexturePool %p releasing client %p\n",
|
||||
this, mTextureClients.top().get());
|
||||
mTextureClients.pop();
|
||||
}
|
||||
while (!mTextureClientsDeferred.empty()) {
|
||||
MOZ_ASSERT(mOutstandingClients > 0);
|
||||
mOutstandingClients--;
|
||||
TCP_LOG("TexturePool %p releasing deferred client %p\n",
|
||||
this, mTextureClientsDeferred.top().get());
|
||||
mTextureClientsDeferred.pop();
|
||||
}
|
||||
}
|
||||
|
@ -75,10 +75,7 @@ public:
|
||||
* Report that a client retrieved via GetTextureClient() has become
|
||||
* unusable, so that it will no longer be tracked.
|
||||
*/
|
||||
void ReportClientLost() {
|
||||
MOZ_ASSERT(mOutstandingClients > mTextureClientsDeferred.size());
|
||||
mOutstandingClients--;
|
||||
}
|
||||
void ReportClientLost();
|
||||
|
||||
/**
|
||||
* Calling this will cause the pool to attempt to relinquish any unused
|
||||
|
Loading…
Reference in New Issue
Block a user