diff options
author | Siri Hansen <[email protected]> | 2017-06-16 11:54:41 +0200 |
---|---|---|
committer | Siri Hansen <[email protected]> | 2017-06-16 11:54:41 +0200 |
commit | cdc5545536ddeedf9ae4db20464afa6565f4327d (patch) | |
tree | 85fac17bf876b0f26bbb0c123ba9ed9c7b788059 /lib/observer/src/etop_txt.erl | |
parent | d3a53ae2b2800b33f3b25b83ff2314e64153c2aa (diff) | |
parent | aa4c93a7e04ce57584f7591b2b0cc62f4407ca00 (diff) | |
download | otp-cdc5545536ddeedf9ae4db20464afa6565f4327d.tar.gz otp-cdc5545536ddeedf9ae4db20464afa6565f4327d.tar.bz2 otp-cdc5545536ddeedf9ae4db20464afa6565f4327d.zip |
Merge branch 'siri/unicode-atoms/OTP-14285'
* siri/unicode-atoms/OTP-14285:
[sasl] Improve handling of unicode in rb
[ttb] Handle unicode atoms in trace data and config files
[dbg] Update default trace handler to print unicode atoms correctly
[etop] Fix handling of unicode atoms
[stdlib] Open sys debug logs as utf8
[stdlib] Open error log file as utf8
[sasl] Improve handling of unicode atoms
[ct] Print unicode atoms and strings correctly in common_test logs
Diffstat (limited to 'lib/observer/src/etop_txt.erl')
-rw-r--r-- | lib/observer/src/etop_txt.erl | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/lib/observer/src/etop_txt.erl b/lib/observer/src/etop_txt.erl index 6b8f9df24f..f772d5cc6d 100644 --- a/lib/observer/src/etop_txt.erl +++ b/lib/observer/src/etop_txt.erl @@ -29,8 +29,6 @@ -import(etop,[loadinfo/2,meminfo/2]). --define(PROCFORM,"~-15w~-20s~8w~8w~8w~8w ~-20s~n"). - stop(Pid) -> Pid ! stop. init(Config) -> @@ -50,6 +48,7 @@ do_update(Prev,Config) -> do_update(standard_io,Info,Prev,Config). do_update(Fd,Info,Prev,Config) -> + Encoding = encoding(Fd), {Cpu,NProcs,RQ,Clock} = loadinfo(Info,Prev), io:nl(Fd), writedoubleline(Fd), @@ -73,7 +72,7 @@ do_update(Fd,Info,Prev,Config) -> io:nl(Fd), writepinfo_header(Fd), writesingleline(Fd), - writepinfo(Fd,Info#etop_info.procinfo), + writepinfo(Fd,Info#etop_info.procinfo,Encoding), writedoubleline(Fd), io:nl(Fd), Info. @@ -93,19 +92,37 @@ writepinfo(Fd,[#etop_proc_info{pid=Pid, runtime=Time, cf=MFA, mq=MQ} - |T]) -> - io:fwrite(Fd,?PROCFORM,[Pid,to_list(Name),Time,Reds,Mem,MQ,formatmfa(MFA)]), - writepinfo(Fd,T); -writepinfo(_Fd,[]) -> + |T], + Encoding) -> + io:fwrite(Fd,proc_format(Encoding), + [Pid,to_list(Name,Encoding),Time,Reds,Mem,MQ, + formatmfa(MFA,Encoding)]), + writepinfo(Fd,T,Encoding); +writepinfo(_Fd,[],_) -> ok. -formatmfa({M, F, A}) -> +formatmfa({M, F, A},latin1) -> io_lib:format("~w:~w/~w",[M, F, A]); -formatmfa(Other) -> +formatmfa({M, F, A},_) -> + io_lib:format("~w:~tw/~w",[M, F, A]); +formatmfa(Other,_) -> %% E.g. when running hipe - the current_function for some %% processes will be 'undefined' io_lib:format("~w",[Other]). -to_list(Name) when is_atom(Name) -> atom_to_list(Name); -to_list({_M,_F,_A}=MFA) -> formatmfa(MFA). +to_list(Name,_) when is_atom(Name) -> atom_to_list(Name); +to_list({_M,_F,_A}=MFA,Encoding) -> formatmfa(MFA,Encoding). + +encoding(Device) -> + case io:getopts(Device) of + List when is_list(List) -> + proplists:get_value(encoding,List,latin1); + _ -> + latin1 + end. + +proc_format(latin1) -> + "~-15w~-20s~8w~8w~8w~8w ~-20s~n"; +proc_format(_) -> + "~-15w~-20ts~8w~8w~8w~8w ~-20ts~n". |