// Copyright Epic Games, Inc. All Rights Reserved. using System.Collections.Generic; using EpicGames.Core; using Microsoft.Extensions.Logging; namespace EpicGames.Horde.Issues.Handlers { /// /// Instance of a particular shader compile error /// [IssueHandler] public class ShaderIssueHandler : IssueHandler { readonly List _issues = new List(); static bool IsMatchingEventId(EventId id) => id == KnownLogEvents.Engine_ShaderCompiler; static bool IsMaskedEventId(EventId id) => id == KnownLogEvents.Generic || id == KnownLogEvents.ExitCode || id == KnownLogEvents.Systemic_Xge_BuildFailed || id == KnownLogEvents.Engine_Crash || id == KnownLogEvents.AutomationTool_CrashExitCode || id == KnownLogEvents.Engine_AppError; /// public override int Priority => 10; /// public override bool HandleEvent(IssueEvent logEvent) { if (logEvent.EventId.HasValue) { EventId eventId = logEvent.EventId.Value; if (IsMatchingEventId(eventId)) { IssueEventGroup issue = new IssueEventGroup("Shader", "Shader compile {Severity} in {Files}", IssueChangeFilter.Code); issue.Events.Add(logEvent); issue.Keys.AddSourceFiles(logEvent); _issues.Add(issue); logEvent.AuditLogger?.LogDebug("{IssueType} issue added for event: '{Event}'", issue.Type, logEvent.Render()); return true; } else if (_issues.Count > 0 && IsMaskedEventId(eventId)) { return true; } } return false; } /// public override IEnumerable GetIssues() => _issues; } }