92 lines
2.5 KiB
C++
92 lines
2.5 KiB
C++
/*
|
|
* Copyright 2011, 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.
|
|
*/
|
|
|
|
#ifndef __GLTRACE_TRANSPORT_H_
|
|
#define __GLTRACE_TRANSPORT_H_
|
|
|
|
#include <pthread.h>
|
|
|
|
#include "frameworks/native/opengl/libs/GLES_trace/proto/gltrace.pb.h"
|
|
|
|
namespace android {
|
|
namespace gltrace {
|
|
|
|
/**
|
|
* TCPStream provides a TCP based communication channel from the device to
|
|
* the host for transferring GLMessages.
|
|
*/
|
|
class TCPStream {
|
|
int mSocket;
|
|
pthread_mutex_t mSocketWriteMutex;
|
|
public:
|
|
/** Create a TCP based communication channel over @socket */
|
|
TCPStream(int socket);
|
|
~TCPStream();
|
|
|
|
/** Close the channel. */
|
|
void closeStream();
|
|
|
|
/** Send @data of size @len to host. . Returns -1 on error, 0 on success. */
|
|
int send(void *data, size_t len);
|
|
|
|
/**
|
|
* Receive @len bytes of data into @buf from the remote end. This is a blocking call.
|
|
* Returns -1 on failure, 0 on success.
|
|
*/
|
|
int receive(void *buf, size_t len);
|
|
};
|
|
|
|
/**
|
|
* BufferedOutputStream provides buffering of data sent to the underlying
|
|
* unbuffered channel.
|
|
*/
|
|
class BufferedOutputStream {
|
|
TCPStream *mStream;
|
|
|
|
size_t mBufferSize;
|
|
std::string mStringBuffer;
|
|
|
|
/** Enqueue message into internal buffer. */
|
|
void enqueueMessage(GLMessage *msg);
|
|
public:
|
|
/**
|
|
* Construct a Buffered stream of size @bufferSize, using @stream as
|
|
* its underlying channel for transport.
|
|
*/
|
|
BufferedOutputStream(TCPStream *stream, size_t bufferSize);
|
|
|
|
/**
|
|
* Send @msg. The message could be buffered and sent later with a
|
|
* subsequent message. Returns -1 on error, 0 on success.
|
|
*/
|
|
int send(GLMessage *msg);
|
|
|
|
/** Send any buffered messages, returns -1 on error, 0 on success. */
|
|
int flush();
|
|
};
|
|
|
|
/**
|
|
* Utility method: start a server listening at @sockName (unix domain socket,
|
|
* abstract namespace path), and wait for a client connection.
|
|
* Returns the connected client socket on success, or -1 on failure.
|
|
*/
|
|
int acceptClientConnection(char *sockName);
|
|
|
|
};
|
|
};
|
|
|
|
#endif
|