/* * Copyright 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "TransactionDataSource.h" #include "TransactionTracing.h" #undef LOG_TAG #define LOG_TAG "TransactionTracing" #include namespace android { void TransactionDataSource::Initialize(TransactionTracing& transactionTracing) { mTransactionTracing.store(&transactionTracing); auto args = perfetto::TracingInitArgs{}; args.backends = perfetto::kSystemBackend; perfetto::Tracing::Initialize(args); perfetto::DataSourceDescriptor descriptor; descriptor.set_name(kName); TransactionDataSource::Register(descriptor); } void TransactionDataSource::UnregisterTransactionTracing() { mTransactionTracing.store(nullptr); } void TransactionDataSource::OnSetup(const TransactionDataSource::SetupArgs& args) { const auto configRaw = args.config->surfaceflinger_transactions_config_raw(); const auto config = perfetto::protos::pbzero::SurfaceFlingerTransactionsConfig::Decoder{configRaw}; if (config.has_mode() && config.mode() != TransactionTracing::Mode::MODE_UNSPECIFIED) { mMode = static_cast(config.mode()); } else { mMode = TransactionTracing::Mode::MODE_CONTINUOUS; ALOGD("Received config with unspecified 'mode'. Using 'CONTINUOUS' as default"); } } void TransactionDataSource::OnStart(const StartArgs&) { ALOGD("Received OnStart event"); if (auto* p = mTransactionTracing.load()) { p->onStart(mMode); } } void TransactionDataSource::OnFlush(const FlushArgs&) { ALOGD("Received OnFlush event"); if (auto* p = mTransactionTracing.load()) { p->onFlush(mMode); } } void TransactionDataSource::OnStop(const StopArgs&) { ALOGD("Received OnStop event"); } TransactionTracing::Mode TransactionDataSource::GetMode() const { return mMode; } std::atomic TransactionDataSource::mTransactionTracing = nullptr; } // namespace android PERFETTO_DEFINE_DATA_SOURCE_STATIC_MEMBERS(android::TransactionDataSource);