1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef TEST_FAKE_PRODUCER_H_
18 #define TEST_FAKE_PRODUCER_H_
19 
20 #include <memory>
21 #include <random>
22 #include <string>
23 
24 #include "perfetto/base/thread_checker.h"
25 #include "perfetto/tracing/core/data_source_descriptor.h"
26 #include "perfetto/tracing/core/producer.h"
27 #include "perfetto/tracing/core/trace_config.h"
28 #include "perfetto/tracing/ipc/producer_ipc_client.h"
29 #include "src/base/test/test_task_runner.h"
30 
31 namespace perfetto {
32 
33 class FakeProducer : public Producer {
34  public:
35   explicit FakeProducer(const std::string& name);
36   ~FakeProducer() override;
37 
38   void Connect(const char* socket_name,
39                base::TaskRunner* task_runner,
40                std::function<void()> on_create_data_source_instance);
41 
42   // Produces a batch of events (as configured in the DataSourceConfig) and
43   // posts a callback when the service acknowledges the commit.
44   void ProduceEventBatch(std::function<void()> callback = [] {});
45 
46   // Producer implementation.
47   void OnConnect() override;
48   void OnDisconnect() override;
49   void CreateDataSourceInstance(DataSourceInstanceID,
50                                 const DataSourceConfig& source_config) override;
51   void TearDownDataSourceInstance(DataSourceInstanceID) override;
52   void OnTracingSetup() override;
53   void Flush(FlushRequestID, const DataSourceInstanceID*, size_t) override;
54 
55  private:
56   void Shutdown();
57 
58   base::ThreadChecker thread_checker_;
59   base::TaskRunner* task_runner_ = nullptr;
60   std::string name_;
61   std::minstd_rand0 rnd_engine_;
62   uint64_t message_size_ = 0;
63   uint32_t message_count_ = 0;
64   uint32_t max_messages_per_second_ = 0;
65   std::function<void()> on_create_data_source_instance_;
66   std::unique_ptr<Service::ProducerEndpoint> endpoint_;
67   std::unique_ptr<TraceWriter> trace_writer_;
68 };
69 
70 }  // namespace perfetto
71 
72 #endif  // TEST_FAKE_PRODUCER_H_
73