diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2024-02-14 10:11:32 -0800 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2024-02-14 10:11:32 -0800 |
commit | d9a76c23430a511c7da35c2785277146a1753e14 (patch) | |
tree | 7cae4514dfcee875d7240cbd25a49d362830b29e | |
parent | be88ab83e4197c6ffca932ecae7d4718a5779dd9 (diff) | |
parent | eaaaee8d1079eeb0326f8badb959916fac4586b0 (diff) |
Merge eaaaee8d1079eeb0326f8badb959916fac4586b0 on remote branch
Change-Id: I09967f06daa17144b9b4cd663818b71cec77c82e
-rw-r--r-- | libs/binder/MemoryHeapBase.cpp | 4 | ||||
-rw-r--r-- | libs/binder/tests/binderMemoryHeapBaseUnitTest.cpp | 13 | ||||
-rw-r--r-- | services/surfaceflinger/Layer.cpp | 12 | ||||
-rw-r--r-- | services/surfaceflinger/QtiExtension/QtiSurfaceFlingerExtension.cpp | 7 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 12 |
5 files changed, 32 insertions, 16 deletions
diff --git a/libs/binder/MemoryHeapBase.cpp b/libs/binder/MemoryHeapBase.cpp index 8fe1d2bb3d..34e747ef21 100644 --- a/libs/binder/MemoryHeapBase.cpp +++ b/libs/binder/MemoryHeapBase.cpp @@ -73,8 +73,8 @@ MemoryHeapBase::MemoryHeapBase(size_t size, uint32_t flags, char const * name) ALOGV("MemoryHeapBase: Attempting to force MemFD"); fd = memfd_create_region(name ? name : "MemoryHeapBase", size); if (fd < 0 || (mapfd(fd, true, size) != NO_ERROR)) return; - const int SEAL_FLAGS = ((mFlags & READ_ONLY) ? F_SEAL_FUTURE_WRITE : 0) | - ((mFlags & MEMFD_ALLOW_SEALING_FLAG) ? 0 : F_SEAL_SEAL); + const int SEAL_FLAGS = ((mFlags & READ_ONLY) ? F_SEAL_FUTURE_WRITE : 0) | F_SEAL_GROW | + F_SEAL_SHRINK | ((mFlags & MEMFD_ALLOW_SEALING_FLAG) ? 0 : F_SEAL_SEAL); if (SEAL_FLAGS && (fcntl(fd, F_ADD_SEALS, SEAL_FLAGS) == -1)) { ALOGE("MemoryHeapBase: MemFD %s sealing with flags %x failed with error %s", name, SEAL_FLAGS, strerror(errno)); diff --git a/libs/binder/tests/binderMemoryHeapBaseUnitTest.cpp b/libs/binder/tests/binderMemoryHeapBaseUnitTest.cpp index 278dd2bf81..140270f5a1 100644 --- a/libs/binder/tests/binderMemoryHeapBaseUnitTest.cpp +++ b/libs/binder/tests/binderMemoryHeapBaseUnitTest.cpp @@ -37,7 +37,8 @@ TEST(MemoryHeapBase, MemfdSealed) { ASSERT_NE(mHeap.get(), nullptr); int fd = mHeap->getHeapID(); EXPECT_NE(fd, -1); - EXPECT_EQ(fcntl(fd, F_GET_SEALS), F_SEAL_SEAL); + EXPECT_EQ(fcntl(fd, F_GET_SEALS), F_SEAL_GROW | F_SEAL_SHRINK | F_SEAL_SEAL); + EXPECT_EQ(ftruncate(fd, 4096), -1); } TEST(MemoryHeapBase, MemfdUnsealed) { @@ -48,7 +49,8 @@ TEST(MemoryHeapBase, MemfdUnsealed) { ASSERT_NE(mHeap.get(), nullptr); int fd = mHeap->getHeapID(); EXPECT_NE(fd, -1); - EXPECT_EQ(fcntl(fd, F_GET_SEALS), 0); + EXPECT_EQ(fcntl(fd, F_GET_SEALS), F_SEAL_GROW | F_SEAL_SHRINK); + EXPECT_EQ(ftruncate(fd, 4096), -1); } TEST(MemoryHeapBase, MemfdSealedProtected) { @@ -59,7 +61,9 @@ TEST(MemoryHeapBase, MemfdSealedProtected) { ASSERT_NE(mHeap.get(), nullptr); int fd = mHeap->getHeapID(); EXPECT_NE(fd, -1); - EXPECT_EQ(fcntl(fd, F_GET_SEALS), F_SEAL_SEAL | F_SEAL_FUTURE_WRITE); + EXPECT_EQ(fcntl(fd, F_GET_SEALS), + F_SEAL_GROW | F_SEAL_SHRINK | F_SEAL_SEAL | F_SEAL_FUTURE_WRITE); + EXPECT_EQ(ftruncate(fd, 4096), -1); } TEST(MemoryHeapBase, MemfdUnsealedProtected) { @@ -71,7 +75,8 @@ TEST(MemoryHeapBase, MemfdUnsealedProtected) { ASSERT_NE(mHeap.get(), nullptr); int fd = mHeap->getHeapID(); EXPECT_NE(fd, -1); - EXPECT_EQ(fcntl(fd, F_GET_SEALS), F_SEAL_FUTURE_WRITE); + EXPECT_EQ(fcntl(fd, F_GET_SEALS), F_SEAL_GROW | F_SEAL_SHRINK | F_SEAL_FUTURE_WRITE); + EXPECT_EQ(ftruncate(fd, 4096), -1); } #else diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 0dcac494e3..b894396cee 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -16,7 +16,7 @@ /* Changes from Qualcomm Innovation Center are provided under the following license: * - * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved. * SPDX-License-Identifier: BSD-3-Clause-Clear */ @@ -3511,8 +3511,16 @@ void Layer::gatherBufferInfo() { { ATRACE_NAME("getDataspace"); err = mapper.getDataspace(mBufferInfo.mBuffer->getBuffer()->handle, &dataspace); + /* QTI_BEGIN */ + if (dataspace == ui::Dataspace::UNKNOWN) { + ALOGW("%s: Received unknown dataspace from gralloc", __func__); + } + /* QTI_END */ } - if (err != OK || dataspace != mBufferInfo.mDataspace) { + if ((err != OK || dataspace != mBufferInfo.mDataspace) + /* QTI_BEGIN */ + && dataspace != ui::Dataspace::UNKNOWN) { + /* QTI_END */ { ATRACE_NAME("setDataspace"); err = mapper.setDataspace(mBufferInfo.mBuffer->getBuffer()->handle, diff --git a/services/surfaceflinger/QtiExtension/QtiSurfaceFlingerExtension.cpp b/services/surfaceflinger/QtiExtension/QtiSurfaceFlingerExtension.cpp index e53fbea382..d668b22f87 100644 --- a/services/surfaceflinger/QtiExtension/QtiSurfaceFlingerExtension.cpp +++ b/services/surfaceflinger/QtiExtension/QtiSurfaceFlingerExtension.cpp @@ -1124,10 +1124,9 @@ void QtiSurfaceFlingerExtension::qtiCheckVirtualDisplayHint(const Vector<Display bool createVirtualDisplay = false; int width = 0, height = 0, format = 0; { - if (!mQtiFlinger->mRequestDisplayModeFlag || - (mQtiFlinger->mFlagThread != std::this_thread::get_id())) { - Mutex::Autolock lock(mQtiFlinger->mStateLock); - } + bool needLock = (!mQtiFlinger->mRequestDisplayModeFlag || + (mQtiFlinger->mFlagThread != std::this_thread::get_id())); + ConditionalLock lock(mQtiFlinger->mStateLock, needLock == true); 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 efed751f2a..f10e07b4ee 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -4088,8 +4088,10 @@ void SurfaceFlinger::requestDisplayModes(std::vector<display::DisplayModeRequest /* 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(); + if (std::this_thread::get_id() != mMainThreadId) { + mRequestDisplayModeFlag = true; + mFlagThread = std::this_thread::get_id(); + } /* QTI_END */ for (auto& request : modeRequests) { @@ -4124,8 +4126,10 @@ void SurfaceFlinger::requestDisplayModes(std::vector<display::DisplayModeRequest } } /* QTI_BEGIN */ - mRequestDisplayModeFlag = false; - mFlagThread = mMainThreadId; + if (std::this_thread::get_id() != mMainThreadId) { + mRequestDisplayModeFlag = false; + mFlagThread = mMainThreadId; + } /* QTI_END */ } |