1*6dbdd20aSAndroid Build Coastguard Worker /* 2*6dbdd20aSAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project 3*6dbdd20aSAndroid Build Coastguard Worker * 4*6dbdd20aSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*6dbdd20aSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*6dbdd20aSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*6dbdd20aSAndroid Build Coastguard Worker * 8*6dbdd20aSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*6dbdd20aSAndroid Build Coastguard Worker * 10*6dbdd20aSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*6dbdd20aSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*6dbdd20aSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*6dbdd20aSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*6dbdd20aSAndroid Build Coastguard Worker * limitations under the License. 15*6dbdd20aSAndroid Build Coastguard Worker */ 16*6dbdd20aSAndroid Build Coastguard Worker 17*6dbdd20aSAndroid Build Coastguard Worker #ifndef SRC_TRACING_TEST_MOCK_CONSUMER_H_ 18*6dbdd20aSAndroid Build Coastguard Worker #define SRC_TRACING_TEST_MOCK_CONSUMER_H_ 19*6dbdd20aSAndroid Build Coastguard Worker 20*6dbdd20aSAndroid Build Coastguard Worker #include <memory> 21*6dbdd20aSAndroid Build Coastguard Worker #include <string_view> 22*6dbdd20aSAndroid Build Coastguard Worker 23*6dbdd20aSAndroid Build Coastguard Worker #include "perfetto/ext/tracing/core/consumer.h" 24*6dbdd20aSAndroid Build Coastguard Worker #include "perfetto/ext/tracing/core/trace_packet.h" 25*6dbdd20aSAndroid Build Coastguard Worker #include "perfetto/ext/tracing/core/tracing_service.h" 26*6dbdd20aSAndroid Build Coastguard Worker #include "perfetto/tracing/core/tracing_service_state.h" 27*6dbdd20aSAndroid Build Coastguard Worker #include "test/gtest_and_gmock.h" 28*6dbdd20aSAndroid Build Coastguard Worker 29*6dbdd20aSAndroid Build Coastguard Worker #include "protos/perfetto/trace/trace_packet.gen.h" 30*6dbdd20aSAndroid Build Coastguard Worker 31*6dbdd20aSAndroid Build Coastguard Worker namespace perfetto { 32*6dbdd20aSAndroid Build Coastguard Worker 33*6dbdd20aSAndroid Build Coastguard Worker namespace base { 34*6dbdd20aSAndroid Build Coastguard Worker class TestTaskRunner; 35*6dbdd20aSAndroid Build Coastguard Worker } 36*6dbdd20aSAndroid Build Coastguard Worker 37*6dbdd20aSAndroid Build Coastguard Worker class MockConsumer : public Consumer { 38*6dbdd20aSAndroid Build Coastguard Worker public: 39*6dbdd20aSAndroid Build Coastguard Worker class FlushRequest { 40*6dbdd20aSAndroid Build Coastguard Worker public: FlushRequest(std::function<bool (void)> wait_func)41*6dbdd20aSAndroid Build Coastguard Worker FlushRequest(std::function<bool(void)> wait_func) : wait_func_(wait_func) {} WaitForReply()42*6dbdd20aSAndroid Build Coastguard Worker bool WaitForReply() { return wait_func_(); } 43*6dbdd20aSAndroid Build Coastguard Worker 44*6dbdd20aSAndroid Build Coastguard Worker private: 45*6dbdd20aSAndroid Build Coastguard Worker std::function<bool(void)> wait_func_; 46*6dbdd20aSAndroid Build Coastguard Worker }; 47*6dbdd20aSAndroid Build Coastguard Worker 48*6dbdd20aSAndroid Build Coastguard Worker explicit MockConsumer(base::TestTaskRunner*); 49*6dbdd20aSAndroid Build Coastguard Worker ~MockConsumer() override; 50*6dbdd20aSAndroid Build Coastguard Worker 51*6dbdd20aSAndroid Build Coastguard Worker void Connect(std::unique_ptr<TracingService::ConsumerEndpoint>); 52*6dbdd20aSAndroid Build Coastguard Worker void Connect(TracingService* svc, uid_t = 0); 53*6dbdd20aSAndroid Build Coastguard Worker void ForceDisconnect(); 54*6dbdd20aSAndroid Build Coastguard Worker void EnableTracing(const TraceConfig&, base::ScopedFile = base::ScopedFile()); 55*6dbdd20aSAndroid Build Coastguard Worker void StartTracing(); 56*6dbdd20aSAndroid Build Coastguard Worker void Detach(std::string key); 57*6dbdd20aSAndroid Build Coastguard Worker void Attach(std::string key); 58*6dbdd20aSAndroid Build Coastguard Worker void ChangeTraceConfig(const TraceConfig&); 59*6dbdd20aSAndroid Build Coastguard Worker void DisableTracing(); 60*6dbdd20aSAndroid Build Coastguard Worker void FreeBuffers(); 61*6dbdd20aSAndroid Build Coastguard Worker void WaitForTracingDisabled(uint32_t timeout_ms = 3000) { 62*6dbdd20aSAndroid Build Coastguard Worker return WaitForTracingDisabledWithError(testing::_, timeout_ms); 63*6dbdd20aSAndroid Build Coastguard Worker } 64*6dbdd20aSAndroid Build Coastguard Worker void WaitForTracingDisabledWithError( 65*6dbdd20aSAndroid Build Coastguard Worker const testing::Matcher<const std::string&>& error_matcher, 66*6dbdd20aSAndroid Build Coastguard Worker uint32_t timeout_ms = 3000); 67*6dbdd20aSAndroid Build Coastguard Worker FlushRequest Flush( 68*6dbdd20aSAndroid Build Coastguard Worker uint32_t timeout_ms = 10000, 69*6dbdd20aSAndroid Build Coastguard Worker FlushFlags = FlushFlags(FlushFlags::Initiator::kConsumerSdk, 70*6dbdd20aSAndroid Build Coastguard Worker FlushFlags::Reason::kExplicit)); 71*6dbdd20aSAndroid Build Coastguard Worker std::vector<protos::gen::TracePacket> ReadBuffers(); 72*6dbdd20aSAndroid Build Coastguard Worker void GetTraceStats(); 73*6dbdd20aSAndroid Build Coastguard Worker TraceStats WaitForTraceStats(bool success); 74*6dbdd20aSAndroid Build Coastguard Worker TracingServiceState QueryServiceState(); 75*6dbdd20aSAndroid Build Coastguard Worker void ObserveEvents(uint32_t enabled_event_types); 76*6dbdd20aSAndroid Build Coastguard Worker ObservableEvents WaitForObservableEvents(); 77*6dbdd20aSAndroid Build Coastguard Worker void CloneSession(TracingSessionID); 78*6dbdd20aSAndroid Build Coastguard Worker endpoint()79*6dbdd20aSAndroid Build Coastguard Worker TracingService::ConsumerEndpoint* endpoint() { 80*6dbdd20aSAndroid Build Coastguard Worker return service_endpoint_.get(); 81*6dbdd20aSAndroid Build Coastguard Worker } 82*6dbdd20aSAndroid Build Coastguard Worker 83*6dbdd20aSAndroid Build Coastguard Worker // Consumer implementation. 84*6dbdd20aSAndroid Build Coastguard Worker MOCK_METHOD(void, OnConnect, (), (override)); 85*6dbdd20aSAndroid Build Coastguard Worker MOCK_METHOD(void, OnDisconnect, (), (override)); 86*6dbdd20aSAndroid Build Coastguard Worker MOCK_METHOD(void, 87*6dbdd20aSAndroid Build Coastguard Worker OnTracingDisabled, 88*6dbdd20aSAndroid Build Coastguard Worker (const std::string& /*error*/), 89*6dbdd20aSAndroid Build Coastguard Worker (override)); 90*6dbdd20aSAndroid Build Coastguard Worker MOCK_METHOD(void, 91*6dbdd20aSAndroid Build Coastguard Worker OnTraceData, 92*6dbdd20aSAndroid Build Coastguard Worker (std::vector<TracePacket>* /*packets*/, bool /*has_more*/)); 93*6dbdd20aSAndroid Build Coastguard Worker MOCK_METHOD(void, OnDetach, (bool), (override)); 94*6dbdd20aSAndroid Build Coastguard Worker MOCK_METHOD(void, OnAttach, (bool, const TraceConfig&), (override)); 95*6dbdd20aSAndroid Build Coastguard Worker MOCK_METHOD(void, OnTraceStats, (bool, const TraceStats&), (override)); 96*6dbdd20aSAndroid Build Coastguard Worker MOCK_METHOD(void, OnObservableEvents, (const ObservableEvents&), (override)); 97*6dbdd20aSAndroid Build Coastguard Worker MOCK_METHOD(void, OnSessionCloned, (const OnSessionClonedArgs&), (override)); 98*6dbdd20aSAndroid Build Coastguard Worker 99*6dbdd20aSAndroid Build Coastguard Worker // gtest doesn't support move-only types. This wrapper is here jut to pass 100*6dbdd20aSAndroid Build Coastguard Worker // a pointer to the vector (rather than the vector itself) to the mock method. OnTraceData(std::vector<TracePacket> packets,bool has_more)101*6dbdd20aSAndroid Build Coastguard Worker void OnTraceData(std::vector<TracePacket> packets, bool has_more) override { 102*6dbdd20aSAndroid Build Coastguard Worker OnTraceData(&packets, has_more); 103*6dbdd20aSAndroid Build Coastguard Worker } 104*6dbdd20aSAndroid Build Coastguard Worker 105*6dbdd20aSAndroid Build Coastguard Worker private: 106*6dbdd20aSAndroid Build Coastguard Worker base::TestTaskRunner* const task_runner_; 107*6dbdd20aSAndroid Build Coastguard Worker std::unique_ptr<TracingService::ConsumerEndpoint> service_endpoint_; 108*6dbdd20aSAndroid Build Coastguard Worker }; 109*6dbdd20aSAndroid Build Coastguard Worker 110*6dbdd20aSAndroid Build Coastguard Worker } // namespace perfetto 111*6dbdd20aSAndroid Build Coastguard Worker 112*6dbdd20aSAndroid Build Coastguard Worker #endif // SRC_TRACING_TEST_MOCK_CONSUMER_H_ 113