diff options
-rw-r--r-- | cmds/dumpstate/tests/dumpstate_smoke_test.cpp | 4 | ||||
-rw-r--r-- | cmds/installd/tests/Android.bp | 45 | ||||
-rw-r--r-- | libs/binder/ParcelableHolder.cpp | 2 | ||||
-rw-r--r-- | libs/binder/include/binder/ParcelableHolder.h | 3 | ||||
-rw-r--r-- | libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h | 6 | ||||
-rw-r--r-- | libs/gui/SurfaceComposerClient.cpp | 24 | ||||
-rw-r--r-- | libs/renderengine/skia/filters/BlurFilter.cpp | 8 | ||||
-rw-r--r-- | opengl/tools/glgen/src/JniCodeEmitter.java | 37 | ||||
-rw-r--r-- | services/inputflinger/dispatcher/InputDispatcher.cpp | 13 | ||||
-rw-r--r-- | services/surfaceflinger/CompositionEngine/src/Output.cpp | 2 | ||||
-rw-r--r-- | services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp | 1 | ||||
-rw-r--r-- | services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp | 14 | ||||
-rw-r--r-- | services/surfaceflinger/Layer.cpp | 1 |
13 files changed, 122 insertions, 38 deletions
diff --git a/cmds/dumpstate/tests/dumpstate_smoke_test.cpp b/cmds/dumpstate/tests/dumpstate_smoke_test.cpp index bb0e5ad148..2c800c6882 100644 --- a/cmds/dumpstate/tests/dumpstate_smoke_test.cpp +++ b/cmds/dumpstate/tests/dumpstate_smoke_test.cpp @@ -239,10 +239,10 @@ TEST_F(ZippedBugreportGenerationTest, IsGeneratedWithoutErrors) { EXPECT_EQ(access(getZipFilePath().c_str(), F_OK), 0); } -TEST_F(ZippedBugreportGenerationTest, Is3MBMBinSize) { +TEST_F(ZippedBugreportGenerationTest, Is1MBMBinSize) { struct stat st; EXPECT_EQ(stat(getZipFilePath().c_str(), &st), 0); - EXPECT_GE(st.st_size, 3000000 /* 3MB */); + EXPECT_GE(st.st_size, 1000000 /* 1MB */); } TEST_F(ZippedBugreportGenerationTest, TakesBetween30And300Seconds) { diff --git a/cmds/installd/tests/Android.bp b/cmds/installd/tests/Android.bp index bd45005fd1..7c9e3b2e38 100644 --- a/cmds/installd/tests/Android.bp +++ b/cmds/installd/tests/Android.bp @@ -41,6 +41,21 @@ cc_test { "liblogwrap", ], test_config: "installd_cache_test.xml", + + product_variables: { + arc: { + exclude_srcs: [ + "QuotaUtils.cpp", + ], + static_libs: [ + "libarcdiskquota", + "arc_services_aidl", + ], + cflags: [ + "-DUSE_ARC", + ], + }, + }, } cc_test { @@ -66,6 +81,21 @@ cc_test { "liblogwrap", ], test_config: "installd_service_test.xml", + + product_variables: { + arc: { + exclude_srcs: [ + "QuotaUtils.cpp", + ], + static_libs: [ + "libarcdiskquota", + "arc_services_aidl", + ], + cflags: [ + "-DUSE_ARC", + ], + }, + }, } cc_test { @@ -93,6 +123,21 @@ cc_test { "libz", ], test_config: "installd_dexopt_test.xml", + + product_variables: { + arc: { + exclude_srcs: [ + "QuotaUtils.cpp", + ], + static_libs: [ + "libarcdiskquota", + "arc_services_aidl", + ], + cflags: [ + "-DUSE_ARC", + ], + }, + }, } cc_test { diff --git a/libs/binder/ParcelableHolder.cpp b/libs/binder/ParcelableHolder.cpp index e9df27976c..b2b86716d5 100644 --- a/libs/binder/ParcelableHolder.cpp +++ b/libs/binder/ParcelableHolder.cpp @@ -27,7 +27,6 @@ namespace android { namespace os { status_t ParcelableHolder::writeToParcel(Parcel* p) const { - std::lock_guard<std::mutex> l(mMutex); RETURN_ON_FAILURE(p->writeInt32(static_cast<int32_t>(this->getStability()))); if (this->mParcelPtr) { RETURN_ON_FAILURE(p->writeInt32(this->mParcelPtr->dataSize())); @@ -53,7 +52,6 @@ status_t ParcelableHolder::writeToParcel(Parcel* p) const { } status_t ParcelableHolder::readFromParcel(const Parcel* p) { - std::lock_guard<std::mutex> l(mMutex); this->mStability = static_cast<Stability>(p->readInt32()); this->mParcelable = nullptr; this->mParcelableName = std::nullopt; diff --git a/libs/binder/include/binder/ParcelableHolder.h b/libs/binder/include/binder/ParcelableHolder.h index 5da2515006..4ea3dd3399 100644 --- a/libs/binder/include/binder/ParcelableHolder.h +++ b/libs/binder/include/binder/ParcelableHolder.h @@ -59,7 +59,6 @@ public: template <typename T> bool setParcelable(std::shared_ptr<T> p) { - std::lock_guard<std::mutex> l(mMutex); static_assert(std::is_base_of<Parcelable, T>::value, "T must be derived from Parcelable"); if (p && this->getStability() > p->getStability()) { return false; @@ -73,7 +72,6 @@ public: template <typename T> std::shared_ptr<T> getParcelable() const { static_assert(std::is_base_of<Parcelable, T>::value, "T must be derived from Parcelable"); - std::lock_guard<std::mutex> l(mMutex); const std::string& parcelableDesc = T::getParcelableDescriptor(); if (!this->mParcelPtr) { if (!this->mParcelable || !this->mParcelableName) { @@ -135,7 +133,6 @@ private: mutable std::optional<std::string> mParcelableName; mutable std::unique_ptr<Parcel> mParcelPtr; Stability mStability; - mutable std::mutex mMutex; }; } // namespace os } // namespace android diff --git a/libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h b/libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h index 5f2f3820a4..dfcf4dc26f 100644 --- a/libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h +++ b/libs/binder/ndk/include_cpp/android/binder_parcelable_utils.h @@ -50,7 +50,6 @@ class AParcelableHolder { virtual ~AParcelableHolder() = default; binder_status_t writeToParcel(AParcel* parcel) const { - std::lock_guard<std::mutex> l(mMutex); RETURN_ON_FAILURE(AParcel_writeInt32(parcel, static_cast<int32_t>(this->mStability))); RETURN_ON_FAILURE(AParcel_writeInt32(parcel, AParcel_getDataSize(this->mParcel.get()))); RETURN_ON_FAILURE(AParcel_appendFrom(this->mParcel.get(), parcel, 0, @@ -59,8 +58,6 @@ class AParcelableHolder { } binder_status_t readFromParcel(const AParcel* parcel) { - std::lock_guard<std::mutex> l(mMutex); - AParcel_reset(mParcel.get()); RETURN_ON_FAILURE(AParcel_readInt32(parcel, &this->mStability)); @@ -86,7 +83,6 @@ class AParcelableHolder { template <typename T> bool setParcelable(T* p) { - std::lock_guard<std::mutex> l(mMutex); if (p && this->mStability > T::_aidl_stability) { return false; } @@ -98,7 +94,6 @@ class AParcelableHolder { template <typename T> std::unique_ptr<T> getParcelable() const { - std::lock_guard<std::mutex> l(mMutex); const std::string parcelableDesc(T::descriptor); AParcel_setDataPosition(mParcel.get(), 0); if (AParcel_getDataSize(mParcel.get()) == 0) { @@ -119,7 +114,6 @@ class AParcelableHolder { private: mutable ndk::ScopedAParcel mParcel; - mutable std::mutex mMutex; parcelable_stability_t mStability; }; diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 791750fd37..60966e1915 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -695,8 +695,6 @@ status_t SurfaceComposerClient::Transaction::apply(bool synchronous) { } } - mListenerCallbacks.clear(); - cacheBuffers(); Vector<ComposerState> composerStates; @@ -709,10 +707,7 @@ status_t SurfaceComposerClient::Transaction::apply(bool synchronous) { composerStates.add(kv.second); } - mComposerStates.clear(); - - displayStates = mDisplayStates; - mDisplayStates.clear(); + displayStates = std::move(mDisplayStates); if (mForceSynchronous) { flags |= ISurfaceComposer::eSynchronous; @@ -733,21 +728,16 @@ status_t SurfaceComposerClient::Transaction::apply(bool synchronous) { flags |= ISurfaceComposer::eExplicitEarlyWakeupEnd; } - mForceSynchronous = false; - mAnimation = false; - mEarlyWakeup = false; - mExplicitEarlyWakeupStart = false; - mExplicitEarlyWakeupEnd = false; - - uint64_t transactionId = mId; - mId = generateId(); - sp<IBinder> applyToken = IInterface::asBinder(TransactionCompletedListener::getIInstance()); sf->setTransactionState(mFrameTimelineVsyncId, composerStates, displayStates, flags, applyToken, mInputWindowCommands, mDesiredPresentTime, {} /*uncacheBuffer - only set in doUncacheBufferTransaction*/, - hasListenerCallbacks, listenerCallbacks, transactionId); - mInputWindowCommands.clear(); + hasListenerCallbacks, listenerCallbacks, mId); + mId = generateId(); + + // Clear the current states and flags + clear(); + mStatus = NO_ERROR; return NO_ERROR; } diff --git a/libs/renderengine/skia/filters/BlurFilter.cpp b/libs/renderengine/skia/filters/BlurFilter.cpp index eb791a79a2..8704b3ad68 100644 --- a/libs/renderengine/skia/filters/BlurFilter.cpp +++ b/libs/renderengine/skia/filters/BlurFilter.cpp @@ -72,8 +72,10 @@ void BlurFilter::draw(SkCanvas* canvas, sk_sp<SkSurface> input, const uint32_t b const float stepY = radiusByPasses; // start by drawing and downscaling and doing the first blur pass + SkFilterOptions linear = {SkSamplingMode::kLinear, SkMipmapMode::kNone}; SkRuntimeShaderBuilder blurBuilder(mBlurEffect); - blurBuilder.child("input") = input->makeImageSnapshot()->makeShader(); + blurBuilder.child("input") = + input->makeImageSnapshot()->makeShader(SkTileMode::kClamp, SkTileMode::kClamp, linear); blurBuilder.uniform("in_inverseScale") = kInverseInputScale; blurBuilder.uniform("in_blurOffset") = SkV2{stepX * kInverseInputScale, stepY * kInverseInputScale}; @@ -97,7 +99,9 @@ void BlurFilter::draw(SkCanvas* canvas, sk_sp<SkSurface> input, const uint32_t b for (auto i = 1; i < numberOfPasses; i++) { const float stepScale = (float)i * kInputScale; - blurBuilder.child("input") = readSurface->makeImageSnapshot()->makeShader(); + blurBuilder.child("input") = + readSurface->makeImageSnapshot()->makeShader(SkTileMode::kClamp, + SkTileMode::kClamp, linear); blurBuilder.uniform("in_inverseScale") = 1.0f; blurBuilder.uniform("in_blurOffset") = SkV2{stepX * stepScale, stepY * stepScale}; diff --git a/opengl/tools/glgen/src/JniCodeEmitter.java b/opengl/tools/glgen/src/JniCodeEmitter.java index 9c80212011..59ef3c81c2 100644 --- a/opengl/tools/glgen/src/JniCodeEmitter.java +++ b/opengl/tools/glgen/src/JniCodeEmitter.java @@ -15,6 +15,7 @@ */ import java.io.PrintStream; +import java.util.Arrays; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; @@ -201,6 +202,33 @@ public class JniCodeEmitter { out.println(iii + ");"); } + // Function to automatically generate properly formatted function calls that + // comply with clang format rules + public static String formatFunctionCall(String indent, String functionCall) { + final int MAXLEN = 100; + String tokens[] = functionCall.split("\\(|\\)", 2); + String params[] = tokens[1].split(",\\s*"); + String formatted = indent + tokens[0] + "("; + char[] chars = new char[indent.length() + tokens[0].length() + 1]; + Arrays.fill(chars, ' '); + String multiIndent = new String(chars); + ArrayList<String> lines = new ArrayList<String>(); + for(int i = 0; i < params.length; i++) { + String terminator = ((i == params.length - 1) ? "" : ","); + if(indent.length() + formatted.length() + params[i].length() > MAXLEN) { + lines.add(formatted); + if (!indent.equals(multiIndent)) { + indent = multiIndent; + } + formatted = indent + params[i] + terminator; + } else { + formatted += (i == 0 ? "" : " ") + params[i] + terminator; + } + } + lines.add(formatted); + return String.join("\n", lines); + } + void printIfcheckPostamble(PrintStream out, boolean isBuffer, boolean emitExceptionCheck, String iii) { printIfcheckPostamble(out, isBuffer, emitExceptionCheck, @@ -1538,14 +1566,19 @@ public class JniCodeEmitter { "_exception ? JNI_ABORT : 0" : "0")) + ");"); } else { - out.println(indent + indent + + String bufferOffset = numBufferArgs <= 1 ? "_bufferOffset" : + "_" + cfunc.getArgName(cIndex) + "BufferOffset"; + String typeCast = "(char *)" + cfunc.getArgName(cIndex); + String withOffset = "(void *)(" + typeCast + " - " + bufferOffset + ")"; + String releasePointerCall = ( "releasePointer(_env, " + array + ", " + - cfunc.getArgName(cIndex) + + withOffset + ", " + (cfunc.getArgType(cIndex).isConst() ? "JNI_FALSE" : (emitExceptionCheck ? "_exception ? JNI_FALSE : JNI_TRUE" : "JNI_TRUE")) + ");"); + out.println(formatFunctionCall(indent + indent, releasePointerCall)); } out.println(indent + "}"); } diff --git a/services/inputflinger/dispatcher/InputDispatcher.cpp b/services/inputflinger/dispatcher/InputDispatcher.cpp index 8052084925..d175484905 100644 --- a/services/inputflinger/dispatcher/InputDispatcher.cpp +++ b/services/inputflinger/dispatcher/InputDispatcher.cpp @@ -561,9 +561,7 @@ nsecs_t InputDispatcher::processAnrsLocked() { mNoFocusedWindowTimeoutTime = std::nullopt; return LONG_LONG_MIN; } else { - // Keep waiting - const nsecs_t millisRemaining = ns2ms(*mNoFocusedWindowTimeoutTime - currentTime); - ALOGW("Still no focused window. Will drop the event in %" PRId64 "ms", millisRemaining); + // Keep waiting. We will drop the event when mNoFocusedWindowTimeoutTime comes. nextAnrCheck = *mNoFocusedWindowTimeoutTime; } } @@ -2194,6 +2192,15 @@ static bool canBeObscuredBy(const sp<InputWindowHandle>& windowHandle, auto otherInfo = otherHandle->getInfo(); if (!otherInfo->visible) { return false; + } else if (otherInfo->alpha == 0 && + otherInfo->flags.test(InputWindowInfo::Flag::NOT_TOUCHABLE)) { + // Those act as if they were invisible, so we don't need to flag them. + // We do want to potentially flag touchable windows even if they have 0 + // opacity, since they can consume touches and alter the effects of the + // user interaction (eg. apps that rely on + // FLAG_WINDOW_IS_PARTIALLY_OBSCURED should still be told about those + // windows), hence we also check for FLAG_NOT_TOUCHABLE. + return false; } else if (info->ownerUid == otherInfo->ownerUid) { // If ownerUid is the same we don't generate occlusion events as there // is no security boundary within an uid. diff --git a/services/surfaceflinger/CompositionEngine/src/Output.cpp b/services/surfaceflinger/CompositionEngine/src/Output.cpp index 04dceae28b..b42010961b 100644 --- a/services/surfaceflinger/CompositionEngine/src/Output.cpp +++ b/services/surfaceflinger/CompositionEngine/src/Output.cpp @@ -897,6 +897,8 @@ std::optional<base::unique_fd> Output::composeSurfaces( needsProtected == renderEngine.isProtected()) { mRenderSurface->setProtected(needsProtected); } + } else if (!outputState.isSecure && renderEngine.isProtected()) { + renderEngine.useProtectedContext(false); } base::unique_fd fd; diff --git a/services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp b/services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp index 6d01bf195b..1befbf8306 100644 --- a/services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp @@ -160,6 +160,7 @@ struct DisplayTestCommon : public testing::Test { EXPECT_CALL(mCompositionEngine, getHwComposer()).WillRepeatedly(ReturnRef(mHwComposer)); EXPECT_CALL(mCompositionEngine, getRenderEngine()).WillRepeatedly(ReturnRef(mRenderEngine)); EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); } DisplayCreationArgs getDisplayCreationArgsForPhysicalHWCDisplay() { diff --git a/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp b/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp index 1e10365233..6be0cc2544 100644 --- a/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp @@ -2950,6 +2950,7 @@ TEST_F(OutputComposeSurfacesTest, doesNothingButSignalNoExpensiveRenderingIfNoCl mOutput.mState.usesClientComposition = false; EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); EXPECT_CALL(mOutput, setExpensiveRenderingExpected(false)); @@ -2962,6 +2963,7 @@ TEST_F(OutputComposeSurfacesTest, mOutput.mState.flipClientTarget = true; EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); EXPECT_CALL(*mRenderSurface, dequeueBuffer(_)).WillOnce(Return(mOutputBuffer)); EXPECT_CALL(mOutput, setExpensiveRenderingExpected(false)); @@ -2971,6 +2973,7 @@ TEST_F(OutputComposeSurfacesTest, TEST_F(OutputComposeSurfacesTest, doesMinimalWorkIfDequeueBufferFailsForClientComposition) { EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); EXPECT_CALL(*mRenderSurface, dequeueBuffer(_)).WillOnce(Return(nullptr)); @@ -2983,6 +2986,7 @@ TEST_F(OutputComposeSurfacesTest, mOutput.mState.flipClientTarget = true; EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); EXPECT_CALL(*mRenderSurface, dequeueBuffer(_)).WillOnce(Return(nullptr)); @@ -2993,6 +2997,7 @@ TEST_F(OutputComposeSurfacesTest, handlesZeroCompositionRequests) { EXPECT_CALL(mOutput, getSkipColorTransform()).WillRepeatedly(Return(false)); EXPECT_CALL(*mDisplayColorProfile, hasWideColorGamut()).WillRepeatedly(Return(true)); EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); EXPECT_CALL(mOutput, generateClientCompositionRequests(_, _, kDefaultOutputDataspace)) .WillRepeatedly(Return(std::vector<LayerFE::LayerSettings>{})); EXPECT_CALL(mOutput, appendRegionFlashRequests(RegionEq(kDebugRegion), _)) @@ -3015,6 +3020,7 @@ TEST_F(OutputComposeSurfacesTest, buildsAndRendersRequestList) { EXPECT_CALL(mOutput, getSkipColorTransform()).WillRepeatedly(Return(false)); EXPECT_CALL(*mDisplayColorProfile, hasWideColorGamut()).WillRepeatedly(Return(true)); EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); EXPECT_CALL(mOutput, generateClientCompositionRequests(_, _, kDefaultOutputDataspace)) .WillRepeatedly(Return(std::vector<LayerFE::LayerSettings>{r1})); EXPECT_CALL(mOutput, appendRegionFlashRequests(RegionEq(kDebugRegion), _)) @@ -3042,6 +3048,7 @@ TEST_F(OutputComposeSurfacesTest, renderDuplicateClientCompositionRequestsWithou EXPECT_CALL(mOutput, getSkipColorTransform()).WillRepeatedly(Return(false)); EXPECT_CALL(*mDisplayColorProfile, hasWideColorGamut()).WillRepeatedly(Return(true)); EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); EXPECT_CALL(mOutput, generateClientCompositionRequests(_, _, kDefaultOutputDataspace)) .WillRepeatedly(Return(std::vector<LayerFE::LayerSettings>{r1, r2})); EXPECT_CALL(mOutput, appendRegionFlashRequests(RegionEq(kDebugRegion), _)) @@ -3070,6 +3077,7 @@ TEST_F(OutputComposeSurfacesTest, skipDuplicateClientCompositionRequests) { EXPECT_CALL(mOutput, getSkipColorTransform()).WillRepeatedly(Return(false)); EXPECT_CALL(*mDisplayColorProfile, hasWideColorGamut()).WillRepeatedly(Return(true)); EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); EXPECT_CALL(mOutput, generateClientCompositionRequests(_, _, kDefaultOutputDataspace)) .WillRepeatedly(Return(std::vector<LayerFE::LayerSettings>{r1, r2})); EXPECT_CALL(mOutput, appendRegionFlashRequests(RegionEq(kDebugRegion), _)) @@ -3098,6 +3106,7 @@ TEST_F(OutputComposeSurfacesTest, clientCompositionIfBufferChanges) { EXPECT_CALL(mOutput, getSkipColorTransform()).WillRepeatedly(Return(false)); EXPECT_CALL(*mDisplayColorProfile, hasWideColorGamut()).WillRepeatedly(Return(true)); EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); EXPECT_CALL(mOutput, generateClientCompositionRequests(_, _, kDefaultOutputDataspace)) .WillRepeatedly(Return(std::vector<LayerFE::LayerSettings>{r1, r2})); EXPECT_CALL(mOutput, appendRegionFlashRequests(RegionEq(kDebugRegion), _)) @@ -3129,6 +3138,7 @@ TEST_F(OutputComposeSurfacesTest, clientCompositionIfRequestChanges) { EXPECT_CALL(mOutput, getSkipColorTransform()).WillRepeatedly(Return(false)); EXPECT_CALL(*mDisplayColorProfile, hasWideColorGamut()).WillRepeatedly(Return(true)); EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); EXPECT_CALL(mOutput, generateClientCompositionRequests(_, _, kDefaultOutputDataspace)) .WillOnce(Return(std::vector<LayerFE::LayerSettings>{r1, r2})) .WillOnce(Return(std::vector<LayerFE::LayerSettings>{r1, r3})); @@ -3151,6 +3161,7 @@ TEST_F(OutputComposeSurfacesTest, clientCompositionIfRequestChanges) { struct OutputComposeSurfacesTest_UsesExpectedDisplaySettings : public OutputComposeSurfacesTest { OutputComposeSurfacesTest_UsesExpectedDisplaySettings() { EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); EXPECT_CALL(mOutput, generateClientCompositionRequests(_, _, kDefaultOutputDataspace)) .WillRepeatedly(Return(std::vector<LayerFE::LayerSettings>{})); EXPECT_CALL(mOutput, appendRegionFlashRequests(RegionEq(kDebugRegion), _)) @@ -3298,6 +3309,8 @@ TEST_F(OutputComposeSurfacesTest_HandlesProtectedContent, ifDisplayIsNotSecure) mOutput.mState.isSecure = false; mLayer2.mLayerFEState.hasProtectedContent = true; EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(true)); + EXPECT_CALL(mRenderEngine, isProtected).WillOnce(Return(true)); + EXPECT_CALL(mRenderEngine, useProtectedContext(false)).WillOnce(Return(true)); mOutput.composeSurfaces(kDebugRegion, kDefaultRefreshArgs); } @@ -3390,6 +3403,7 @@ struct OutputComposeSurfacesTest_SetsExpensiveRendering : public OutputComposeSu EXPECT_CALL(mOutput, getSkipColorTransform()).WillRepeatedly(Return(false)); EXPECT_CALL(*mDisplayColorProfile, hasWideColorGamut()).WillRepeatedly(Return(true)); EXPECT_CALL(mRenderEngine, supportsProtectedContent()).WillRepeatedly(Return(false)); + EXPECT_CALL(mRenderEngine, isProtected()).WillRepeatedly(Return(false)); EXPECT_CALL(mOutput, appendRegionFlashRequests(RegionEq(kDebugRegion), _)) .WillRepeatedly(Return()); EXPECT_CALL(*mRenderSurface, dequeueBuffer(_)).WillRepeatedly(Return(mOutputBuffer)); diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 629bee832e..50707dfe16 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -1455,7 +1455,6 @@ bool Layer::setFrameRate(FrameRate frameRate) { } void Layer::setFrameTimelineVsyncForTransaction(int64_t frameTimelineVsyncId, nsecs_t postTime) { - mCurrentState.sequence++; mCurrentState.frameTimelineVsyncId = frameTimelineVsyncId; mCurrentState.postTime = postTime; mCurrentState.modified = true; |