%% %% %CopyrightBegin% %% %% Copyright Ericsson AB 2012-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. %% You may obtain a copy of the License at %% %% http://www.apache.org/licenses/LICENSE-2.0 %% %% Unless required by applicable law or agreed to in writing, software %% distributed under the License is distributed on an "AS IS" BASIS, %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %% See the License for the specific language governing permissions and %% limitations under the License. %% %% %CopyrightEnd% %% -module(ts_benchmark). -include_lib("common_test/include/ct_event.hrl"). -include_lib("kernel/include/file.hrl"). -include("ts.hrl"). -export([benchmarks/0, run/3]). %% gen_event callbacks -export([init/1, handle_event/2]). benchmarks() -> {ok, Cwd} = file:get_cwd(), ts_lib:specialized_specs(Cwd,"bench"). run(Specs, Opts, Vars) -> {ok, Cwd} = file:get_cwd(), {{YY,MM,DD},{HH,Mi,SS}} = calendar:local_time(), BName = lists:concat([YY,"_",MM,"_",DD,"T",HH,"_",Mi,"_",SS]), BDir = filename:join([Cwd,BName]), file:make_dir(BDir), [ts_run:run(atom_to_list(Spec), [{spec, [atom_to_list(Spec)++"_bench.spec"]}], [{event_handler, {ts_benchmark, [Spec,BDir]}}|Opts],Vars) || Spec <- Specs], file:delete(filename:join(Cwd,"latest_benchmark")), {ok,D} = file:open(filename:join(Cwd,"latest_benchmark"),[write]), io:format(D,"~ts", [BDir]), file:close(D). %%%=================================================================== %%% gen_event callbacks %%%=================================================================== -record(state, { spec, suite, tc, stats_dir}). init([Spec,Dir]) -> {ok, #state{ spec = Spec, stats_dir = Dir }}. handle_event(#event{name = tc_start, data = {Suite,Tc}}, State) -> {ok,State#state{ suite = Suite, tc = Tc}}; handle_event(#event{name = benchmark_data, data = Data}, State) -> Spec = proplists:get_value(application, Data, State#state.spec), Suite = proplists:get_value(suite, Data, State#state.suite), Tc = proplists:get_value(name, Data, State#state.tc), Value = proplists:get_value(value, Data), {ok, D} = file:open(filename:join( [State#state.stats_dir, lists:concat([e(Spec),"-",e(Suite),"-", e(Tc),".ebench"])]), [append]), io:format(D, "~p~n",[Value]), file:close(D), {ok, State}; handle_event(_Event, State) -> {ok, State}. e(Atom) when is_atom(Atom) -> Atom; e(Str) when is_list(Str) -> lists:map(fun($/) -> $\\; (C) -> C end,Str).