Files
tubestation/gfx/layers/opengl/TexturePoolOGL.h
Alastor Wu 5df5adbbb3 Bug 1373177 - part1 : automatically refill the pool if the textures number is lower than specific threshold. r=bechen,jolin,snorp
The pool would be refilled when the compositor starts rendering the frame.
However, if we consume lots of textures but doesn't render any frame, then the
pool would always empty and no one can get new texture id.

One case is that when we release decoders too early before rendering the first
frame, the pool won't be refilled, and it causes all media threads are blocked.

Now we would refill the pool if the textures number is lower than the specific
threshold.

MozReview-Commit-ID: CYBLYi9hFD9
2017-06-30 11:12:49 -07:00

44 lines
1.3 KiB
C++

/* 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/. */
#ifndef GFX_TEXTUREPOOLOGL_H
#define GFX_TEXTUREPOOLOGL_H
#include "GLContextTypes.h" // for GLContext, GLuint
namespace mozilla {
namespace gl {
// A texture pool for for the on-screen GLContext. The main purpose of this class
// is to provide the ability to easily allocate an on-screen texture from the
// content thread. The unfortunate nature of the SurfaceTexture API (see AndroidSurfaceTexture)
// necessitates this.
class TexturePoolOGL
{
public:
// Get a new texture from the pool. Will block
// and wait for one to be created if necessary
static GLuint AcquireTexture();
// Called by the active LayerManagerOGL to fill
// the pool
static void Fill(GLContext* aContext);
static GLContext* GetGLContext();
// Initializes the pool, but does not fill it. Called by gfxPlatform init.
static void Init();
// Clears all internal data structures in preparation for shutdown
static void Shutdown();
private:
// These methods are used to refill textures to avoid pool becomes dry
static void MaybeFillTextures();
};
} // namespace gl
} // namespace mozilla
#endif // GFX_TEXTUREPOOLOGL_H