blob: bb96b1ee72c25101ac207fd3b38d67198ecf55fb [file] [log] [blame]
// Copyright (C) 2016 The Android Open Source Project
//
// 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.
package scheduler
import (
"android.googlesource.com/platform/tools/gpu/framework/log"
"android.googlesource.com/platform/tools/gpu/gapid/robot/build"
"android.googlesource.com/platform/tools/gpu/gapid/robot/job"
"android.googlesource.com/platform/tools/gpu/gapid/robot/monitor"
"android.googlesource.com/platform/tools/gpu/gapid/robot/trace"
)
func (s schedule) getTraceTargetTools(ctx log.Context) *build.ToolSet {
ctx = ctx.V("Target", s.worker.Target)
tools := s.pkg.FindTools(ctx, s.data.FindDevice(s.worker.Target))
if tools == nil {
return nil
}
if tools.Interceptor == "" {
return nil
}
if tools.Gapii == "" {
return nil
}
if tools.VulkanTraceLayer == "" {
return nil
}
return tools
}
func (s schedule) doTrace(ctx log.Context, subj *monitor.Subject) error {
if !s.worker.Supports(job.Trace) {
return nil
}
ctx = ctx.Enter("Trace")
ctx = ctx.V("Package", s.pkg.Id)
hostTools := s.getHostTools(ctx)
targetTools := s.getTraceTargetTools(ctx)
if hostTools == nil || targetTools == nil {
return nil
}
input := &trace.Input{
Subject: subj.Id,
Gapit: hostTools.Gapit,
Interceptor: targetTools.Interceptor,
Gapii: targetTools.Gapii,
VulkanLayer: targetTools.VulkanTraceLayer,
}
action := &trace.Action{
Input: input,
Host: s.worker.Host,
Target: s.worker.Target,
}
if _, found := s.data.Traces.FindOrCreate(ctx, action); found {
return nil
}
// TODO: we just ignore the error right now, what should we do?
go s.managers.Trace.Do(ctx, action.Target, input)
return nil
}