blob: 4683a306a13a29856d06836f63b137cd909ba792 [file] [log] [blame]
package ptraceingest
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
"time"
assert "github.com/stretchr/testify/require"
"go.skia.org/infra/go/ingestion"
"go.skia.org/infra/go/sharedconfig"
"go.skia.org/infra/go/testutils"
"go.skia.org/infra/go/vcsinfo"
"go.skia.org/infra/perf/go/cid"
"go.skia.org/infra/perf/go/ingestcommon"
"go.skia.org/infra/perf/go/ptracestore"
)
const (
// directory were the test data are stored.
TEST_DATA_DIR = "./testdata"
// name of the input file containing test data.
TEST_INGESTION_FILE = "nano.json"
)
var (
// Fix the current point as reference. We remove the nano seconds from
// now (below) because commits are only precise down to seconds.
now = time.Now()
// TEST_COMMITS are the commits we are considering. It needs to contain at
// least all the commits referenced in the test file.
TEST_COMMITS = []*vcsinfo.LongCommit{
{
ShortCommit: &vcsinfo.ShortCommit{
Hash: "fe4a4029a080bc955e9588d05a6cd9eb490845d4",
Subject: "Really big code change",
},
Timestamp: now.Add(-time.Second * 10).Round(time.Second),
Branches: map[string]bool{"master": true},
},
}
)
// Tests parsing and processing of a single file.
func TestBenchData(t *testing.T) {
testutils.SmallTest(t)
// Load the sample data file as BenchData.
r, err := os.Open(filepath.Join(TEST_DATA_DIR, TEST_INGESTION_FILE))
assert.NoError(t, err)
benchData, err := ingestcommon.ParseBenchDataFromReader(r)
assert.NoError(t, err)
traceSet := getValueMap(benchData)
expected := map[string]float32{
",arch=x86,config=565,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=min_ms,system=UNIX,test=DeferredSurfaceCopy_discardable_640_480,": 2.215988,
",arch=x86,config=gpu,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=min_ms,system=UNIX,test=DeferredSurfaceCopy_discardable_640_480,": 0.115713276,
",arch=x86,config=565,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=min_ms,system=UNIX,test=DeferredSurfaceCopy_nonDiscardable_640_480,": 2.865907,
",arch=x86,config=gpu,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=min_ms,system=UNIX,test=DeferredSurfaceCopy_nonDiscardable_640_480,": 0.36989987,
",arch=x86,config=nonrendering,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=min_ms,system=UNIX,test=ChunkAlloc_Push_640_480,": 0.009535795,
",arch=x86,config=nonrendering,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=min_ms,system=UNIX,test=Deque_PushAllPopAll_640_480,": 0.019646378,
",arch=x86,config=nonrendering,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=min_ms,system=UNIX,test=ChunkAlloc_PushPop_640_480,": 3.539794921875,
",arch=x86,config=8888,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=min_ms,system=UNIX,test=DeferredSurfaceCopy_discardable_640_480,": 2.223606,
",arch=x86,config=8888,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=min_ms,system=UNIX,test=DeferredSurfaceCopy_nonDiscardable_640_480,": 2.855735,
",arch=x86,config=8888,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=bytes,system=UNIX,test=DeferredSurfaceCopy_nonDiscardable_640_480,": 298888,
",arch=x86,config=8888,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=ops,system=UNIX,test=DeferredSurfaceCopy_nonDiscardable_640_480,": 3333,
",arch=x86,config=memory,gpu=GTX660,model=ShuttleA,os=Ubuntu12,path=src_pipe,sub_result=bytes,symbol=global_weak_symbol,system=UNIX,test=src_pipe_global_weak_symbol,": 158,
",arch=x86,config=meta,gpu=GTX660,model=ShuttleA,os=Ubuntu12,sub_result=max_rss_mb,system=UNIX,test=memory_usage_0_0,": 858,
",arch=x86,config=nonrendering,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=cov,system=UNIX,test=ChunkAlloc_PushPop_640_480,": 0.007271785,
}
assert.Equal(t, expected, traceSet)
}
// Tests the processor in conjunction with the vcs.
func TestPerfProcessor(t *testing.T) {
testutils.MediumTest(t)
orig := ptracestore.Default
dir, err := ioutil.TempDir("", "ptrace")
assert.NoError(t, err)
ptracestore.Default, err = ptracestore.New(dir)
assert.NoError(t, err)
defer func() {
ptracestore.Default = orig
testutils.RemoveAll(t, dir)
}()
vcs := ingestion.MockVCS(TEST_COMMITS)
ingesterConf := &sharedconfig.IngesterConfig{}
// Set up the processor.
processor, err := newPerfProcessor(vcs, ingesterConf, nil)
assert.NoError(t, err)
// Load the example file and process it.
fsResult, err := ingestion.FileSystemResult(filepath.Join(TEST_DATA_DIR, TEST_INGESTION_FILE), TEST_DATA_DIR)
assert.NoError(t, err)
err = processor.Process(fsResult)
assert.NoError(t, err)
traceId := ",arch=x86,config=nonrendering,gpu=GTX660,model=ShuttleA,os=Ubuntu12,source_type=bench,sub_result=min_ms,system=UNIX,test=ChunkAlloc_Push_640_480,"
expectedValue := float32(0.009535795)
cid := &cid.CommitID{
Source: "master",
Offset: 0,
}
source, value, err := ptracestore.Default.Details(cid, traceId)
assert.NoError(t, err)
assert.Equal(t, expectedValue, value)
assert.Equal(t, "nano.json", source)
}