Made Element accessors thread-safe

Bug: 28177082
Change-Id: I8f3f2d8ce559e93cba29f8eedd5b95d1389deb23
(cherry picked from commit 33703f0c4e9b16bda5fd72e71d7d89359ee0db17)
diff --git a/rs/java/android/renderscript/Sampler.java b/rs/java/android/renderscript/Sampler.java
index 5c4bae9..70e88bc 100644
--- a/rs/java/android/renderscript/Sampler.java
+++ b/rs/java/android/renderscript/Sampler.java
@@ -98,13 +98,17 @@
      * @return Sampler
      */
     public static Sampler CLAMP_NEAREST(RenderScript rs) {
-        if(rs.mSampler_CLAMP_NEAREST == null) {
-            Builder b = new Builder(rs);
-            b.setMinification(Value.NEAREST);
-            b.setMagnification(Value.NEAREST);
-            b.setWrapS(Value.CLAMP);
-            b.setWrapT(Value.CLAMP);
-            rs.mSampler_CLAMP_NEAREST = b.create();
+        if (rs.mSampler_CLAMP_NEAREST == null) {
+            synchronized (rs) {
+                if (rs.mSampler_CLAMP_NEAREST == null) {
+                    Builder b = new Builder(rs);
+                    b.setMinification(Value.NEAREST);
+                    b.setMagnification(Value.NEAREST);
+                    b.setWrapS(Value.CLAMP);
+                    b.setWrapT(Value.CLAMP);
+                    rs.mSampler_CLAMP_NEAREST = b.create();
+                }
+            }
         }
         return rs.mSampler_CLAMP_NEAREST;
     }
@@ -118,13 +122,17 @@
      * @return Sampler
      */
     public static Sampler CLAMP_LINEAR(RenderScript rs) {
-        if(rs.mSampler_CLAMP_LINEAR == null) {
-            Builder b = new Builder(rs);
-            b.setMinification(Value.LINEAR);
-            b.setMagnification(Value.LINEAR);
-            b.setWrapS(Value.CLAMP);
-            b.setWrapT(Value.CLAMP);
-            rs.mSampler_CLAMP_LINEAR = b.create();
+        if (rs.mSampler_CLAMP_LINEAR == null) {
+            synchronized (rs) {
+                if (rs.mSampler_CLAMP_LINEAR == null) {
+                    Builder b = new Builder(rs);
+                    b.setMinification(Value.LINEAR);
+                    b.setMagnification(Value.LINEAR);
+                    b.setWrapS(Value.CLAMP);
+                    b.setWrapT(Value.CLAMP);
+                    rs.mSampler_CLAMP_LINEAR = b.create();
+                }
+            }
         }
         return rs.mSampler_CLAMP_LINEAR;
     }
@@ -138,13 +146,17 @@
      * @return Sampler
      */
     public static Sampler CLAMP_LINEAR_MIP_LINEAR(RenderScript rs) {
-        if(rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) {
-            Builder b = new Builder(rs);
-            b.setMinification(Value.LINEAR_MIP_LINEAR);
-            b.setMagnification(Value.LINEAR);
-            b.setWrapS(Value.CLAMP);
-            b.setWrapT(Value.CLAMP);
-            rs.mSampler_CLAMP_LINEAR_MIP_LINEAR = b.create();
+        if (rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) {
+            synchronized (rs) {
+                if (rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) {
+                    Builder b = new Builder(rs);
+                    b.setMinification(Value.LINEAR_MIP_LINEAR);
+                    b.setMagnification(Value.LINEAR);
+                    b.setWrapS(Value.CLAMP);
+                    b.setWrapT(Value.CLAMP);
+                    rs.mSampler_CLAMP_LINEAR_MIP_LINEAR = b.create();
+                }
+            }
         }
         return rs.mSampler_CLAMP_LINEAR_MIP_LINEAR;
     }
@@ -158,13 +170,17 @@
      * @return Sampler
      */
     public static Sampler WRAP_NEAREST(RenderScript rs) {
-        if(rs.mSampler_WRAP_NEAREST == null) {
-            Builder b = new Builder(rs);
-            b.setMinification(Value.NEAREST);
-            b.setMagnification(Value.NEAREST);
-            b.setWrapS(Value.WRAP);
-            b.setWrapT(Value.WRAP);
-            rs.mSampler_WRAP_NEAREST = b.create();
+        if (rs.mSampler_WRAP_NEAREST == null) {
+            synchronized (rs) {
+                if (rs.mSampler_WRAP_NEAREST == null) {
+                    Builder b = new Builder(rs);
+                    b.setMinification(Value.NEAREST);
+                    b.setMagnification(Value.NEAREST);
+                    b.setWrapS(Value.WRAP);
+                    b.setWrapT(Value.WRAP);
+                    rs.mSampler_WRAP_NEAREST = b.create();
+                }
+            }
         }
         return rs.mSampler_WRAP_NEAREST;
     }
@@ -178,13 +194,17 @@
      * @return Sampler
      */
     public static Sampler WRAP_LINEAR(RenderScript rs) {
-        if(rs.mSampler_WRAP_LINEAR == null) {
-            Builder b = new Builder(rs);
-            b.setMinification(Value.LINEAR);
-            b.setMagnification(Value.LINEAR);
-            b.setWrapS(Value.WRAP);
-            b.setWrapT(Value.WRAP);
-            rs.mSampler_WRAP_LINEAR = b.create();
+        if (rs.mSampler_WRAP_LINEAR == null) {
+            synchronized (rs) {
+                if (rs.mSampler_WRAP_LINEAR == null) {
+                    Builder b = new Builder(rs);
+                    b.setMinification(Value.LINEAR);
+                    b.setMagnification(Value.LINEAR);
+                    b.setWrapS(Value.WRAP);
+                    b.setWrapT(Value.WRAP);
+                    rs.mSampler_WRAP_LINEAR = b.create();
+                }
+            }
         }
         return rs.mSampler_WRAP_LINEAR;
     }
@@ -198,13 +218,17 @@
      * @return Sampler
      */
     public static Sampler WRAP_LINEAR_MIP_LINEAR(RenderScript rs) {
-        if(rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) {
-            Builder b = new Builder(rs);
-            b.setMinification(Value.LINEAR_MIP_LINEAR);
-            b.setMagnification(Value.LINEAR);
-            b.setWrapS(Value.WRAP);
-            b.setWrapT(Value.WRAP);
-            rs.mSampler_WRAP_LINEAR_MIP_LINEAR = b.create();
+        if (rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) {
+            synchronized (rs) {
+                if (rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) {
+                    Builder b = new Builder(rs);
+                    b.setMinification(Value.LINEAR_MIP_LINEAR);
+                    b.setMagnification(Value.LINEAR);
+                    b.setWrapS(Value.WRAP);
+                    b.setWrapT(Value.WRAP);
+                    rs.mSampler_WRAP_LINEAR_MIP_LINEAR = b.create();
+                }
+            }
         }
         return rs.mSampler_WRAP_LINEAR_MIP_LINEAR;
     }
@@ -218,13 +242,17 @@
      * @return Sampler
      */
     public static Sampler MIRRORED_REPEAT_NEAREST(RenderScript rs) {
-        if(rs.mSampler_MIRRORED_REPEAT_NEAREST == null) {
-            Builder b = new Builder(rs);
-            b.setMinification(Value.NEAREST);
-            b.setMagnification(Value.NEAREST);
-            b.setWrapS(Value.MIRRORED_REPEAT);
-            b.setWrapT(Value.MIRRORED_REPEAT);
-            rs.mSampler_MIRRORED_REPEAT_NEAREST = b.create();
+        if (rs.mSampler_MIRRORED_REPEAT_NEAREST == null) {
+            synchronized (rs) {
+                if (rs.mSampler_MIRRORED_REPEAT_NEAREST == null) {
+                    Builder b = new Builder(rs);
+                    b.setMinification(Value.NEAREST);
+                    b.setMagnification(Value.NEAREST);
+                    b.setWrapS(Value.MIRRORED_REPEAT);
+                    b.setWrapT(Value.MIRRORED_REPEAT);
+                    rs.mSampler_MIRRORED_REPEAT_NEAREST = b.create();
+                }
+            }
         }
         return rs.mSampler_MIRRORED_REPEAT_NEAREST;
     }
@@ -238,13 +266,17 @@
      * @return Sampler
      */
     public static Sampler MIRRORED_REPEAT_LINEAR(RenderScript rs) {
-        if(rs.mSampler_MIRRORED_REPEAT_LINEAR == null) {
-            Builder b = new Builder(rs);
-            b.setMinification(Value.LINEAR);
-            b.setMagnification(Value.LINEAR);
-            b.setWrapS(Value.MIRRORED_REPEAT);
-            b.setWrapT(Value.MIRRORED_REPEAT);
-            rs.mSampler_MIRRORED_REPEAT_LINEAR = b.create();
+        if (rs.mSampler_MIRRORED_REPEAT_LINEAR == null) {
+            synchronized (rs) {
+                if (rs.mSampler_MIRRORED_REPEAT_LINEAR == null) {
+                    Builder b = new Builder(rs);
+                    b.setMinification(Value.LINEAR);
+                    b.setMagnification(Value.LINEAR);
+                    b.setWrapS(Value.MIRRORED_REPEAT);
+                    b.setWrapT(Value.MIRRORED_REPEAT);
+                    rs.mSampler_MIRRORED_REPEAT_LINEAR = b.create();
+                }
+            }
         }
         return rs.mSampler_MIRRORED_REPEAT_LINEAR;
     }
@@ -258,13 +290,17 @@
      * @return Sampler
      */
     public static Sampler MIRRORED_REPEAT_LINEAR_MIP_LINEAR(RenderScript rs) {
-        if(rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR == null) {
-            Builder b = new Builder(rs);
-            b.setMinification(Value.LINEAR_MIP_LINEAR);
-            b.setMagnification(Value.LINEAR);
-            b.setWrapS(Value.MIRRORED_REPEAT);
-            b.setWrapT(Value.MIRRORED_REPEAT);
-            rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR = b.create();
+        if (rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR == null) {
+            synchronized (rs) {
+                if (rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR == null) {
+                    Builder b = new Builder(rs);
+                    b.setMinification(Value.LINEAR_MIP_LINEAR);
+                    b.setMagnification(Value.LINEAR);
+                    b.setWrapS(Value.MIRRORED_REPEAT);
+                    b.setWrapT(Value.MIRRORED_REPEAT);
+                    rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR = b.create();
+                }
+            }
         }
         return rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
     }