unity/EditorPlugin/Profiler/Adapters/ReflectionBasedAdapters/ProfilerWindowAdapter.cs (85 lines of code) (raw):

#nullable enable using System; using System.Collections; using JetBrains.Diagnostics; using JetBrains.Rider.Unity.Editor.Profiler.Adapters.Interfaces; using JetBrains.Rider.Unity.Editor.Profiler.Adapters.ReflectionBasedAdapters.SnapshotNavigation; namespace JetBrains.Rider.Unity.Editor.Profiler.Adapters.ReflectionBasedAdapters { internal class ProfilerWindowAdapter : IProfilerWindowAdapter { private static readonly ILog ourLogger = Log.GetLog(nameof(IProfilerWindowAdapter)); private readonly CPUProfilerModuleReflectionData? myCPUProfilerModuleReflectionData; private readonly ReflectionBasedAdaptersFactory myReflectionBasedAdaptersFactory; private readonly ProfilerWindowReflectionData? myReflectionData; internal ProfilerWindowAdapter(object? profilerWindowObject, ProfilerWindowReflectionData? reflectionData, ReflectionBasedAdaptersFactory reflectionBasedAdaptersFactory, CPUProfilerModuleReflectionData? cpuProfilerModuleReflectionData) { ProfilerWindowObject = profilerWindowObject; myReflectionData = reflectionData; myReflectionBasedAdaptersFactory = reflectionBasedAdaptersFactory; myCPUProfilerModuleReflectionData = cpuProfilerModuleReflectionData; } public object? ProfilerWindowObject { get; } public int GetSelectedFrameIndex() { if (myReflectionData == null) { ourLogger.Verbose($"Can't get {nameof(GetSelectedFrameIndex)}: {nameof(myReflectionData)} is null."); return -1; } if (myReflectionData.SelectedFrameIndexMethodInfo == null) { ourLogger.Verbose( $"Can't get {nameof(GetSelectedFrameIndex)}: {nameof(myReflectionData.SelectedFrameIndexMethodInfo)} is null."); return -1; } try { var currentFrameIndex = (int)myReflectionData.SelectedFrameIndexMethodInfo.Invoke(ProfilerWindowObject, null); return currentFrameIndex; } catch (Exception e) { ourLogger.Verbose($"Invoke of {myReflectionData.SelectedFrameIndexMethodInfo.Name} has failed. {e}"); return -1; } } public ICPUProfilerModuleAdapter? GetCpuProfilerModule() { if (myCPUProfilerModuleReflectionData == null) { ourLogger.Verbose( $"Can't get {nameof(GetCpuProfilerModule)}: {nameof(myCPUProfilerModuleReflectionData)} is null."); return null; } if (!myCPUProfilerModuleReflectionData.IsValid()) { ourLogger.Verbose($"{myCPUProfilerModuleReflectionData.GetType().Name} is not valid."); return null; } if (myReflectionData == null) { ourLogger.Verbose($"Can't get {nameof(GetCpuProfilerModule)}: {nameof(myReflectionData)} is null."); return null; } if (myReflectionData.ProfilerModulesFieldInfo == null) { ourLogger.Verbose( $"Can't get {nameof(GetCpuProfilerModule)}: {nameof(myReflectionData.ProfilerModulesFieldInfo)} is null."); return null; } var arrayOfModules = myReflectionData.ProfilerModulesFieldInfo.GetValue(ProfilerWindowObject) as IEnumerable; if (arrayOfModules == null) { ourLogger.Verbose($"{myReflectionData.ProfilerModulesFieldInfo.Name} returned null."); return null; } foreach (var module in arrayOfModules) if (module.GetType() == myCPUProfilerModuleReflectionData.CPUProfilerModuleType) return myReflectionBasedAdaptersFactory.CreateCPUProfilerModuleAdapter(module); return null; } } }