Commit cf80448b authored by Henrique Nakashima's avatar Henrique Nakashima Committed by Commit Bot

Add % LoCs landed in modularized files to modularization_stats.py

With this change, the Modularization success metric % of LoCs landed in
modularized files is measured automatically.

Bug: 1146478
Change-Id: Icb3ca53875d5cb9164f926f7386c552ae8c5b305
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2538118
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Reviewed-by: default avatarPeter Wen <wnwen@chromium.org>
Reviewed-by: default avatarJinsuk Kim <jinsukkim@chromium.org>
Cr-Commit-Position: refs/heads/master@{#828894}
parent 6c9bbad6
......@@ -11,9 +11,19 @@ from typing import Dict, List
import class_dependency
import count_cycles
import graph
import os
import package_dependency
import print_dependencies_helper
import serialization
import sys
_SRC_PATH = os.path.abspath(
os.path.join(os.path.dirname(__file__), '..', '..', '..'))
sys.path.append(
os.path.join(_SRC_PATH, 'tools', 'android', 'modularization', 'loc'))
import modularization_loc_stat as loc_stat
CLASSES_TO_COUNT_INBOUND = ['ChromeActivity', 'ChromeTabbedActivity']
......@@ -75,6 +85,30 @@ def _generate_chrome_java_size(
return {'chrome_java_class_count': count}
def _generate_loc_stats(git_dir: str) -> Dict[str, object]:
start_date, end_date = loc_stat.GetDateRange(past_days=7)
loc_result_json: str = loc_stat.GenerateLOCStats(start_date,
end_date,
quiet=True,
json_format=True,
git_dir=git_dir)
loc_result: Dict = json.loads(loc_result_json)
loc_modularized = loc_result.get(loc_stat.KEY_LOC_MODULARIZED, 0)
loc_chrome_android = loc_result.get(loc_stat.KEY_LOC_LEGACY, 0)
total = loc_modularized + loc_chrome_android
percentage_modularized: float = loc_modularized / total if total > 0 else 0
return {
'loc_modularized': loc_modularized,
'loc_chrome_android': loc_chrome_android,
'loc_modularized_percentage': percentage_modularized,
'loc_start_date': loc_result.get(loc_stat.KEY_START_DATE, ''),
'loc_end_date': loc_result.get(loc_stat.KEY_END_DATE, ''),
}
def main():
arg_parser = argparse.ArgumentParser(
description='Given a JSON dependency graph, output a JSON with a '
......@@ -86,8 +120,6 @@ def main():
required=True,
help='Path to the JSON file containing the dependency graph. '
'See the README on how to generate this file.')
# TODO(crbug.com/1146478): --git-dir is currently unused, but will be used
# to calculate % LoCs in modularized files.
arg_parser.add_argument(
'--git-dir',
type=str,
......@@ -110,6 +142,7 @@ def main():
CLASSES_TO_COUNT_INBOUND))
stats.update(_generate_package_cycle_stats(package_graph))
stats.update(_generate_chrome_java_size(class_graph))
stats.update(_generate_loc_stats(arguments.git_dir))
if arguments.output:
with open(arguments.output, 'w') as f:
......
......@@ -15,6 +15,14 @@ import subprocess
import sys
from collections import OrderedDict
from collections import defaultdict
from typing import Tuple
# Output json keys
KEY_LOC_MODULARIZED = 'loc_modularized'
KEY_LOC_LEGACY = 'loc_legacy'
KEY_RANKINGS = 'rankings'
KEY_START_DATE = 'start_date'
KEY_END_DATE = 'end_date'
_M12N_DIRS = [
'chrome/browser',
......@@ -120,11 +128,11 @@ def GenerateLOCStats(start_date,
if json_format:
return json.dumps({
'loc_modularized': total_m12n,
'loc_legacy': total_legacy,
'rankings': rankings,
'start_date': start_date,
'end_date': end_date,
KEY_LOC_MODULARIZED: total_m12n,
KEY_LOC_LEGACY: total_legacy,
KEY_RANKINGS: rankings,
KEY_START_DATE: start_date,
KEY_END_DATE: end_date,
})
else:
output = []
......@@ -169,12 +177,13 @@ def _print_progress(msg, prev_msg_len):
print(msg, end='\r')
def _get_date_range(args):
if args.date:
return args.date
def GetDateRange(*, past_days: int) -> Tuple[str, str]:
"""Returns start and end date for a period of past days.
Use the results as start_date and end_date of GenerateLOCStats.
"""
today = datetime.date.today()
delta = datetime.timedelta(days=args.past_days)
delta = datetime.timedelta(days=past_days)
past = datetime.datetime(today.year, today.month, today.day) - delta
return (past.date().isoformat(), today.isoformat())
......@@ -215,7 +224,11 @@ if __name__ == "__main__":
if args.past_days and args.past_days < 0:
raise parser.error('--past-days must be non-negative.')
start_date, end_date = _get_date_range(args)
if args.date:
start_date, end_date = args.date
else:
start_date, end_date = GetDateRange(past_days=args.past_days)
result = GenerateLOCStats(start_date,
end_date,
quiet=args.quiet,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment