aboutsummaryrefslogtreecommitdiffstats
path: root/lib/asn1/src/asn1ct_func.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2013-03-07 12:33:26 +0100
committerBjörn Gustavsson <[email protected]>2013-05-31 14:52:19 +0200
commit77fde7589ae338efa15fecfb5f75ec9168fa921f (patch)
tree2812e5d376ae5511218365e3a2aaad6f9862eebb /lib/asn1/src/asn1ct_func.erl
parent9d56389aa8fd0d366df7b0f666369d23cf946639 (diff)
downloadotp-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.erl21
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 ->