소스 검색

ft: 代码修改

master
SisMaker 3 년 전
부모
커밋
95c6ccc296
8개의 변경된 파일52개의 추가작업 그리고 64개의 파일을 삭제
  1. +7
    -2
      c_src/tracer/tpTracerNif.c
  2. +2
    -3
      include/eTpf.hrl
  3. +16
    -0
      rebar.config
  4. +12
    -20
      src/eTpf.erl
  5. +6
    -8
      src/tracer/tpTracerFile.erl
  6. +0
    -25
      src/tracer/tpTracerPool.erl
  7. +6
    -3
      src/tracer/tpTracerShell.erl
  8. +3
    -3
      src/tracer/tpTracerSocket.erl

+ 7
- 2
c_src/tracer/tpTracerNif.c 파일 보기

@ -55,6 +55,7 @@ NIF_ATOMS(NIF_ATOM_DECL)
static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
{
NIF_ATOMS(NIF_ATOM_INIT)
*priv_data = NULL;
return 0;
}
@ -68,6 +69,7 @@ static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data, ERL_N
static void unload(ErlNifEnv* env, void* priv_data)
{
}
// enabled(TraceTag, TracerState, Tracee)
@ -150,10 +152,13 @@ static ERL_NIF_TERM enabled_garbage_collection(ErlNifEnv *env, int argc, const E
// trace(TraceTag, TracerState, Tracee, TraceTerm, Opts)
static ERL_NIF_TERM trace(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
enif_fprintf(stdout, "IMY************trace:");
for(int i = 0; i <= argc - 1; i++) {
enif_fprintf(stdout, "IMY************trace000 %T\n", argv[i]);
if(i != 1) {
enif_fprintf(stdout, " %d %T", i, argv[i]);
}
}
enif_fprintf(stdout, "\n");
ERL_NIF_TERM tracers, head, ts, extra, mspec, msg;
ErlNifPid tracer;

+ 2
- 3
include/eTpf.hrl 파일 보기

@ -13,7 +13,7 @@
, tcmNestStruct => 6
}).
-define(eTpfPoolId, eTpfPoolId).
-define(eTpfTracerId, eTpfTracerId).
%%
-export_type([input/0, userInput/0, traceOpts/0, tracerOpts/0]).
@ -27,8 +27,7 @@
-type traceOpts() :: #{
mode => trace | profile
, poolId => any()
, poolSize => pos_integer()
, tracerId => any()
, send => boolean()
, running => boolean()
, process_dump => boolean() %% trace选项 使`process_dump`, `true`

+ 16
- 0
rebar.config 파일 보기

@ -0,0 +1,16 @@
{erl_opts, [debug_info]}.
{deps, [
{eFmt, ".*", {git, "http://192.168.0.88:53000/SisMaker/eFmt.git", {branch, "master"}}},
{eGbh, ".*", {git, "http://192.168.0.88:53000/SisMaker/eGbh.git", {branch, "master"}}}
]}.
{shell, [
% {config, "config/sys.config"},
{apps, [eTpf]}
]}.
% {pre_hooks,
% [{"", compile, "escript c_src/eNpc compile"}]}.
% {post_hooks,
% [{"", clean, "escript c_src/eNpc clean"}]}.

+ 12
- 20
src/eTpf.erl 파일 보기

