RemotePlayerLogController.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEditor.DeploymentTargets;
  4. using UnityEditor.TestTools.TestRunner.CommandLineTest;
  5. using UnityEngine;
  6. namespace UnityEditor.TestRunner.TestLaunchers
  7. {
  8. [Serializable]
  9. internal class RemotePlayerLogController : ScriptableSingleton<RemotePlayerLogController>
  10. {
  11. private List<LogWriter> m_LogWriters;
  12. private Dictionary<string, DeploymentTargetLogger> m_Loggers;
  13. private string m_DeviceLogsDirectory;
  14. public void SetBuildTarget(BuildTarget buildTarget)
  15. {
  16. m_Loggers = GetDeploymentTargetLoggers(buildTarget);
  17. if (m_Loggers == null)
  18. Debug.Log("Deployment target logger could not be created");
  19. }
  20. public void SetLogsDirectory(string dir)
  21. {
  22. m_DeviceLogsDirectory = dir;
  23. }
  24. public void StartLogWriters()
  25. {
  26. if (m_DeviceLogsDirectory == null || m_Loggers == null)
  27. return;
  28. m_LogWriters = new List<LogWriter>();
  29. foreach (var logger in m_Loggers)
  30. {
  31. m_LogWriters.Add(new LogWriter(m_DeviceLogsDirectory, logger.Key, logger.Value));
  32. logger.Value.Start();
  33. }
  34. }
  35. public void StopLogWriters()
  36. {
  37. if (m_LogWriters == null)
  38. return;
  39. foreach (var logWriter in m_LogWriters)
  40. {
  41. logWriter.Stop();
  42. }
  43. }
  44. private Dictionary<string, DeploymentTargetLogger> GetDeploymentTargetLoggers(BuildTarget buildTarget)
  45. {
  46. DeploymentTargetManager deploymentTargetManager;
  47. try
  48. {
  49. deploymentTargetManager = DeploymentTargetManager.CreateInstance(EditorUserBuildSettings.activeBuildTargetGroup, buildTarget);
  50. if (deploymentTargetManager == null)
  51. return null;
  52. }
  53. catch (NotSupportedException ex)
  54. {
  55. Debug.Log(ex.Message);
  56. Debug.Log("Deployment target logger not initialised");
  57. return null;
  58. }
  59. var targets = deploymentTargetManager.GetKnownTargets();
  60. var loggers = new Dictionary<string, DeploymentTargetLogger>();
  61. foreach (var target in targets)
  62. {
  63. if (target.status != DeploymentTargetStatus.Ready) continue;
  64. var logger = deploymentTargetManager.GetTargetLogger(target.id);
  65. logger.Clear();
  66. loggers.Add(target.id, logger);
  67. }
  68. return loggers;
  69. }
  70. }
  71. }