blob: 6c9ed301ff59aea3eb5e62bbe3f15e286be91c77 [file] [log] [blame]
/*
* 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 <log/log.h>
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<TransactionTracing::Mode>(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<TransactionTracing*> TransactionDataSource::mTransactionTracing = nullptr;
} // namespace android
PERFETTO_DEFINE_DATA_SOURCE_STATIC_MEMBERS(android::TransactionDataSource);