From f52f195ef8896810a3ba0ad66281728fd3040b8c Mon Sep 17 00:00:00 2001 From: Tobias Pfeiffer Date: Thu, 16 Nov 2023 09:31:42 +0100 Subject: [PATCH] Basic exposure of jit_enabled? data in system --- lib/benchee/system.ex | 14 +++++++++++++- test/benchee/system_test.exs | 17 ++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/lib/benchee/system.ex b/lib/benchee/system.ex index 9d015d0c..35f35e55 100644 --- a/lib/benchee/system.ex +++ b/lib/benchee/system.ex @@ -9,15 +9,18 @@ defmodule Benchee.System do alias Benchee.Conversion.Memory alias Benchee.Suite + alias Benchee.Utility.ErlangVersion @doc """ Adds system information to the suite (currently elixir and erlang versions). """ @spec system(Suite.t()) :: Suite.t() def system(suite = %Suite{}) do + erlang_version = erlang() system_info = %{ elixir: elixir(), - erlang: erlang(), + erlang: erlang_version, + jit_enabled?: jit_enabled?(erlang_version), num_cores: num_cores(), os: os(), available_memory: available_memory(), @@ -50,6 +53,15 @@ defmodule Benchee.System do defp elixir, do: System.version() + @first_jit_version "24.0.0" + defp jit_enabled?(erlang_version) do + if ErlangVersion.includes_fixes_from?(erlang_version, @first_jit_version) do + :erlang.system_info(:emu_flavor) == :jit + else + false + end + end + defp num_cores do System.schedulers_online() end diff --git a/test/benchee/system_test.exs b/test/benchee/system_test.exs index e83f4d3b..0a0bb9a8 100644 --- a/test/benchee/system_test.exs +++ b/test/benchee/system_test.exs @@ -1,10 +1,12 @@ defmodule Benchee.SystemTest do use ExUnit.Case, async: true - alias Benchee.Suite import ExUnit.CaptureIO import Benchee.System + alias Benchee.Suite + alias Benchee.Utility.ErlangVersion + test ".system adds the content to a given suite" do system_info = system(%Suite{}) @@ -121,4 +123,17 @@ defmodule Benchee.SystemTest do assert warning =~ ~r/not.*check.*protocol.*consolidat/i end end + + # It may be compiled in a way that it doesn't but in the CI and dev machines it should be fine + test ".jit_enabled? should say true for versions > 24.0.0" do + system_data = system(%Suite{}).system + jit_enabled? = system_data.jit_enabled? + erlang_version = system_data.erlang + + if ErlangVersion.includes_fixes_from?(erlang_version, "24.0.0") do + assert jit_enabled? + else + refute jit_enabled? + end + end end