1 // Copyright (C) 2019 The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //      http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "ConfigBuilder.h"
16 
17 namespace android {
18 namespace automotive {
19 namespace computepipe {
20 namespace runner {
21 namespace engine {
22 
setDebugDisplayStream(int id)23 void ConfigBuilder::setDebugDisplayStream(int id) {
24     mDisplayStream = id;
25     mOutputConfig.emplace(id, 1);
26 }
27 
clientConfigEnablesDisplayStream()28 bool ConfigBuilder::clientConfigEnablesDisplayStream() {
29     return mConfigHasDisplayStream;
30 }
31 
updateInputConfigOption(int id)32 ConfigBuilder& ConfigBuilder::updateInputConfigOption(int id) {
33     mInputConfigId = id;
34     return *this;
35 }
36 
updateOutputStreamOption(int id,int maxInFlightPackets)37 ConfigBuilder& ConfigBuilder::updateOutputStreamOption(int id, int maxInFlightPackets) {
38     if (id == mDisplayStream) {
39         mConfigHasDisplayStream = true;
40     }
41     mOutputConfig.emplace(id, maxInFlightPackets);
42     return *this;
43 }
44 
updateTerminationOption(int id)45 ConfigBuilder& ConfigBuilder::updateTerminationOption(int id) {
46     mTerminationId = id;
47     return *this;
48 }
49 
updateOffloadOption(int id)50 ConfigBuilder& ConfigBuilder::updateOffloadOption(int id) {
51     mOffloadId = id;
52     return *this;
53 }
54 
updateOptionalConfig(std::string options)55 ConfigBuilder& ConfigBuilder::updateOptionalConfig(std::string options) {
56     mOptionalConfig = options;
57     return *this;
58 }
59 
updateProfilingType(proto::ProfilingType profilingType)60 ConfigBuilder& ConfigBuilder::updateProfilingType(proto::ProfilingType profilingType) {
61     mProfilingType = profilingType;
62     return *this;
63 }
64 
emitClientOptions()65 ClientConfig ConfigBuilder::emitClientOptions() {
66     return ClientConfig(mInputConfigId, mOffloadId, mTerminationId, mOutputConfig, mProfilingType,
67             mOptionalConfig);
68 }
69 
reset()70 ConfigBuilder& ConfigBuilder::reset() {
71     mInputConfigId = ClientConfig::kInvalidId;
72     mTerminationId = ClientConfig::kInvalidId;
73     mOffloadId = ClientConfig::kInvalidId;
74     mOutputConfig.clear();
75     mProfilingType = proto::ProfilingType::DISABLED;
76     if (mDisplayStream != ClientConfig::kInvalidId) {
77         mOutputConfig.emplace(mDisplayStream, 1);
78     }
79     mConfigHasDisplayStream = false;
80     return *this;
81 }
82 
83 }  // namespace engine
84 }  // namespace runner
85 }  // namespace computepipe
86 }  // namespace automotive
87 }  // namespace android
88