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
44 lines
1.3 KiB
C++
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
|