diff options
| author | 2014-10-31 14:49:06 -0700 | |
|---|---|---|
| committer | 2014-10-31 15:30:10 -0700 | |
| commit | 0e89e2b7bcb2c035e8cee77f93120e7c5617f8d2 (patch) | |
| tree | 8fcd1f768f08fbeb2cd13425a2bf15b7670428f2 /libs/hwui/RenderState.cpp | |
| parent | 141823ec6313d9545b8354ea1e3e017a1da3cfa8 (diff) | |
Layer changes
Bug: 17208461
* Switch Layer to be VirtualLightRefBase instead of
  Caches' side-channel ref-counting
* Include active layers in gfxinfo dump
* Run gfxinfo dump on the correct thread
* Dump gfxinfo on Layer creation failure
Change-Id: I28d195699e2334518e215ab28c7a17355aee9678
Diffstat (limited to 'libs/hwui/RenderState.cpp')
| -rw-r--r-- | libs/hwui/RenderState.cpp | 37 | 
1 files changed, 34 insertions, 3 deletions
diff --git a/libs/hwui/RenderState.cpp b/libs/hwui/RenderState.cpp index 86bd7dd00ccd..a8cf26f0d5da 100644 --- a/libs/hwui/RenderState.cpp +++ b/libs/hwui/RenderState.cpp @@ -16,15 +16,18 @@  #include "RenderState.h"  #include "renderthread/CanvasContext.h" +#include "renderthread/EglManager.h"  namespace android {  namespace uirenderer { -RenderState::RenderState() -        : mCaches(NULL) +RenderState::RenderState(renderthread::RenderThread& thread) +        : mRenderThread(thread) +        , mCaches(NULL)          , mViewportWidth(0)          , mViewportHeight(0)          , mFramebuffer(0) { +    mThreadId = pthread_self();  }  RenderState::~RenderState() { @@ -39,7 +42,6 @@ void RenderState::onGLContextCreated() {  void RenderState::onGLContextDestroyed() {  /* -    AutoMutex _lock(mLayerLock);      size_t size = mActiveLayers.size();      if (CC_UNLIKELY(size != 0)) {          ALOGE("Crashing, have %d contexts and %d layers at context destruction. isempty %d", @@ -146,5 +148,34 @@ void RenderState::debugOverdraw(bool enable, bool clear) {      }  } +void RenderState::requireGLContext() { +    assertOnGLThread(); +    mRenderThread.eglManager().requireGlContext(); +} + +void RenderState::assertOnGLThread() { +    pthread_t curr = pthread_self(); +    LOG_ALWAYS_FATAL_IF(!pthread_equal(mThreadId, curr), "Wrong thread!"); +} + + +class DecStrongTask : public renderthread::RenderTask { +public: +    DecStrongTask(VirtualLightRefBase* object) : mObject(object) {} + +    virtual void run() { +        mObject->decStrong(0); +        mObject = 0; +        delete this; +    } + +private: +    VirtualLightRefBase* mObject; +}; + +void RenderState::postDecStrong(VirtualLightRefBase* object) { +    mRenderThread.queue(new DecStrongTask(object)); +} +  } /* namespace uirenderer */  } /* namespace android */  |