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