@ -15,7 +15,7 @@
-spec trace(userInput()) -> ok.
trace(Input) ->
trace(Input, tpTracerConsole).
trace(Input, tpTracerShell).
-spec trace(userInput(), module()) -> ok.
trace(Input, TracerMod) ->
@ -33,23 +33,19 @@ trace(Input, TracerMod, TracerOpts, TraceOpts) when is_list(Input) ->
do_trace(InputList, TracerMod, TracerOpts, TraceOpts) ->
_ = application:ensure_all_started(eTpf),
%% Start the pool of tracer processes.
PoolID = maps:get(poolId, TraceOpts, ?eTpfPoolId),
PoolSize = maps:get(poolSize, TraceOpts, erlang:system_info(schedulers)),
true = PoolSize > 0,
{ok, PoolPid} = supervisor:start_child(eTpf_sup, #{
id => PoolID,
start => {tpTracerPool, start_link, [PoolSize, TracerMod, TracerOpts]},
TracerId = maps:get(tracerId, TraceOpts, ?eTpfTracerId),
{ok, TracerPid} = supervisor:start_child(eTpf_sup, #{
id => TracerId,
start => {TracerMod, start_link, [TracerOpts]},
restart => temporary,
type => supervisor
type => worker
}),
Tracers = tpTracerPool:tracers(PoolPid),
TracersMap = maps:from_list(lists:zip(lists:seq(0, length(Tracers) - 1), Tracers)),
Mode = maps:get(mode, TraceOpts, trace),
Tem0InputList = flattenInput(InputList, []),
Tem1InputList = ensurePattern(Tem0InputList),
LastInputList = ensureScope(Tem1InputList),
traceInput(LastInputList, #{mode => Mode, tracers => TracersMap}, TraceOpts),
traceInput(LastInputList, {Mode, TracerPid}, TraceOpts),
ok.
flattenInput([], Acc) ->
@ -111,11 +107,7 @@ traceInput([Mod | Tail], TracerState, TraceOpts) when is_atom(Mod) ->
traceInput(Tail, TracerState, TraceOpts).
stop() ->
stop(?eTpfPoolId).
%% @todo Confirm that we don't need to stop tracing,
%% that just terminating the tracers is enough. The
%% NIF does cancel traces when tracers go away, but
%% better make sure.
stop(PoolID) ->
supervisor:terminate_child(eTpf_sup, PoolID).
stop(?eTpfTracerId).
stop(TracerId) ->
supervisor:terminate_child(eTpf_sup, TracerId).

+ 6
- 8
src/tracer/tpTracerFile.erl 파일 보기

@ -2,8 +2,8 @@
-include("eTpf.hrl").
-export([
start_link/2
, init/3
start_link/1
, init/2
]).
%% sys callbacks
@ -26,17 +26,15 @@
, tcmIsCut = false
}).
start_link(Nth, Prefix) when is_list(Prefix) ->
start_link(Nth, #{fBaseName => Prefix});
start_link(Nth, Opts) when is_map(Opts) ->
Pid = proc_lib:spawn_link(?MODULE, init, [self(), Nth, Opts]),
start_link(Opts) ->
Pid = proc_lib:spawn_link(?MODULE, init, [self(), Opts]),
{ok, Pid}.
init(Parent, Nth, TracerOpts) ->
init(Parent, TracerOpts) ->
process_flag(message_queue_data, off_heap),
process_flag(trap_exit, true),
%% No need to close the file, it'll be closed when the process exits.
Filename = filename:flatten([maps:get(fBaseName, TracerOpts, "traces.lz4"), ".", integer_to_list(Nth)]),
Filename = maps:get(fBaseName, TracerOpts, "traces.lz4"),
{ok, IoDevice} = file:open(Filename, [write, raw]),
TcmIsCut = maps:get(tcmIsCut, TracerOpts, maps:get(tcmDepth, ?defTcmMap)),

+ 0
- 25
src/tracer/tpTracerPool.erl 파일 보기

@ -1,25 +0,0 @@
-module(tpTracerPool).
-behaviour(supervisor).
-export([
start_link/3
, init/1
, tracers/1
]).
start_link(NumTracers, TracerMod, Opts) ->
supervisor:start_link(?MODULE, [NumTracers, TracerMod, Opts]).
init([NumTracers, TracerMod, Opts]) ->
ChildSpecs = [
#{
id => {tracer, Index},
start => {TracerMod, start_link, [Index, Opts]},
restart => temporary
} || Index <- lists:seq(1, NumTracers)
],
SupFlags = #{strategy => one_for_all, intensity => 5, period => 10},
{ok, {SupFlags, ChildSpecs}}.
tracers(PoolPid) ->
[Pid || {_, Pid, _, _} <- supervisor:which_children(PoolPid)].

src/tracer/tpTracerConsole.erl → src/tracer/tpTracerShell.erl 파일 보기

@ -1,6 +1,9 @@
-module(tpTracerConsole).
-module(tpTracerShell).
-export([
start_link/1
]).
-export([start_link/2]).
-export([
init/1
, loop/1
@ -11,7 +14,7 @@
-export([system_terminate/4]).
-export([system_code_change/4]).
start_link(_Nth, _TracerOpts) ->
start_link(_TracerOpts) ->
Pid = proc_lib:spawn_link(?MODULE, init, [self()]),
{ok, Pid}.

+ 3
- 3
src/tracer/tpTracerSocket.erl 파일 보기

@ -1,7 +1,7 @@
-module(tpTracerSocket).
-export([
start_link/2
start_link/1
, init/2
]).
@ -18,9 +18,9 @@
timerRef :: reference() | undefined
}).
start_link(Nth, TracerOpts) ->
start_link(TracerOpts) ->
BasePort = maps:get(port, TracerOpts),
Pid = proc_lib:spawn_link(?MODULE, init, [self(), BasePort + Nth - 1]),
Pid = proc_lib:spawn_link(?MODULE, init, [self(), BasePort]),
{ok, Pid}.
init(Parent, Port) ->

불러오는 중...
취소
저장