aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/edit_prof.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/edit_prof.erl')
-rw-r--r--src/edit_prof.erl36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/edit_prof.erl b/src/edit_prof.erl
new file mode 100644
index 0000000..08aea4d
--- /dev/null
+++ b/src/edit_prof.erl
@@ -0,0 +1,36 @@
+-module(edit_prof).
+-compile(export_all).
+
+start(Filename) ->
+ Edit = spawn_link(fun() -> edit:start(Filename) end),
+ timer:start_link(),
+ eprof:start(),
+ profiling = eprof:profile([Edit, scratch]),
+ ok = eprof:analyse(),
+ analyse_loop().
+
+analyse_loop() ->
+ receive after 5000 ->
+ eprof:total_analyse()
+ end,
+ analyse_loop().
+
+leader() ->
+ {ok, ProfLog} = file:open("prof.log", [write]),
+ spawn_link(?MODULE, leader_proc, [ProfLog]).
+
+leader_proc(Fd) ->
+ receive
+ {io_request, From, ReplyAs, {put_chars, C}} ->
+ file:write(Fd, C),
+ From ! {io_reply, ReplyAs, ok};
+ {io_request, From, ReplyAs, {put_chars, M, F, A}} ->
+ file:write(Fd, apply(M, F, A)),
+ From ! {io_reply, ReplyAs, ok};
+ {io_request, From, ReplyAs, {get_until, _, _, _}} ->
+ From ! {io_reply, ReplyAs, eof};
+ X ->
+ file:write(Fd, io_lib:format("Unexpected: ~p~n", [X]))
+ end,
+ leader_proc(Fd).
+