am 63fe87ff: am 2d0c82ad: Merge "Don\'t track TextureLayer lifecycles in RenderState" into lmp-dev
* commit '63fe87ffece32b234323322621467b6bbb3b1b6f': Don't track TextureLayer lifecycles in RenderState
This commit is contained in:
@@ -29,15 +29,15 @@
|
||||
namespace android {
|
||||
namespace uirenderer {
|
||||
|
||||
Layer::Layer(RenderState& renderState, const uint32_t layerWidth, const uint32_t layerHeight)
|
||||
Layer::Layer(Type layerType, RenderState& renderState, const uint32_t layerWidth, const uint32_t layerHeight)
|
||||
: caches(Caches::getInstance())
|
||||
, renderState(renderState)
|
||||
, texture(caches) {
|
||||
, texture(caches)
|
||||
, type(layerType) {
|
||||
mesh = NULL;
|
||||
meshElementCount = 0;
|
||||
cacheable = true;
|
||||
dirty = false;
|
||||
textureLayer = false;
|
||||
renderTarget = GL_TEXTURE_2D;
|
||||
texture.width = layerWidth;
|
||||
texture.height = layerHeight;
|
||||
@@ -55,11 +55,17 @@ Layer::Layer(RenderState& renderState, const uint32_t layerWidth, const uint32_t
|
||||
caches.resourceCache.incrementRefcount(this);
|
||||
rendererLightPosDirty = true;
|
||||
wasBuildLayered = false;
|
||||
renderState.registerLayer(this);
|
||||
if (!isTextureLayer()) {
|
||||
// track only non-texture layer lifecycles in renderstate,
|
||||
// because texture layers are destroyed via finalizer
|
||||
renderState.registerLayer(this);
|
||||
}
|
||||
}
|
||||
|
||||
Layer::~Layer() {
|
||||
renderState.unregisterLayer(this);
|
||||
if (!isTextureLayer()) {
|
||||
renderState.unregisterLayer(this);
|
||||
}
|
||||
SkSafeUnref(colorFilter);
|
||||
removeFbo();
|
||||
deleteTexture();
|
||||
|
||||
@@ -54,7 +54,12 @@ class DeferStateStruct;
|
||||
*/
|
||||
class Layer {
|
||||
public:
|
||||
Layer(RenderState& renderState, const uint32_t layerWidth, const uint32_t layerHeight);
|
||||
enum Type {
|
||||
kType_Texture,
|
||||
kType_DisplayList,
|
||||
};
|
||||
|
||||
Layer(Type type, RenderState& renderState, const uint32_t layerWidth, const uint32_t layerHeight);
|
||||
~Layer();
|
||||
|
||||
static uint32_t computeIdealWidth(uint32_t layerWidth);
|
||||
@@ -219,11 +224,7 @@ public:
|
||||
}
|
||||
|
||||
inline bool isTextureLayer() const {
|
||||
return textureLayer;
|
||||
}
|
||||
|
||||
inline void setTextureLayer(bool textureLayer) {
|
||||
this->textureLayer = textureLayer;
|
||||
return type == kType_Texture;
|
||||
}
|
||||
|
||||
inline SkColorFilter* getColorFilter() const {
|
||||
@@ -343,10 +344,9 @@ private:
|
||||
bool cacheable;
|
||||
|
||||
/**
|
||||
* When set to true, this layer must be treated as a texture
|
||||
* layer.
|
||||
* Denotes whether the layer is a DisplayList, or Texture layer.
|
||||
*/
|
||||
bool textureLayer;
|
||||
const Type type;
|
||||
|
||||
/**
|
||||
* When set to true, this layer is dirty and should be cleared
|
||||
|
||||
@@ -112,7 +112,7 @@ Layer* LayerCache::get(RenderState& renderState, const uint32_t width, const uin
|
||||
} else {
|
||||
LAYER_LOGD("Creating new layer %dx%d", entry.mWidth, entry.mHeight);
|
||||
|
||||
layer = new Layer(renderState, entry.mWidth, entry.mHeight);
|
||||
layer = new Layer(Layer::kType_DisplayList, renderState, entry.mWidth, entry.mHeight);
|
||||
layer->setBlend(true);
|
||||
layer->setEmpty(true);
|
||||
layer->setFbo(0);
|
||||
|
||||
@@ -272,9 +272,8 @@ bool LayerRenderer::resizeLayer(Layer* layer, uint32_t width, uint32_t height) {
|
||||
Layer* LayerRenderer::createTextureLayer(RenderState& renderState) {
|
||||
LAYER_RENDERER_LOGD("Creating new texture layer");
|
||||
|
||||
Layer* layer = new Layer(renderState, 0, 0);
|
||||
Layer* layer = new Layer(Layer::kType_Texture, renderState, 0, 0);
|
||||
layer->setCacheable(false);
|
||||
layer->setTextureLayer(true);
|
||||
layer->setEmpty(true);
|
||||
layer->setFbo(0);
|
||||
layer->setAlpha(255, SkXfermode::kSrcOver_Mode);
|
||||
|
||||
Reference in New Issue
Block a user