ScpToolkit
Conditional Complexity

Intro
  • Conditional complexity (also called cyclomatic complexity) is a term used to measure the complexity of software. The term refers to the number of possible paths through a program function. A higher value ofter means higher maintenance and testing costs (infosecinstitute.com).
  • Conditional complexity is calculated by counting all conditions in the program that can affect the execution path (e.g. if statement, loops, switches, and/or operators, try and catch blocks...).
  • Conditional complexity is measured at the unit level (methods, functions...).
  • Units are classified in four categories based on the measured McCabe index: 1-5 (simple units), 6-10 (medium complex units), 11-25 (complex units), 26+ (very complex units).
Learn more...
Conditional Complexity Overall
  • There are 835 units with 14,381 lines of code in units (23.9% of code).
    • 6 very complex units (1,669 lines of code)
    • 5 complex units (408 lines of code)
    • 30 medium complex units (2,104 lines of code)
    • 48 simple units (1,872 lines of code)
    • 746 very simple units (8,328 lines of code)
11% | 2% | 14% | 13% | 57%
Legend:
51+
26-50
11-25
6-10
1-5
Alternative Visuals
Conditional Complexity per Extension
cpp45% | 5% | 19% | 8% | 21%
cs3% | 2% | 13% | 14% | 65%
h0% | 0% | 0% | 0% | 100%
Legend:
51+
26-50
11-25
6-10
1-5
Conditional Complexity per Logical Component
primary logical decomposition
Lilypad49% | 4% | 14% | 8% | 23%
ScpControl6% | 2% | 18% | 13% | 58%
XInput_Scp36% | 8% | 30% | 10% | 14%
ScpMonitor0% | 5% | 0% | 3% | 91%
ScpInstaller0% | 0% | 28% | 13% | 57%
ScpDriverInstaller0% | 0% | 10% | 36% | 52%
ScpControl.Shared0% | 0% | 25% | 6% | 68%
ScpService0% | 0% | 27% | 0% | 72%
ScpServer0% | 0% | 4% | 20% | 75%
ScpXInputBridge0% | 0% | 0% | 38% | 61%
ScpPair0% | 0% | 0% | 38% | 61%
ScpCleanWipe0% | 0% | 0% | 57% | 42%
ScpProfiler0% | 0% | 0% | 8% | 91%
ScpTrayApp0% | 0% | 0% | 0% | 100%
ScpSettings0% | 0% | 0% | 0% | 100%
ScpLauncher0% | 0% | 0% | 0% | 100%
ScpGamepadAnalyzer0% | 0% | 0% | 0% | 100%
ScpUser0% | 0% | 0% | 0% | 100%
ScpControlPanel0% | 0% | 0% | 0% | 100%
Legend:
51+
26-50
11-25
6-10
1-5
Most Complex Units
Top 50 most complex units
Unit# linesMcCabe index# params
private void HicWorker()
in ScpControl/Bluetooth/BthDongle.Tasks.cs
403 94 1
INT_PTR CALLBACK DialogProc()
in Lilypad/Config.cpp
313 88 4
INT_PTR CALLBACK GeneralDialogProc()
in Lilypad/Config.cpp
261 67 4
void SelChanged()
in Lilypad/Config.cpp
206 65 2
int LoadSettings()
in Lilypad/Config.cpp
170 54 2
BOOLEAN FillDeviceInfo()
in XInput_Scp/pnp.cpp
316 52 1
public XINPUT_GAMEPAD Parse()
in ScpControl/BusDevice.cs
97 37 1
int BindCommand()
in Lilypad/Config.cpp
83 30 8
protected override void Process()
in ScpControl/Bluetooth/Ds3/BthDs3.cs
88 29 1
BOOL LoadApi()
in XInput_Scp/XInput_SCP.cpp
72 28 1
private void Parse()
in ScpMonitor/ProfilesForm.cs
68 26 2
private void ParseBufferDs3()
in ScpControl/Bluetooth/BthDongle.Tasks.cs
177 25 2
private async void btnInstall_Click()
in ScpInstaller/ScpForm.cs
125 24 2
protected override void Process()
in ScpControl/Usb/Ds3/UsbDs3.cs
98 24 1
void RefreshEnabledDevices()
in Lilypad/Config.cpp
34 23 1
private void ParseBufferDs4()
in ScpControl/Bluetooth/BthDongle.Tasks.cs
107 22 3
protected override void Process()
in ScpControl/Bluetooth/Ds4/BthDs4.cs
82 22 1
public override bool Start()
in ScpControl/Usb/UsbHub.cs
90 21 0
private static bool PnpUtilHelper()
in ScpControl/Driver/PNPUtilLib/PNPUtil.cs
111 20 3
public override void ParseHidReport()
in ScpControl/Bluetooth/Ds4/BthDs4.cs
65 18 1
int SaveSettings()
in Lilypad/Config.cpp
82 17 1
private void OnUsbDeviceAddedOrRemoved()
in ScpDriverInstaller/MainWindow.xaml.cs
88 17 0
public void ApplyOn()
in ScpControl.Shared/Core/DualShockProfile.cs
39 17 2
VOID CloseHidDevice()
in XInput_Scp/pnp.cpp
79 16 1
public override DsPadId Notify()
in ScpControl/Usb/UsbHub.cs
68 15 3
private int ServiceControlHandler()
in ScpService/Ds3Service.cs
63 14 4
void ChangeValue()
in Lilypad/Config.cpp
31 13 5
BOOLEAN OpenHidDevice()
in XInput_Scp/pnp.cpp
75 13 6
private void tmrUpdate_Tick()
in ScpServer/ScpForm.cs
21 13 2
protected override void ParseHidReport()
in ScpControl/Usb/Gamepads/UsbGameStopPcAdvanced.cs
80 13 1
private static byte MapBattery()
in ScpControl/Usb/Ds4/UsbDs4.cs
24 13 1
void UpdatePadList()
in Lilypad/Config.cpp
60 12 1
BOOLEAN FindKnownHidDevices()
in XInput_Scp/pnp.cpp
115 12 2
protected override void OnDeviceArrival()
in ScpControl/RootHub.cs
50 12 2
public override void ParseHidReport()
in ScpControl/Bluetooth/Ds3/BthDs3.cs
39 12 1
int CreateEffectBinding()
in Lilypad/Config.cpp
30 11 6
void EnumDualShock3s()
in Lilypad/DualShock3.cpp
35 11 0
public void Remap()
in ScpControl.Shared/Core/DualShockProfile.cs
39 11 1
public List EnumeratePackages()
in ScpControl/Driver/PNPUtilLib/PNPUtil.cs
59 11 0
protected override void ParseHidReport()
in ScpControl/Usb/Gamepads/UsbShanWanWirelessGamepad.cs
65 11 1
protected override void ParseHidReport()
in ScpControl/Usb/Ds3/Replica/UsbDs3Afterglow.cs
73 11 1
void Populate()
in Lilypad/Config.cpp
35 10 2
protected override void WndProc()
in ScpPair/ScpForm.cs
45 10 1
private void tmrUpdate_Tick()
in ScpMonitor/ScpForm.cs
45 10 2
void load_lib_usb()
in XInput_Scp/LibUsbApi.cpp
20 10 0
protected override void Append()
in ScpServer/Utilities/ListViewAppender.cs
35 10 1
protected override void OnHidReportReceived()
in ScpControl/RootHub.cs
44 10 2
protected override void ParseHidReport()
in ScpControl/Usb/Gamepads/UsbLsiLogicGamepad.cs
61 10 1
protected override void ParseHidReport()
in ScpControl/Usb/Ds4/UsbDs4.cs
41 10 1
void RefreshEnabledDevicesAndDisplay()
in Lilypad/Config.cpp
35 9 3