xref: /aosp_15_r20/external/deqp/execserver/xsProtocol.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _XSPROTOCOL_HPP
2*35238bceSAndroid Build Coastguard Worker #define _XSPROTOCOL_HPP
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program Execution Server
5*35238bceSAndroid Build Coastguard Worker  * ---------------------------------------------
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
8*35238bceSAndroid Build Coastguard Worker  *
9*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker  *
15*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
20*35238bceSAndroid Build Coastguard Worker  *
21*35238bceSAndroid Build Coastguard Worker  *//*!
22*35238bceSAndroid Build Coastguard Worker  * \file
23*35238bceSAndroid Build Coastguard Worker  * \brief Execution Server Protocol.
24*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker 
26*35238bceSAndroid Build Coastguard Worker #include "xsDefs.hpp"
27*35238bceSAndroid Build Coastguard Worker #include "deMemory.h"
28*35238bceSAndroid Build Coastguard Worker 
29*35238bceSAndroid Build Coastguard Worker #include <string>
30*35238bceSAndroid Build Coastguard Worker #include <vector>
31*35238bceSAndroid Build Coastguard Worker 
32*35238bceSAndroid Build Coastguard Worker namespace xs
33*35238bceSAndroid Build Coastguard Worker {
34*35238bceSAndroid Build Coastguard Worker 
35*35238bceSAndroid Build Coastguard Worker enum
36*35238bceSAndroid Build Coastguard Worker {
37*35238bceSAndroid Build Coastguard Worker     PROTOCOL_VERSION    = 18,
38*35238bceSAndroid Build Coastguard Worker     MESSAGE_HEADER_SIZE = 8,
39*35238bceSAndroid Build Coastguard Worker 
40*35238bceSAndroid Build Coastguard Worker     // Times are in milliseconds.
41*35238bceSAndroid Build Coastguard Worker     KEEPALIVE_SEND_INTERVAL = 5000,
42*35238bceSAndroid Build Coastguard Worker     KEEPALIVE_TIMEOUT       = 30000,
43*35238bceSAndroid Build Coastguard Worker };
44*35238bceSAndroid Build Coastguard Worker 
45*35238bceSAndroid Build Coastguard Worker enum MessageType
46*35238bceSAndroid Build Coastguard Worker {
47*35238bceSAndroid Build Coastguard Worker     MESSAGETYPE_NONE = 0, //!< Not valid.
48*35238bceSAndroid Build Coastguard Worker 
49*35238bceSAndroid Build Coastguard Worker     // Commands (from Client to ExecServer).
50*35238bceSAndroid Build Coastguard Worker     MESSAGETYPE_HELLO          = 100, //!< First message from client, specifies the protocol version
51*35238bceSAndroid Build Coastguard Worker     MESSAGETYPE_TEST           = 101, //!< Debug only
52*35238bceSAndroid Build Coastguard Worker     MESSAGETYPE_EXECUTE_BINARY = 111, //!< Request execution of a test package binary.
53*35238bceSAndroid Build Coastguard Worker     MESSAGETYPE_STOP_EXECUTION = 112, //!< Request cancellation of the currently executing binary.
54*35238bceSAndroid Build Coastguard Worker 
55*35238bceSAndroid Build Coastguard Worker     // Responses (from ExecServer to Client)
56*35238bceSAndroid Build Coastguard Worker     MESSAGETYPE_PROCESS_STARTED       = 200, //!< Requested process has started.
57*35238bceSAndroid Build Coastguard Worker     MESSAGETYPE_PROCESS_LAUNCH_FAILED = 201, //!< Requested process failed to launch.
58*35238bceSAndroid Build Coastguard Worker     MESSAGETYPE_PROCESS_FINISHED      = 202, //!< Requested process has finished (for any reason).
59*35238bceSAndroid Build Coastguard Worker     MESSAGETYPE_PROCESS_LOG_DATA      = 203, //!< Unprocessed log data from TestResults.qpa.
60*35238bceSAndroid Build Coastguard Worker     MESSAGETYPE_INFO                  = 204, //!< Generic info message from ExecServer (for debugging purposes).
61*35238bceSAndroid Build Coastguard Worker 
62*35238bceSAndroid Build Coastguard Worker     MESSAGETYPE_KEEPALIVE = 102 //!< Keep-alive packet
63*35238bceSAndroid Build Coastguard Worker };
64*35238bceSAndroid Build Coastguard Worker 
65*35238bceSAndroid Build Coastguard Worker class MessageWriter;
66*35238bceSAndroid Build Coastguard Worker 
67*35238bceSAndroid Build Coastguard Worker class Message
68*35238bceSAndroid Build Coastguard Worker {
69*35238bceSAndroid Build Coastguard Worker public:
70*35238bceSAndroid Build Coastguard Worker     MessageType type;
71*35238bceSAndroid Build Coastguard Worker 
Message(MessageType type_)72*35238bceSAndroid Build Coastguard Worker     Message(MessageType type_) : type(type_)
73*35238bceSAndroid Build Coastguard Worker     {
74*35238bceSAndroid Build Coastguard Worker     }
~Message(void)75*35238bceSAndroid Build Coastguard Worker     virtual ~Message(void)
76*35238bceSAndroid Build Coastguard Worker     {
77*35238bceSAndroid Build Coastguard Worker     }
78*35238bceSAndroid Build Coastguard Worker 
79*35238bceSAndroid Build Coastguard Worker     virtual void write(std::vector<uint8_t> &buf) const = DE_NULL;
80*35238bceSAndroid Build Coastguard Worker 
81*35238bceSAndroid Build Coastguard Worker     static void parseHeader(const uint8_t *data, size_t dataSize, MessageType &type, size_t &messageSize);
82*35238bceSAndroid Build Coastguard Worker     static void writeHeader(MessageType type, size_t messageSize, uint8_t *dst, size_t bufSize);
83*35238bceSAndroid Build Coastguard Worker 
84*35238bceSAndroid Build Coastguard Worker protected:
85*35238bceSAndroid Build Coastguard Worker     void writeNoData(std::vector<uint8_t> &buf) const;
86*35238bceSAndroid Build Coastguard Worker 
87*35238bceSAndroid Build Coastguard Worker     Message(const Message &other);
88*35238bceSAndroid Build Coastguard Worker     Message &operator=(const Message &other);
89*35238bceSAndroid Build Coastguard Worker };
90*35238bceSAndroid Build Coastguard Worker 
91*35238bceSAndroid Build Coastguard Worker // Simple messages without any data.
92*35238bceSAndroid Build Coastguard Worker template <int MsgType>
93*35238bceSAndroid Build Coastguard Worker class SimpleMessage : public Message
94*35238bceSAndroid Build Coastguard Worker {
95*35238bceSAndroid Build Coastguard Worker public:
SimpleMessage(const uint8_t * data,size_t dataSize)96*35238bceSAndroid Build Coastguard Worker     SimpleMessage(const uint8_t *data, size_t dataSize) : Message((MessageType)MsgType)
97*35238bceSAndroid Build Coastguard Worker     {
98*35238bceSAndroid Build Coastguard Worker         DE_UNREF(data);
99*35238bceSAndroid Build Coastguard Worker         XS_CHECK_MSG(dataSize == 0, "No payload expected");
100*35238bceSAndroid Build Coastguard Worker     }
SimpleMessage(void)101*35238bceSAndroid Build Coastguard Worker     SimpleMessage(void) : Message((MessageType)MsgType)
102*35238bceSAndroid Build Coastguard Worker     {
103*35238bceSAndroid Build Coastguard Worker     }
~SimpleMessage(void)104*35238bceSAndroid Build Coastguard Worker     ~SimpleMessage(void)
105*35238bceSAndroid Build Coastguard Worker     {
106*35238bceSAndroid Build Coastguard Worker     }
107*35238bceSAndroid Build Coastguard Worker 
write(std::vector<uint8_t> & buf) const108*35238bceSAndroid Build Coastguard Worker     void write(std::vector<uint8_t> &buf) const
109*35238bceSAndroid Build Coastguard Worker     {
110*35238bceSAndroid Build Coastguard Worker         writeNoData(buf);
111*35238bceSAndroid Build Coastguard Worker     }
112*35238bceSAndroid Build Coastguard Worker };
113*35238bceSAndroid Build Coastguard Worker 
114*35238bceSAndroid Build Coastguard Worker typedef SimpleMessage<MESSAGETYPE_STOP_EXECUTION> StopExecutionMessage;
115*35238bceSAndroid Build Coastguard Worker typedef SimpleMessage<MESSAGETYPE_PROCESS_STARTED> ProcessStartedMessage;
116*35238bceSAndroid Build Coastguard Worker typedef SimpleMessage<MESSAGETYPE_KEEPALIVE> KeepAliveMessage;
117*35238bceSAndroid Build Coastguard Worker 
118*35238bceSAndroid Build Coastguard Worker class HelloMessage : public Message
119*35238bceSAndroid Build Coastguard Worker {
120*35238bceSAndroid Build Coastguard Worker public:
121*35238bceSAndroid Build Coastguard Worker     int version;
122*35238bceSAndroid Build Coastguard Worker 
123*35238bceSAndroid Build Coastguard Worker     HelloMessage(const uint8_t *data, size_t dataSize);
HelloMessage(void)124*35238bceSAndroid Build Coastguard Worker     HelloMessage(void) : Message(MESSAGETYPE_HELLO), version(PROTOCOL_VERSION)
125*35238bceSAndroid Build Coastguard Worker     {
126*35238bceSAndroid Build Coastguard Worker     }
~HelloMessage(void)127*35238bceSAndroid Build Coastguard Worker     ~HelloMessage(void)
128*35238bceSAndroid Build Coastguard Worker     {
129*35238bceSAndroid Build Coastguard Worker     }
130*35238bceSAndroid Build Coastguard Worker 
131*35238bceSAndroid Build Coastguard Worker     void write(std::vector<uint8_t> &buf) const;
132*35238bceSAndroid Build Coastguard Worker };
133*35238bceSAndroid Build Coastguard Worker 
134*35238bceSAndroid Build Coastguard Worker class ExecuteBinaryMessage : public Message
135*35238bceSAndroid Build Coastguard Worker {
136*35238bceSAndroid Build Coastguard Worker public:
137*35238bceSAndroid Build Coastguard Worker     std::string name;
138*35238bceSAndroid Build Coastguard Worker     std::string params;
139*35238bceSAndroid Build Coastguard Worker     std::string workDir;
140*35238bceSAndroid Build Coastguard Worker     std::string caseList;
141*35238bceSAndroid Build Coastguard Worker 
142*35238bceSAndroid Build Coastguard Worker     ExecuteBinaryMessage(const uint8_t *data, size_t dataSize);
ExecuteBinaryMessage(void)143*35238bceSAndroid Build Coastguard Worker     ExecuteBinaryMessage(void) : Message(MESSAGETYPE_EXECUTE_BINARY)
144*35238bceSAndroid Build Coastguard Worker     {
145*35238bceSAndroid Build Coastguard Worker     }
~ExecuteBinaryMessage(void)146*35238bceSAndroid Build Coastguard Worker     ~ExecuteBinaryMessage(void)
147*35238bceSAndroid Build Coastguard Worker     {
148*35238bceSAndroid Build Coastguard Worker     }
149*35238bceSAndroid Build Coastguard Worker 
150*35238bceSAndroid Build Coastguard Worker     void write(std::vector<uint8_t> &buf) const;
151*35238bceSAndroid Build Coastguard Worker };
152*35238bceSAndroid Build Coastguard Worker 
153*35238bceSAndroid Build Coastguard Worker class ProcessLogDataMessage : public Message
154*35238bceSAndroid Build Coastguard Worker {
155*35238bceSAndroid Build Coastguard Worker public:
156*35238bceSAndroid Build Coastguard Worker     std::string logData;
157*35238bceSAndroid Build Coastguard Worker 
158*35238bceSAndroid Build Coastguard Worker     ProcessLogDataMessage(const uint8_t *data, size_t dataSize);
~ProcessLogDataMessage(void)159*35238bceSAndroid Build Coastguard Worker     ~ProcessLogDataMessage(void)
160*35238bceSAndroid Build Coastguard Worker     {
161*35238bceSAndroid Build Coastguard Worker     }
162*35238bceSAndroid Build Coastguard Worker 
163*35238bceSAndroid Build Coastguard Worker     void write(std::vector<uint8_t> &buf) const;
164*35238bceSAndroid Build Coastguard Worker };
165*35238bceSAndroid Build Coastguard Worker 
166*35238bceSAndroid Build Coastguard Worker class ProcessLaunchFailedMessage : public Message
167*35238bceSAndroid Build Coastguard Worker {
168*35238bceSAndroid Build Coastguard Worker public:
169*35238bceSAndroid Build Coastguard Worker     std::string reason;
170*35238bceSAndroid Build Coastguard Worker 
171*35238bceSAndroid Build Coastguard Worker     ProcessLaunchFailedMessage(const uint8_t *data, size_t dataSize);
ProcessLaunchFailedMessage(const char * reason_)172*35238bceSAndroid Build Coastguard Worker     ProcessLaunchFailedMessage(const char *reason_) : Message(MESSAGETYPE_PROCESS_LAUNCH_FAILED), reason(reason_)
173*35238bceSAndroid Build Coastguard Worker     {
174*35238bceSAndroid Build Coastguard Worker     }
~ProcessLaunchFailedMessage(void)175*35238bceSAndroid Build Coastguard Worker     ~ProcessLaunchFailedMessage(void)
176*35238bceSAndroid Build Coastguard Worker     {
177*35238bceSAndroid Build Coastguard Worker     }
178*35238bceSAndroid Build Coastguard Worker 
179*35238bceSAndroid Build Coastguard Worker     void write(std::vector<uint8_t> &buf) const;
180*35238bceSAndroid Build Coastguard Worker };
181*35238bceSAndroid Build Coastguard Worker 
182*35238bceSAndroid Build Coastguard Worker class ProcessFinishedMessage : public Message
183*35238bceSAndroid Build Coastguard Worker {
184*35238bceSAndroid Build Coastguard Worker public:
185*35238bceSAndroid Build Coastguard Worker     int exitCode;
186*35238bceSAndroid Build Coastguard Worker 
187*35238bceSAndroid Build Coastguard Worker     ProcessFinishedMessage(const uint8_t *data, size_t dataSize);
ProcessFinishedMessage(int exitCode_)188*35238bceSAndroid Build Coastguard Worker     ProcessFinishedMessage(int exitCode_) : Message(MESSAGETYPE_PROCESS_FINISHED), exitCode(exitCode_)
189*35238bceSAndroid Build Coastguard Worker     {
190*35238bceSAndroid Build Coastguard Worker     }
~ProcessFinishedMessage(void)191*35238bceSAndroid Build Coastguard Worker     ~ProcessFinishedMessage(void)
192*35238bceSAndroid Build Coastguard Worker     {
193*35238bceSAndroid Build Coastguard Worker     }
194*35238bceSAndroid Build Coastguard Worker 
195*35238bceSAndroid Build Coastguard Worker     void write(std::vector<uint8_t> &buf) const;
196*35238bceSAndroid Build Coastguard Worker };
197*35238bceSAndroid Build Coastguard Worker 
198*35238bceSAndroid Build Coastguard Worker class InfoMessage : public Message
199*35238bceSAndroid Build Coastguard Worker {
200*35238bceSAndroid Build Coastguard Worker public:
201*35238bceSAndroid Build Coastguard Worker     std::string info;
202*35238bceSAndroid Build Coastguard Worker 
203*35238bceSAndroid Build Coastguard Worker     InfoMessage(const uint8_t *data, size_t dataSize);
~InfoMessage(void)204*35238bceSAndroid Build Coastguard Worker     ~InfoMessage(void)
205*35238bceSAndroid Build Coastguard Worker     {
206*35238bceSAndroid Build Coastguard Worker     }
207*35238bceSAndroid Build Coastguard Worker 
208*35238bceSAndroid Build Coastguard Worker     void write(std::vector<uint8_t> &buf) const;
209*35238bceSAndroid Build Coastguard Worker };
210*35238bceSAndroid Build Coastguard Worker 
211*35238bceSAndroid Build Coastguard Worker // For debug purposes only.
212*35238bceSAndroid Build Coastguard Worker class TestMessage : public Message
213*35238bceSAndroid Build Coastguard Worker {
214*35238bceSAndroid Build Coastguard Worker public:
215*35238bceSAndroid Build Coastguard Worker     std::string test;
216*35238bceSAndroid Build Coastguard Worker 
217*35238bceSAndroid Build Coastguard Worker     TestMessage(const uint8_t *data, size_t dataSize);
~TestMessage(void)218*35238bceSAndroid Build Coastguard Worker     ~TestMessage(void)
219*35238bceSAndroid Build Coastguard Worker     {
220*35238bceSAndroid Build Coastguard Worker     }
221*35238bceSAndroid Build Coastguard Worker 
222*35238bceSAndroid Build Coastguard Worker     void write(std::vector<uint8_t> &buf) const;
223*35238bceSAndroid Build Coastguard Worker };
224*35238bceSAndroid Build Coastguard Worker 
225*35238bceSAndroid Build Coastguard Worker } // namespace xs
226*35238bceSAndroid Build Coastguard Worker 
227*35238bceSAndroid Build Coastguard Worker #endif // _XSPROTOCOL_HPP
228