summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeigo Nonaka <nona@google.com>2023-08-31 16:37:11 +0900
committerSeigo Nonaka <nona@google.com>2023-09-27 11:12:25 +0900
commit72536763a41a85fb7b2dd589397b823de92867d9 (patch)
tree6b93b58254457ad969d65a597ae45bda5efb4145
parentf50b62934915cf20e0b8fb157839376f4750f0de (diff)
downloadminikin-72536763a41a85fb7b2dd589397b823de92867d9.tar.gz
Put phrase->strict fallback behind the flag
Bug: 281970875 Test: N/A Change-Id: I99230795a0f7db88316137c6906d85d1d366a00d
-rw-r--r--libs/minikin/Android.bp2
-rw-r--r--libs/minikin/FeatureFlags.h42
-rw-r--r--libs/minikin/GreedyLineBreaker.cpp15
-rw-r--r--libs/minikin/OptimalLineBreaker.cpp4
-rw-r--r--tests/perftests/Android.bp1
-rw-r--r--tests/stresstest/Android.bp1
-rw-r--r--tests/unittest/Android.bp1
7 files changed, 59 insertions, 7 deletions
diff --git a/libs/minikin/Android.bp b/libs/minikin/Android.bp
index 4cb76a2..4bce209 100644
--- a/libs/minikin/Android.bp
+++ b/libs/minikin/Android.bp
@@ -89,10 +89,12 @@ cc_library {
android: {
shared_libs: [
"libicu",
+ "aconfig_text_flags_c_lib",
],
export_shared_lib_headers: [
"libicu",
],
+ cppflags: [ "-DUSE_FEATURE_FLAGS" ],
},
host: {
shared_libs: [
diff --git a/libs/minikin/FeatureFlags.h b/libs/minikin/FeatureFlags.h
new file mode 100644
index 0000000..f5c1122
--- /dev/null
+++ b/libs/minikin/FeatureFlags.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MINIKIN_FEATURE_FLAGS_H
+#define MINIKIN_FEATURE_FLAGS_H
+
+#ifdef USE_FEATURE_FLAGS
+#include <com_android_text_flags.h>
+#endif // USE_FEATURE_FLAGS
+
+namespace features {
+
+#ifdef USE_FEATURE_FLAGS
+
+inline bool phrase_strict_fallback() {
+ return com_android_text_flags_phrase_strict_fallback();
+}
+
+#else
+
+inline bool phrase_strict_fallback() {
+ return true;
+}
+
+#endif // USE_FEATURE_FLAGS
+
+} // namespace features
+
+#endif // FEATURE_FLAGS
diff --git a/libs/minikin/GreedyLineBreaker.cpp b/libs/minikin/GreedyLineBreaker.cpp
index 5e11978..66e3dd9 100644
--- a/libs/minikin/GreedyLineBreaker.cpp
+++ b/libs/minikin/GreedyLineBreaker.cpp
@@ -16,17 +16,17 @@
#define LOG_TAG "GreedyLineBreak"
-#include "minikin/Characters.h"
-#include "minikin/LineBreaker.h"
-#include "minikin/MeasuredText.h"
-#include "minikin/Range.h"
-#include "minikin/U16StringPiece.h"
-
+#include "FeatureFlags.h"
#include "HyphenatorMap.h"
#include "LineBreakerUtil.h"
#include "Locale.h"
#include "LocaleListCache.h"
#include "WordBreaker.h"
+#include "minikin/Characters.h"
+#include "minikin/LineBreaker.h"
+#include "minikin/MeasuredText.h"
+#include "minikin/Range.h"
+#include "minikin/U16StringPiece.h"
namespace minikin {
@@ -293,6 +293,9 @@ bool GreedyLineBreaker::doLineBreakWithGraphemeBounds(const Range& range) {
}
bool GreedyLineBreaker::doLineBreakWithFallback(const Range& range) {
+ if (!features::phrase_strict_fallback()) {
+ return false;
+ }
Run* targetRun = nullptr;
for (const auto& run : mMeasuredText.runs) {
if (run->getRange().contains(range)) {
diff --git a/libs/minikin/OptimalLineBreaker.cpp b/libs/minikin/OptimalLineBreaker.cpp
index e170313..d3db0ec 100644
--- a/libs/minikin/OptimalLineBreaker.cpp
+++ b/libs/minikin/OptimalLineBreaker.cpp
@@ -19,6 +19,7 @@
#include <algorithm>
#include <limits>
+#include "FeatureFlags.h"
#include "HyphenatorMap.h"
#include "LayoutUtils.h"
#include "LineBreakerUtil.h"
@@ -167,7 +168,8 @@ std::vector<DesperateBreak> populateDesperatePoints(const U16StringPiece& textBu
const Range& range, const Run& run) {
std::vector<DesperateBreak> out;
- if (run.lineBreakWordStyle() == LineBreakWordStyle::None) {
+ if (!features::phrase_strict_fallback() ||
+ run.lineBreakWordStyle() == LineBreakWordStyle::None) {
ParaWidth width = measured.widths[range.getStart()];
for (uint32_t i = range.getStart() + 1; i < range.getEnd(); ++i) {
const float w = measured.widths[i];
diff --git a/tests/perftests/Android.bp b/tests/perftests/Android.bp
index cf57667..362ba10 100644
--- a/tests/perftests/Android.bp
+++ b/tests/perftests/Android.bp
@@ -37,6 +37,7 @@ cc_benchmark {
"libminikin-tests-util",
"libminikin",
"libxml2",
+ "aconfig_text_flags_c_lib",
],
shared_libs: [
diff --git a/tests/stresstest/Android.bp b/tests/stresstest/Android.bp
index e08a984..7e0379c 100644
--- a/tests/stresstest/Android.bp
+++ b/tests/stresstest/Android.bp
@@ -28,6 +28,7 @@ cc_test {
"libminikin-tests-util",
"libminikin",
"libxml2",
+ "aconfig_text_flags_c_lib",
],
// Shared libraries which are dependencies of minikin; these are not automatically
diff --git a/tests/unittest/Android.bp b/tests/unittest/Android.bp
index 27d8cc6..0d6634c 100644
--- a/tests/unittest/Android.bp
+++ b/tests/unittest/Android.bp
@@ -41,6 +41,7 @@ cc_test {
"libutils",
"libz",
"libcutils",
+ "aconfig_text_flags_c_lib",
],
srcs: [