From 30297d365f07c3bf4959caa2be91d3927cc0d27d Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Tue, 24 Oct 2017 15:03:14 +0100 Subject: [PATCH 1/2] [Xamarin.Android.Build.Tests] Fix the processing of the build.log files. Commit 029c86fb kinda caused a perforanace problem because it was regex'ing the entire build log. Some of those logs can grow to 300+ meg in size. This commit reworks the build log processing to 1) Use a StringBuilder rather than concat strings. 2) Search for the build time by checking each line rarther than regex'ing the whole file. --- .../Xamarin.ProjectTools/Common/Builder.cs | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs index c27ccb05b68..19f80d18841 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs @@ -220,18 +220,30 @@ protected bool BuildInternal (string projectOrSolution, string target, string [] LastBuildTime = DateTime.UtcNow - start; - LastBuildOutput = psi.FileName + " " + args.ToString () + Environment.NewLine; + var sb = new StringBuilder (); + sb.AppendLine ( psi.FileName + " " + args.ToString () + Environment.NewLine); if (!ranToCompletion) - LastBuildOutput += "Build Timed Out!"; - if (buildLogFullPath != null && File.Exists (buildLogFullPath)) - LastBuildOutput += File.ReadAllText (buildLogFullPath); - LastBuildOutput += string.Format ("\n#stdout begin\n{0}\n#stdout end\n", p.StandardOutput.ReadToEnd ()); - LastBuildOutput += string.Format ("\n#stderr begin\n{0}\n#stderr end\n", p.StandardError.ReadToEnd ()); - - var match = timeElapsedRegEx.Match (LastBuildOutput); - if (match.Success) { - LastBuildTime = TimeSpan.Parse (match.Groups ["TimeSpan"].Value); + sb.AppendLine ("Build Timed Out!"); + if (buildLogFullPath != null && File.Exists (buildLogFullPath)) { + using (var fs = File.OpenRead (buildLogFullPath)) { + using (var sr = new StreamReader (fs, Encoding.UTF8, true, 65536)) { + string line; + while ((line = sr.ReadLine ()) != null) { + sb.AppendLine (line); + if (line.StartsWith ("Time Elapsed", StringComparison.OrdinalIgnoreCase)) { + var match = timeElapsedRegEx.Match (line); + if (match.Success) { + LastBuildTime = TimeSpan.Parse (match.Groups ["TimeSpan"].Value); + Console.WriteLine ($"Found Time Elapsed {LastBuildTime}"); + } + } + } + } } + sb.AppendFormat ("\n#stdout begin\n{0}\n#stdout end\n", p.StandardOutput.ReadToEnd ()); + sb.AppendFormat ("\n#stderr begin\n{0}\n#stderr end\n", p.StandardError.ReadToEnd ()); + + LastBuildOutput = sb.ToString (); if (buildLogFullPath != null) { Directory.CreateDirectory (Path.GetDirectoryName (buildLogFullPath)); From d7319a39c23a2e0f699cfae89511977aee4154ef Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Wed, 25 Oct 2017 13:46:53 +0100 Subject: [PATCH 2/2] Fixed compile Error --- .../Tests/Xamarin.ProjectTools/Common/Builder.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs index 19f80d18841..c9df2e18774 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs @@ -235,6 +235,7 @@ protected bool BuildInternal (string projectOrSolution, string target, string [] if (match.Success) { LastBuildTime = TimeSpan.Parse (match.Groups ["TimeSpan"].Value); Console.WriteLine ($"Found Time Elapsed {LastBuildTime}"); + } } } }