From 53ce7b218366cadf181b4f13f135367c5a837ce4 Mon Sep 17 00:00:00 2001 From: Emily Janzer Date: Fri, 24 Jan 2020 15:13:20 -0800 Subject: [PATCH] Add @UiThread annotation to methods that update DisplayMetrics Summary: It seems like DisplayMetricsHolder doesn't have any thread safety policy, but in practice it only updates DisplayMetrics from the main thread. Let's formalize that by adding some annotations to that effect. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D19417331 fbshipit-source-id: f1d464f228776197fd0df2978c9e8edbaab67850 --- .../facebook/react/uimanager/DisplayMetricsHolder.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.java index ab6d1739b0..fa93a240a7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.java @@ -13,7 +13,9 @@ import android.util.DisplayMetrics; import android.view.Display; import android.view.WindowManager; import androidx.annotation.Nullable; +import androidx.annotation.UiThread; import com.facebook.infer.annotation.Assertions; +import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.bridge.WritableNativeMap; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -37,7 +39,9 @@ public class DisplayMetricsHolder { * @deprecated Use {@link #setScreenDisplayMetrics(DisplayMetrics)} instead. See comment above as * to why this is not correct to use. */ + @UiThread public static void setWindowDisplayMetrics(DisplayMetrics displayMetrics) { + UiThreadUtil.assertOnUiThread(); sWindowDisplayMetrics = displayMetrics; } @@ -48,7 +52,9 @@ public class DisplayMetricsHolder { initDisplayMetrics(context); } + @UiThread public static void initDisplayMetrics(Context context) { + UiThreadUtil.assertOnUiThread(); DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); DisplayMetricsHolder.setWindowDisplayMetrics(displayMetrics); @@ -95,7 +101,9 @@ public class DisplayMetricsHolder { return sWindowDisplayMetrics; } + @UiThread public static void setScreenDisplayMetrics(DisplayMetrics screenDisplayMetrics) { + UiThreadUtil.assertOnUiThread(); sScreenDisplayMetrics = screenDisplayMetrics; }