am 0ea0749a: am e7a5da38: am 093e3412: Merge "Additional layer logging" into lmp-dev

* commit '0ea0749a24070bfec3ea39a0a4ca0a7156f3dfe1':
  Additional layer logging
This commit is contained in:
Chris Craik
2014-09-11 17:26:29 +00:00
committed by Android Git Automerger
5 changed files with 32 additions and 7 deletions

View File

@@ -342,6 +342,7 @@ void Caches::clearGarbage() {
void Caches::deleteLayerDeferred(Layer* layer) {
Mutex::Autolock _l(mGarbageLock);
layer->state = Layer::kState_InGarbageList;
mLayerGarbage.push(layer);
}

View File

@@ -30,7 +30,8 @@ namespace android {
namespace uirenderer {
Layer::Layer(Type layerType, RenderState& renderState, const uint32_t layerWidth, const uint32_t layerHeight)
: caches(Caches::getInstance())
: state(kState_Uncached)
, caches(Caches::getInstance())
, renderState(renderState)
, texture(caches)
, type(layerType) {

View File

@@ -59,6 +59,17 @@ public:
kType_DisplayList,
};
// layer lifecycle, controlled from outside
enum State {
kState_Uncached = 0,
kState_InCache = 1,
kState_FailedToCache = 2,
kState_RemovedFromCache = 3,
kState_DeletedFromCache = 4,
kState_InGarbageList = 5,
};
State state; // public for logging/debugging purposes
Layer(Type type, RenderState& renderState, const uint32_t layerWidth, const uint32_t layerHeight);
~Layer();

View File

@@ -83,6 +83,7 @@ void LayerCache::deleteLayer(Layer* layer) {
LAYER_LOGD("Destroying layer %dx%d, fbo %d", layer->getWidth(), layer->getHeight(),
layer->getFbo());
mSize -= layer->getWidth() * layer->getHeight() * 4;
layer->state = Layer::kState_DeletedFromCache;
Caches::getInstance().resourceCache.decrementRefcount(layer);
}
}
@@ -106,6 +107,7 @@ Layer* LayerCache::get(RenderState& renderState, const uint32_t width, const uin
mCache.removeAt(index);
layer = entry.mLayer;
layer->state = Layer::kState_RemovedFromCache;
mSize -= layer->getWidth() * layer->getHeight() * 4;
LAYER_LOGD("Reusing layer %dx%d", layer->getWidth(), layer->getHeight());
@@ -166,8 +168,11 @@ bool LayerCache::put(Layer* layer) {
mCache.add(entry);
mSize += size;
layer->state = Layer::kState_InCache;
return true;
}
layer->state = Layer::kState_FailedToCache;
return false;
}

View File

@@ -39,13 +39,16 @@ void RenderState::onGLContextCreated() {
void RenderState::onGLContextDestroyed() {
AutoMutex _lock(mLayerLock);
if (CC_UNLIKELY(!mActiveLayers.empty())) {
size_t size = mActiveLayers.size();
if (CC_UNLIKELY(size != 0)) {
ALOGE("Crashing, have %d contexts and %d layers at context destruction. isempty %d",
mRegisteredContexts.size(), size, mActiveLayers.empty());
mCaches->dumpMemoryUsage();
for (std::set<renderthread::CanvasContext*>::iterator cit = mRegisteredContexts.begin();
cit != mRegisteredContexts.end(); cit++) {
renderthread::CanvasContext* context = *cit;
ALOGD("Context: %p (root = %p)", context, context->mRootRenderNode.get());
ALOGD(" Prefeteched layers: %zu", context->mPrefetechedLayers.size());
ALOGE("Context: %p (root = %p)", context, context->mRootRenderNode.get());
ALOGE(" Prefeteched layers: %zu", context->mPrefetechedLayers.size());
for (std::set<RenderNode*>::iterator pit = context->mPrefetechedLayers.begin();
pit != context->mPrefetechedLayers.end(); pit++) {
(*pit)->debugDumpLayers(" ");
@@ -53,13 +56,17 @@ void RenderState::onGLContextDestroyed() {
context->mRootRenderNode->debugDumpLayers(" ");
}
if (mActiveLayers.begin() == mActiveLayers.end()) {
ALOGE("set has become empty. wat.");
}
for (std::set<const Layer*>::iterator lit = mActiveLayers.begin();
lit != mActiveLayers.end(); lit++) {
const Layer* layer = *(lit);
ALOGD("Layer %p, fbo %d, buildlayered %d",
layer, layer->getFbo(), layer->wasBuildLayered);
ALOGE("Layer %p, state %d, texlayer %d, fbo %d, buildlayered %d",
layer, layer->state, layer->isTextureLayer(), layer->getFbo(), layer->wasBuildLayered);
}
LOG_ALWAYS_FATAL("layers have survived gl context destruction");
LOG_ALWAYS_FATAL("%d layers have survived gl context destruction", size);
}
}