summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2023-11-21 06:40:32 -0800
committerLinux Build Service Account <lnxbuild@localhost>2023-11-21 06:40:32 -0800
commit87f1200913a98b19b1dd302798cfc546de87a050 (patch)
treebb3c9fc174d66f995f6218dfc7e1fd6d72887b1e
parent9dbd28b89daf961f959d36d29d631bfc04788f9a (diff)
parenta329f0076f0d757dde617713d1582f5aa08e7f65 (diff)
Merge a329f0076f0d757dde617713d1582f5aa08e7f65 on remote branch
Change-Id: I38b0c35b3e9dbe8dbc39c7188335384c39f12b8f
-rw-r--r--libs/renderengine/skia/SkiaRenderEngine.cpp13
-rw-r--r--services/sensorservice/SensorService.cpp7
-rw-r--r--services/surfaceflinger/QtiExtension/QtiSurfaceFlingerExtension.cpp5
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp13
-rw-r--r--services/surfaceflinger/SurfaceFlinger.h5
5 files changed, 28 insertions, 15 deletions
diff --git a/libs/renderengine/skia/SkiaRenderEngine.cpp b/libs/renderengine/skia/SkiaRenderEngine.cpp
index 9e9df5216f..edf734271a 100644
--- a/libs/renderengine/skia/SkiaRenderEngine.cpp
+++ b/libs/renderengine/skia/SkiaRenderEngine.cpp
@@ -397,12 +397,10 @@ void SkiaRenderEngine::mapExternalTextureBuffer(const sp<GraphicBuffer>& buffer,
}
// We don't attempt to map a buffer if the buffer contains protected content. In GL this is
// important because GPU resources for protected buffers are much more limited. (In Vk we
- // simply match the existing behavior for protected buffers.) In Vk, we never cache any
- // buffers while in a protected context, since Vk cannot share across contexts, and protected
- // is less common.
+ // simply match the existing behavior for protected buffers.) We also never cache any
+ // buffers while in a protected context.
const bool isProtectedBuffer = buffer->getUsage() & GRALLOC_USAGE_PROTECTED;
- if (isProtectedBuffer ||
- (mRenderEngineType == RenderEngineType::SKIA_VK_THREADED && isProtected())) {
+ if (isProtectedBuffer || isProtected()) {
return;
}
ATRACE_CALL();
@@ -467,9 +465,8 @@ void SkiaRenderEngine::unmapExternalTextureBuffer(sp<GraphicBuffer>&& buffer) {
std::shared_ptr<AutoBackendTexture::LocalRef> SkiaRenderEngine::getOrCreateBackendTexture(
const sp<GraphicBuffer>& buffer, bool isOutputBuffer) {
- // Do not lookup the buffer in the cache for protected contexts with the SkiaVk back-end
- if (mRenderEngineType == RenderEngineType::SKIA_GL_THREADED ||
- (mRenderEngineType == RenderEngineType::SKIA_VK_THREADED && !isProtected())) {
+ // Do not lookup the buffer in the cache for protected contexts
+ if (!isProtected()) {
if (const auto& it = mTextureCache.find(buffer->getId()); it != mTextureCache.end()) {
return it->second;
}
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index 90d75414d6..398d60242b 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -1055,12 +1055,7 @@ bool SensorService::threadLoop() {
if (count < 0) {
if(count == DEAD_OBJECT && device.isReconnecting()) {
device.reconnect();
- // There are no "real" events at this point, but do not skip the rest of the loop
- // if there are pending runtime events.
- Mutex::Autolock _l(&mLock);
- if (mRuntimeSensorEventQueue.empty()) {
- continue;
- }
+ continue;
} else {
ALOGE("sensor poll failed (%s)", strerror(-count));
break;
diff --git a/services/surfaceflinger/QtiExtension/QtiSurfaceFlingerExtension.cpp b/services/surfaceflinger/QtiExtension/QtiSurfaceFlingerExtension.cpp
index 52b5c51eb7..542b7c4b01 100644
--- a/services/surfaceflinger/QtiExtension/QtiSurfaceFlingerExtension.cpp
+++ b/services/surfaceflinger/QtiExtension/QtiSurfaceFlingerExtension.cpp
@@ -1119,7 +1119,10 @@ void QtiSurfaceFlingerExtension::qtiCheckVirtualDisplayHint(const Vector<Display
bool createVirtualDisplay = false;
int width = 0, height = 0, format = 0;
{
- Mutex::Autolock lock(mQtiFlinger->mStateLock);
+ if (!mQtiFlinger->mRequestDisplayModeFlag ||
+ (mQtiFlinger->mFlagThread != std::this_thread::get_id())) {
+ Mutex::Autolock lock(mQtiFlinger->mStateLock);
+ }
for (const DisplayState& s : displays) {
const ssize_t index = mQtiFlinger->mCurrentState.displays.indexOfKey(s.token);
if (index < 0) continue;
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 8e8bc8a0f1..9ef07f0e5a 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -3688,6 +3688,9 @@ void SurfaceFlinger::processDisplayChanged(const wp<IBinder>& displayToken,
if (display->isVirtual()) {
releaseVirtualDisplay(display->getVirtualId());
}
+ /* QTI_BEGIN */
+ mQtiSFExtnIntf->qtiDestroySmomoInstance(display);
+ /* QTI_END */
}
mDisplays.erase(displayToken);
@@ -4072,6 +4075,12 @@ void SurfaceFlinger::requestDisplayModes(std::vector<display::DisplayModeRequest
// Scheduler::chooseRefreshRateForContent
ConditionalLock lock(mStateLock, std::this_thread::get_id() != mMainThreadId);
+ /* QTI_BEGIN */
+ // Setting mRequestDisplayModeFlag as true and storing thread Id to avoid acquiring the same
+ // mutex again in a single thread
+ mRequestDisplayModeFlag = true;
+ mFlagThread = std::this_thread::get_id();
+ /* QTI_END */
for (auto& request : modeRequests) {
const auto& modePtr = request.mode.modePtr;
@@ -4104,6 +4113,10 @@ void SurfaceFlinger::requestDisplayModes(std::vector<display::DisplayModeRequest
to_string(display->getId()).c_str());
}
}
+ /* QTI_BEGIN */
+ mRequestDisplayModeFlag = false;
+ mFlagThread = mMainThreadId;
+ /* QTI_END */
}
void SurfaceFlinger::triggerOnFrameRateOverridesChanged() {
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 47176ca75d..c50f4b8c80 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -353,6 +353,11 @@ public:
return sActiveDisplayRotationFlags;
}
+ /* QTI_BEGIN */
+ bool mRequestDisplayModeFlag = false;
+ std::thread::id mFlagThread = std::this_thread::get_id();
+ /* QTI_END */
+
protected:
// We're reference counted, never destroy SurfaceFlinger directly
virtual ~SurfaceFlinger();