Skip to content

Commit f70d356

Browse files
David Karlašjonpryor
authored andcommitted
[Java.Interop] Reduce string allocations from assertions (#57)
Context: https://bugzilla.xamarin.com/show_bug.cgi?id=42476 Context: commit 4df1e9f This commit reduces allocations even further by reducing `reference.ToString()` allocations.
1 parent 4df1e9f commit f70d356

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

src/Java.Interop/Java.Interop/JniRuntime.JniObjectReferenceManager.cs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ public virtual JniObjectReference CreateLocalReference (JniObjectReference refer
5353
{
5454
if (!reference.IsValid)
5555
return reference;
56-
AssertCount (localReferenceCount, "LREF", reference.ToString ());
56+
if (localReferenceCount < 0)
57+
AssertCount(localReferenceCount, "LREF", reference.ToString());
5758
localReferenceCount++;
5859
return JniEnvironment.References.NewLocalRef (reference);
5960
}
@@ -71,7 +72,8 @@ public virtual void DeleteLocalReference (ref JniObjectReference reference, ref
7172
return;
7273
AssertReferenceType (ref reference, JniObjectReferenceType.Local);
7374
localReferenceCount--;
74-
AssertCount (localReferenceCount, "LREF", reference.ToString ());
75+
if (localReferenceCount < 0)
76+
AssertCount(localReferenceCount, "LREF", reference.ToString());
7577
JniEnvironment.References.DeleteLocalRef (reference.Handle);
7678
reference.Invalidate ();
7779
}
@@ -87,7 +89,8 @@ public virtual void CreatedLocalReference (JniObjectReference reference, ref int
8789
{
8890
if (!reference.IsValid)
8991
return;
90-
AssertCount (localReferenceCount, "LREF", reference.ToString ());
92+
if (localReferenceCount < 0)
93+
AssertCount(localReferenceCount, "LREF", reference.ToString());
9194
localReferenceCount++ ;
9295
}
9396

@@ -104,7 +107,8 @@ public virtual IntPtr ReleaseLocalReference (ref JniObjectReference reference, r
104107
if (!reference.IsValid)
105108
return IntPtr.Zero;
106109
localReferenceCount--;
107-
AssertCount (localReferenceCount, "LREF", reference.ToString ());
110+
if (localReferenceCount < 0)
111+
AssertCount (localReferenceCount, "LREF", reference.ToString ());
108112
var h = reference.Handle;
109113
reference.Invalidate ();
110114
return h;
@@ -123,7 +127,8 @@ public virtual JniObjectReference CreateGlobalReference (JniObjectReference refe
123127
if (!reference.IsValid)
124128
return reference;
125129
var n = JniEnvironment.References.NewGlobalRef (reference);
126-
AssertCount (GlobalReferenceCount, "GREF", reference.ToString ());
130+
if (GlobalReferenceCount < 0)
131+
AssertCount (GlobalReferenceCount, "GREF", reference.ToString ());
127132
return n;
128133
}
129134

@@ -132,7 +137,8 @@ public virtual void DeleteGlobalReference (ref JniObjectReference reference)
132137
if (!reference.IsValid)
133138
return;
134139
AssertReferenceType (ref reference, JniObjectReferenceType.Global);
135-
AssertCount (GlobalReferenceCount, "GREF", reference.ToString ());
140+
if (GlobalReferenceCount < 0)
141+
AssertCount(GlobalReferenceCount, "GREF", reference.ToString());
136142
JniEnvironment.References.DeleteGlobalRef (reference.Handle);
137143
reference.Invalidate ();
138144
}
@@ -142,7 +148,8 @@ public virtual JniObjectReference CreateWeakGlobalReference (JniObjectReference
142148
if (!reference.IsValid)
143149
return reference;
144150
var n = JniEnvironment.References.NewWeakGlobalRef (reference);
145-
AssertCount (WeakGlobalReferenceCount, "WGREF", reference.ToString ());
151+
if (WeakGlobalReferenceCount < 0)
152+
AssertCount(WeakGlobalReferenceCount, "WGREF", reference.ToString());
146153
return n;
147154
}
148155

@@ -151,7 +158,8 @@ public virtual void DeleteWeakGlobalReference (ref JniObjectReference reference)
151158
if (!reference.IsValid)
152159
return;
153160
AssertReferenceType (ref reference, JniObjectReferenceType.WeakGlobal);
154-
AssertCount (WeakGlobalReferenceCount, "WGREF", reference.ToString ());
161+
if (WeakGlobalReferenceCount < 0)
162+
AssertCount(WeakGlobalReferenceCount, "WGREF", reference.ToString());
155163
JniEnvironment.References.DeleteWeakGlobalRef (reference.Handle);
156164
reference.Invalidate ();
157165
}
@@ -179,9 +187,6 @@ static void AssertReferenceType (ref JniObjectReference reference, JniObjectRefe
179187
[Conditional ("DEBUG")]
180188
void AssertCount (int count, string type, string value)
181189
{
182-
if (count >= 0)
183-
return;
184-
185190
Debug.Assert (count >= 0,
186191
string.Format ("{0} count is {1}, expected to be >= 0 when dealing with handle {2} on thread '{3}'({4}).",
187192
type, count, value, Runtime.GetCurrentManagedThreadName (), Environment.CurrentManagedThreadId));

0 commit comments

Comments
 (0)