aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/edit_prof.erl
blob: 08aea4dec6a32ebfec5f9dd5624705fedd8c9dc7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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).