diff options
author | 2023-10-31 01:55:51 +0000 | |
---|---|---|
committer | 2023-11-07 22:49:21 +0000 | |
commit | 335677493d7cf19bf8bcbe9d61b902562c2c6b0a (patch) | |
tree | a79df1d9f43106572c833afe8c8347d6cc5ed733 | |
parent | 417accdcaac72dffce9039c971cb867fcf279653 (diff) |
fix(force invert): don't let devs opt-out of force dark when force invert is on
Bug: 282821643
Test: manual??
Change-Id: I0a3907ede2ad5d0c895ae70d3d1ec47b0902e3b4
-rw-r--r-- | libs/hwui/RenderNode.cpp | 14 | ||||
-rw-r--r-- | libs/hwui/RenderNode.h | 1 | ||||
-rw-r--r-- | libs/hwui/TreeInfo.cpp | 1 | ||||
-rw-r--r-- | libs/hwui/TreeInfo.h | 2 |
4 files changed, 14 insertions, 4 deletions
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index d28bb499c907..3e131bc44d39 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -40,6 +40,7 @@ #ifdef __ANDROID__ #include "include/gpu/ganesh/SkImageGanesh.h" #endif +#include "utils/ForceDark.h" #include "utils/MathUtils.h" #include "utils/StringUtils.h" @@ -403,16 +404,21 @@ void RenderNode::syncDisplayList(TreeObserver& observer, TreeInfo* info) { deleteDisplayList(observer, info); mDisplayList = std::move(mStagingDisplayList); if (mDisplayList) { - WebViewSyncData syncData { - .applyForceDark = info && !info->disableForceDark - }; + WebViewSyncData syncData{.applyForceDark = shouldEnableForceDark(info)}; mDisplayList.syncContents(syncData); handleForceDark(info); } } +inline bool RenderNode::shouldEnableForceDark(TreeInfo* info) { + return CC_UNLIKELY( + info && + (!info->disableForceDark || + info->forceDarkType == android::uirenderer::ForceDarkType::FORCE_INVERT_COLOR_DARK)); +} + void RenderNode::handleForceDark(android::uirenderer::TreeInfo *info) { - if (CC_LIKELY(!info || info->disableForceDark)) { + if (!shouldEnableForceDark(info)) { return; } auto usage = usageHint(); diff --git a/libs/hwui/RenderNode.h b/libs/hwui/RenderNode.h index c959db37474b..1f3834be5bef 100644 --- a/libs/hwui/RenderNode.h +++ b/libs/hwui/RenderNode.h @@ -233,6 +233,7 @@ private: void syncProperties(); void syncDisplayList(TreeObserver& observer, TreeInfo* info); void handleForceDark(TreeInfo* info); + bool shouldEnableForceDark(TreeInfo* info); void prepareTreeImpl(TreeObserver& observer, TreeInfo& info, bool functorsNeedLayer); void pushStagingPropertiesChanges(TreeInfo& info); diff --git a/libs/hwui/TreeInfo.cpp b/libs/hwui/TreeInfo.cpp index a3b02d825e02..717157c09a53 100644 --- a/libs/hwui/TreeInfo.cpp +++ b/libs/hwui/TreeInfo.cpp @@ -25,6 +25,7 @@ TreeInfo::TreeInfo(TraversalMode mode, renderthread::CanvasContext& canvasContex , prepareTextures(mode == MODE_FULL) , canvasContext(canvasContext) , disableForceDark(canvasContext.getForceDarkType() == ForceDarkType::NONE ? 1 : 0) + , forceDarkType(canvasContext.getForceDarkType()) , screenSize(canvasContext.getNextFrameSize()) {} } // namespace android::uirenderer diff --git a/libs/hwui/TreeInfo.h b/libs/hwui/TreeInfo.h index ea25f68d7170..88449f3a3572 100644 --- a/libs/hwui/TreeInfo.h +++ b/libs/hwui/TreeInfo.h @@ -24,6 +24,7 @@ #include "Properties.h" #include "SkSize.h" #include "SkippedFrameInfo.h" +#include "utils/ForceDark.h" #include "utils/Macros.h" namespace android { @@ -97,6 +98,7 @@ public: bool updateWindowPositions = false; int disableForceDark; + ForceDarkType forceDarkType = ForceDarkType::NONE; const SkISize screenSize; |