// Copyright Epic Games, Inc. All Rights Reserved. using System; using System.Xml.Linq; namespace PerfReportTool { class OptionalString { public OptionalString(string valueIn) { value = valueIn; isSet = true; } public OptionalString() { isSet = false; } public OptionalString(XElement element, string Name, bool IsElement = false, XmlVariableMappings vars = null ) { isSet = false; if (IsElement) { XElement child = element.Element(Name); if (child != null) { value = child.GetValue(vars); isSet = true; } } else { XAttribute child = element.Attribute(Name); if (child != null) { value = element.GetRequiredAttribute(vars, Name); isSet = true; } } } public void InheritFrom(OptionalString baseVersion) { if (!isSet) { isSet = baseVersion.isSet; value = baseVersion.value; } } public bool isSet; public string value; }; class Optional { public Optional(T valueIn) { value = valueIn; isSet = true; } public Optional() { isSet = false; } public Optional(XElement element, string AttributeName, XmlVariableMappings vars = null) { isSet = false; try { if (element.Attribute(AttributeName) != null) { value = element.GetRequiredAttribute(vars, AttributeName); isSet = true; } } catch { } } public void InheritFrom(Optional baseVersion) { if (!isSet) { isSet = baseVersion.isSet; value = baseVersion.value; } } public T value; public bool isSet; }; static class OptionalHelper { public static string GetDoubleSetting(Optional setting, string cmdline) { return (setting.isSet ? (cmdline + setting.value.ToString()) : ""); } public static string GetStringSetting(OptionalString setting, string cmdline) { return (setting.isSet ? (cmdline + setting.value) : ""); } }; class ReportGraph { public ReportGraph(XElement element, XmlVariableMappings vars) { title = element.GetRequiredAttribute(vars, "title"); budget = new Optional(element, "budget", vars); inSummary = element.GetSafeAttribute(vars, "inSummary", false); isExternal = element.GetSafeAttribute(vars, "external", false); minFilterStatValue = new Optional(element, "minFilterStatValue", vars); } public string title; public Optional budget; public bool inSummary; public bool isExternal; public Optional minFilterStatValue; public GraphSettings settings; }; class GraphSettings { public GraphSettings(XElement element) { smooth = new Optional(element, "smooth"); thickness = new Optional(element, "thickness"); miny = new Optional(element, "miny"); maxy = new Optional(element, "maxy"); maxAutoMaxY = new Optional(element, "maxAutoMaxY"); threshold = new Optional(element, "threshold"); averageThreshold = new Optional(element, "averageThreshold"); minFilterStatValue = new Optional(element, "minFilterStatValue"); minFilterStatName = new OptionalString(element, "minFilterStatName"); smoothKernelPercent = new Optional(element, "smoothKernelPercent"); smoothKernelSize = new Optional(element, "smoothKernelSize"); compression = new Optional(element, "compression"); width = new Optional(element, "width"); height = new Optional(element, "height"); stacked = new Optional(element, "stacked"); showAverages = new Optional(element, "showAverages"); filterOutZeros = new Optional(element, "filterOutZeros"); maxHierarchyDepth = new Optional(element, "maxHierarchyDepth"); hideStatPrefix = new OptionalString(element, "hideStatPrefix"); mainStat = new OptionalString(element, "mainStat"); showEvents = new OptionalString(element, "showEvents"); requiresDetailedStats = new Optional(element, "requiresDetailedStats"); ignoreStats = new OptionalString(element, "ignoreStats"); statString = new OptionalString(element, "statString", true); //additionalArgs = new OptionalString(element, "additionalArgs", true); statMultiplier = new (element, "statMultiplier"); legendAverageThreshold = new Optional(element, "legendAverageThreshold"); snapToPeaks = new Optional(element, "snapToPeaks"); lineDecimalPlaces = new Optional(element, "lineDecimalPlaces"); } public void InheritFrom(GraphSettings baseSettings) { smooth.InheritFrom(baseSettings.smooth); statString.InheritFrom(baseSettings.statString); thickness.InheritFrom(baseSettings.thickness); miny.InheritFrom(baseSettings.miny); maxy.InheritFrom(baseSettings.maxy); maxAutoMaxY.InheritFrom(baseSettings.maxAutoMaxY); threshold.InheritFrom(baseSettings.threshold); averageThreshold.InheritFrom(baseSettings.averageThreshold); minFilterStatValue.InheritFrom(baseSettings.minFilterStatValue); minFilterStatName.InheritFrom(baseSettings.minFilterStatName); smoothKernelSize.InheritFrom(baseSettings.smoothKernelSize); smoothKernelPercent.InheritFrom(baseSettings.smoothKernelPercent); compression.InheritFrom(baseSettings.compression); width.InheritFrom(baseSettings.width); height.InheritFrom(baseSettings.height); //additionalArgs.InheritFrom(baseSettings.additionalArgs); stacked.InheritFrom(baseSettings.stacked); showAverages.InheritFrom(baseSettings.showAverages); filterOutZeros.InheritFrom(baseSettings.filterOutZeros); maxHierarchyDepth.InheritFrom(baseSettings.maxHierarchyDepth); hideStatPrefix.InheritFrom(baseSettings.hideStatPrefix); mainStat.InheritFrom(baseSettings.mainStat); showEvents.InheritFrom(baseSettings.showEvents); requiresDetailedStats.InheritFrom(baseSettings.requiresDetailedStats); statMultiplier.InheritFrom(baseSettings.statMultiplier); ignoreStats.InheritFrom(baseSettings.ignoreStats); legendAverageThreshold.InheritFrom(baseSettings.legendAverageThreshold); snapToPeaks.InheritFrom(baseSettings.snapToPeaks); lineDecimalPlaces.InheritFrom(baseSettings.lineDecimalPlaces); } public Optional smooth; public OptionalString statString; public Optional thickness; public Optional miny; public Optional maxy; public Optional maxAutoMaxY; public Optional threshold; public Optional averageThreshold; public Optional minFilterStatValue; public OptionalString minFilterStatName; public Optional smoothKernelSize; public Optional smoothKernelPercent; public Optional compression; public Optional width; public Optional height; //public OptionalString additionalArgs; public Optional stacked; public Optional showAverages; public Optional filterOutZeros; public Optional maxHierarchyDepth; public OptionalString hideStatPrefix; public OptionalString mainStat; public OptionalString showEvents; public OptionalString ignoreStats; public Optional statMultiplier; public Optional legendAverageThreshold; public Optional requiresDetailedStats; public Optional snapToPeaks; public Optional lineDecimalPlaces; }; }