diff options
| author | John Reck <jreck@google.com> | 2014-10-31 23:30:57 +0000 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2014-10-31 23:30:57 +0000 |
| commit | 9481684560b2815d2706512086bb36467ef6acc0 (patch) | |
| tree | e6258e3075f56533df3ec11cf1443a0d1882b17d /libs/hwui/RenderState.cpp | |
| parent | bc622ed7c3f9ead17c8aede3ccc10babf0b8e0fa (diff) | |
| parent | e05575e9c36850d8cfe49396ac9a1372511b12bf (diff) | |
| download | frameworks_base-9481684560b2815d2706512086bb36467ef6acc0.zip frameworks_base-9481684560b2815d2706512086bb36467ef6acc0.tar.gz frameworks_base-9481684560b2815d2706512086bb36467ef6acc0.tar.bz2 | |
am e05575e9: am a8d83d63: Merge "Layer changes" into lmp-mr1-dev automerge: a51fba0
* commit 'e05575e9c36850d8cfe49396ac9a1372511b12bf':
Layer changes
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 86bd7dd..a8cf26f 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 */ |
