diff options
author | Björn Gustavsson <bjorn@erlang.org> | 2013-03-07 12:33:26 +0100 |
---|---|---|
committer | Björn Gustavsson <bjorn@erlang.org> | 2013-05-31 14:52:19 +0200 |
commit | 77fde7589ae338efa15fecfb5f75ec9168fa921f (patch) | |
tree | 2812e5d376ae5511218365e3a2aaad6f9862eebb /lib/asn1/src/asn1ct_func.erl | |
parent | 9d56389aa8fd0d366df7b0f666369d23cf946639 (diff) | |
download | otp-77fde7589ae338efa15fecfb5f75ec9168fa921f.tar.gz otp-77fde7589ae338efa15fecfb5f75ec9168fa921f.tar.bz2 otp-77fde7589ae338efa15fecfb5f75ec9168fa921f.zip |
Open the output file in raw mode with delayed write
This change brings down the execution time on my computer for the
entire asn1 test suite from about 340 seconds to 310 seconds.
Diffstat (limited to 'lib/asn1/src/asn1ct_func.erl')
-rw-r--r-- | lib/asn1/src/asn1ct_func.erl | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/lib/asn1/src/asn1ct_func.erl b/lib/asn1/src/asn1ct_func.erl index 2d221ca1b9..262bef6862 100644 --- a/lib/asn1/src/asn1ct_func.erl +++ b/lib/asn1/src/asn1ct_func.erl @@ -37,9 +37,13 @@ need(MFA) -> cast({need,MFA}). generate(Fd) -> - req({generate,Fd}), + Used0 = req(get_used), erase(?MODULE), - ok. + Used = sofs:set(Used0, [mfa]), + Code = sofs:relation(asn1ct_rtt:code(), [{mfa,code}]), + Funcs0 = sofs:image(Code, Used), + Funcs = sofs:to_external(Funcs0), + ok = file:write(Fd, Funcs). req(Req) -> gen_server:call(get(?MODULE), Req, infinity). @@ -64,9 +68,8 @@ handle_cast({need,MFA}, #st{used=Used0}=St) -> {noreply,St} end. -handle_call({generate,Fd}, _From, #st{used=Used}=St) -> - generate(Fd, Used), - {stop,normal,ok,St}. +handle_call(get_used, _From, #st{used=Used}=St) -> + {stop,normal,gb_sets:to_list(Used),St}. terminate(_, _) -> ok. @@ -75,14 +78,6 @@ call_args([A|As], Sep) -> [Sep,A|call_args(As, ", ")]; call_args([], _) -> []. -generate(Fd, Used0) -> - Used1 = gb_sets:to_list(Used0), - Used = sofs:set(Used1, [mfa]), - Code = sofs:relation(asn1ct_rtt:code(), [{mfa,code}]), - Funcs0 = sofs:image(Code, Used), - Funcs = sofs:to_external(Funcs0), - io:put_chars(Fd, Funcs). - pull_in_deps(Ws0, Used0) -> case gb_sets:is_empty(Ws0) of true -> |