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:
Chris Craik
2014-09-09 00:04:27 +00:00
committed by Android Git Automerger
4 changed files with 22 additions and 17 deletions

View File

@@ -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();

View File

@@ -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

View File

@@ -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);

View File

@@ -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);