mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-01-07 09:55:45 +00:00
96 lines
2.2 KiB
Python
Executable File
96 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
# requires https://github.com/terryyin/lizard
|
|
|
|
import lizard
|
|
import os
|
|
import sys
|
|
|
|
folders = [
|
|
'src',
|
|
'src/ble',
|
|
'src/ble/gatt-service',
|
|
'src/classic',
|
|
]
|
|
|
|
metrics = {}
|
|
targets = {}
|
|
|
|
targets['CCN'] = 10
|
|
targets['PARAM'] = 7
|
|
|
|
def metric_sum(name, value):
|
|
global metrics
|
|
old = 0
|
|
if name in metrics:
|
|
old = metrics[name]
|
|
metrics[name] = old + value
|
|
|
|
|
|
def metric_list(name, item):
|
|
global metrics
|
|
value = []
|
|
if name in metrics:
|
|
value = metrics[name]
|
|
value.append(item)
|
|
metrics[name] = value
|
|
|
|
def metric_max(name, max):
|
|
global metrics
|
|
if name in metrics:
|
|
if metrics[name] > max:
|
|
return
|
|
metrics[name] = max
|
|
|
|
def metric_measure(metric_name, function_name, actual):
|
|
metric_max(metric_name + '_MAX', actual)
|
|
if metric_name in targets:
|
|
metric_sum(metric_name + '_SUM', actual)
|
|
if actual > targets[metric_name]:
|
|
metric_sum(metric_name + '_DEVIATIONS', 1)
|
|
metric_list(metric_name + '_LIST', function_name)
|
|
|
|
def analyze_file(path):
|
|
l = lizard.analyze_file(path)
|
|
for f in l.function_list:
|
|
metric_sum('FUNC', 1)
|
|
metric_measure('PARAM', f.name, f.parameter_count)
|
|
metric_measure('CCN', f.name, f.cyclomatic_complexity )
|
|
|
|
def analyze_folder(folder_path):
|
|
for file in sorted(os.listdir(folder_path)):
|
|
if file.endswith(".c"):
|
|
analyze_file(folder_path+'/'+file)
|
|
|
|
# find root
|
|
btstack_root = os.path.abspath(os.path.dirname(sys.argv[0]) + '/../..')
|
|
|
|
print ("Targets:")
|
|
for key,value in sorted(targets.items()):
|
|
print ('- %-20s: %u' % (key, value))
|
|
|
|
print ("\nAnalyzing:")
|
|
for path in folders:
|
|
print('- %s' % path)
|
|
analyze_folder(btstack_root + "/" + path)
|
|
|
|
print ("\nResult:")
|
|
|
|
num_funcs = metrics['FUNC']
|
|
for key,value in sorted(metrics.items()):
|
|
if key.endswith('LIST'):
|
|
continue
|
|
if key.endswith('_SUM'):
|
|
average = 1.0 * value / num_funcs
|
|
metric = key.replace('_SUM','_AVERAGE')
|
|
print ('- %-20s: %4.3f' % (metric, average))
|
|
else:
|
|
print ('- %-20s: %5u' % (key, value))
|
|
|
|
for key,value in sorted(metrics.items()):
|
|
if not key.endswith('LIST'):
|
|
continue
|
|
print ("\n%s" % key)
|
|
print ('\n'.join(value))
|
|
|