diff --git a/libs/minikin/Android.mk b/libs/minikin/Android.mk index 4c945a60c9c8b7085a96bb3dfc123f31e586febd..b2e1dc8293687df5c580bddacd6869405a8b3407 100644 --- a/libs/minikin/Android.mk +++ b/libs/minikin/Android.mk @@ -47,11 +47,18 @@ minikin_shared_libraries := \ libicuuc \ libutils +ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT))) +# Enable race detection on eng and userdebug build. +enable_race_detection := -DENABLE_RACE_DETECTION +else +enable_race_detection := +endif + LOCAL_MODULE := libminikin LOCAL_EXPORT_C_INCLUDE_DIRS := frameworks/minikin/include LOCAL_SRC_FILES := $(minikin_src_files) LOCAL_C_INCLUDES := $(minikin_c_includes) -LOCAL_CPPFLAGS += -Werror -Wall -Wextra +LOCAL_CPPFLAGS += -Werror -Wall -Wextra $(enable_race_detection) LOCAL_SHARED_LIBRARIES := $(minikin_shared_libraries) include $(BUILD_SHARED_LIBRARY) @@ -63,7 +70,7 @@ LOCAL_MODULE_TAGS := optional LOCAL_EXPORT_C_INCLUDE_DIRS := frameworks/minikin/include LOCAL_SRC_FILES := $(minikin_src_files) LOCAL_C_INCLUDES := $(minikin_c_includes) -LOCAL_CPPFLAGS += -Werror -Wall -Wextra +LOCAL_CPPFLAGS += -Werror -Wall -Wextra $(enable_race_detection) LOCAL_SHARED_LIBRARIES := $(minikin_shared_libraries) include $(BUILD_STATIC_LIBRARY) @@ -76,7 +83,7 @@ LOCAL_MODULE := libminikin_host LOCAL_MODULE_TAGS := optional LOCAL_EXPORT_C_INCLUDE_DIRS := frameworks/minikin/include LOCAL_C_INCLUDES := $(minikin_c_includes) -LOCAL_CPPFLAGS += -Werror -Wall -Wextra +LOCAL_CPPFLAGS += -Werror -Wall -Wextra $(enable_race_detection) LOCAL_SHARED_LIBRARIES := liblog libicuuc-host LOCAL_SRC_FILES := Hyphenator.cpp diff --git a/libs/minikin/FontCollection.cpp b/libs/minikin/FontCollection.cpp index bba2ef95359f1c6cd44ebe20ce172016c71b8659..529b5c03a34c01759db647d658ea7d7d8a782c5e 100644 --- a/libs/minikin/FontCollection.cpp +++ b/libs/minikin/FontCollection.cpp @@ -223,6 +223,7 @@ bool FontCollection::hasVariationSelector(uint32_t baseCodepoint, // Currently mRanges can not be used here since it isn't aware of the variation sequence. // TODO: Use mRanges for narrowing down the search range. for (size_t i = 0; i < mFamilies.size(); i++) { + AutoMutex _l(gMinikinLock); if (mFamilies[i]->hasVariationSelector(baseCodepoint, variationSelector)) { return true; } diff --git a/libs/minikin/MinikinInternal.cpp b/libs/minikin/MinikinInternal.cpp index 5a21ef9862c5fd7007c60c7b28dd0e4a0b6b5c0d..c2aa01ac1988ae8713bc111f204a9f9192cf9e81 100644 --- a/libs/minikin/MinikinInternal.cpp +++ b/libs/minikin/MinikinInternal.cpp @@ -25,7 +25,9 @@ namespace android { Mutex gMinikinLock; void assertMinikinLocked() { - LOG_FATAL_IF(gMinikinLock.tryLock() == 0); +#ifdef ENABLE_RACE_DETECTION + LOG_ALWAYS_FATAL_IF(gMinikinLock.tryLock() == 0); +#endif } }