Skip to content

Commit

Permalink
feat: define the public interface
Browse files Browse the repository at this point in the history
  • Loading branch information
awadell1 committed Jul 16, 2024
1 parent 0399fa4 commit 363aece
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 36 deletions.
4 changes: 3 additions & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ version = "0.6.0"
BSON = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0"
BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
CodecZlib = "944b1d66-785c-5afd-91f1-9de20f533193"
Compat = "34da2185-b29b-5c13-b0c7-acf172513d20"
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
LibGit2 = "76f85450-5226-5b5a-8eaa-529ad045b433"
Expand All @@ -28,13 +29,14 @@ BSON = "0.3"
BenchmarkTools = "1.5"
CUDA = "5"
CodecZlib = "0.7"
Compat = "4.11, 4.15"
Dates = "1.9"
JSON = "0.21"
LibGit2 = "1.9"
Revise = "3"
NVTX = "0.3"
Pkg = "1.9"
Profile = "1.9"
Revise = "3"
Statistics = "1.9"
Test = "1.9"
UUIDs = "1.9"
Expand Down
1 change: 0 additions & 1 deletion docs/src/ci.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,5 +70,4 @@ PkgJogger.@test_benchmarks

```@docs
PkgJogger.ci
PkgJogger.JOGGER_PKGS
```
18 changes: 2 additions & 16 deletions src/PkgJogger.jl
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,10 @@ using LibGit2
using Statistics
using Test
using Profile
using Compat: @compat

export @jog, @test_benchmarks

import Base: PkgId
"""
Packages that are required by modules created with [`@jog`](@ref)
Generated modules will access these via `Base.loaded_modules`
"""
const JOGGER_PKGS = [
Base.identify_package(@__MODULE__, string(@__MODULE__)),
PkgId(UUID("6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"), "BenchmarkTools"),
PkgId(UUID("cf7118a7-6976-5b1a-9a39-7adc72f591a4"), "UUIDs"),
]

const PKG_JOGGER_VER = VersionNumber(
Base.parsed_toml(joinpath(@__DIR__, "..", "Project.toml"))["version"]
)
@compat public judge, ci, load_benchmarks, save_benchmarks, locate_benchmarks, tune!, getsuite

include("utils.jl")
include("profile.jl")
Expand Down
10 changes: 4 additions & 6 deletions src/ci.jl
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,9 @@ function sandbox(f, pkg)
current_load_path = Base.LOAD_PATH

# Construct PackageSpec for self
self = PackageSpec(
name = JOGGER_PKGS[1].name,
uuid = JOGGER_PKGS[1].uuid,
path = Base.pkgdir(PkgJogger),
)
self_pkgid = Base.identify_package(@__MODULE__, string(@__MODULE__))
self = PackageSpec( name = self_pkgid.name, uuid = self_pkgid.uuid)
path = Base.pkgdir(@__MODULE__),

# Locate benchmark project
# TODO: Use Sub-project https://github.com/JuliaLang/Pkg.jl/issues/1233
Expand Down Expand Up @@ -118,7 +116,7 @@ function save_benchmarks(filename, results::BenchmarkTools.BenchmarkGroup)
"datetime" => Dates.now(),
"benchmarks" => results,
"git" => git_info(filename),
"pkgjogger" => PkgJogger.PKG_JOGGER_VER,
"pkgjogger" => pkgversion(@__MODULE__),
)

# Write benchmark to disk
Expand Down
23 changes: 11 additions & 12 deletions src/jogger.jl
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,6 @@ macro jog(pkg)
if !isdir(bench_dir)
error("No benchmark directory found for $pkg. Expected: $bench_dir")
end
# Generate Using Statements
using_statements = Expr[]
for pkg in JOGGER_PKGS
pkgname = Symbol(pkg.name)
push!(using_statements, :(const $pkgname = Base.loaded_modules[$pkg]))
end

# Generate modules
suite_modules = Expr[]
Expand All @@ -64,7 +58,6 @@ macro jog(pkg)
end

# Strip redundant quote blocks and flatten modules into a single single Vector{Expr}`
# This is needed to avoid wrapping module blocks in `begin .. end` blocks
suite_exp = mapreduce(Base.Fix2(getfield, :args), vcat, suite_modules)

# String representation of the Jogger module for use in doc strings
Expand All @@ -74,7 +67,13 @@ macro jog(pkg)
quote
@eval module $modname
using $pkg
$(using_statements...)
using Compat: @compat
using UUIDs: uuid4
using PkgJogger: PkgJogger
using BenchmarkTools: BenchmarkTools

# The public interface of a Jogger
@compat public suite, benchmark, run, profile, save_benchmarks, load_benchmarks, judge, BENCHMARK_DIR

# Set Revise Mode and put submodules here
__revise_mode__ = :eval
Expand Down Expand Up @@ -195,7 +194,7 @@ macro jog(pkg)
"""
function save_benchmarks(results)
filename = joinpath(BENCHMARK_DIR, "trial", "$(UUIDs.uuid4()).bson.gz")
filename = joinpath(BENCHMARK_DIR, "trial", "$(uuid4()).bson.gz")
PkgJogger.save_benchmarks(filename, results)
filename
end
Expand Down Expand Up @@ -240,13 +239,13 @@ macro jog(pkg)
```julia
# Judge results by UUID
$($mod_str).judge("$(UUIDs.uuid4())", "$(UUIDs.uuid4())")
$($mod_str).judge("$(uuid4())", "$(uuid4())")
[...]
```
```julia
# Judge using the minimum, instead of the median, time
$($mod_str).judge("path/to/results.bson.gz", "$(UUIDs.uuid4())"; metric=minimum)
$($mod_str).judge("path/to/results.bson.gz", "$(uuid4())"; metric=minimum)
[...]
```
"""
Expand Down Expand Up @@ -314,7 +313,7 @@ function build_module(s::BenchModule)

# If Revise.jl has been loaded, use it to track changes to the
# benchmarking module. Otherwise, don't track changes.
revise_id = PkgId(UUID("295af30f-e4ad-537b-8983-00126c2a3abe"), "Revise")
revise_id = Base.PkgId(UUID("295af30f-e4ad-537b-8983-00126c2a3abe"), "Revise")
if haskey(Base.loaded_modules, revise_id)
revise_exp = :(Base.loaded_modules[$revise_id].track($modname, $(s.filename)))
else
Expand Down

0 comments on commit 363aece

Please sign in to comment.