Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Xamarin.Android.Build.Tasks/Tasks/Aapt2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public override bool Execute ()
DaemonMaxInstanceCount = maxInstances;
else
DaemonMaxInstanceCount = Math.Min (DaemonMaxInstanceCount, maxInstances);
daemon = Aapt2Daemon.GetInstance (BuildEngine4, GenerateFullPathToTool (),
daemon = Aapt2Daemon.GetInstance (BuildEngine4, LogDebugMessage, GenerateFullPathToTool (),
DaemonMaxInstanceCount, GetRequiredDaemonInstances (), registerInDomain: DaemonKeepInDomain);
return base.Execute ();
}
Expand Down
19 changes: 13 additions & 6 deletions src/Xamarin.Android.Build.Tasks/Utilities/Aapt2Daemon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ internal class Aapt2Daemon : IDisposable

internal static object RegisterTaskObjectKey => TypeFullName;

public static Aapt2Daemon GetInstance (IBuildEngine4 engine, string aapt2, int numberOfInstances, int initalNumberOfDaemons, bool registerInDomain = false)
public static Aapt2Daemon GetInstance (IBuildEngine4 engine, Action<string> log, string aapt2, int numberOfInstances, int initalNumberOfDaemons, bool registerInDomain = false)
{
var area = registerInDomain ? RegisteredTaskObjectLifetime.AppDomain : RegisteredTaskObjectLifetime.Build;
var daemon = engine.GetRegisteredTaskObjectAssemblyLocal<Aapt2Daemon> (RegisterTaskObjectKey, area);
if (daemon == null)
{
daemon = new Aapt2Daemon (aapt2, numberOfInstances, initalNumberOfDaemons);
daemon = new Aapt2Daemon (aapt2, numberOfInstances, initalNumberOfDaemons, log);
engine.RegisterTaskObjectAssemblyLocal (RegisterTaskObjectKey, daemon, area, allowEarlyCollection: false);
}
return daemon;
Expand Down Expand Up @@ -66,6 +66,7 @@ public void Complete (bool result)
long jobsRunning = 0;
long jobId = 0;
int maxInstances = 0;
Action<string> logger = null;

public CancellationToken Token => tcs.Token;

Expand All @@ -86,10 +87,11 @@ public bool JobsRunning

public int CurrentInstances => daemons.Count;

public Aapt2Daemon (string aapt2, int maxNumberOfInstances, int initalNumberOfDaemons)
public Aapt2Daemon (string aapt2, int maxNumberOfInstances, int initalNumberOfDaemons, Action<string> log)
{
Aapt2 = aapt2;
maxInstances = maxNumberOfInstances;
logger = log;
for (int i = 0; i < initalNumberOfDaemons; i++) {
SpawnAapt2Daemon ();
}
Expand Down Expand Up @@ -271,9 +273,14 @@ private void Aapt2DaemonStart ()
{
// Ignore this error. It occurs when the Task is cancelled.
}
aapt2.StandardInput.WriteLine ("quit");
aapt2.StandardInput.WriteLine ();
aapt2.WaitForExit ((int)TimeSpan.FromSeconds (5).TotalMilliseconds);
try {
aapt2.StandardInput.WriteLine ("quit");
aapt2.StandardInput.WriteLine ();
aapt2.WaitForExit ((int)TimeSpan.FromSeconds (5).TotalMilliseconds);
} catch (IOException) {
// Ignore this error. It occurs when the Build it cancelled.
logger?.Invoke ($"{nameof (Aapt2Daemon)}: Ignoring IOException. Build was cancelled.");
}
}

bool IsAapt2Warning (string singleLine)
Expand Down