Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:19
eep
eep-1.1-git.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File eep-1.1-git.patch of Package eep
diff --git a/README.md b/README.md index b02a32a..11ca92c 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ On target system: 1. Make sure the target system can use eep module (link eep to your rebar project or place compiled eep.beam at any code path) 2. Collect runtime data to local file <pre> -1> eep:start_file_tracing("file_name"), timer:sleep(60000), eep:stop_tracing(). +1> eep:start_file_tracing("file_name"), timer:sleep(10000), eep:stop_tracing(). </pre> 3. Copy $PWD/file_name.trace from the target system @@ -53,7 +53,7 @@ Also 1. Collect specific module calls only <pre> -1> eep:start_file_tracing("file_name", [], my_module). +1> eep:start_file_tracing("file_name", [], [my_module_1, my_module_2]). </pre> 2. Include time spent waiting for event (not running) <pre> diff --git a/src/eep.app.src b/src/eep.app.src index 3f17e25..f110fc3 100644 --- a/src/eep.app.src +++ b/src/eep.app.src @@ -3,6 +3,7 @@ {description, "Erlang Easy Profiling (dbg:trace* to kcachegrind)"}, {vsn, "1.0"}, {registered, []}, + {modules, []}, {applications, [ kernel, stdlib diff --git a/src/eep.erl b/src/eep.erl index cb1576a..0e563d9 100644 --- a/src/eep.erl +++ b/src/eep.erl @@ -133,8 +133,7 @@ kcgfile(FileName) -> dumpfile(FileName) -> FileName ++ ".dump". --record(cvn_state, {processes = ets:new(unnamed, [public, {write_concurrency, true}, {read_concurrency, true}]), - saver, options}). +-record(cvn_state, {processes, saver, options}). -record(cvn_child_state, {pid, delta = 0, delta_ts = undefined, min_time = undefined, max_time = undefined, saver, stack = queue:new(), options}). -record(cvn_item, {mfa, self = 0, ts, calls = 1, returns = 0, subcalls = orddict:new()}). @@ -178,12 +177,16 @@ callgrind_convertor({drop, _}, State) -> % ignore dropped State; callgrind_convertor(default_state, {FileName, Options}) -> + Processes = ets:new(unnamed, [public, {write_concurrency, true}, {read_concurrency, true}]), Saver = case FileName of nofile -> self(); - _ -> spawn_link(?MODULE, save_kcachegrind_format, [FileName]) + _ -> + Pid = spawn_link(?MODULE, save_kcachegrind_format, [FileName]), + ets:give_away(Processes, Pid, none), + Pid end, - DefaultState = #cvn_state{saver = Saver, options = Options}, - Saver ! {process_table, DefaultState#cvn_state.processes}, + DefaultState = #cvn_state{saver = Saver, options = Options, processes = Processes}, + Saver ! {process_table, Processes}, DefaultState; callgrind_convertor(end_of_trace, #cvn_state{processes = Processes}) -> ets:foldl(fun({_, Child}, _) -> Child ! finalize end, nothing, Processes), @@ -421,6 +424,7 @@ max_ts(One, Two) -> receive_all(Prev) -> receive + {process_table, _} -> receive_all(Prev); M -> receive_all([M | Prev]) after 500 -> lists:reverse(Prev) end. @@ -439,8 +443,8 @@ test_unwind_1() -> {trace_ts, Pid, call, {a,b,1}, 7}, {trace_ts, Pid, return_to, {x,b,1}, 10} ], - lists:foldl(fun(El, St) -> callgrind_convertor(El, St) end, callgrind_convertor(default_state, nofile), TestSet), - [{bytes,<<"ob=<0.1.0>\nfl=a\nfn=a:b/1\n1 3\n\n">>,1}] = receive_all([]). + lists:foldl(fun(El, St) -> callgrind_convertor(El, St) end, callgrind_convertor(default_state, {nofile, []}), TestSet), + [{bytes,<<"ob=<0.1.0>\nfl=a\nfn=a:b/1\n1 3\n\n">>,10}] = receive_all([]). test_unwind_2() -> Pid = list_to_pid("<0.1.0>"), @@ -450,10 +454,10 @@ test_unwind_2() -> {trace_ts, Pid, call, {a,b,3}, 7}, {trace_ts, Pid, return_to, {x,b,1}, 10} ], - lists:foldl(fun(El, St) -> callgrind_convertor(El, St) end, callgrind_convertor(default_state, nofile), TestSet), - [{bytes,<<"ob=<0.1.0>\nfl=a\nfn=a:b/3\n1 3\n\n">>,7}, - {bytes,<<"ob=<0.1.0>\nfl=a\nfn=a:b/2\n1 4\ncfl=a\ncfn=a:b/3\ncalls=1 1\n1 3\n\n">>, 7}, - {bytes,<<"ob=<0.1.0>\nfl=a\nfn=a:b/1\n1 2\ncfl=a\ncfn=a:b/2\ncalls=1 1\n1 7\n\n">>, 3}] = receive_all([]). + lists:foldl(fun(El, St) -> callgrind_convertor(El, St) end, callgrind_convertor(default_state, {nofile, []}), TestSet), + [{bytes,<<"ob=<0.1.0>\nfl=a\nfn=a:b/3\n1 3\n\n">>,10}, + {bytes,<<"ob=<0.1.0>\nfl=a\nfn=a:b/2\n1 4\ncfl=a\ncfn=a:b/3\ncalls=1 1\n1 3\n\n">>, 10}, + {bytes,<<"ob=<0.1.0>\nfl=a\nfn=a:b/1\n1 2\ncfl=a\ncfn=a:b/2\ncalls=1 1\n1 7\n\n">>, 10}] = receive_all([]). test_unwind_3() -> Pid = list_to_pid("<0.1.0>"), @@ -477,13 +481,13 @@ test_unwind_3() -> {trace_ts,Pid,return_to,{prim_file,drv_command_nt,3},{1384,248547,512397}}, {trace_ts,Pid,return_to,{prim_file,write,2},{1384,248547,512404}} ], - lists:foldl(fun(El, St) -> callgrind_convertor(El, St) end, callgrind_convertor(default_state, nofile), TestSet), - [{bytes,<<"ob=<0.1.0>\nfl=erlang\nfn=erlang:port_command/2\n1 3\n\n">>,1384248547512344}, - {bytes,<<"ob=<0.1.0>\nfl=erlang\nfn=erlang:bump_reductions/1\n1 9\n\n">>,1384248547512357}, - {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:get_uint32/1\n1 2\n\n">>,1384248547512380}, - {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:get_uint32/1\n1 2\n\n">>,1384248547512383}, - {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:get_uint64/1\n1 7\ncfl=prim_file\ncfn=prim_file:get_uint32/1\ncalls=2 1\n1 4\n\n">>,1384248547512385}, - {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:translate_response/2\n1 13\ncfl=prim_file\ncfn=prim_file:get_uint64/1\ncalls=1 1\n1 11\n\n">>,1384248547512386}, - {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:drv_get_response/1\n1 8\ncfl=erlang\ncfn=erlang:bump_reductions/1\ncalls=1 1\n1 9\ncfl=prim_file\ncfn=prim_file:translate_response/2\ncalls=1 1\n1 24\n\n">>,1384248547512392}, - {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:drv_get_response/2\n1 2\ncfl=prim_file\ncfn=prim_file:drv_get_response/1\ncalls=1 1\n1 41\n\n">>,1384248547512356}, - {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:drv_command_nt/3\n1 16\ncfl=erlang\ncfn=erlang:port_command/2\ncalls=1 1\n1 3\ncfl=prim_file\ncfn=prim_file:drv_get_response/2\ncalls=1 1\n1 43\n\n">>,1384248547512397}] = receive_all([]). + lists:foldl(fun(El, St) -> callgrind_convertor(El, St) end, callgrind_convertor(default_state, {nofile, []}), TestSet), + [{bytes,<<"ob=<0.1.0>\nfl=erlang\nfn=erlang:port_command/2\n1 3\n\n">>,1384248547512347}, + {bytes,<<"ob=<0.1.0>\nfl=erlang\nfn=erlang:bump_reductions/1\n1 9\n\n">>,1384248547512366}, + {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:get_uint32/1\n1 2\n\n">>,1384248547512382}, + {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:get_uint32/1\n1 2\n\n">>,1384248547512385}, + {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:get_uint64/1\n1 7\ncfl=prim_file\ncfn=prim_file:get_uint32/1\ncalls=2 1\n1 4\n\n">>,1384248547512386}, + {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:translate_response/2\n1 13\ncfl=prim_file\ncfn=prim_file:get_uint64/1\ncalls=1 1\n1 11\n\n">>,1384248547512392}, + {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:drv_get_response/1\n1 8\ncfl=erlang\ncfn=erlang:bump_reductions/1\ncalls=1 1\n1 9\ncfl=prim_file\ncfn=prim_file:translate_response/2\ncalls=1 1\n1 24\n\n">>,1384248547512397}, + {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:drv_get_response/2\n1 2\ncfl=prim_file\ncfn=prim_file:drv_get_response/1\ncalls=1 1\n1 41\n\n">>,1384248547512397}, + {bytes,<<"ob=<0.1.0>\nfl=prim_file\nfn=prim_file:drv_command_nt/3\n1 16\ncfl=erlang\ncfn=erlang:port_command/2\ncalls=1 1\n1 3\ncfl=prim_file\ncfn=prim_file:drv_get_response/2\ncalls=1 1\n1 43\n\n">>,1384248547512404}] = receive_all([]). diff --git a/src/eep_app.erl b/src/eep_app.erl index a0c196e..2b76271 100644 --- a/src/eep_app.erl +++ b/src/eep_app.erl @@ -10,7 +10,7 @@ %% =================================================================== start(_StartType, _StartArgs) -> - ok. + {ok, self()}. stop(_State) -> ok.
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor