1dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci/* 2dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * Copyright (C) 2017 The Android Open Source Project 3dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * 4dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * Licensed under the Apache License, Version 2.0 (the "License"); 5dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * you may not use this file except in compliance with the License. 6dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * You may obtain a copy of the License at 7dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * 8dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * http://www.apache.org/licenses/LICENSE-2.0 9dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * 10dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * Unless required by applicable law or agreed to in writing, software 11dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * distributed under the License is distributed on an "AS IS" BASIS, 12dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * See the License for the specific language governing permissions and 14dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci * limitations under the License. 15dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci */ 16dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci 17dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci#ifndef INCLUDE_PERFETTO_TRACING_IPC_CONSUMER_IPC_CLIENT_H_ 18dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci#define INCLUDE_PERFETTO_TRACING_IPC_CONSUMER_IPC_CLIENT_H_ 19dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci 20dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci#include <memory> 21dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci#include <string> 22dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci 23dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci#include "perfetto/tracing/core/service.h" 24dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci 25dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tuccinamespace perfetto { 26dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci 27dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucciclass Consumer; 28dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci 29dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci// Allows to connect to a remote Service through a UNIX domain socket. 30dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci// Exposed to: 31dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci// Consumer(s) of the tracing library. 32dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci// Implemented in: 330e6e2f7ce4336670c3e53f98a56e25c0abeeee09Florian Mayer// src/tracing/ipc/consumer/consumer_ipc_client_impl.cc 34dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucciclass ConsumerIPCClient { 35dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci public: 36dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci // Connects to the producer port of the Service listening on the given 37dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci // |service_sock_name|. If the connection is successful, the OnConnect() 38dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci // method will be invoked asynchronously on the passed Consumer interface. 39dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci // If the connection fails, OnDisconnect() will be invoked instead. 40dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci // The returned ConsumerEndpoint serves also to delimit the scope of the 41dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci // callbacks invoked on the Consumer interface: no more Consumer callbacks are 42dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci // invoked immediately after its destruction and any pending callback will be 43dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci // dropped. 44dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci static std::unique_ptr<Service::ConsumerEndpoint> 45dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci Connect(const char* service_sock_name, Consumer*, base::TaskRunner*); 46dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci 47dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci protected: 48dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci ConsumerIPCClient() = delete; 49dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci}; 50dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci 51dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci} // namespace perfetto 52dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci 53dcbbf13094a22578d198c9145f8e63c46ba1eba4Primiano Tucci#endif // INCLUDE_PERFETTO_TRACING_IPC_CONSUMER_IPC_CLIENT_H_ 54