#ifndef MessageDecoder_h
#define MessageDecoder_h
#include "ArgumentDecoder.h"
#include "MessageRecorder.h"
#include "StringReference.h"
#if HAVE(DTRACE)
#include <uuid/uuid.h>
#endif
#if HAVE(QOS_CLASSES)
#include <pthread/qos.h>
#endif
namespace IPC {
class DataReference;
class ImportanceAssertion;
class MessageDecoder : public ArgumentDecoder {
public:
MessageDecoder(const DataReference& buffer, Vector<Attachment>);
virtual ~MessageDecoder();
StringReference messageReceiverName() const { return m_messageReceiverName; }
StringReference messageName() const { return m_messageName; }
uint64_t destinationID() const { return m_destinationID; }
bool isSyncMessage() const;
bool shouldDispatchMessageWhenWaitingForSyncReply() const;
#if PLATFORM(MAC)
void setImportanceAssertion(std::unique_ptr<ImportanceAssertion>);
#endif
#if HAVE(QOS_CLASSES)
void setQOSClassOverride(pthread_override_t override) { m_qosClassOverride = override; }
#endif
#if HAVE(DTRACE)
void setMessageProcessingToken(std::unique_ptr<MessageRecorder::MessageProcessingToken> token) { m_processingToken = WTF::move(token); }
const uuid_t& UUID() const { return m_UUID; }
#endif
private:
uint8_t m_messageFlags;
StringReference m_messageReceiverName;
StringReference m_messageName;
uint64_t m_destinationID;
#if HAVE(DTRACE)
uuid_t m_UUID;
std::unique_ptr<MessageRecorder::MessageProcessingToken> m_processingToken;
#endif
#if PLATFORM(MAC)
std::unique_ptr<ImportanceAssertion> m_importanceAssertion;
#endif
#if HAVE(QOS_CLASSES)
pthread_override_t m_qosClassOverride { nullptr };
#endif
};
}
#endif // MessageDecoder_h