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 ...@@ -11,9 +11,19 @@ from typing import Dict, List
import class_dependency import class_dependency
import count_cycles import count_cycles
import graph import graph
import os
import package_dependency import package_dependency
import print_dependencies_helper import print_dependencies_helper
import serialization 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'] CLASSES_TO_COUNT_INBOUND = ['ChromeActivity', 'ChromeTabbedActivity']
...@@ -75,6 +85,30 @@ def _generate_chrome_java_size( ...@@ -75,6 +85,30 @@ def _generate_chrome_java_size(
return {'chrome_java_class_count': count} 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(): def main():
arg_parser = argparse.ArgumentParser( arg_parser = argparse.ArgumentParser(
description='Given a JSON dependency graph, output a JSON with a ' description='Given a JSON dependency graph, output a JSON with a '
...@@ -86,8 +120,6 @@ def main(): ...@@ -86,8 +120,6 @@ def main():
required=True, required=True,
help='Path to the JSON file containing the dependency graph. ' help='Path to the JSON file containing the dependency graph. '
'See the README on how to generate this file.') '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( arg_parser.add_argument(
'--git-dir', '--git-dir',
type=str, type=str,
...@@ -110,6 +142,7 @@ def main(): ...@@ -110,6 +142,7 @@ def main():
CLASSES_TO_COUNT_INBOUND)) CLASSES_TO_COUNT_INBOUND))
stats.update(_generate_package_cycle_stats(package_graph)) stats.update(_generate_package_cycle_stats(package_graph))
stats.update(_generate_chrome_java_size(class_graph)) stats.update(_generate_chrome_java_size(class_graph))
stats.update(_generate_loc_stats(arguments.git_dir))
if arguments.output: if arguments.output:
with open(arguments.output, 'w') as f: with open(arguments.output, 'w') as f:
......
...@@ -15,6 +15,14 @@ import subprocess ...@@ -15,6 +15,14 @@ import subprocess
import sys import sys
from collections import OrderedDict from collections import OrderedDict
from collections import defaultdict 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 = [ _M12N_DIRS = [
'chrome/browser', 'chrome/browser',
...@@ -120,11 +128,11 @@ def GenerateLOCStats(start_date, ...@@ -120,11 +128,11 @@ def GenerateLOCStats(start_date,
if json_format: if json_format:
return json.dumps({ return json.dumps({
'loc_modularized': total_m12n, KEY_LOC_MODULARIZED: total_m12n,
'loc_legacy': total_legacy, KEY_LOC_LEGACY: total_legacy,
'rankings': rankings, KEY_RANKINGS: rankings,
'start_date': start_date, KEY_START_DATE: start_date,
'end_date': end_date, KEY_END_DATE: end_date,
}) })
else: else:
output = [] output = []
...@@ -169,12 +177,13 @@ def _print_progress(msg, prev_msg_len): ...@@ -169,12 +177,13 @@ def _print_progress(msg, prev_msg_len):
print(msg, end='\r') print(msg, end='\r')
def _get_date_range(args): def GetDateRange(*, past_days: int) -> Tuple[str, str]:
if args.date: """Returns start and end date for a period of past days.
return args.date
Use the results as start_date and end_date of GenerateLOCStats.
"""
today = datetime.date.today() 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 past = datetime.datetime(today.year, today.month, today.day) - delta
return (past.date().isoformat(), today.isoformat()) return (past.date().isoformat(), today.isoformat())
...@@ -215,7 +224,11 @@ if __name__ == "__main__": ...@@ -215,7 +224,11 @@ if __name__ == "__main__":
if args.past_days and args.past_days < 0: if args.past_days and args.past_days < 0:
raise parser.error('--past-days must be non-negative.') 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, result = GenerateLOCStats(start_date,
end_date, end_date,
quiet=args.quiet, 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