diff options
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla39489.cs')
-rw-r--r-- | Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla39489.cs | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla39489.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla39489.cs new file mode 100644 index 00000000..266b0fa6 --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla39489.cs @@ -0,0 +1,75 @@ +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; +using System.Threading; +using System; +using System.Threading.Tasks; +using Xamarin.Forms.Maps; + +#if UITEST +using Xamarin.UITest; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 39489, "Memory leak when using NavigationPage with Maps", PlatformAffected.Android)] + public class Bugzilla39489 : TestNavigationPage + { + protected override void Init() + { + PushAsync(new Bz39489Content()); + } + + #if UITEST + [Test] + public async void Bugzilla39458Test() + { + // Original bug report (https://bugzilla.xamarin.com/show_bug.cgi?id=39489) had a crash (OOM) after 25-30 + // page loads. Obviously it's going to depend heavily on the device and amount of available memory, but + // if this starts failing before 50 we'll know we've sprung another serious leak + int iterations = 50; + + for (int n = 0; n < iterations; n++) + { + RunningApp.WaitForElement(q => q.Marked("New Page")); + RunningApp.Tap(q => q.Marked("New Page")); + RunningApp.WaitForElement(q => q.Marked("New Page")); + await Task.Delay(1000); + RunningApp.Back(); + } + } + #endif + } + + [Preserve(AllMembers = true)] + public class Bz39489Content : ContentPage + { + public Bz39489Content() + { + var button = new Button { Text = "New Page" }; + + var gcbutton = new Button { Text = "GC" }; + + var map = new Map(); + + button.Clicked += Button_Clicked; + gcbutton.Clicked += GCbutton_Clicked; + + Content = new StackLayout { Children = { button, gcbutton, map } }; + } + + void GCbutton_Clicked(object sender, EventArgs e) + { + System.Diagnostics.Debug.WriteLine(">>>>>>>> Running Garbage Collection"); + GC.Collect(); + GC.WaitForPendingFinalizers(); + System.Diagnostics.Debug.WriteLine($">>>>>>>> GC.GetTotalMemory = {GC.GetTotalMemory(true):n0}"); + } + + void Button_Clicked(object sender, EventArgs e) + { + Navigation.PushAsync(new Bz39489Content()); + } + } +}
\ No newline at end of file |