Loading libs/hwui/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ hwui_src_files := \ Texture.cpp \ TextureCache.cpp \ VectorDrawable.cpp \ VkLayer.cpp \ protos/hwui.proto hwui_test_common_src_files := \ Loading libs/hwui/DeferredLayerUpdater.cpp +45 −22 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include "DeferredLayerUpdater.h" #include "GlLayer.h" #include "VkLayer.h" #include "renderthread/EglManager.h" #include "renderthread/RenderTask.h" #include "utils/PaintUtils.h" Loading Loading @@ -56,6 +57,12 @@ void DeferredLayerUpdater::apply() { mLayer->setAlpha(mAlpha, mMode); if (mSurfaceTexture.get()) { if (mLayer->getApi() == Layer::Api::Vulkan) { if (mUpdateTexImage) { mUpdateTexImage = false; doUpdateVkTexImage(); } } else { LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL, "apply surfaceTexture with non GL backend %x, GL %x, VK %x", mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan); Loading @@ -67,6 +74,7 @@ void DeferredLayerUpdater::apply() { mUpdateTexImage = false; doUpdateTexImage(); } } if (mTransform) { mLayer->getTransform().load(*mTransform); setTransform(nullptr); Loading Loading @@ -117,16 +125,25 @@ void DeferredLayerUpdater::doUpdateTexImage() { } } void DeferredLayerUpdater::doUpdateVkTexImage() { LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::Vulkan, "updateLayer non Vulkan backend %x, GL %x, VK %x", mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan); static const mat4 identityMatrix; updateLayer(false, identityMatrix.data); VkLayer* vkLayer = static_cast<VkLayer*>(mLayer); vkLayer->updateTexture(); } void DeferredLayerUpdater::updateLayer(bool forceFilter, GLenum renderTarget, const float* textureTransform) { LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL, "updateLayer non GL backend %x, GL %x, VK %x", mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan); mLayer->setBlend(mBlend); mLayer->setForceFilter(forceFilter); mLayer->setSize(mWidth, mHeight); mLayer->getTexTransform().load(textureTransform); updateLayer(forceFilter, textureTransform); GlLayer* glLayer = static_cast<GlLayer*>(mLayer); if (renderTarget != glLayer->getRenderTarget()) { Loading @@ -137,19 +154,25 @@ void DeferredLayerUpdater::updateLayer(bool forceFilter, GLenum renderTarget, } } void DeferredLayerUpdater::updateLayer(bool forceFilter, const float* textureTransform) { mLayer->setBlend(mBlend); mLayer->setForceFilter(forceFilter); mLayer->setSize(mWidth, mHeight); mLayer->getTexTransform().load(textureTransform); } void DeferredLayerUpdater::detachSurfaceTexture() { if (mSurfaceTexture.get()) { LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL, "detachSurfaceTexture with non GL backend %x, GL %x, VK %x", mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan); if (mLayer->getApi() == Layer::Api::OpenGL) { status_t err = mSurfaceTexture->detachFromContext(); if (err != 0) { // TODO: Elevate to fatal exception ALOGE("Failed to detach SurfaceTexture from context %d", err); } mSurfaceTexture = nullptr; static_cast<GlLayer*>(mLayer)->clearTexture(); } mSurfaceTexture = nullptr; } } } /* namespace uirenderer */ Loading libs/hwui/DeferredLayerUpdater.h +3 −1 Original line number Diff line number Diff line Loading @@ -63,8 +63,8 @@ public: ANDROID_API void setSurfaceTexture(const sp<GLConsumer>& texture, bool needsAttach) { if (texture.get() != mSurfaceTexture.get()) { mSurfaceTexture = texture; mNeedsGLContextAttach = needsAttach; mSurfaceTexture = texture; GLenum target = texture->getCurrentTextureTarget(); LOG_ALWAYS_FATAL_IF(target != GL_TEXTURE_2D && target != GL_TEXTURE_EXTERNAL_OES, Loading Loading @@ -113,6 +113,8 @@ private: Layer* mLayer; void doUpdateTexImage(); void doUpdateVkTexImage(); void updateLayer(bool forceFilter, const float* textureTransform); }; } /* namespace uirenderer */ Loading libs/hwui/GpuMemoryTracker.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -67,13 +67,13 @@ void GpuMemoryTracker::stopTrackingObject() { gObjectStats[static_cast<int>(mType)].count--; } void GpuMemoryTracker::onGLContextCreated() { LOG_ALWAYS_FATAL_IF(gGpuThread != 0, "We already have a GL thread? " "current = %lu, gl thread = %lu", pthread_self(), gGpuThread); void GpuMemoryTracker::onGpuContextCreated() { LOG_ALWAYS_FATAL_IF(gGpuThread != 0, "We already have a gpu thread? " "current = %lu, gpu thread = %lu", pthread_self(), gGpuThread); gGpuThread = pthread_self(); } void GpuMemoryTracker::onGLContextDestroyed() { void GpuMemoryTracker::onGpuContextDestroyed() { gGpuThread = 0; if (CC_UNLIKELY(gObjectSet.size() > 0)) { std::stringstream os; Loading libs/hwui/GpuMemoryTracker.h +2 −2 Original line number Diff line number Diff line Loading @@ -43,8 +43,8 @@ public: GpuObjectType objectType() { return mType; } int objectSize() { return mSize; } static void onGLContextCreated(); static void onGLContextDestroyed(); static void onGpuContextCreated(); static void onGpuContextDestroyed(); static void dump(); static void dump(std::ostream& stream); static int getInstanceCount(GpuObjectType type); Loading Loading
libs/hwui/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ hwui_src_files := \ Texture.cpp \ TextureCache.cpp \ VectorDrawable.cpp \ VkLayer.cpp \ protos/hwui.proto hwui_test_common_src_files := \ Loading
libs/hwui/DeferredLayerUpdater.cpp +45 −22 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include "DeferredLayerUpdater.h" #include "GlLayer.h" #include "VkLayer.h" #include "renderthread/EglManager.h" #include "renderthread/RenderTask.h" #include "utils/PaintUtils.h" Loading Loading @@ -56,6 +57,12 @@ void DeferredLayerUpdater::apply() { mLayer->setAlpha(mAlpha, mMode); if (mSurfaceTexture.get()) { if (mLayer->getApi() == Layer::Api::Vulkan) { if (mUpdateTexImage) { mUpdateTexImage = false; doUpdateVkTexImage(); } } else { LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL, "apply surfaceTexture with non GL backend %x, GL %x, VK %x", mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan); Loading @@ -67,6 +74,7 @@ void DeferredLayerUpdater::apply() { mUpdateTexImage = false; doUpdateTexImage(); } } if (mTransform) { mLayer->getTransform().load(*mTransform); setTransform(nullptr); Loading Loading @@ -117,16 +125,25 @@ void DeferredLayerUpdater::doUpdateTexImage() { } } void DeferredLayerUpdater::doUpdateVkTexImage() { LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::Vulkan, "updateLayer non Vulkan backend %x, GL %x, VK %x", mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan); static const mat4 identityMatrix; updateLayer(false, identityMatrix.data); VkLayer* vkLayer = static_cast<VkLayer*>(mLayer); vkLayer->updateTexture(); } void DeferredLayerUpdater::updateLayer(bool forceFilter, GLenum renderTarget, const float* textureTransform) { LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL, "updateLayer non GL backend %x, GL %x, VK %x", mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan); mLayer->setBlend(mBlend); mLayer->setForceFilter(forceFilter); mLayer->setSize(mWidth, mHeight); mLayer->getTexTransform().load(textureTransform); updateLayer(forceFilter, textureTransform); GlLayer* glLayer = static_cast<GlLayer*>(mLayer); if (renderTarget != glLayer->getRenderTarget()) { Loading @@ -137,19 +154,25 @@ void DeferredLayerUpdater::updateLayer(bool forceFilter, GLenum renderTarget, } } void DeferredLayerUpdater::updateLayer(bool forceFilter, const float* textureTransform) { mLayer->setBlend(mBlend); mLayer->setForceFilter(forceFilter); mLayer->setSize(mWidth, mHeight); mLayer->getTexTransform().load(textureTransform); } void DeferredLayerUpdater::detachSurfaceTexture() { if (mSurfaceTexture.get()) { LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL, "detachSurfaceTexture with non GL backend %x, GL %x, VK %x", mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan); if (mLayer->getApi() == Layer::Api::OpenGL) { status_t err = mSurfaceTexture->detachFromContext(); if (err != 0) { // TODO: Elevate to fatal exception ALOGE("Failed to detach SurfaceTexture from context %d", err); } mSurfaceTexture = nullptr; static_cast<GlLayer*>(mLayer)->clearTexture(); } mSurfaceTexture = nullptr; } } } /* namespace uirenderer */ Loading
libs/hwui/DeferredLayerUpdater.h +3 −1 Original line number Diff line number Diff line Loading @@ -63,8 +63,8 @@ public: ANDROID_API void setSurfaceTexture(const sp<GLConsumer>& texture, bool needsAttach) { if (texture.get() != mSurfaceTexture.get()) { mSurfaceTexture = texture; mNeedsGLContextAttach = needsAttach; mSurfaceTexture = texture; GLenum target = texture->getCurrentTextureTarget(); LOG_ALWAYS_FATAL_IF(target != GL_TEXTURE_2D && target != GL_TEXTURE_EXTERNAL_OES, Loading Loading @@ -113,6 +113,8 @@ private: Layer* mLayer; void doUpdateTexImage(); void doUpdateVkTexImage(); void updateLayer(bool forceFilter, const float* textureTransform); }; } /* namespace uirenderer */ Loading
libs/hwui/GpuMemoryTracker.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -67,13 +67,13 @@ void GpuMemoryTracker::stopTrackingObject() { gObjectStats[static_cast<int>(mType)].count--; } void GpuMemoryTracker::onGLContextCreated() { LOG_ALWAYS_FATAL_IF(gGpuThread != 0, "We already have a GL thread? " "current = %lu, gl thread = %lu", pthread_self(), gGpuThread); void GpuMemoryTracker::onGpuContextCreated() { LOG_ALWAYS_FATAL_IF(gGpuThread != 0, "We already have a gpu thread? " "current = %lu, gpu thread = %lu", pthread_self(), gGpuThread); gGpuThread = pthread_self(); } void GpuMemoryTracker::onGLContextDestroyed() { void GpuMemoryTracker::onGpuContextDestroyed() { gGpuThread = 0; if (CC_UNLIKELY(gObjectSet.size() > 0)) { std::stringstream os; Loading
libs/hwui/GpuMemoryTracker.h +2 −2 Original line number Diff line number Diff line Loading @@ -43,8 +43,8 @@ public: GpuObjectType objectType() { return mType; } int objectSize() { return mSize; } static void onGLContextCreated(); static void onGLContextDestroyed(); static void onGpuContextCreated(); static void onGpuContextDestroyed(); static void dump(); static void dump(std::ostream& stream); static int getInstanceCount(GpuObjectType type); Loading