diff options
-rw-r--r-- | lib/dialyzer/src/dialyzer_cl_parse.erl | 9 | ||||
-rw-r--r-- | lib/dialyzer/src/dialyzer_coordinator.erl | 7 | ||||
-rw-r--r-- | lib/dialyzer/src/dialyzer_timing.erl | 29 |
3 files changed, 34 insertions, 11 deletions
diff --git a/lib/dialyzer/src/dialyzer_cl_parse.erl b/lib/dialyzer/src/dialyzer_cl_parse.erl index 5baba7d11b..05e50c3d6b 100644 --- a/lib/dialyzer/src/dialyzer_cl_parse.erl +++ b/lib/dialyzer/src/dialyzer_cl_parse.erl @@ -164,7 +164,7 @@ cl(["--src"|T]) -> cl(["--no_spec"|T]) -> put(dialyzer_options_use_contracts, false), cl(T); -cl(["--time"|T]) -> +cl(["--statistics"|T]) -> put(dialyzer_timing, true), cl(T); cl(["-v"|_]) -> @@ -356,7 +356,7 @@ help_message() -> [--apps applications] [-o outfile] [--build_plt] [--add_to_plt] [--remove_from_plt] [--check_plt] [--no_check_plt] [--plt_info] [--get_warnings] - [--no_native] [--fullpath] [--time] + [--no_native] [--fullpath] [--statistics] Options: files_or_dirs (for backwards compatibility also as: -c files_or_dirs) Use Dialyzer from the command line to detect defects in the @@ -423,8 +423,9 @@ Options: Make Dialyzer a bit more quiet. --verbose Make Dialyzer a bit more verbose. - --time - Print time information + --statistics + Prints information about the progress of execution (analysis phases, + time spent in each and size of the relative input). --build_plt The analysis starts from an empty plt and creates a new one from the files specified with -c and -r. Only works for beam files. diff --git a/lib/dialyzer/src/dialyzer_coordinator.erl b/lib/dialyzer/src/dialyzer_coordinator.erl index 490cfb8d49..63b2d8c3f2 100644 --- a/lib/dialyzer/src/dialyzer_coordinator.erl +++ b/lib/dialyzer/src/dialyzer_coordinator.erl @@ -105,6 +105,12 @@ spawn_jobs(Mode, Jobs, InitData) when Count + 1 end, JobCount = lists:foldl(Fold, 0, Jobs), + Unit = + case Mode of + 'typesig' -> "SCCs"; + 'dataflow' -> "modules" + end, + dialyzer_timing:send_size_info(JobCount, Unit), #state{active = JobCount, result = [], init_data = InitData}; spawn_jobs(Mode, Jobs, InitData) when Mode =:= 'compile'; Mode =:= 'warnings' -> @@ -122,6 +128,7 @@ spawn_jobs(Mode, Jobs, InitData) when InitTickets = 4*CPUs, {Tickets, Queue, JobCount} = lists:foldl(Fold, {InitTickets, queue:new(), 0}, Jobs), + dialyzer_timing:send_size_info(JobCount, "modules"), InitResult = case Mode of 'warnings' -> []; diff --git a/lib/dialyzer/src/dialyzer_timing.erl b/lib/dialyzer/src/dialyzer_timing.erl index dc4d522c2f..c2a7b3ecf8 100644 --- a/lib/dialyzer/src/dialyzer_timing.erl +++ b/lib/dialyzer/src/dialyzer_timing.erl @@ -26,7 +26,7 @@ -module(dialyzer_timing). --export([init/1, start_stamp/1, end_stamp/0, stop/0]). +-export([init/1, start_stamp/1, send_size_info/2, end_stamp/0, stop/0]). -spec init(boolean()) -> ok. @@ -43,7 +43,7 @@ loop_init(Active) -> case Active of true -> io:format("\n"), - loop(now()); + loop(now(), 0, ""); false -> dummy_loop() end. @@ -53,16 +53,25 @@ dummy_loop() -> _ -> dummy_loop() end. -loop(LastNow) -> +loop(LastNow, Size, Unit) -> receive {stamp, Msg, Now} -> io:format(" ~-10s (+~4.2fs):", [Msg, diff(Now, LastNow)]), - loop(Now); + loop(Now, 0, ""); {stamp, Now} -> - io:format("~7.2fs\n", [diff(Now, LastNow)]), - loop(Now); + SizeStr = + case Size of + 0 -> ""; + _ -> + Data = io_lib:format("~p ~s",[Size, Unit]), + io_lib:format(" (~12s)",[Data]) + end, + io:format("~7.2fs~s\n", [diff(Now, LastNow), SizeStr]), + loop(Now, 0, ""); + {size, NewSize, NewUnit} -> + loop(LastNow, NewSize, NewUnit); {Pid, stop, Now} -> - io:format(" ~-10s (+~4.2fs)\n", ["",diff(Now, LastNow)]), + io:format(" ~-9s (+~5.2fs)\n", ["",diff(Now, LastNow)]), Pid ! ok end. @@ -78,6 +87,12 @@ end_stamp() -> ?MODULE ! {stamp, now()}, ok. +-spec send_size_info(integer(), string()) -> ok. + +send_size_info(Size, Unit) -> + ?MODULE ! {size, Size, Unit}, + ok. + -spec stop() -> ok. stop() -> |