summaryrefslogtreecommitdiffstats
path: root/libs/hwui/RenderState.cpp
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2014-10-31 23:30:57 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-10-31 23:30:57 +0000
commit9481684560b2815d2706512086bb36467ef6acc0 (patch)
treee6258e3075f56533df3ec11cf1443a0d1882b17d /libs/hwui/RenderState.cpp
parentbc622ed7c3f9ead17c8aede3ccc10babf0b8e0fa (diff)
parente05575e9c36850d8cfe49396ac9a1372511b12bf (diff)
downloadframeworks_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.cpp37
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 */