| // Copyright 2021 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package vkbench |
| |
| import ( |
| "context" |
| "path/filepath" |
| |
| "chromiumos/tast/common/testexec" |
| "chromiumos/tast/errors" |
| "chromiumos/tast/local/upstart" |
| "chromiumos/tast/shutil" |
| ) |
| |
| const ( |
| vkbenchShaderPath = "/usr/local/graphics/vkbench/shaders" |
| vkbenchPath = "/usr/local/graphics/vkbench/vkbench" |
| ) |
| |
| // CrosConfig is the config to run in ChromeOS. |
| type CrosConfig struct { |
| Hasty bool // If hasty is true, glbench will run in hasty mode. |
| } |
| |
| // IsHasty returns true if the given run should run in hasty mode. |
| func (config *CrosConfig) IsHasty() bool { |
| return config.Hasty == true |
| } |
| |
| // SetUp initializes the environment to run vkbench in ChromeOS. |
| func (config *CrosConfig) SetUp(ctx context.Context) error { |
| // If UI is running, we must stop it and restore later. |
| if err := upstart.StopJob(ctx, "ui"); err != nil { |
| return errors.Wrap(err, "failed to stop ui") |
| } |
| return nil |
| } |
| |
| // Run runs vkbench and returns the output. |
| func (config *CrosConfig) Run(ctx context.Context, fixtValue interface{}, outDir string) (string, error) { |
| args := []string{"--spirv_dir", vkbenchShaderPath, "--out_dir", filepath.Join(outDir, "vkbench")} |
| if config.IsHasty() { |
| args = append(args, "--hasty") |
| } |
| cmd := testexec.CommandContext(ctx, vkbenchPath, args...) |
| b, err := cmd.Output(testexec.DumpLogOnError) |
| if err != nil { |
| return "", errors.Wrapf(err, "failed to run vkbench %s", shutil.EscapeSlice(cmd.Args)) |
| } |
| return string(b), nil |
| } |
| |
| // TearDown tears down the environment. |
| func (config *CrosConfig) TearDown(ctx context.Context) error { |
| if err := upstart.EnsureJobRunning(ctx, "ui"); err != nil { |
| return errors.Wrap(err, "failed to start ui") |
| } |
| return nil |
| } |