Revert "Tracing tool Implementation."
This reverts commit 28af0eb20acf0f04ac0834ba936e90c9351353f1.
Reason for revert: DroidMonitor-triggered revert due to breakage https://android-build.googleplex.com/builds/quarterdeck?branch=git_master&target=aosp_bramble-userdebug&lkgb=8257865&lkbb=8258224&fkbb=8258224, bug b/222762446
Broken build 8258224 git_master on aosp_bramble-userdebug
Bug: 222762446
Change-Id: I82e2dc590e7e44bba6191f212c8b0e993b4f167f
diff --git a/aosp_trout_arm64.mk b/aosp_trout_arm64.mk
index 42c44b6..433bca6 100644
--- a/aosp_trout_arm64.mk
+++ b/aosp_trout_arm64.mk
@@ -42,11 +42,6 @@
ro.vendor.audiocontrol.server.cid=1000 \
ro.vendor.audiocontrol.server.port=9410 \
-# Tracing Server Address
-LOCAL_TRACING_SERVER_PROPERTIES ?= \
- ro.vendor.tracing.server.cid=1000 \
- ro.vendor.tracing.server.port=9510 \
-
include device/google/trout/aosp_trout_common.mk
DEVICE_MANIFEST_FILE += device/google/trout/manifest.xml
diff --git a/aosp_trout_common.mk b/aosp_trout_common.mk
index a03b7c0..18b8fcd 100644
--- a/aosp_trout_common.mk
+++ b/aosp_trout_common.mk
@@ -85,8 +85,7 @@
ro.hardware.type=automotive \
${LOCAL_AUDIO_PROPERTIES} \
${LOCAL_AUDIOCONTROL_PROPERTIES} \
- ${LOCAL_DUMPSTATE_PROPERTIES} \
- ${LOCAL_TRACING_SERVER_PROPERTIES}
+ ${LOCAL_DUMPSTATE_PROPERTIES}
PRODUCT_CHARACTERISTICS := nosdcard,automotive
@@ -117,6 +116,4 @@
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += android.car.user_hal_enabled=false
endif
-PRODUCT_PACKAGES += android.tools.tracing-client.trout
-
BOARD_SEPOLICY_DIRS += device/google/trout/sepolicy/vendor/google
diff --git a/tools/tracing/Android.bp b/tools/tracing/Android.bp
deleted file mode 100644
index 52c20b0..0000000
--- a/tools/tracing/Android.bp
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-
-//TODO: b/217374315 organize the tracing server stub in a separate make file and directory.
-
-package {
- default_applicable_licenses: ["Android-Apache-2.0"],
-}
-
-genrule {
- name: "TracingVMProtoStub_h",
- tools: [
- "aprotoc",
- "protoc-gen-grpc-cpp-plugin",
- ],
- cmd: "$(location aprotoc) -I$$(dirname $(in)) --plugin=protoc-gen-grpc=$(location protoc-gen-grpc-cpp-plugin) $(in) --grpc_out=$(genDir) --cpp_out=$(genDir)",
- srcs: [
- "proto/TracingVM.proto",
- ],
- out: [
- "TracingVM.pb.h",
- "TracingVM.grpc.pb.h",
- ],
-}
-
-genrule {
- name: "TracingVMProtoStub_cc",
- tools: [
- "aprotoc",
- "protoc-gen-grpc-cpp-plugin",
- ],
- cmd: "$(location aprotoc) -I$$(dirname $(in)) --plugin=protoc-gen-grpc=$(location protoc-gen-grpc-cpp-plugin) $(in) --grpc_out=$(genDir) --cpp_out=$(genDir)",
- srcs: [
- "proto/TracingVM.proto",
- ],
- out: [
- "TracingVM.pb.cc",
- "TracingVM.grpc.pb.cc",
- ],
-}
-
-genrule {
- name: "perfetto_trace_gen_headers",
- tools: [
- "aprotoc",
- ],
- cmd: "$(location aprotoc) --cpp_out=$(genDir)",
- srcs: [
- "proto/perfetto_trace.proto",
- ],
- out: [
- "perfetto_trace.pb.h",
- ],
-}
-
-cc_binary {
- name: "android.automotive.tracing-client.trout",
- vendor: true,
- srcs: [
- "TracingClient.cpp",
- "TracingClientTestMain.cpp",
- ],
- generated_headers: [
- "TracingVMProtoStub_h",
- "perfetto_trace_gen_headers",
- ],
- generated_sources: [
- "TracingVMProtoStub_cc",
- ],
- shared_libs: [
- "libbase",
- "libbinder_ndk",
- "libcutils",
- "libgrpc++",
- "liblog",
- "libutils",
- "libprotobuf-cpp-full",
- ],
- static_libs: [
- "android.hardware.automotive.utils.vsockinfo",
- ],
- cflags: [
- "-Wno-unused-parameter",
- ]
-}
-
-cc_binary {
- name: "android.automotive.tracing-server.trout",
- vendor: true,
- srcs: [
- "TracingServerImpl.cpp",
- "TracingServerMain.cpp",
- ],
- generated_headers: [
- "TracingVMProtoStub_h",
- "perfetto_trace_gen_headers",
- ],
- generated_sources: [
- "TracingVMProtoStub_cc",
- ],
- shared_libs: [
- "libbase",
- "libjsoncpp",
- "libgrpc++",
- "liblog",
- "libutils",
- "libcutils",
- "libprotobuf-cpp-full",
- ],
- static_libs: [
- "android.hardware.automotive.utils.vsockinfo",
- ],
- cflags: [
- "-Wno-unused-parameter",
- ]
-}
diff --git a/tools/tracing/TracingClient.cpp b/tools/tracing/TracingClient.cpp
deleted file mode 100644
index 755ee86..0000000
--- a/tools/tracing/TracingClient.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2022 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 "TracingClient.h"
-#include "perfetto_trace.pb.h"
-
-#include <android-base/logging.h>
-
-#include <fstream>
-#include <string>
-
-namespace android::tools::automotive::tracing {
-
-// TODO: Using a secure channel.
-static std::shared_ptr<::grpc::ChannelCredentials> getChannelCredentials() {
- return ::grpc::InsecureChannelCredentials();
-}
-
-TracingClient::TracingClient(const std::string& addr)
- : mServiceAddr(addr),
- mGrpcChannel(::grpc::CreateChannel(mServiceAddr, getChannelCredentials())),
- mGrpcStub(tracing_vm_proto::TracingServer::NewStub(mGrpcChannel)) {}
-
-bool TracingClient::StartTracing(const std::string& host_config, uint64_t& session_num) {
- ::grpc::ClientContext context;
- tracing_vm_proto::StartTracingRequest request;
- if (host_config.empty()) {
- std::cerr << __func__ << ": missing HostConfigFile.\n";
- return false;
- }
-
- // TODO: b/221289678 read from host_config_file.
- perfetto::protos::TraceConfig trace_config;
- trace_config.set_write_into_file(true);
- request.set_host_config(trace_config.SerializeAsString());
- tracing_vm_proto::RequestStatus request_status;
- auto grpc_status = mGrpcStub->StartTracing(&context, request, &request_status);
- if (!grpc_status.ok()) {
- std::cerr << __func__ << ": failed due to grpc error: " << grpc_status.error_message()
- << std::endl;
- return false;
- }
- if (!request_status.error_str().empty()) {
- std::cerr << __func__ << ": failed with error: " << request_status.error_str() << std::endl;
- return false;
- }
-
- std::cout << __func__ << ": succeed for session_id "
- << request_status.session_id().session_id();
- session_num = request_status.session_id().session_id();
- return true;
-}
-
-bool TracingClient::StopTracing(const uint64_t session_num) {
- ::grpc::ClientContext context;
- tracing_vm_proto::TracingSessionIdentifier session_id;
- tracing_vm_proto::RequestStatus request_status;
- session_id.set_session_id(session_num);
- auto grpc_status = mGrpcStub->StopTracing(&context, session_id, &request_status);
- if (!grpc_status.ok()) {
- std::cerr << __func__ << ": for session_id " << session_num
- << " failed due to grpc error: " << grpc_status.error_message() << std::endl;
- return false;
- }
- if (!request_status.error_str().empty()) {
- std::cerr << __func__ << ": for session_id " << session_num
- << " failed with error code: " << request_status.error_str();
- return false;
- }
-
- std::cout << __func__ << ": succeed for session_id " << session_num << std::endl;
- return true;
-}
-
-bool TracingClient::GetTracingFile(const uint64_t session_num, const std::string& file_path) {
- if (file_path.empty()) {
- std::cerr << __func__ << ": missing file_path.\n";
- return false;
- }
- std::ofstream file_stream(file_path, std::fstream::binary);
-
- if (!file_stream) {
- std::cerr << __func__ << ": for session_id " << session_num << " failed to open file "
- << file_path << std::endl;
- return false;
- }
-
- ::grpc::ClientContext context;
- tracing_vm_proto::TracingSessionIdentifier session_id;
- session_id.set_session_id(session_num);
- auto grpc_reader = mGrpcStub->GetTracingFile(&context, session_id);
- tracing_vm_proto::TracingFileBuffer file_buffer;
-
- while (grpc_reader->Read(&file_buffer)) {
- const auto& write_buffer = file_buffer.buffer();
- file_stream.write(write_buffer.c_str(), write_buffer.size());
- }
-
- auto grpcStatus = grpc_reader->Finish();
- if (!grpcStatus.ok()) {
- std::cerr << __func__ << " failed for session_id " << session_num
- << "due to grpc error:" << grpcStatus.error_message() << std::endl;
- return false;
- }
-
- return true;
-}
-
-} // namespace android::tools::automotive::tracing
diff --git a/tools/tracing/TracingClient.h b/tools/tracing/TracingClient.h
deleted file mode 100644
index efb2a7a..0000000
--- a/tools/tracing/TracingClient.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-#pragma once
-
-#include "TracingVM.grpc.pb.h"
-#include "TracingVM.pb.h"
-
-#include <grpc++/grpc++.h>
-#include <memory>
-#include <string>
-
-namespace android::tools::automotive::tracing {
-
-class TracingClient {
- public:
- explicit TracingClient(const std::string& addr);
-
- bool StartTracing(const std::string& host_config, uint64_t& session_num);
- bool StopTracing(const uint64_t session_num);
- bool GetTracingFile(const uint64_t session_number, const std::string& file_path);
-
- private:
- std::string mServiceAddr;
- std::shared_ptr<::grpc::Channel> mGrpcChannel;
- std::unique_ptr<tracing_vm_proto::TracingServer::Stub> mGrpcStub;
-};
-
-} // namespace android::tools::automotive::tracing
diff --git a/tools/tracing/TracingClientTestMain.cpp b/tools/tracing/TracingClientTestMain.cpp
deleted file mode 100644
index 4b14163..0000000
--- a/tools/tracing/TracingClientTestMain.cpp
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2022 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 "TracingClient.h"
-#include "vsockinfo.h"
-
-#include <android-base/logging.h>
-
-#include <getopt.h>
-#include <unistd.h>
-
-using ::android::hardware::automotive::utils::VsockConnectionInfo;
-using ::android::tools::automotive::tracing::TracingClient;
-
-int main(int argc, char* argv[]) {
- enum class Options {
- OPT_SERVER_ADDR,
- OPT_CMD,
- OPT_HOST_CONFIG,
- OPT_SESSION_ID,
- OPT_FILE_DIR,
- };
- enum class TracingCommand {
- INVALID_CMD_CODE,
- START_TRACING,
- STOP_TRACING,
- GET_TRACING_FILE,
- };
- struct option options[] = {
- {
- .name = "server_addr",
- .has_arg = 1,
- .flag = 0,
- .val = static_cast<int>(Options::OPT_SERVER_ADDR),
- },
- {
- .name = "cmd",
- .has_arg = 1,
- .flag = 0,
- .val = static_cast<int>(Options::OPT_CMD),
- },
- {
- .name = "host_config",
- .has_arg = 1,
- .flag = 0,
- .val = static_cast<int>(Options::OPT_HOST_CONFIG),
- },
- {
- .name = "session_id",
- .has_arg = 1,
- .flag = 0,
- .val = static_cast<int>(Options::OPT_SESSION_ID),
- },
- {
- .name = "dir",
- .has_arg = 1,
- .flag = 0,
- .val = static_cast<int>(Options::OPT_FILE_DIR),
- },
- {},
- };
-
- std::string tracing_service_addr;
- TracingCommand cmd_code = TracingCommand::INVALID_CMD_CODE;
- std::string host_config;
- std::string file_dir;
- uint64_t session_id = 0;
-
- int opt_value;
- int index = 0;
- while ((opt_value = getopt_long_only(argc, argv, ":", options, &index)) != -1) {
- switch (static_cast<Options>(opt_value)) {
- case Options::OPT_SERVER_ADDR:
- tracing_service_addr = optarg;
- break;
- case Options::OPT_CMD: {
- const auto optarg_str = std::string(optarg);
- if (optarg_str == "start") {
- cmd_code = TracingCommand::START_TRACING;
- } else if (optarg_str == "stop") {
- cmd_code = TracingCommand::STOP_TRACING;
- } else if (optarg_str == "get") {
- cmd_code = TracingCommand::GET_TRACING_FILE;
- } else {
- std::cerr << "tracing-client doesn't support command: " << optarg << std::endl;
- return -1;
- }
- break;
- }
- case Options::OPT_HOST_CONFIG:
- host_config = optarg;
- break;
- case Options::OPT_FILE_DIR:
- file_dir = optarg;
- break;
- case Options::OPT_SESSION_ID:
- session_id = std::stoull(optarg);
- break;
- default:
- std::cerr << "tracing-client can't process option: " << argv[optind - 1]
- << std::endl;
- return -1;
- }
- }
-
- if (opt_value == -1 && optind < argc) {
- std::cerr << "tracing-client doesn't support option: " << argv[optind - 1] << std::endl;
- return 1;
- }
-
- if (tracing_service_addr.empty()) {
- const auto si = VsockConnectionInfo::fromRoPropertyStore(
- {
- "ro.boot.vendor.tracing.server.cid",
- "ro.vendor.tracing.server.cid",
- },
- {
- "ro.boot.vendor.tracing.server.port",
- "ro.vendor.tracing.server.port",
- });
- if (!si) {
- std::cerr << "tracing-client failed to get server connection cid/port." << std::endl;
- return 1;
- }
- tracing_service_addr = si->str();
- }
-
- TracingClient client(tracing_service_addr);
- switch (cmd_code) {
- case TracingCommand::START_TRACING: {
- return client.StartTracing(host_config, session_id) ? 0 : 1;
-
- case TracingCommand::STOP_TRACING:
- return client.StopTracing(session_id) ? 0 : 1;
-
- case TracingCommand::GET_TRACING_FILE:
- return client.GetTracingFile(session_id, file_dir) ? 0 : 1;
-
- default:
- std::cerr << "tracing-client input has wrong command code "
- << static_cast<int>(cmd_code) << std::endl;
- return 1;
- }
- }
-}
diff --git a/tools/tracing/TracingServerImpl.cpp b/tools/tracing/TracingServerImpl.cpp
deleted file mode 100644
index 2f8cf36..0000000
--- a/tools/tracing/TracingServerImpl.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2022 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 "TracingServerImpl.h"
-#include "protos/perfetto/config/trace_config.pb.h"
-
-#include <android-base/logging.h>
-
-#include <grpc++/grpc++.h>
-#include <memory>
-#include <string>
-
-namespace android::tools::automotive::tracing {
-
-static std::shared_ptr<::grpc::ServerCredentials> getServerCredentials() {
- return ::grpc::InsecureServerCredentials();
-}
-
-TracingServerImpl::TracingServerImpl(const std::string& addr) : mServiceAddr(addr) {}
-
-void TracingServerImpl::Start() {
- LOG(INFO) << "mGrpcServer " << mGrpcServer << " starting at " << mServiceAddr << std::endl;
- if (mGrpcServer) {
- LOG(INFO) << __func__ << " GRPC Server is running.";
- return;
- }
-
- ::grpc::ServerBuilder builder;
- builder.AddListeningPort(mServiceAddr, getServerCredentials());
- builder.RegisterService(this);
- mGrpcServer = builder.BuildAndStart();
-
- if (!mGrpcServer) {
- LOG(ERROR) << __func__ << ": failed to create the GRPC server, "
- << "please make sure the configuration and permissions are correct.";
- return;
- }
- LOG(INFO) << __func__ << " start server";
- mGrpcServer->Wait();
-}
-
-grpc::Status TracingServerImpl::StartTracing(::grpc::ServerContext* context,
- const tracing_vm_proto::StartTracingRequest* request,
- tracing_vm_proto::RequestStatus* request_status) {
- LOG(INFO) << "Received StartTracing rquest";
- perfetto::protos::TraceConfig trace_config;
- trace_config.ParseFromString(request->host_config());
- request_status->mutable_session_id()->set_session_id(mSessionId.fetch_add(1));
- return ::grpc::Status::OK;
-}
-
-grpc::Status TracingServerImpl::StopTracing(
- ::grpc::ServerContext* context,
- const tracing_vm_proto::TracingSessionIdentifier* session_id,
- tracing_vm_proto::RequestStatus* request_status) {
- LOG(INFO) << "Received StopTracing request";
- return ::grpc::Status::OK;
-}
-
-grpc::Status TracingServerImpl::GetTracingFile(
- ::grpc::ServerContext* context,
- const tracing_vm_proto::TracingSessionIdentifier* session_id,
- ::grpc::ServerWriter<tracing_vm_proto::TracingFileBuffer>* stream) {
- LOG(INFO) << "Received GetTracingFile request";
- // TODO: b/222110159 maintain sessions information and validate session id.
- if (session_id->session_id() == 0) {
- LOG(ERROR) << "Received invalid session_id 0.";
- return ::grpc::Status(::grpc::StatusCode::INVALID_ARGUMENT, "");
- }
-
- tracing_vm_proto::TracingFileBuffer buffer;
- std::string data = "Test data";
- buffer.set_buffer(data);
- stream->Write(buffer);
- return ::grpc::Status::OK;
-}
-
-} // namespace android::tools::automotive::tracing
diff --git a/tools/tracing/TracingServerImpl.h b/tools/tracing/TracingServerImpl.h
deleted file mode 100644
index e20f91d..0000000
--- a/tools/tracing/TracingServerImpl.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-
-#pragma once
-
-#include "TracingVM.grpc.pb.h"
-#include "TracingVM.pb.h"
-
-#include <grpc++/grpc++.h>
-
-#include <atomic>
-#include <memory>
-#include <string>
-
-namespace android::tools::automotive::tracing {
-
-class TracingServerImpl : public tracing_vm_proto::TracingServer::Service {
- public:
- TracingServerImpl(const std::string& addr);
-
- grpc::Status StartTracing(::grpc::ServerContext* context,
- const tracing_vm_proto::StartTracingRequest* request,
- tracing_vm_proto::RequestStatus* request_status);
-
- grpc::Status StopTracing(::grpc::ServerContext* context,
- const tracing_vm_proto::TracingSessionIdentifier* session_id,
- tracing_vm_proto::RequestStatus* request_status);
-
- grpc::Status GetTracingFile(::grpc::ServerContext* context,
- const tracing_vm_proto::TracingSessionIdentifier* session_id,
- ::grpc::ServerWriter<tracing_vm_proto::TracingFileBuffer>* stream);
- void Start();
-
- private:
- std::atomic_uint64_t mSessionId = 1;
- std::string mServiceAddr;
- std::unique_ptr<::grpc::Server> mGrpcServer;
-};
-
-} // namespace android::tools::automotive::tracing
diff --git a/tools/tracing/TracingServerMain.cpp b/tools/tracing/TracingServerMain.cpp
deleted file mode 100644
index f270858..0000000
--- a/tools/tracing/TracingServerMain.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2022 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 "TracingServerImpl.h"
-#include "vsockinfo.h"
-
-#include <iostream>
-#include <string>
-
-using ::android::hardware::automotive::utils::VsockConnectionInfo;
-using ::android::tools::automotive::tracing::TracingServerImpl;
-
-// This is used for testing purpose
-static const std::string TRACING_SERVICE_ADDR = "vsock:1:50051";
-
-int main(int argc, char* argv[]) {
- std::string server_addr;
- const auto si = VsockConnectionInfo::fromRoPropertyStore(
- {
- "ro.boot.vendor.tracing.server.cid",
- "ro.vendor.tracing.server.cid",
- },
- {
- "ro.boot.vendor.tracing.server.port",
- "ro.vendor.tracing.server.port",
- });
-
- if (!si) {
- std::cout << "Failed to get server connection cid/port from property file."
- << "The default address for testing purpose will be used." << std::endl;
- server_addr = TRACING_SERVICE_ADDR;
- } else {
- server_addr = si->str();
- }
-
- TracingServerImpl server(server_addr);
- server.Start();
- return 0;
-}
diff --git a/tools/tracing/proto/TracingVM.proto b/tools/tracing/proto/TracingVM.proto
deleted file mode 100644
index 74a2ae4..0000000
--- a/tools/tracing/proto/TracingVM.proto
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2022 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.
- */
-
-syntax = "proto3";
-
-package tracing_vm_proto;
-
-// zero is invalid session id and indicates an error.
-message TracingSessionIdentifier {
- uint64 session_id = 1;
-}
-
-message StartTracingRequest {
- // TODO: b/221289678 Replace bytes with perfetto.protos.TraceConfig.
- bytes host_config = 1;
-}
-
-message RequestStatus {
- string error_str = 1;
- TracingSessionIdentifier session_id = 2;
-}
-
-message TracingFileBuffer {
- bytes buffer = 1;
-}
-
-service TracingServer {
- rpc StartTracing(StartTracingRequest) returns (RequestStatus) {}
-
- rpc StopTracing(TracingSessionIdentifier) returns (RequestStatus) {}
-
- rpc GetTracingFile(TracingSessionIdentifier) returns (stream TracingFileBuffer) {}
-}
diff --git a/tools/tracing/proto/perfetto_trace.proto b/tools/tracing/proto/perfetto_trace.proto
deleted file mode 100644
index 38f12c8..0000000
--- a/tools/tracing/proto/perfetto_trace.proto
+++ /dev/null
@@ -1,9068 +0,0 @@
-// AUTOGENERATED - DO NOT EDIT
-// ---------------------------
-// This file has been generated by
-// AOSP://external/perfetto/tools/gen_merged_protos
-// merging the perfetto config protos.
-// This fused proto is intended to be copied in:
-// - Android tree, for statsd.
-// - Google internal repos.
-
-syntax = "proto2";
-
-package perfetto.protos;
-
-// Begin of protos/perfetto/common/gpu_counter_descriptor.proto
-
-// Description of GPU counters.
-// This message is sent by a GPU counter producer to specify the counters
-// available in the hardware.
-message GpuCounterDescriptor {
- // Logical groups for a counter. This is used in the UI to present the
- // related counters together.
- enum GpuCounterGroup {
- UNCLASSIFIED = 0;
- SYSTEM = 1;
- VERTICES = 2;
- FRAGMENTS = 3;
- PRIMITIVES = 4;
- // Includes counters relating to caching and bandwidth.
- MEMORY = 5;
- COMPUTE = 6;
- }
-
- message GpuCounterSpec {
- optional uint32 counter_id = 1;
- optional string name = 2;
- optional string description = 3;
- // MeasureUnit unit (deprecated)
- reserved 4;
- oneof peak_value {
- int64 int_peak_value = 5;
- double double_peak_value = 6;
- }
- repeated MeasureUnit numerator_units = 7;
- repeated MeasureUnit denominator_units = 8;
- optional bool select_by_default = 9;
- repeated GpuCounterGroup groups = 10;
- }
- repeated GpuCounterSpec specs = 1;
-
- // Allow producer to group counters into block to represent counter islands.
- // A capacity may be specified to indicate the number of counters that can be
- // enable simultaneously in that block.
- message GpuCounterBlock {
- // required. Unique ID for the counter group.
- optional uint32 block_id = 1;
- // optional. Number of counters supported by the block. No limit if unset.
- optional uint32 block_capacity = 2;
- // optional. Name of block.
- optional string name = 3;
- // optional. Description for the block.
- optional string description = 4;
- // list of counters that are part of the block.
- repeated uint32 counter_ids = 5;
- }
- repeated GpuCounterBlock blocks = 2;
-
- // optional. Minimum sampling period supported by the producer in
- // nanoseconds.
- optional uint64 min_sampling_period_ns = 3;
-
- // optional. Maximum sampling period supported by the producer in
- // nanoseconds.
- optional uint64 max_sampling_period_ns = 4;
-
- // optional. The producer supports counter sampling by instrumenting the
- // command buffer.
- optional bool supports_instrumented_sampling = 5;
-
- // next id: 41
- enum MeasureUnit {
- NONE = 0;
-
- BIT = 1;
- KILOBIT = 2;
- MEGABIT = 3;
- GIGABIT = 4;
- TERABIT = 5;
- PETABIT = 6;
-
- BYTE = 7;
- KILOBYTE = 8;
- MEGABYTE = 9;
- GIGABYTE = 10;
- TERABYTE = 11;
- PETABYTE = 12;
-
- HERTZ = 13;
- KILOHERTZ = 14;
- MEGAHERTZ = 15;
- GIGAHERTZ = 16;
- TERAHERTZ = 17;
- PETAHERTZ = 18;
-
- NANOSECOND = 19;
- MICROSECOND = 20;
- MILLISECOND = 21;
- SECOND = 22;
- MINUTE = 23;
- HOUR = 24;
-
- VERTEX = 25;
- PIXEL = 26;
- TRIANGLE = 27;
- PRIMITIVE = 38;
- FRAGMENT = 39;
-
- MILLIWATT = 28;
- WATT = 29;
- KILOWATT = 30;
-
- JOULE = 31;
- VOLT = 32;
- AMPERE = 33;
-
- CELSIUS = 34;
- FAHRENHEIT = 35;
- KELVIN = 36;
-
- // Values should be out of 100.
- PERCENT = 37;
-
- INSTRUCTION = 40;
- }
-}
-
-// End of protos/perfetto/common/gpu_counter_descriptor.proto
-
-// Begin of protos/perfetto/common/track_event_descriptor.proto
-
-message TrackEventCategory {
- optional string name = 1;
- optional string description = 2;
- repeated string tags = 3;
-}
-
-message TrackEventDescriptor {
- repeated TrackEventCategory available_categories = 1;
-}
-
-// End of protos/perfetto/common/track_event_descriptor.proto
-
-// Begin of protos/perfetto/common/data_source_descriptor.proto
-
-// This message is sent from Producer(s) to the tracing Service when registering
-// to advertise their capabilities. It describes the structure of tracing
-// protos that will be produced by the data source and the supported filters.
-message DataSourceDescriptor {
- // e.g., "linux.ftrace", "chromium.tracing"
- optional string name = 1;
-
- // When true the data source is expected to ack the stop request through the
- // NotifyDataSourceStopped() IPC. This field has been introduced after
- // Android P in Jul 2018 and is not supported on older versions.
- optional bool will_notify_on_stop = 2;
-
- // When true the data source is expected to ack the start request through the
- // NotifyDataSourceStarted() IPC. This field has been introduced after
- // Android P in March 2019 and is not supported on older versions.
- optional bool will_notify_on_start = 3;
-
- // If true, opt into receiving the ClearIncrementalState() IPC. This should be
- // set if the data source writes packets that refer to previous trace
- // contents, and knows how to stop referring to the already-emitted data.
- optional bool handles_incremental_state_clear = 4;
-
- // Optional specification about available GPU counters.
- optional GpuCounterDescriptor gpu_counter_descriptor = 5 [lazy = true];
-
- optional TrackEventDescriptor track_event_descriptor = 6 [lazy = true];
-}
-
-// End of protos/perfetto/common/data_source_descriptor.proto
-
-// Begin of protos/perfetto/common/tracing_service_state.proto
-
-// Reports the state of the tracing service. Used to gather details about the
-// data sources connected.
-// See ConsumerPort::QueryServiceState().
-message TracingServiceState {
- // Describes a producer process.
- message Producer {
- // Unique ID of the producer (monotonic counter).
- optional int32 id = 1;
-
- // Typically matches the process name.
- optional string name = 2;
-
- // Unix uid of the remote process.
- optional int32 uid = 3;
-
- // The version of the client library used by the producer.
- // This is a human readable string with and its format varies depending on
- // the build system and the repo (standalone vs AOSP).
- // This is intended for human debugging only.
- optional string sdk_version = 4;
- }
-
- // Describes a data source registered by a producer. Data sources are listed
- // regardless of the fact that they are being used or not.
- message DataSource {
- // Descriptor passed by the data source when calling RegisterDataSource().
- optional DataSourceDescriptor ds_descriptor = 1;
-
- // ID of the producer, as per Producer.id.
- optional int32 producer_id = 2;
- }
-
- // Lists all the producers connected.
- repeated Producer producers = 1;
-
- // Lists the data sources available.
- repeated DataSource data_sources = 2;
-
- // Total number of tracing sessions.
- optional int32 num_sessions = 3;
-
- // Number of tracing sessions in the started state. Always <= num_sessions.
- optional int32 num_sessions_started = 4;
-
- // The version of traced (the same returned by `traced --version`).
- // This is a human readable string with and its format varies depending on
- // the build system and the repo (standalone vs AOSP).
- // This is intended for human debugging only.
- optional string tracing_service_version = 5;
-}
-
-// End of protos/perfetto/common/tracing_service_state.proto
-
-// Begin of protos/perfetto/common/builtin_clock.proto
-
-enum BuiltinClock {
- BUILTIN_CLOCK_UNKNOWN = 0;
- BUILTIN_CLOCK_REALTIME = 1;
- BUILTIN_CLOCK_REALTIME_COARSE = 2;
- BUILTIN_CLOCK_MONOTONIC = 3;
- BUILTIN_CLOCK_MONOTONIC_COARSE = 4;
- BUILTIN_CLOCK_MONOTONIC_RAW = 5;
- BUILTIN_CLOCK_BOOTTIME = 6;
- BUILTIN_CLOCK_MAX_ID = 63;
-
- reserved 7, 8;
-}
-
-// End of protos/perfetto/common/builtin_clock.proto
-
-// Begin of protos/perfetto/common/android_log_constants.proto
-
-// Values from NDK's android/log.h.
-enum AndroidLogId {
- // MAIN.
- LID_DEFAULT = 0;
-
- LID_RADIO = 1;
- LID_EVENTS = 2;
- LID_SYSTEM = 3;
- LID_CRASH = 4;
- LID_STATS = 5;
- LID_SECURITY = 6;
- LID_KERNEL = 7;
-}
-
-enum AndroidLogPriority {
- PRIO_UNSPECIFIED = 0;
-
- // _DEFAULT, but should never be seen in logs.
- PRIO_UNUSED = 1;
-
- PRIO_VERBOSE = 2;
- PRIO_DEBUG = 3;
- PRIO_INFO = 4;
- PRIO_WARN = 5;
- PRIO_ERROR = 6;
- PRIO_FATAL = 7;
-}
-
-// End of protos/perfetto/common/android_log_constants.proto
-
-// Begin of protos/perfetto/config/android/android_log_config.proto
-
-message AndroidLogConfig {
- repeated AndroidLogId log_ids = 1;
-
- // Was |poll_ms|, deprecated.
- reserved 2;
-
- // If set ignores all log messages whose prio is < the given value.
- optional AndroidLogPriority min_prio = 3;
-
- // If non-empty ignores all log messages whose tag doesn't match one of the
- // specified values.
- repeated string filter_tags = 4;
-}
-
-// End of protos/perfetto/config/android/android_log_config.proto
-
-// Begin of protos/perfetto/config/android/android_polled_state_config.proto
-
-// Data source that polls for display state.
-message AndroidPolledStateConfig {
- // Frequency of polling. If absent the state will be recorded once, at the
- // start of the trace.
- // This is required to be > 100ms to avoid excessive CPU usage.
- optional uint32 poll_ms = 1;
-}
-
-// End of protos/perfetto/config/android/android_polled_state_config.proto
-
-// Begin of protos/perfetto/config/android/packages_list_config.proto
-
-// Data source that lists details (such as version code) about packages on an
-// Android device.
-message PackagesListConfig {
- // If not empty, emit info about only the following list of package names
- // (exact match, no regex). Otherwise, emit info about all packages.
- repeated string package_name_filter = 1;
-}
-
-// End of protos/perfetto/config/android/packages_list_config.proto
-
-// Begin of protos/perfetto/config/chrome/chrome_config.proto
-
-message ChromeConfig {
- optional string trace_config = 1;
-
- // When enabled, the data source should only fill in fields in the output that
- // are not potentially privacy sensitive.
- optional bool privacy_filtering_enabled = 2;
-
- // Instead of emitting binary protobuf, convert the trace data to the legacy
- // JSON format. Note that the trace data will still be returned as a series of
- // TracePackets, but the embedded data will be JSON instead of serialized
- // protobuf.
- optional bool convert_to_legacy_json = 3;
-
- // Priority of the tracing session client. A higher priority session may
- // preempt a lower priority one in configurations where concurrent sessions
- // aren't supported.
- enum ClientPriority {
- UNKNOWN = 0;
- BACKGROUND = 1;
- USER_INITIATED = 2;
- }
- optional ClientPriority client_priority = 4;
-
- // Applicable only when using legacy JSON format.
- // If |json_agent_label_filter| is not empty, only data pertaining to
- // the specified tracing agent label (e.g. "traceEvents") will be returned.
- optional string json_agent_label_filter = 5;
-}
-
-// End of protos/perfetto/config/chrome/chrome_config.proto
-
-// Begin of protos/perfetto/config/ftrace/ftrace_config.proto
-
-message FtraceConfig {
- repeated string ftrace_events = 1;
- repeated string atrace_categories = 2;
- repeated string atrace_apps = 3;
- // *Per-CPU* buffer size.
- optional uint32 buffer_size_kb = 10;
- optional uint32 drain_period_ms = 11;
-
- // Configuration for compact encoding of scheduler events. When enabled (and
- // recording the relevant ftrace events), specific high-volume events are
- // encoded in a denser format than normal.
- message CompactSchedConfig {
- // If true, and sched_switch or sched_waking ftrace events are enabled,
- // record those events in the compact format.
- optional bool enabled = 1;
- }
- optional CompactSchedConfig compact_sched = 12;
-
- // Enables symbol name resolution against /proc/kallsyms.
- // It requires that either traced_probes is running as root or that
- // kptr_restrict has been manually lowered.
- // It does not disclose KASLR, symbol addresses are mangled.
- optional bool symbolize_ksyms = 13;
-
- // By default the kernel symbolizer is lazily initialized on a deferred task
- // to reduce ftrace's time-to-start-recording. Unfortunately that makes
- // ksyms integration tests hard. This flag forces the kernel symbolizer to be
- // initialized synchronously on the data source start and hence avoiding
- // timing races in tests.
- optional bool initialize_ksyms_synchronously_for_testing = 14;
-}
-
-// End of protos/perfetto/config/ftrace/ftrace_config.proto
-
-// Begin of protos/perfetto/config/gpu/gpu_counter_config.proto
-
-message GpuCounterConfig {
- // Desired sampling interval for counters.
- optional uint64 counter_period_ns = 1;
-
- // List of counters to be sampled. Counter IDs correspond to the ones
- // described in GpuCounterSpec in the data source descriptor.
- repeated uint32 counter_ids = 2;
-
- // Sample counters by instrumenting command buffers.
- optional bool instrumented_sampling = 3;
-
- // Fix gpu clock rate during trace session.
- optional bool fix_gpu_clock = 4;
-}
-
-// End of protos/perfetto/config/gpu/gpu_counter_config.proto
-
-// Begin of protos/perfetto/config/gpu/vulkan_memory_config.proto
-
-message VulkanMemoryConfig {
- // Tracking driver memory usage events
- optional bool track_driver_memory_usage = 1;
-
- // Tracking device memory usage events
- optional bool track_device_memory_usage = 2;
-}
-
-// End of protos/perfetto/config/gpu/vulkan_memory_config.proto
-
-// Begin of protos/perfetto/config/inode_file/inode_file_config.proto
-
-message InodeFileConfig {
- message MountPointMappingEntry {
- optional string mountpoint = 1;
- repeated string scan_roots = 2;
- }
-
- // How long to pause between batches.
- optional uint32 scan_interval_ms = 1;
-
- // How long to wait before the first scan in order to accumulate inodes.
- optional uint32 scan_delay_ms = 2;
-
- // How many inodes to scan in one batch.
- optional uint32 scan_batch_size = 3;
-
- // Do not scan for inodes not found in the static map.
- optional bool do_not_scan = 4;
-
- // If non-empty, only scan inodes corresponding to block devices named in
- // this list.
- repeated string scan_mount_points = 5;
-
- // When encountering an inode belonging to a block device corresponding
- // to one of the mount points in this map, scan its scan_roots instead.
- repeated MountPointMappingEntry mount_point_mapping = 6;
-}
-
-// End of protos/perfetto/config/inode_file/inode_file_config.proto
-
-// Begin of protos/perfetto/config/interceptors/console_config.proto
-
-message ConsoleConfig {
- enum Output {
- OUTPUT_UNSPECIFIED = 0;
- OUTPUT_STDOUT = 1;
- OUTPUT_STDERR = 2;
- }
- optional Output output = 1;
- optional bool enable_colors = 2;
-}
-
-// End of protos/perfetto/config/interceptors/console_config.proto
-
-// Begin of protos/perfetto/config/interceptor_config.proto
-
-// Configuration for trace packet interception. Used for diverting trace data to
-// non-Perfetto sources (e.g., logging to the console, ETW) when using the
-// Perfetto SDK.
-message InterceptorConfig {
- // Matches the name given to RegisterInterceptor().
- optional string name = 1;
-
- optional ConsoleConfig console_config = 100 [lazy = true];
-}
-
-// End of protos/perfetto/config/interceptor_config.proto
-
-// Begin of protos/perfetto/config/power/android_power_config.proto
-
-message AndroidPowerConfig {
- enum BatteryCounters {
- BATTERY_COUNTER_UNSPECIFIED = 0;
-
- // Coulomb counter.
- BATTERY_COUNTER_CHARGE = 1;
-
- // Charge (%).
- BATTERY_COUNTER_CAPACITY_PERCENT = 2;
-
- // Instantaneous current.
- BATTERY_COUNTER_CURRENT = 3;
-
- // Avg current.
- BATTERY_COUNTER_CURRENT_AVG = 4;
- }
- optional uint32 battery_poll_ms = 1;
- repeated BatteryCounters battery_counters = 2;
-
- // Where available enables per-power-rail measurements.
- optional bool collect_power_rails = 3;
-
- // Provides a breakdown of energy estimation for various subsystem (e.g. GPU).
- // Available from Android S.
- optional bool collect_energy_estimation_breakdown = 4;
-}
-
-// End of protos/perfetto/config/power/android_power_config.proto
-
-// Begin of protos/perfetto/config/process_stats/process_stats_config.proto
-
-message ProcessStatsConfig {
- enum Quirks {
- QUIRKS_UNSPECIFIED = 0;
-
- // This has been deprecated and ignored as per 2018-05-01. Full scan at
- // startup is now disabled by default and can be re-enabled using the
- // |scan_all_processes_on_start| arg.
- DISABLE_INITIAL_DUMP = 1 [deprecated = true];
-
- DISABLE_ON_DEMAND = 2;
- }
-
- repeated Quirks quirks = 1;
-
- // If enabled all processes will be scanned and dumped when the trace starts.
- optional bool scan_all_processes_on_start = 2;
-
- // If enabled thread names are also recoded (this is redundant if sched_switch
- // is enabled).
- optional bool record_thread_names = 3;
-
- // If > 0 samples counters (see process_stats.proto) from
- // /proc/pid/status and oom_score_adj every X ms.
- // This is required to be > 100ms to avoid excessive CPU usage.
- // TODO(primiano): add CPU cost for change this value.
- optional uint32 proc_stats_poll_ms = 4;
-
- // If empty samples stats for all processes. If non empty samples stats only
- // for processes matching the given string in their argv0 (i.e. the first
- // entry of /proc/pid/cmdline).
- // TODO(primiano): implement this feature.
- // repeated string proc_stats_filter = 5;
-
- // This is required to be either = 0 or a multiple of |proc_stats_poll_ms|
- // (default: |proc_stats_poll_ms|). If = 0, will be set to
- // |proc_stats_poll_ms|. Non-multiples will be rounded down to the nearest
- // multiple.
- optional uint32 proc_stats_cache_ttl_ms = 6;
-
- // Whether to record /proc/tid/time_in_state.
- optional bool record_thread_time_in_state = 7;
-
- // Size of the cache for thread time_in_state cpu freq values.
- // If not specificed, the default is used.
- optional uint32 thread_time_in_state_cache_size = 8;
-}
-
-// End of protos/perfetto/config/process_stats/process_stats_config.proto
-
-// Begin of protos/perfetto/config/profiling/heapprofd_config.proto
-
-// Configuration for go/heapprofd.
-// Next id: 27
-message HeapprofdConfig {
- message ContinuousDumpConfig {
- // ms to wait before first dump.
- optional uint32 dump_phase_ms = 5;
- // ms to wait between following dumps.
- optional uint32 dump_interval_ms = 6;
- }
-
- // Sampling rate for all heaps not specified via heap_sampling_intervals.
- //
- // These are:
- // * All heaps if heap_sampling_intervals is empty.
- // * Those profiled due to all_heaps and not named in heaps if
- // heap_sampling_intervals is not empty.
- // * The implicit libc.malloc heap if heaps is empty.
- //
- // Set to 1 for perfect accuracy.
- // Otherwise, sample every sample_interval_bytes on average.
- //
- // See
- // https://perfetto.dev/docs/data-sources/native-heap-profiler#sampling-interval
- // for more details.
- //
- // BUGS
- // Before Android 12, setting this to 0 would crash the target process.
- optional uint64 sampling_interval_bytes = 1;
-
- // If less than the given numbers of bytes are left free in the shared
- // memory buffer, increase sampling interval by a factor of two.
- // Adaptive sampling is disabled when set to 0.
- optional uint64 adaptive_sampling_shmem_threshold = 24;
- // Stop doubling the sampling_interval once the sampling interval has reached
- // this value.
- optional uint64 adaptive_sampling_max_sampling_interval_bytes = 25;
-
- // E.g. surfaceflinger, com.android.phone
- // This input is normalized in the following way: if it contains slashes,
- // everything up to the last slash is discarded. If it contains "@",
- // everything after the first @ is discared.
- // E.g. /system/bin/surfaceflinger@1.0 normalizes to surfaceflinger.
- // This transformation is also applied to the processes' command lines when
- // matching.
- repeated string process_cmdline = 2;
-
- // For watermark based triggering or local debugging.
- repeated uint64 pid = 4;
-
- // Only profile target if it was installed by one of the packages given.
- // Special values are:
- // * @system: installed on the system partition
- // * @product: installed on the product partition
- // * @null: sideloaded
- // Supported on Android 12+.
- repeated string target_installed_by = 26;
-
- // Which heaps to sample, e.g. "libc.malloc". If left empty, only samples
- // "malloc".
- //
- // Introduced in Android 12.
- repeated string heaps = 20;
-
- // Which heaps not to sample, e.g. "libc.malloc". This is useful when used in
- // combination with all_heaps;
- //
- // Introduced in Android 12.
- repeated string exclude_heaps = 27;
-
- optional bool stream_allocations = 23;
-
- // If given, needs to be the same length as heaps and gives the sampling
- // interval for the respective entry in heaps.
- //
- // Otherwise, sampling_interval_bytes is used.
- //
- // It is recommended to set sampling_interval_bytes to a reasonable default
- // value when using this, as a value of 0 for sampling_interval_bytes will
- // crash the target process before Android 12.
- //
- // Introduced in Android 12.
- repeated uint64 heap_sampling_intervals = 22;
-
- // Sample all heaps registered by target process. Introduced in Android 12.
- optional bool all_heaps = 21;
-
- // Profile all processes eligible for profiling on the system.
- // See
- // https://perfetto.dev/docs/data-sources/native-heap-profiler#heapprofd-targets
- // for which processes are eligible.
- //
- // On unmodified userdebug builds, this will lead to system crashes. Zygote
- // will crash when trying to launch a new process as it will have an
- // unexpected open socket to heapprofd.
- //
- // heapprofd will likely be overloaded by the amount of data for low
- // sampling intervals.
- optional bool all = 5;
-
- // Do not profile processes whose anon RSS + swap < given value.
- // Introduced in Android 11.
- optional uint32 min_anonymous_memory_kb = 15;
-
- // Stop profile if heapprofd memory usage goes beyond the given value.
- // Introduced in Android 11.
- optional uint32 max_heapprofd_memory_kb = 16;
-
- // Stop profile if heapprofd CPU time since start of this data-source
- // goes beyond given value.
- // Introduced in Android 11.
- optional uint64 max_heapprofd_cpu_secs = 17;
-
- // Do not emit function names for mappings starting with this prefix.
- // E.g. /system to not emit symbols for any system libraries.
- repeated string skip_symbol_prefix = 7;
-
- // Dump at a predefined interval.
- optional ContinuousDumpConfig continuous_dump_config = 6;
-
- // Size of the shared memory buffer between the profiled processes and
- // heapprofd. Defaults to 8 MiB. If larger than 500 MiB, truncated to 500
- // MiB.
- //
- // Needs to be:
- // * at least 8192,
- // * a power of two,
- // * a multiple of 4096.
- optional uint64 shmem_size_bytes = 8;
-
- // When the shmem buffer is full, block the client instead of ending the
- // trace. Use with caution as this will significantly slow down the target
- // process.
- optional bool block_client = 9;
-
- // If set, stop the trace session after blocking the client for this
- // timeout. Needs to be larger than 100 us, otherwise no retries are done.
- // Introduced in Android 11.
- optional uint32 block_client_timeout_us = 14;
-
- // Do not profile processes from startup, only match already running
- // processes.
- //
- // Can not be set at the same time as no_running.
- // Introduced in Android 11.
- optional bool no_startup = 10;
-
- // Do not profile running processes. Only match processes on startup.
- //
- // Can not be set at the same time as no_startup.
- // Introduced in Android 11.
- optional bool no_running = 11;
-
- // deprecated idle_allocations.
- reserved 12;
-
- // Cause heapprofd to emit a single dump at the end, showing the memory usage
- // at the point in time when the sampled heap usage of the process was at its
- // maximum. This causes ProfilePacket.HeapSample.self_max to be set, and
- // self_allocated and self_freed to not be set.
- // Introduced in Android 11.
- optional bool dump_at_max = 13;
-
- // FEATURE FLAGS. THERE BE DRAGONS.
-
- // Escape hatch if the session is being torn down because of a forked child
- // that shares memory space, but is not correctly identified as a vforked
- // child.
- // Introduced in Android 11.
- optional bool disable_fork_teardown = 18;
-
- // We try to automatically detect when a target applicatation vforks but then
- // does a memory allocation (or free). This auto-detection can be disabled
- // with this.
- // Introduced in Android 11.
- optional bool disable_vfork_detection = 19;
-}
-
-// End of protos/perfetto/config/profiling/heapprofd_config.proto
-
-// Begin of protos/perfetto/config/profiling/java_hprof_config.proto
-
-// Configuration for go/heapprofd.
-message JavaHprofConfig {
- // If dump_interval_ms != 0, the following configuration is used.
- message ContinuousDumpConfig {
- // ms to wait before first continuous dump.
- // A dump is always created at the beginning of the trace.
- optional uint32 dump_phase_ms = 1;
- // ms to wait between following dumps.
- optional uint32 dump_interval_ms = 2;
- }
-
- // This input is normalized in the following way: if it contains slashes,
- // everything up to the last slash is discarded. If it contains "@",
- // everything after the first @ is discared.
- // E.g. /system/bin/surfaceflinger@1.0 normalizes to surfaceflinger.
- // This transformation is also applied to the processes' command lines when
- // matching.
- repeated string process_cmdline = 1;
-
- // For watermark based triggering or local debugging.
- repeated uint64 pid = 2;
-
- // Only profile target if it was installed by one of the packages given.
- // Special values are:
- // * @system: installed on the system partition
- // * @product: installed on the product partition
- // * @null: sideloaded
- // Supported on Android 12+.
- repeated string target_installed_by = 7;
-
- // Dump at a predefined interval.
- optional ContinuousDumpConfig continuous_dump_config = 3;
-
- // Do not profile processes whose anon RSS + swap < given value.
- optional uint32 min_anonymous_memory_kb = 4;
-
- // Include the process' /proc/self/smaps.
- // This only shows maps that:
- // * start with /system
- // * start with /vendor
- // * start with /data/app
- // * contain "extracted in memory from Y", where Y matches any of the above
- optional bool dump_smaps = 5;
-
- // Exclude objects of the following types from the profile. This can be
- // useful if lots of uninteresting objects, e.g. "sun.misc.Cleaner".
- repeated string ignored_types = 6;
-}
-
-// End of protos/perfetto/config/profiling/java_hprof_config.proto
-
-// Begin of protos/perfetto/common/perf_events.proto
-
-message PerfEvents {
- // What event to sample on, and how often. Commented from the perspective of
- // its use in |PerfEventConfig|.
- message Timebase {
- // How often the per-cpu sampling will occur. Not guaranteed to be honored
- // as the kernel can throttle the sampling rate if it's too high.
- // If unset, an implementation-defined default is used.
- oneof interval {
- // Per-cpu sampling frequency in Hz, as requested from the kernel. Not the
- // same as 1/period.
- // Details: the actual sampling will still be based on a period, but the
- // kernel will dynamically adjust it based on the observed event rate, to
- // approximate this frequency. Works best with steady-rate events like
- // timers.
- uint64 frequency = 2;
-
- // Per-cpu sampling will occur every |period| counts of |event|.
- // Prefer |frequency| by default, as it's easier to oversample with a
- // fixed period.
- uint64 period = 1;
- }
-
- // Counting event to use as a timebase for the sampling.
- // If unset, implies the CPU timer (SW_CPU_CLOCK) as the event,
- // which is what you usually want.
- // See common/perf_events.proto for the definitions.
- oneof event {
- Counter counter = 4;
- Tracepoint tracepoint = 3;
- }
- }
-
- enum Counter {
- UNKNOWN_COUNTER = 0;
- // software:
- SW_CPU_CLOCK = 1;
- SW_PAGE_FAULTS = 2;
- // hardware:
- HW_CPU_CYCLES = 10;
- HW_INSTRUCTIONS = 11;
- }
-
- message Tracepoint {
- // Group and name for the tracepoint, acceptable forms:
- // * "sched/sched_switch"
- // * "sched:sched_switch"
- optional string name = 1;
-
- // Optional field-level filter for the tracepoint. Only events matching this
- // filter will be counted (and therefore contribute to the sampling period).
- // Example: "prev_pid >= 42 && next_pid == 0".
- // For full syntax, see kernel documentation on "Event filtering":
- // https://www.kernel.org/doc/Documentation/trace/events.txt
- optional string filter = 2;
- }
-}
-
-// End of protos/perfetto/common/perf_events.proto
-
-// Begin of protos/perfetto/config/profiling/perf_event_config.proto
-
-// Configuration for the traced_perf profiler.
-//
-// Example config for basic cpu profiling:
-// perf_event_config {
-// timebase {
-// frequency: 80
-// }
-// callstack_sampling {
-// scope {
-// target_cmdline: "surfaceflinger"
-// target_cmdline: "system_server"
-// }
-// kernel_frames: true
-// }
-// }
-//
-// Next id: 19
-message PerfEventConfig {
- // What event to sample on, and how often.
- // Defined in common/perf_events.proto.
- optional PerfEvents.Timebase timebase = 15;
-
- // If set, the profiler will sample userspace processes' callstacks at the
- // interval specified by the |timebase|.
- // If unset, the profiler will record only the event counts.
- optional CallstackSampling callstack_sampling = 16;
-
- //
- // Kernel <-> userspace ring buffer options:
- //
-
- // How often the per-cpu ring buffers are read by the producer.
- // If unset, an implementation-defined default is used.
- optional uint32 ring_buffer_read_period_ms = 8;
-
- // Size (in 4k pages) of each per-cpu ring buffer that is filled by the
- // kernel. If set, must be a power of two.
- // If unset, an implementation-defined default is used.
- optional uint32 ring_buffer_pages = 3;
-
- //
- // Daemon's resource usage limits:
- //
-
- // Drop samples if the heap memory held by the samples in the unwinder queue
- // is above the given limit. This counts the memory across all concurrent data
- // sources (not just this one's), and there is no fairness guarantee - the
- // whole quota might be used up by a concurrent source.
- optional uint64 max_enqueued_footprint_kb = 17;
-
- // Stop the data source if traced_perf's combined {RssAnon + Swap} memory
- // footprint exceeds this value.
- optional uint32 max_daemon_memory_kb = 13;
-
- //
- // Uncommon options:
- //
-
- // Timeout for the remote /proc/<pid>/{maps,mem} file descriptors for a
- // sampled process. This is primarily for Android, where this lookup is
- // asynchronous. As long as the producer is waiting, the associated samples
- // will be kept enqueued (putting pressure on the capacity of the shared
- // unwinding queue). Once a lookup for a process expires, all associated
- // samples are discarded. However, if the lookup still succeeds after the
- // timeout, future samples will be handled normally.
- // If unset, an implementation-defined default is used.
- optional uint32 remote_descriptor_timeout_ms = 9;
-
- // Optional period for clearing state cached by the unwinder. This is a heavy
- // operation that is only necessary for traces that target a wide set of
- // processes, and require the memory footprint to be reset periodically.
- // If unset, the cached state will not be cleared.
- optional uint32 unwind_state_clear_period_ms = 10;
-
- //
- // Deprecated (superseded by options above):
- //
- // Do not set *any* of these fields in new configs.
- //
-
- // Note: legacy configs had to set |all_cpus| to true to pass parsing.
- // We rely on this to detect such configs.
- optional bool all_cpus = 1;
- optional uint32 sampling_frequency = 2;
- optional bool kernel_frames = 12;
- repeated int32 target_pid = 4;
- repeated string target_cmdline = 5;
-
- // Only profile target if it was installed by one of the packages given.
- // Special values are:
- // * @system: installed on the system partition
- // * @product: installed on the product partition
- // * @null: sideloaded
- // Supported on Android 12+.
- repeated string target_installed_by = 18;
- repeated int32 exclude_pid = 6;
- repeated string exclude_cmdline = 7;
- optional uint32 additional_cmdline_count = 11;
- // previously |tracepoint|
- reserved 14;
-
- //
- // Sub-messages (nested for generated code namespacing).
- //
-
- message CallstackSampling {
- // Defines a set of processes for which samples are retained/skipped. If
- // unset, all userspace samples are kept, but beware that it will be very
- // heavy on the stack unwinder, which might start dropping samples due to
- // overload.
- optional Scope scope = 1;
-
- // If true, callstacks will include the kernel-space frames. Such frames can
- // be identified by a magical "kernel" string as their mapping name.
- // Requires traced_perf to be running as root, or kptr_restrict to have been
- // manually unrestricted. On Android, the platform should do the right thing
- // on debug builds.
- // This does *not* disclose KASLR, as only the function names are emitted.
- optional bool kernel_frames = 2;
- }
-
- message Scope {
- // Process ID (TGID) allowlist. If this list is not empty, only matching
- // samples will be retained. If multiple allow/deny-lists are
- // specified by the config, then all of them are evaluated for each sampled
- // process.
- repeated int32 target_pid = 1;
-
- // Command line allowlist, matched against the
- // /proc/<pid>/cmdline (not the comm string), with both sides being
- // "normalized". Normalization is as follows: (1) trim everything beyond the
- // first null or "@" byte; (2) if the string contains forward slashes, trim
- // everything up to and including the last one.
- repeated string target_cmdline = 2;
-
- // List of excluded pids.
- repeated int32 exclude_pid = 3;
-
- // List of excluded cmdlines. Normalized in the same way as
- // |target_cmdline|.
- repeated string exclude_cmdline = 4;
-
- // Number of additional command lines to sample. Only those which are
- // neither explicitly included nor excluded will be considered. Processes
- // are accepted on a first come, first served basis.
- optional uint32 additional_cmdline_count = 5;
- }
-}
-
-// End of protos/perfetto/config/profiling/perf_event_config.proto
-
-// Begin of protos/perfetto/common/sys_stats_counters.proto
-
-// When editing entries here remember also to update "sys_stats_counters.h" with
-// the corresponding string definitions for the actual /proc files parser.
-
-// Counter definitions for Linux's /proc/meminfo.
-enum MeminfoCounters {
- MEMINFO_UNSPECIFIED = 0;
- MEMINFO_MEM_TOTAL = 1;
- MEMINFO_MEM_FREE = 2;
- MEMINFO_MEM_AVAILABLE = 3;
- MEMINFO_BUFFERS = 4;
- MEMINFO_CACHED = 5;
- MEMINFO_SWAP_CACHED = 6;
- MEMINFO_ACTIVE = 7;
- MEMINFO_INACTIVE = 8;
- MEMINFO_ACTIVE_ANON = 9;
- MEMINFO_INACTIVE_ANON = 10;
- MEMINFO_ACTIVE_FILE = 11;
- MEMINFO_INACTIVE_FILE = 12;
- MEMINFO_UNEVICTABLE = 13;
- MEMINFO_MLOCKED = 14;
- MEMINFO_SWAP_TOTAL = 15;
- MEMINFO_SWAP_FREE = 16;
- MEMINFO_DIRTY = 17;
- MEMINFO_WRITEBACK = 18;
- MEMINFO_ANON_PAGES = 19;
- MEMINFO_MAPPED = 20;
- MEMINFO_SHMEM = 21;
- MEMINFO_SLAB = 22;
- MEMINFO_SLAB_RECLAIMABLE = 23;
- MEMINFO_SLAB_UNRECLAIMABLE = 24;
- MEMINFO_KERNEL_STACK = 25;
- MEMINFO_PAGE_TABLES = 26;
- MEMINFO_COMMIT_LIMIT = 27;
- MEMINFO_COMMITED_AS = 28;
- MEMINFO_VMALLOC_TOTAL = 29;
- MEMINFO_VMALLOC_USED = 30;
- MEMINFO_VMALLOC_CHUNK = 31;
- MEMINFO_CMA_TOTAL = 32;
- MEMINFO_CMA_FREE = 33;
-}
-
-// Counter definitions for Linux's /proc/vmstat.
-enum VmstatCounters {
- VMSTAT_UNSPECIFIED = 0;
- VMSTAT_NR_FREE_PAGES = 1;
- VMSTAT_NR_ALLOC_BATCH = 2;
- VMSTAT_NR_INACTIVE_ANON = 3;
- VMSTAT_NR_ACTIVE_ANON = 4;
- VMSTAT_NR_INACTIVE_FILE = 5;
- VMSTAT_NR_ACTIVE_FILE = 6;
- VMSTAT_NR_UNEVICTABLE = 7;
- VMSTAT_NR_MLOCK = 8;
- VMSTAT_NR_ANON_PAGES = 9;
- VMSTAT_NR_MAPPED = 10;
- VMSTAT_NR_FILE_PAGES = 11;
- VMSTAT_NR_DIRTY = 12;
- VMSTAT_NR_WRITEBACK = 13;
- VMSTAT_NR_SLAB_RECLAIMABLE = 14;
- VMSTAT_NR_SLAB_UNRECLAIMABLE = 15;
- VMSTAT_NR_PAGE_TABLE_PAGES = 16;
- VMSTAT_NR_KERNEL_STACK = 17;
- VMSTAT_NR_OVERHEAD = 18;
- VMSTAT_NR_UNSTABLE = 19;
- VMSTAT_NR_BOUNCE = 20;
- VMSTAT_NR_VMSCAN_WRITE = 21;
- VMSTAT_NR_VMSCAN_IMMEDIATE_RECLAIM = 22;
- VMSTAT_NR_WRITEBACK_TEMP = 23;
- VMSTAT_NR_ISOLATED_ANON = 24;
- VMSTAT_NR_ISOLATED_FILE = 25;
- VMSTAT_NR_SHMEM = 26;
- VMSTAT_NR_DIRTIED = 27;
- VMSTAT_NR_WRITTEN = 28;
- VMSTAT_NR_PAGES_SCANNED = 29;
- VMSTAT_WORKINGSET_REFAULT = 30;
- VMSTAT_WORKINGSET_ACTIVATE = 31;
- VMSTAT_WORKINGSET_NODERECLAIM = 32;
- VMSTAT_NR_ANON_TRANSPARENT_HUGEPAGES = 33;
- VMSTAT_NR_FREE_CMA = 34;
- VMSTAT_NR_SWAPCACHE = 35;
- VMSTAT_NR_DIRTY_THRESHOLD = 36;
- VMSTAT_NR_DIRTY_BACKGROUND_THRESHOLD = 37;
- VMSTAT_PGPGIN = 38;
- VMSTAT_PGPGOUT = 39;
- VMSTAT_PGPGOUTCLEAN = 40;
- VMSTAT_PSWPIN = 41;
- VMSTAT_PSWPOUT = 42;
- VMSTAT_PGALLOC_DMA = 43;
- VMSTAT_PGALLOC_NORMAL = 44;
- VMSTAT_PGALLOC_MOVABLE = 45;
- VMSTAT_PGFREE = 46;
- VMSTAT_PGACTIVATE = 47;
- VMSTAT_PGDEACTIVATE = 48;
- VMSTAT_PGFAULT = 49;
- VMSTAT_PGMAJFAULT = 50;
- VMSTAT_PGREFILL_DMA = 51;
- VMSTAT_PGREFILL_NORMAL = 52;
- VMSTAT_PGREFILL_MOVABLE = 53;
- VMSTAT_PGSTEAL_KSWAPD_DMA = 54;
- VMSTAT_PGSTEAL_KSWAPD_NORMAL = 55;
- VMSTAT_PGSTEAL_KSWAPD_MOVABLE = 56;
- VMSTAT_PGSTEAL_DIRECT_DMA = 57;
- VMSTAT_PGSTEAL_DIRECT_NORMAL = 58;
- VMSTAT_PGSTEAL_DIRECT_MOVABLE = 59;
- VMSTAT_PGSCAN_KSWAPD_DMA = 60;
- VMSTAT_PGSCAN_KSWAPD_NORMAL = 61;
- VMSTAT_PGSCAN_KSWAPD_MOVABLE = 62;
- VMSTAT_PGSCAN_DIRECT_DMA = 63;
- VMSTAT_PGSCAN_DIRECT_NORMAL = 64;
- VMSTAT_PGSCAN_DIRECT_MOVABLE = 65;
- VMSTAT_PGSCAN_DIRECT_THROTTLE = 66;
- VMSTAT_PGINODESTEAL = 67;
- VMSTAT_SLABS_SCANNED = 68;
- VMSTAT_KSWAPD_INODESTEAL = 69;
- VMSTAT_KSWAPD_LOW_WMARK_HIT_QUICKLY = 70;
- VMSTAT_KSWAPD_HIGH_WMARK_HIT_QUICKLY = 71;
- VMSTAT_PAGEOUTRUN = 72;
- VMSTAT_ALLOCSTALL = 73;
- VMSTAT_PGROTATED = 74;
- VMSTAT_DROP_PAGECACHE = 75;
- VMSTAT_DROP_SLAB = 76;
- VMSTAT_PGMIGRATE_SUCCESS = 77;
- VMSTAT_PGMIGRATE_FAIL = 78;
- VMSTAT_COMPACT_MIGRATE_SCANNED = 79;
- VMSTAT_COMPACT_FREE_SCANNED = 80;
- VMSTAT_COMPACT_ISOLATED = 81;
- VMSTAT_COMPACT_STALL = 82;
- VMSTAT_COMPACT_FAIL = 83;
- VMSTAT_COMPACT_SUCCESS = 84;
- VMSTAT_COMPACT_DAEMON_WAKE = 85;
- VMSTAT_UNEVICTABLE_PGS_CULLED = 86;
- VMSTAT_UNEVICTABLE_PGS_SCANNED = 87;
- VMSTAT_UNEVICTABLE_PGS_RESCUED = 88;
- VMSTAT_UNEVICTABLE_PGS_MLOCKED = 89;
- VMSTAT_UNEVICTABLE_PGS_MUNLOCKED = 90;
- VMSTAT_UNEVICTABLE_PGS_CLEARED = 91;
- VMSTAT_UNEVICTABLE_PGS_STRANDED = 92;
- VMSTAT_NR_ZSPAGES = 93;
- VMSTAT_NR_ION_HEAP = 94;
- VMSTAT_NR_GPU_HEAP = 95;
- VMSTAT_ALLOCSTALL_DMA = 96;
- VMSTAT_ALLOCSTALL_MOVABLE = 97;
- VMSTAT_ALLOCSTALL_NORMAL = 98;
- VMSTAT_COMPACT_DAEMON_FREE_SCANNED = 99;
- VMSTAT_COMPACT_DAEMON_MIGRATE_SCANNED = 100;
- VMSTAT_NR_FASTRPC = 101;
- VMSTAT_NR_INDIRECTLY_RECLAIMABLE = 102;
- VMSTAT_NR_ION_HEAP_POOL = 103;
- VMSTAT_NR_KERNEL_MISC_RECLAIMABLE = 104;
- VMSTAT_NR_SHADOW_CALL_STACK_BYTES = 105;
- VMSTAT_NR_SHMEM_HUGEPAGES = 106;
- VMSTAT_NR_SHMEM_PMDMAPPED = 107;
- VMSTAT_NR_UNRECLAIMABLE_PAGES = 108;
- VMSTAT_NR_ZONE_ACTIVE_ANON = 109;
- VMSTAT_NR_ZONE_ACTIVE_FILE = 110;
- VMSTAT_NR_ZONE_INACTIVE_ANON = 111;
- VMSTAT_NR_ZONE_INACTIVE_FILE = 112;
- VMSTAT_NR_ZONE_UNEVICTABLE = 113;
- VMSTAT_NR_ZONE_WRITE_PENDING = 114;
- VMSTAT_OOM_KILL = 115;
- VMSTAT_PGLAZYFREE = 116;
- VMSTAT_PGLAZYFREED = 117;
- VMSTAT_PGREFILL = 118;
- VMSTAT_PGSCAN_DIRECT = 119;
- VMSTAT_PGSCAN_KSWAPD = 120;
- VMSTAT_PGSKIP_DMA = 121;
- VMSTAT_PGSKIP_MOVABLE = 122;
- VMSTAT_PGSKIP_NORMAL = 123;
- VMSTAT_PGSTEAL_DIRECT = 124;
- VMSTAT_PGSTEAL_KSWAPD = 125;
- VMSTAT_SWAP_RA = 126;
- VMSTAT_SWAP_RA_HIT = 127;
- VMSTAT_WORKINGSET_RESTORE = 128;
-}
-// End of protos/perfetto/common/sys_stats_counters.proto
-
-// Begin of protos/perfetto/config/sys_stats/sys_stats_config.proto
-
-// This file defines the configuration for the Linux /proc poller data source,
-// which injects counters in the trace.
-// Counters that are needed in the trace must be explicitly listed in the
-// *_counters fields. This is to avoid spamming the trace with all counters
-// at all times.
-// The sampling rate is configurable. All polling rates (*_period_ms) need
-// to be integer multiples of each other.
-// OK: [10ms, 10ms, 10ms], [10ms, 20ms, 10ms], [10ms, 20ms, 60ms]
-// Not OK: [10ms, 10ms, 11ms], [10ms, 15ms, 20ms]
-message SysStatsConfig {
- // Polls /proc/meminfo every X ms, if non-zero.
- // This is required to be > 10ms to avoid excessive CPU usage.
- // Cost: 0.3 ms [read] + 0.07 ms [parse + trace injection]
- optional uint32 meminfo_period_ms = 1;
-
- // If empty all known counters are reported. Otherwise, only the counters
- // specified below are reported.
- repeated MeminfoCounters meminfo_counters = 2;
-
- // Polls /proc/vmstat every X ms, if non-zero.
- // This is required to be > 10ms to avoid excessive CPU usage.
- // Cost: 0.2 ms [read] + 0.3 ms [parse + trace injection]
- optional uint32 vmstat_period_ms = 3;
- repeated VmstatCounters vmstat_counters = 4;
-
- // Pols /proc/stat every X ms, if non-zero.
- // This is required to be > 10ms to avoid excessive CPU usage.
- // Cost: 4.1 ms [read] + 1.9 ms [parse + trace injection]
- optional uint32 stat_period_ms = 5;
- enum StatCounters {
- STAT_UNSPECIFIED = 0;
- STAT_CPU_TIMES = 1;
- STAT_IRQ_COUNTS = 2;
- STAT_SOFTIRQ_COUNTS = 3;
- STAT_FORK_COUNT = 4;
- }
- repeated StatCounters stat_counters = 6;
-
- // Polls /sys/devfreq/*/curfreq every X ms, if non-zero.
- // This is required to be > 10ms to avoid excessive CPU usage.
- // This option can be used to record unchanging values.
- // Updates from frequency changes can come from ftrace/set_clock_rate.
- optional uint32 devfreq_period_ms = 7;
-}
-
-// End of protos/perfetto/config/sys_stats/sys_stats_config.proto
-
-// Begin of protos/perfetto/config/test_config.proto
-
-// The configuration for a fake producer used in tests.
-message TestConfig {
- message DummyFields {
- optional uint32 field_uint32 = 1;
- optional int32 field_int32 = 2;
- optional uint64 field_uint64 = 3;
- optional int64 field_int64 = 4;
- optional fixed64 field_fixed64 = 5;
- optional sfixed64 field_sfixed64 = 6;
- optional fixed32 field_fixed32 = 7;
- optional sfixed32 field_sfixed32 = 8;
- optional double field_double = 9;
- optional float field_float = 10;
- optional sint64 field_sint64 = 11;
- optional sint32 field_sint32 = 12;
- optional string field_string = 13;
- optional bytes field_bytes = 14;
- }
-
- // The number of messages the fake producer should send.
- optional uint32 message_count = 1;
-
- // The maximum number of messages which should be sent each second.
- // The actual obserced speed may be lower if the producer is unable to
- // work fast enough.
- // If this is zero or unset, the producer will send as fast as possible.
- optional uint32 max_messages_per_second = 2;
-
- // The seed value for a simple multiplicative congruential pseudo-random
- // number sequence.
- optional uint32 seed = 3;
-
- // The size of each message in bytes. Should be greater than or equal 5 to
- // account for the number of bytes needed to encode the random number and a
- // null byte for the string.
- optional uint32 message_size = 4;
-
- // Whether the producer should send a event batch when the data source is
- // is initially registered.
- optional bool send_batch_on_register = 5;
-
- optional DummyFields dummy_fields = 6;
-}
-
-// End of protos/perfetto/config/test_config.proto
-
-// Begin of protos/perfetto/config/track_event/track_event_config.proto
-
-message TrackEventConfig {
- // The following fields define the set of enabled trace categories. Each list
- // item is a glob.
- //
- // To determine if category is enabled, it is checked against the filters in
- // the following order:
- //
- // 1. Exact matches in enabled categories.
- // 2. Exact matches in enabled tags.
- // 3. Exact matches in disabled categories.
- // 4. Exact matches in disabled tags.
- // 5. Pattern matches in enabled categories.
- // 6. Pattern matches in enabled tags.
- // 7. Pattern matches in disabled categories.
- // 8. Pattern matches in disabled tags.
- //
- // If none of the steps produced a match, the category is enabled by default.
- //
- // Examples:
- //
- // - To enable all non-slow/debug categories:
- //
- // No configuration needed, happens by default.
- //
- // - To enable a specific category:
- //
- // disabled_categories = ["*"]
- // enabled_categories = ["my_category"]
- //
- // - To enable only categories with a specific tag:
- //
- // disabled_tags = ["*"]
- // enabled_tags = ["my_tag"]
- //
-
- // Default: []
- repeated string disabled_categories = 1;
-
- // Default: []
- repeated string enabled_categories = 2;
-
- // Default: [“slow”, “debug”]
- repeated string disabled_tags = 3;
-
- // Default: []
- repeated string enabled_tags = 4;
-}
-
-// End of protos/perfetto/config/track_event/track_event_config.proto
-
-// Begin of protos/perfetto/config/data_source_config.proto
-
-// The configuration that is passed to each data source when starting tracing.
-// Next id: 116
-message DataSourceConfig {
- enum SessionInitiator {
- SESSION_INITIATOR_UNSPECIFIED = 0;
- // This trace was initiated from a trusted system app has DUMP and
- // USAGE_STATS permission. This system app is expected to not expose the
- // trace to the user of the device.
- // This is determined by checking the UID initiating the trace.
- SESSION_INITIATOR_TRUSTED_SYSTEM = 1;
- };
- // Data source unique name, e.g., "linux.ftrace". This must match
- // the name passed by the data source when it registers (see
- // RegisterDataSource()).
- optional string name = 1;
-
- // The index of the logging buffer where TracePacket(s) will be stored.
- // This field doesn't make a major difference for the Producer(s). The final
- // logging buffers, in fact, are completely owned by the Service. We just ask
- // the Producer to copy this number into the chunk headers it emits, so that
- // the Service can quickly identify the buffer where to move the chunks into
- // without expensive lookups on its fastpath.
- optional uint32 target_buffer = 2;
-
- // Set by the service to indicate the duration of the trace.
- // DO NOT SET in consumer as this will be overridden by the service.
- optional uint32 trace_duration_ms = 3;
-
- // Set by the service to indicate how long it waits after StopDataSource.
- // DO NOT SET in consumer as this will be overridden by the service.
- optional uint32 stop_timeout_ms = 7;
-
- // Set by the service to indicate whether this tracing session has extra
- // guardrails.
- // DO NOT SET in consumer as this will be overridden by the service.
- optional bool enable_extra_guardrails = 6;
-
- // Set by the service to indicate which user initiated this trace.
- // DO NOT SET in consumer as this will be overridden by the service.
- optional SessionInitiator session_initiator = 8;
-
- // Set by the service to indicate which tracing session the data source
- // belongs to. The intended use case for this is checking if two data sources,
- // one of which produces metadata for the other one, belong to the same trace
- // session and hence should be linked together.
- // This field was introduced in Aug 2018 after Android P.
- // DO NOT SET in consumer as this will be overridden by the service.
- optional uint64 tracing_session_id = 4;
-
- // Keeep the lower IDs (up to 99) for fields that are *not* specific to
- // data-sources and needs to be processed by the traced daemon.
-
- // All data source config fields must be marked as [lazy=true]. This prevents
- // the proto-to-cpp generator from recursing into those when generating the
- // cpp classes and polluting tracing/core with data-source-specific classes.
- // Instead they are treated as opaque strings containing raw proto bytes.
-
- // Data source name: linux.ftrace
- optional FtraceConfig ftrace_config = 100 [lazy = true];
- // Data source name: linux.inode_file_map
- optional InodeFileConfig inode_file_config = 102 [lazy = true];
- // Data source name: linux.process_stats
- optional ProcessStatsConfig process_stats_config = 103 [lazy = true];
- // Data source name: linux.sys_stats
- optional SysStatsConfig sys_stats_config = 104 [lazy = true];
- // Data source name: android.heapprofd
- // Introduced in Android 10.
- optional HeapprofdConfig heapprofd_config = 105 [lazy = true];
- // Data source name: android.java_hprof
- // Introduced in Android 11.
- optional JavaHprofConfig java_hprof_config = 110 [lazy = true];
- // Data source name: android.power
- optional AndroidPowerConfig android_power_config = 106 [lazy = true];
- // Data source name: android.log
- optional AndroidLogConfig android_log_config = 107 [lazy = true];
- // TODO(fmayer): Add data source name for this.
- optional GpuCounterConfig gpu_counter_config = 108 [lazy = true];
- // Data source name: android.packages_list
- optional PackagesListConfig packages_list_config = 109 [lazy = true];
- // Data source name: linux.perf
- optional PerfEventConfig perf_event_config = 111 [lazy = true];
- // Data source name: vulkan.memory_tracker
- optional VulkanMemoryConfig vulkan_memory_config = 112 [lazy = true];
- // Data source name: track_event
- optional TrackEventConfig track_event_config = 113 [lazy = true];
- // Data source name: android.polled_state
- optional AndroidPolledStateConfig android_polled_state_config = 114 [lazy = true];
-
- // Chrome is special as it doesn't use the perfetto IPC layer. We want to
- // avoid proto serialization and de-serialization there because that would
- // just add extra hops on top of the Mojo ser/des. Instead we auto-generate a
- // C++ class for it so it can pass around plain C++ objets.
- optional ChromeConfig chrome_config = 101;
-
- // If an interceptor is specified here, packets for this data source will be
- // rerouted to the interceptor instead of the main trace buffer. This can be
- // used, for example, to write trace data into ETW or for logging trace points
- // to the console.
- //
- // Note that interceptors are only supported by data sources registered
- // through the Perfetto SDK API. Data sources that don't use that API (e.g.,
- // traced_probes) may not support interception.
- optional InterceptorConfig interceptor_config = 115;
-
- // This is a fallback mechanism to send a free-form text config to the
- // producer. In theory this should never be needed. All the code that
- // is part of the platform (i.e. traced service) is supposed to *not* truncate
- // the trace config proto and propagate unknown fields. However, if anything
- // in the pipeline (client or backend) ends up breaking this forward compat
- // plan, this field will become the escape hatch to allow future data sources
- // to get some meaningful configuration.
- optional string legacy_config = 1000;
-
- // This field is only used for testing.
- optional TestConfig for_testing = 1001;
-
- // Was |for_testing|. Caused more problems then found.
- reserved 268435455;
-}
-
-// End of protos/perfetto/config/data_source_config.proto
-
-// Begin of protos/perfetto/config/trace_config.proto
-
-// The overall config that is used when starting a new tracing session through
-// ProducerPort::StartTracing().
-// It contains the general config for the logging buffer(s) and the configs for
-// all the data source being enabled.
-//
-// Next id: 33.
-message TraceConfig {
- message BufferConfig {
- optional uint32 size_kb = 1;
-
- // |page_size|, now deprecated.
- reserved 2;
-
- // |optimize_for|, now deprecated.
- reserved 3;
-
- enum FillPolicy {
- UNSPECIFIED = 0;
-
- // Default behavior. The buffer operates as a conventional ring buffer.
- // If the writer is faster than the reader (or if the reader reads only
- // after tracing is stopped) newly written packets will overwrite old
- // packets.
- RING_BUFFER = 1;
-
- // Behaves like RING_BUFFER as long as there is space in the buffer or
- // the reader catches up with the writer. As soon as the writer hits
- // an unread chunk, it stops accepting new data in the buffer.
- DISCARD = 2;
- }
- optional FillPolicy fill_policy = 4;
- }
- repeated BufferConfig buffers = 1;
-
- message DataSource {
- // Filters and data-source specific config. It contains also the unique name
- // of the data source, the one passed in the DataSourceDescriptor when they
- // register on the service.
- optional protos.DataSourceConfig config = 1;
-
- // Optional. If multiple producers (~processes) expose the same data source
- // and either |producer_name_filter| or |producer_name_regex_filter| is set,
- // the data source is enabled only for producers whose names match any of
- // the filters.
- // |producer_name_filter| has to be an exact match, while
- // |producer_name_regex_filter| is a regular expression.
- // This allows to enable a data source only for specific processes.
- // The "repeated" fields have OR semantics: specifying a filter ["foo",
- // "bar"] will enable data sources on both "foo" and "bar" (if they exist).
- repeated string producer_name_filter = 2;
- repeated string producer_name_regex_filter = 3;
- }
- repeated DataSource data_sources = 2;
-
- // Config for disabling builtin data sources in the tracing service.
- message BuiltinDataSource {
- // Disable emitting clock timestamps into the trace.
- optional bool disable_clock_snapshotting = 1;
-
- // Disable echoing the original trace config in the trace.
- optional bool disable_trace_config = 2;
-
- // Disable emitting system info (build fingerprint, cpuinfo, etc).
- optional bool disable_system_info = 3;
-
- // Disable emitting events for data-source state changes (e.g. the marker
- // for all data sources having ACKed the start of the trace).
- optional bool disable_service_events = 4;
-
- // The authoritative clock domain for the trace. Defaults to BOOTTIME. See
- // also ClockSnapshot's primary_trace_clock. The configured value is written
- // into the trace as part of the ClockSnapshots emitted by the service.
- // Trace processor will attempt to translate packet/event timestamps from
- // various data sources (and their chosen clock domains) to this domain
- // during import. Added in Android R.
- optional BuiltinClock primary_trace_clock = 5;
-
- // Time interval in between snapshotting of sync markers, clock snapshots,
- // stats, and other periodic service-emitted events. Note that the service
- // only keeps track of the first and the most recent snapshot until
- // ReadBuffers() is called.
- optional uint32 snapshot_interval_ms = 6;
-
- // Hints to the service that a suspend-aware (i.e. counting time in suspend)
- // clock should be used for periodic snapshots of service-emitted events.
- // This means, if a snapshot *should* have happened during suspend, it will
- // happen immediately after the device resumes.
- //
- // Choosing a clock like this is done on best-effort basis; not all
- // platforms (e.g. Windows) expose a clock which can be used for periodic
- // tasks counting suspend. If such a clock is not available, the service
- // falls back to the best-available alternative.
- //
- // Introduced in Android S.
- // TODO(lalitm): deprecate this in T and make this the default if nothing
- // crashes in S.
- optional bool prefer_suspend_clock_for_snapshot = 7;
- }
- optional BuiltinDataSource builtin_data_sources = 20;
-
- // If specified, the trace will be stopped |duration_ms| after starting.
- // This does *not* count the time the system is suspended, so we will run
- // for duration_ms of system activity, not wall time.
- //
- // However in case of traces with triggers, see
- // TriggerConfig.trigger_timeout_ms instead.
- optional uint32 duration_ms = 3;
-
- // This is set when --dropbox is passed to the Perfetto command line client
- // and enables guardrails that limit resource usage for traces requested
- // by statsd.
- optional bool enable_extra_guardrails = 4;
-
- enum LockdownModeOperation {
- LOCKDOWN_UNCHANGED = 0;
- LOCKDOWN_CLEAR = 1;
- LOCKDOWN_SET = 2;
- }
- // Reject producers that are not running under the same UID as the tracing
- // service.
- optional LockdownModeOperation lockdown_mode = 5;
-
- message ProducerConfig {
- // Identifies the producer for which this config is for.
- optional string producer_name = 1;
-
- // Specifies the preferred size of the shared memory buffer. If the size is
- // larger than the max size, the max will be used. If it is smaller than
- // the page size or doesn't fit pages evenly into it, it will fall back to
- // the size specified by the producer or finally the default shared memory
- // size.
- optional uint32 shm_size_kb = 2;
-
- // Specifies the preferred size of each page in the shared memory buffer.
- // Must be an integer multiple of 4K.
- optional uint32 page_size_kb = 3;
- }
-
- repeated ProducerConfig producers = 6;
-
- // Contains statsd-specific metadata about an alert associated with the trace.
- message StatsdMetadata {
- // The identifier of the alert which triggered this trace.
- optional int64 triggering_alert_id = 1;
- // The uid which registered the triggering configuration with statsd.
- optional int32 triggering_config_uid = 2;
- // The identifier of the config which triggered the alert.
- optional int64 triggering_config_id = 3;
- // The identifier of the subscription which triggered this trace.
- optional int64 triggering_subscription_id = 4;
- }
-
- // Statsd-specific metadata.
- optional StatsdMetadata statsd_metadata = 7;
-
- // When true && |output_path| is empty, the EnableTracing() request must
- // provide a file descriptor. The service will then periodically read packets
- // out of the trace buffer and store it into the passed file.
- // If |output_path| is not empty no fd should be passed, the service
- // will create a new file and write into that (see comment below).
- optional bool write_into_file = 8;
-
- // This must point to a non-existing file. If the file exists the service
- // will NOT overwrite and will fail instead as a security precaution.
- // On Android, when this is used with the system traced, the path must be
- // within /data/misc/perfetto-traces/ or the trace will fail.
- // This option has been introduced in Android R. Before R write_into_file
- // can be used only with the "pass a file descriptor over IPC" mode.
- optional string output_path = 29;
-
- // Optional. If non-zero tunes the write period. A min value of 100ms is
- // enforced (i.e. smaller values are ignored).
- optional uint32 file_write_period_ms = 9;
-
- // Optional. When non zero the periodic write stops once at most X bytes
- // have been written into the file. Tracing is disabled when this limit is
- // reached, even if |duration_ms| has not been reached yet.
- optional uint64 max_file_size_bytes = 10;
-
- // Contains flags which override the default values of the guardrails inside
- // Perfetto.
- message GuardrailOverrides {
- // Override the default limit (in bytes) for uploading data to server within
- // a 24 hour period.
- // On R-, this override only affected userdebug builds. Since S, it also
- // affects user builds.
- optional uint64 max_upload_per_day_bytes = 1;
- }
- optional GuardrailOverrides guardrail_overrides = 11;
-
- // When true, data sources are not started until an explicit call to
- // StartTracing() on the consumer port. This is to support early
- // initialization and fast trace triggering. This can be used only when the
- // Consumer explicitly triggers the StartTracing() method.
- // This should not be used in a remote trace config via statsd, doing so will
- // result in a hung trace session.
- optional bool deferred_start = 12;
-
- // When set, it periodically issues a Flush() to all data source, forcing them
- // to commit their data into the tracing service. This can be used for
- // quasi-real-time streaming mode and to guarantee some partial ordering of
- // events in the trace in windows of X ms.
- optional uint32 flush_period_ms = 13;
-
- // Wait for this long for producers to acknowledge flush requests.
- // Default 5s.
- optional uint32 flush_timeout_ms = 14;
-
- // Wait for this long for producers to acknowledge stop requests.
- // Default 5s.
- optional uint32 data_source_stop_timeout_ms = 23;
-
- // |disable_clock_snapshotting| moved.
- reserved 15;
-
- // Android-only. If set, sends an intent to the Traceur system app when the
- // trace ends to notify it about the trace readiness.
- optional bool notify_traceur = 16;
-
- // Android-only. If set to a value > 0, marks the trace session as a candidate
- // for being attached to a bugreport. This field effectively acts as a z-index
- // for bugreports. When Android's dumpstate runs perfetto
- // --save-for-bugreport, traced will pick the tracing session with the highest
- // score (score <= 0 is ignored), will steal its contents, save the trace into
- // a known path and stop prematurely.
- // This field was introduced in Android S.
- optional int32 bugreport_score = 30;
-
- // Triggers allow producers to start or stop the tracing session when an event
- // occurs.
- //
- // For example if we are tracing probabilistically, most traces will be
- // uninteresting. Triggers allow us to keep only the interesting ones such as
- // those traces during which the device temperature reached a certain
- // threshold. In this case the producer can activate a trigger to keep
- // (STOP_TRACING) the trace, otherwise it can also begin a trace
- // (START_TRACING) because it knows something is about to happen.
- message TriggerConfig {
- enum TriggerMode {
- UNSPECIFIED = 0;
-
- // When this mode is chosen, data sources are not started until one of the
- // |triggers| are received. This supports early initialization and fast
- // starting of the tracing system. On triggering, the session will then
- // record for |stop_delay_ms|. However if no trigger is seen
- // after |trigger_timeout_ms| the session will be stopped and no data will
- // be returned.
- START_TRACING = 1;
-
- // When this mode is chosen, the session will be started via the normal
- // EnableTracing() & StartTracing(). If no trigger is ever seen
- // the session will be stopped after |trigger_timeout_ms| and no data will
- // be returned. However if triggered the trace will stop after
- // |stop_delay_ms| and any data in the buffer will be returned to the
- // consumer.
- STOP_TRACING = 2;
- }
- optional TriggerMode trigger_mode = 1;
-
- message Trigger {
- // The producer must specify this name to activate the trigger.
- optional string name = 1;
-
- // An std::regex that will match the producer that can activate this
- // trigger. This is optional. If unset any producers can activate this
- // trigger.
- optional string producer_name_regex = 2;
-
- // After a trigger is received either in START_TRACING or STOP_TRACING
- // mode then the trace will end |stop_delay_ms| after triggering.
- optional uint32 stop_delay_ms = 3;
-
- // Limits the number of traces this trigger can start/stop in a rolling
- // 24 hour window. If this field is unset or zero, no limit is applied and
- // activiation of this trigger *always* starts/stops the trace.
- optional uint32 max_per_24_h = 4;
-
- // A value between 0 and 1 which encodes the probability of skipping a
- // trigger with this name. This is useful for reducing the probability
- // of high-frequency triggers from dominating trace finaization. If this
- // field is unset or zero, the trigger will *never* be skipped. If this
- // field is greater than or equal to 1, this trigger will *always* be
- // skipped i.e. it will be as if this trigger was never included in the
- // first place.
- // This probability check is applied *before* any other limits. For
- // example, if |max_per_24_h| is also set, first we will check if the
- // probability bar is met and only then will we check the |max_per_24_h|
- // limit.
- optional double skip_probability = 5;
- }
- // A list of triggers which are related to this configuration. If ANY
- // trigger is seen then an action will be performed based on |trigger_mode|.
- repeated Trigger triggers = 2;
-
- // Required and must be positive if a TriggerConfig is specified. This is
- // how long this TraceConfig should wait for a trigger to arrive. After this
- // period of time if no trigger is seen the TracingSession will be cleaned
- // up.
- optional uint32 trigger_timeout_ms = 3;
- }
- optional TriggerConfig trigger_config = 17;
-
- // When this is non-empty the perfetto command line tool will ignore the rest
- // of this TraceConfig and instead connect to the perfetto service as a
- // producer and send these triggers, potentially stopping or starting traces
- // that were previous configured to use a TriggerConfig.
- repeated string activate_triggers = 18;
-
- // Configuration for trace contents that reference earlier trace data. For
- // example, a data source might intern strings, and emit packets containing
- // {interned id : string} pairs. Future packets from that data source can then
- // use the interned ids instead of duplicating the raw string contents. The
- // trace parser will then need to use that interning table to fully interpret
- // the rest of the trace.
- message IncrementalStateConfig {
- // If nonzero, notify eligible data sources to clear their incremental state
- // periodically, with the given period. The notification is sent only to
- // data sources that have |handles_incremental_state_clear| set in their
- // DataSourceDescriptor. The notification requests that the data source
- // stops referring to past trace contents. This is particularly useful when
- // tracing in ring buffer mode, where it is not exceptional to overwrite old
- // trace data.
- //
- // Warning: this time-based global clearing is likely to be removed in the
- // future, to be replaced with a smarter way of sending the notifications
- // only when necessary.
- optional uint32 clear_period_ms = 1;
- }
- optional IncrementalStateConfig incremental_state_config = 21;
-
- // Additional guardrail used by the Perfetto command line client.
- // On user builds when --dropbox is set perfetto will refuse to trace unless
- // this is also set.
- // Added in Q.
- optional bool allow_user_build_tracing = 19;
-
- // If set the tracing service will ensure there is at most one tracing session
- // with this key.
- optional string unique_session_name = 22;
-
- // Compress trace with the given method. Best effort.
- enum CompressionType {
- COMPRESSION_TYPE_UNSPECIFIED = 0;
- COMPRESSION_TYPE_DEFLATE = 1;
- }
- optional CompressionType compression_type = 24;
-
- // Android-only. Not for general use. If set, saves the trace into an
- // incident. This field is read by perfetto_cmd, rather than the tracing
- // service. This field must be set when passing the --upload flag to
- // perfetto_cmd.
- message IncidentReportConfig {
- // In this message, either:
- // * all of |destination_package|, |destination_class| and |privacy_level|
- // must be set.
- // * |skip_incidentd| must be explicitly set to true.
-
- optional string destination_package = 1;
- optional string destination_class = 2;
- // Level of filtering in the requested incident. See |Destination| in
- // frameworks/base/core/proto/android/privacy.proto.
- optional int32 privacy_level = 3;
-
- // If true, then skips saving the trace to incidentd.
- //
- // This flag is useful in testing (e.g. Perfetto-statsd integration tests)
- // or when we explicitly don't want traces to go to incidentd even when they
- // usually would (e.g. configs deployed using statsd but only used for
- // inclusion in bugreports using |bugreport_score|).
- //
- // The motivation for having this flag, instead of just not setting
- // |incident_report_config|, is prevent accidents where
- // |incident_report_config| is omitted by mistake.
- optional bool skip_incidentd = 5;
-
- // If true, do not write the trace into dropbox (i.e. incident only).
- // Otherwise, write to both dropbox and incident.
- // TODO(lalitm): remove this field as we no longer use Dropbox.
- optional bool skip_dropbox = 4 [deprecated = true];
- }
- optional IncidentReportConfig incident_report_config = 25;
-
- enum StatsdLogging {
- STATSD_LOGGING_UNSPECIFIED = 0;
- STATSD_LOGGING_ENABLED = 1;
- STATSD_LOGGING_DISABLED = 2;
- }
-
- // Android-only. Not for general use. If specified, sets the logging to statsd
- // of guardrails and checkpoints in the tracing service. perfetto_cmd sets
- // this to enabled (if not explicitly set in the config) when specifying
- // --upload.
- optional StatsdLogging statsd_logging = 31;
-
- // DEPRECATED. Was trace_uuid, use trace_uuid_msb and trace_uuid_lsb instead.
- reserved 26;
- // An identifier clients can use to tie this trace to other logging.
- // Alternative encoding of trace_uuid as two int64s.
- optional int64 trace_uuid_msb = 27;
- optional int64 trace_uuid_lsb = 28;
-
- // When set applies a post-filter to the trace contents using the filter
- // provided. The filter is applied at ReadBuffers() time and works both in the
- // case of IPC readback and write_into_file. This filter can be generated
- // using `tools/proto_filter -s schema.proto -F filter_out.bytes` or
- // `-T filter_out.escaped_string` (for .pbtx).
- // Introduced in Android S. See go/trace-filtering for design.
- message TraceFilter { optional bytes bytecode = 1; }
- optional TraceFilter trace_filter = 32;
-}
-
-// End of protos/perfetto/config/trace_config.proto
-
-// Begin of protos/perfetto/common/trace_stats.proto
-
-// Statistics for the internals of the tracing service.
-//
-// Next id: 11.
-message TraceStats {
- // From TraceBuffer::Stats.
- //
- // Next id: 20.
- message BufferStats {
- // Size of the circular buffer in bytes.
- optional uint64 buffer_size = 12;
-
- // Num. bytes written into the circular buffer, including chunk headers.
- optional uint64 bytes_written = 1;
-
- // Num. bytes overwritten before they have been read (i.e. loss of data).
- optional uint64 bytes_overwritten = 13;
-
- // Total size of chunks that were fully read from the circular buffer by the
- // consumer. This may not be equal to |bytes_written| either in the middle
- // of tracing, or if |chunks_overwritten| is non-zero. Note that this is the
- // size of the chunks read from the buffer, including chunk headers, which
- // will be different from the total size of packets returned to the
- // consumer.
- //
- // The current utilization of the trace buffer (mid-tracing) can be obtained
- // by subtracting |bytes_read| and |bytes_overwritten| from |bytes_written|,
- // adding the difference of |padding_bytes_written| and
- // |padding_bytes_cleared|, and comparing this sum to the |buffer_size|.
- // Note that this represents the total size of buffered data in the buffer,
- // yet this data may be spread non-contiguously through the buffer and may
- // be overridden before the utilization reaches 100%.
- optional uint64 bytes_read = 14;
-
- // Num. bytes that were allocated as padding between chunks in the circular
- // buffer.
- optional uint64 padding_bytes_written = 15;
-
- // Num. of padding bytes that were removed from the circular buffer when
- // they were overwritten.
- //
- // The difference between |padding_bytes_written| and
- // |padding_bytes_cleared| denotes the total size of padding currently
- // present in the buffer.
- optional uint64 padding_bytes_cleared = 16;
-
- // Num. chunks (!= packets) written into the buffer.
- optional uint64 chunks_written = 2;
-
- // Num. chunks (!= packets) rewritten into the buffer. This means we rewrote
- // the same chunk with additional packets appended to the end.
- optional uint64 chunks_rewritten = 10;
-
- // Num. chunks overwritten before they have been read (i.e. loss of data).
- optional uint64 chunks_overwritten = 3;
-
- // Num. chunks discarded (i.e. loss of data). Can be > 0 only when a buffer
- // is configured with FillPolicy == DISCARD.
- optional uint64 chunks_discarded = 18;
-
- // Num. chunks (!= packets) that were fully read from the circular buffer by
- // the consumer. This may not be equal to |chunks_written| either in the
- // middle of tracing, or if |chunks_overwritten| is non-zero.
- optional uint64 chunks_read = 17;
-
- // Num. chunks that were committed out of order.
- optional uint64 chunks_committed_out_of_order = 11;
-
- // Num. times the ring buffer wrapped around.
- optional uint64 write_wrap_count = 4;
-
- // Num. out-of-band (OOB) patches that succeeded.
- optional uint64 patches_succeeded = 5;
-
- // Num. OOB patches that failed (e.g., the chunk to patch was gone).
- optional uint64 patches_failed = 6;
-
- // Num. readaheads (for large multi-chunk packet reads) that ended up in a
- // successful packet read.
- optional uint64 readaheads_succeeded = 7;
-
- // Num. readaheads aborted because of missing chunks in the sequence stream.
- // Note that a small number > 0 is totally expected: occasionally, when
- // issuing a read, the very last packet in a sequence might be incomplete
- // (because the producer is still writing it while we read). The read will
- // stop at that point, for that sequence, increasing this counter.
- optional uint64 readaheads_failed = 8;
-
- // Num. of violations of the SharedMemoryABI found while writing or reading
- // the buffer. This is an indication of either a bug in the producer(s) or
- // malicious producer(s).
- optional uint64 abi_violations = 9;
-
- // The fields below have been introduced in Android R.
-
- // Num. of times the service detected packet loss on a trace writer
- // sequence. This is usually caused by exhaustion of available chunks in the
- // writer process's SMB. Note that this relies on the client's TraceWriter
- // indicating this loss to the service -- packets lost for other reasons are
- // not reflected in this stat.
- optional uint64 trace_writer_packet_loss = 19;
- }
-
- // Stats for the TraceBuffer(s) of the current trace session.
- repeated BufferStats buffer_stats = 1;
-
- // Num. producers connected (whether they are involved in the current tracing
- // session or not).
- optional uint32 producers_connected = 2;
-
- // Num. producers ever seen for all trace sessions since startup (it's a good
- // proxy for inferring num. producers crashed / killed).
- optional uint64 producers_seen = 3;
-
- // Num. data sources registered for all trace sessions.
- optional uint32 data_sources_registered = 4;
-
- // Num. data sources ever seen for all trace sessions since startup.
- optional uint64 data_sources_seen = 5;
-
- // Num. concurrently active tracing sessions.
- optional uint32 tracing_sessions = 6;
-
- // Num. buffers for all tracing session (not just the current one). This will
- // be >= buffer_stats.size(), because the latter is only about the current
- // session.
- optional uint32 total_buffers = 7;
-
- // The fields below have been introduced in Android Q.
-
- // Num. chunks that were discarded by the service before attempting to commit
- // them to a buffer, e.g. because the producer specified an invalid buffer ID.
- optional uint64 chunks_discarded = 8;
-
- // Num. patches that were discarded by the service before attempting to apply
- // them to a buffer, e.g. because the producer specified an invalid buffer ID.
- optional uint64 patches_discarded = 9;
-
- // Packets that failed validation of the TrustedPacket. If this is > 0, there
- // is a bug in the producer.
- optional uint64 invalid_packets = 10;
-
- // This is set only when the TraceConfig specifies a TraceFilter.
- message FilterStats {
- optional uint64 input_packets = 1;
- optional uint64 input_bytes = 2;
- optional uint64 output_bytes = 3;
- optional uint64 errors = 4;
- }
- optional FilterStats filter_stats = 11;
-}
-
-// End of protos/perfetto/common/trace_stats.proto
-
-// Begin of protos/perfetto/trace/android/android_log.proto
-
-message AndroidLogPacket {
- message LogEvent {
- // The log buffer (e.g. MAIN, SYSTEM, RADIO) the event comes from.
- optional AndroidLogId log_id = 1;
-
- // PID (TGID), TID and UID of the task that emitted the event.
- optional int32 pid = 2;
- optional int32 tid = 3;
- optional int32 uid = 4;
-
- // Timestamp [ns]. The clock source is CLOCK_REALTIME, unlike many other
- // Perfetto trace events that instead use CLOCK_BOOTTIME. The trace
- // processor will take care of realigning clocks using the ClockSnapshot(s).
- optional uint64 timestamp = 5;
-
- // When log_id == LID_EVENTS, |tag| corresponds to the event name defined in
- // the second column of /system/etc/event-log-tags. For all other events,
- // |tag| is the app-specified argument passed to __android_log_write().
- optional string tag = 6;
-
- // Empty when log_id == LID_EVENTS.
- optional AndroidLogPriority prio = 7;
-
- // Empty when log_id == LID_EVENTS.
- optional string message = 8;
-
- message Arg {
- optional string name = 1;
- oneof value {
- int64 int_value = 2;
- float float_value = 3;
- string string_value = 4;
- }
- }
- // Only populated when log_id == LID_EVENTS.
- repeated Arg args = 9;
- }
-
- repeated LogEvent events = 1;
-
- // Stats are emitted only upon Flush() and are monotonic (i.e. they are
- // absolute counters since the beginning of the lifetime of the tracing
- // session and NOT relative to the previous Stats snapshot).
- message Stats {
- // Total number of log events seen, including errors and skipped entries
- // (num of events stored in the trace = total - failed - skipped).
- optional uint64 num_total = 1;
-
- // Parser failures.
- optional uint64 num_failed = 2;
-
- // Messages skipped due to filters.
- optional uint64 num_skipped = 3;
- }
- optional Stats stats = 2;
-}
-
-// End of protos/perfetto/trace/android/android_log.proto
-
-// Begin of protos/perfetto/trace/android/frame_timeline_event.proto
-
-// Generated by SurfaceFlinger's FrameTimeline (go/adaptive-scheduling-fr).
-// Used in comparing the expected timeline of a frame to the actual timeline.
-// Key terms:
-// 1) DisplayFrame - represents SurfaceFlinger's work on a frame(composited)
-// 2) SurfaceFrame - represents App's work on its frame
-// 3) Timeline = start to end of a component's(app/SF) work on a frame.
-// SurfaceFlinger composites frames from many apps together, so
-// One DisplayFrame can map to N SurfaceFrame(s)
-// This relationship can be reconstructed by using
-// DisplayFrame.token = SurfaceFrame.display_frame_token
-message FrameTimelineEvent {
- // Specifies the reason(s) most likely to have caused the jank.
- // Used as a bitmask.
- enum JankType {
- JANK_UNSPECIFIED = 0;
- JANK_NONE = 1;
- JANK_SF_SCHEDULING = 2;
- JANK_PREDICTION_ERROR = 4;
- JANK_DISPLAY_HAL = 8;
- JANK_SF_CPU_DEADLINE_MISSED = 16;
- JANK_SF_GPU_DEADLINE_MISSED = 32;
- JANK_APP_DEADLINE_MISSED = 64;
- JANK_BUFFER_STUFFING = 128;
- JANK_UNKNOWN = 256;
- JANK_SF_STUFFING = 512;
- };
-
- // Specifies how a frame was presented on screen w.r.t. timing.
- // Can be different for SurfaceFrame and DisplayFrame.
- enum PresentType {
- PRESENT_UNSPECIFIED = 0;
- PRESENT_ON_TIME = 1;
- PRESENT_LATE = 2;
- PRESENT_EARLY = 3;
- PRESENT_DROPPED = 4;
- PRESENT_UNKNOWN = 5;
- };
-
- // Specifies if the predictions for the frame are still valid, expired or
- // unknown.
- enum PredictionType {
- PREDICTION_UNSPECIFIED = 0;
- PREDICTION_VALID = 1;
- PREDICTION_EXPIRED = 2;
- PREDICTION_UNKNOWN = 3;
- };
-
- // Indicates the start of expected timeline slice for SurfaceFrames.
- message ExpectedSurfaceFrameStart {
- // Cookie used to correlate between the start and end messages of the same
- // frame. Since all values except the ts are same for start and end, cookie
- // helps in preventing redundant data transmission.
- // The same cookie is used only by start and end messages of a single frame
- // and is otherwise unique.
- optional int64 cookie = 1;
-
- // Token received by the app for its work. Can be shared between multiple
- // layers of the same app (example: pip mode).
- optional int64 token = 2;
- // The corresponding DisplayFrame token is required to link the App's work
- // with SurfaceFlinger's work. Many SurfaceFrames can be mapped to a single
- // DisplayFrame.
- // this.display_frame_token = DisplayFrame.token
- optional int64 display_frame_token = 3;
-
- // Pid of the app. Used in creating the timeline tracks (and slices) inside
- // the respective process track group.
- optional int32 pid = 4;
- optional string layer_name = 5;
- };
-
- // Indicates the start of actual timeline slice for SurfaceFrames. Also
- // includes the jank information.
- message ActualSurfaceFrameStart {
- // Cookie used to correlate between the start and end messages of the same
- // frame. Since all values except the ts are same for start and end, cookie
- // helps in preventing redundant data transmission.
- // The same cookie is used only by start and end messages of a single frame
- // and is otherwise unique.
- optional int64 cookie = 1;
-
- // Token received by the app for its work. Can be shared between multiple
- // layers of the same app (example: pip mode).
- optional int64 token = 2;
- // The corresponding DisplayFrame token is required to link the App's work
- // with SurfaceFlinger's work. Many SurfaceFrames can be mapped to a single
- // DisplayFrame.
- // this.display_frame_token = DisplayFrame.token
- optional int64 display_frame_token = 3;
-
- // Pid of the app. Used in creating the timeline tracks (and slices) inside
- // the respective process track group.
- optional int32 pid = 4;
- optional string layer_name = 5;
-
- optional PresentType present_type = 6;
- optional bool on_time_finish = 7;
- optional bool gpu_composition = 8;
- // A bitmask of JankType. More than one reason can be attributed to a janky
- // frame.
- optional int32 jank_type = 9;
- optional PredictionType prediction_type = 10;
- optional bool is_buffer = 11;
- };
-
- // Indicates the start of expected timeline slice for DisplayFrames.
- message ExpectedDisplayFrameStart {
- // Cookie used to correlate between the start and end messages of the same
- // frame. Since all values except the ts are same for start and end, cookie
- // helps in preventing redundant data transmission.
- // The same cookie is used only by start and end messages of a single frame
- // and is otherwise unique.
- optional int64 cookie = 1;
-
- // Token received by SurfaceFlinger for its work
- // this.token = SurfaceFrame.display_frame_token
- optional int64 token = 2;
-
- // Pid of SurfaceFlinger. Used in creating the timeline tracks (and slices)
- // inside the SurfaceFlinger process group.
- optional int32 pid = 3;
- };
-
- // Indicates the start of actual timeline slice for DisplayFrames. Also
- // includes the jank information.
- message ActualDisplayFrameStart {
- // Cookie used to correlate between the start and end messages of the same
- // frame. Since all values except the ts are same for start and end, cookie
- // helps in preventing redundant data transmission.
- // The same cookie is used only by start and end messages of a single frame
- // and is otherwise unique.
- optional int64 cookie = 1;
-
- // Token received by SurfaceFlinger for its work
- // this.token = SurfaceFrame.display_frame_token
- optional int64 token = 2;
-
- // Pid of SurfaceFlinger. Used in creating the timeline tracks (and slices)
- // inside the SurfaceFlinger process group.
- optional int32 pid = 3;
-
- optional PresentType present_type = 4;
- optional bool on_time_finish = 5;
- optional bool gpu_composition = 6;
- // A bitmask of JankType. More than one reason can be attributed to a janky
- // frame.
- optional int32 jank_type = 7;
- optional PredictionType prediction_type = 8;
- };
-
- // FrameEnd just sends the cookie to indicate that the corresponding
- // <display/surface>frame slice's end.
- message FrameEnd { optional int64 cookie = 1; };
-
- oneof event {
- ExpectedDisplayFrameStart expected_display_frame_start = 1;
- ActualDisplayFrameStart actual_display_frame_start = 2;
-
- ExpectedSurfaceFrameStart expected_surface_frame_start = 3;
- ActualSurfaceFrameStart actual_surface_frame_start = 4;
-
- FrameEnd frame_end = 5;
- }
-}
-
-// End of protos/perfetto/trace/android/frame_timeline_event.proto
-
-// Begin of protos/perfetto/trace/android/gpu_mem_event.proto
-
-// Generated by Android's GpuService.
-message GpuMemTotalEvent {
- optional uint32 gpu_id = 1;
- optional uint32 pid = 2;
- optional uint64 size = 3;
-}
-
-// End of protos/perfetto/trace/android/gpu_mem_event.proto
-
-// Begin of protos/perfetto/trace/android/graphics_frame_event.proto
-
-// Generated by Android's SurfaceFlinger.
-message GraphicsFrameEvent {
- enum BufferEventType {
- UNSPECIFIED = 0;
- DEQUEUE = 1;
- QUEUE = 2;
- POST = 3;
- ACQUIRE_FENCE = 4;
- LATCH = 5;
- // HWC will compose this buffer
- HWC_COMPOSITION_QUEUED = 6;
- // renderEngine composition
- FALLBACK_COMPOSITION = 7;
- PRESENT_FENCE = 8;
- RELEASE_FENCE = 9;
- MODIFY = 10;
- DETACH = 11;
- ATTACH = 12;
- CANCEL = 13;
- }
-
- message BufferEvent {
- optional uint32 frame_number = 1;
- optional BufferEventType type = 2;
- optional string layer_name = 3;
- // If no duration is set, the event is an instant event.
- optional uint64 duration_ns = 4;
- // Unique buffer identifier.
- optional uint32 buffer_id = 5;
- }
-
- optional BufferEvent buffer_event = 1;
-}
-
-// End of protos/perfetto/trace/android/graphics_frame_event.proto
-
-// Begin of protos/perfetto/trace/android/initial_display_state.proto
-
-message InitialDisplayState {
- // Same values as android.view.Display.STATE_*
- optional int32 display_state = 1;
- optional double brightness = 2;
-}
-
-// End of protos/perfetto/trace/android/initial_display_state.proto
-
-// Begin of protos/perfetto/trace/android/packages_list.proto
-
-message PackagesList {
- message PackageInfo {
- optional string name = 1;
- optional uint64 uid = 2;
- optional bool debuggable = 3;
- optional bool profileable_from_shell = 4;
- optional int64 version_code = 5;
- }
-
- repeated PackageInfo packages = 1;
-
- // At least one error occurred parsing the packages.list.
- optional bool parse_error = 2;
-
- // Failed to open / read packages.list.
- optional bool read_error = 3;
-}
-
-// End of protos/perfetto/trace/android/packages_list.proto
-
-// Begin of protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto
-
-// This message is not intended to be written by the chrome on the device.
-// It's emitted on the host by the telemetry benchmark infrastructure (it's a
-// part of the trace that's written by the telemetry tracing agent).
-message ChromeBenchmarkMetadata {
- // Time when the benchmark execution started (host unixtime in microseconds).
- optional int64 benchmark_start_time_us = 1;
-
- // Time when this particular story was run (host unixtime in microseconds).
- optional int64 story_run_time_us = 2;
-
- // Name of benchmark.
- optional string benchmark_name = 3;
-
- // Description of benchmark.
- optional string benchmark_description = 4;
-
- // Optional label.
- optional string label = 5;
-
- // Name of story.
- optional string story_name = 6;
-
- // List of story tags.
- repeated string story_tags = 7;
-
- // Index of the story run (>0 if the same story was run several times).
- optional int32 story_run_index = 8;
-
- // Whether this run failed.
- optional bool had_failures = 9;
-}
-
-// End of protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto
-
-// Begin of protos/perfetto/trace/chrome/chrome_metadata.proto
-
-// Metadata for chrome traces.
-message ChromeMetadataPacket {
- optional BackgroundTracingMetadata background_tracing_metadata = 1;
-
- // Version code of Chrome used by Android's Play Store. This field is only set
- // on Android.
- optional int32 chrome_version_code = 2;
-
- // Comma separated list of enabled categories for tracing. The list of
- // possible category strings are listed in code
- // base/trace_event/builtin_categories.h.
- optional string enabled_categories = 3;
-}
-
-// Metadata related to background tracing scenarios, states and triggers.
-message BackgroundTracingMetadata {
- // Information about a trigger rule defined in the experiment config.
- message TriggerRule {
- enum TriggerType {
- TRIGGER_UNSPECIFIED = 0;
-
- // Traces are triggered by specific range of values of an UMA histogram.
- MONITOR_AND_DUMP_WHEN_SPECIFIC_HISTOGRAM_AND_VALUE = 1;
-
- // Traces are triggered by specific named events in chromium codebase,
- // like "second-update-failure".
- MONITOR_AND_DUMP_WHEN_TRIGGER_NAMED = 2;
- }
- optional TriggerType trigger_type = 1;
-
- // Configuration of histogram trigger.
- message HistogramRule {
- // UMA histogram name hash, same as HistogramEventProto.name_hash.
- optional fixed64 histogram_name_hash = 1;
-
- // Range of values of the histogram that activates trigger.
- optional int64 histogram_min_trigger = 2;
- optional int64 histogram_max_trigger = 3;
- }
- optional HistogramRule histogram_rule = 2;
-
- // Configuration of named trigger.
- message NamedRule {
- enum EventType {
- UNSPECIFIED = 0;
- SESSION_RESTORE = 1;
- NAVIGATION = 2;
- STARTUP = 3;
- REACHED_CODE = 4;
- CONTENT_TRIGGER = 5;
-
- TEST_RULE = 1000;
- }
- optional EventType event_type = 1;
-
- // If |event_type| is CONTENT_TRIGGER, then this stores the hash of the
- // content-trigger that actually fired.
- optional fixed64 content_trigger_name_hash = 2;
- }
- optional NamedRule named_rule = 3;
- }
-
- // Specifies the rule that caused the trace to be uploaded.
- optional TriggerRule triggered_rule = 1;
-
- // List of all active triggers in current session, when trace was triggered.
- repeated TriggerRule active_rules = 2;
-}
-
-// End of protos/perfetto/trace/chrome/chrome_metadata.proto
-
-// Begin of protos/perfetto/trace/chrome/chrome_trace_event.proto
-
-message ChromeTracedValue {
- enum NestedType {
- DICT = 0;
- ARRAY = 1;
- }
- optional NestedType nested_type = 1;
-
- repeated string dict_keys = 2;
- repeated ChromeTracedValue dict_values = 3;
- repeated ChromeTracedValue array_values = 4;
- optional int32 int_value = 5;
- optional double double_value = 6;
- optional bool bool_value = 7;
- optional string string_value = 8;
-}
-
-message ChromeStringTableEntry {
- optional string value = 1;
- optional int32 index = 2;
-}
-
-// Deprecated, use TrackEvent protos instead.
-message ChromeTraceEvent {
- message Arg {
- optional string name = 1;
-
- oneof value {
- bool bool_value = 2;
- uint64 uint_value = 3;
- int64 int_value = 4;
- double double_value = 5;
- string string_value = 6;
- // Pointers are stored in a separate type as the JSON output treats them
- // differently from other uint64 values.
- uint64 pointer_value = 7;
- string json_value = 8;
- ChromeTracedValue traced_value = 10;
- }
-
- // Takes precedence over |name| if set,
- // and is an index into |string_table|.
- optional uint32 name_index = 9;
- }
-
- optional string name = 1;
- optional int64 timestamp = 2;
- optional int32 phase = 3;
- optional int32 thread_id = 4;
- optional int64 duration = 5;
- optional int64 thread_duration = 6;
- optional string scope = 7;
- optional uint64 id = 8;
- optional uint32 flags = 9;
- optional string category_group_name = 10;
- optional int32 process_id = 11;
- optional int64 thread_timestamp = 12;
- optional uint64 bind_id = 13;
-
- repeated Arg args = 14;
-
- // Takes precedence over respectively |name| and
- // |category_group_name_index| if set,
- // and are indices into |string_table|.
- optional uint32 name_index = 15;
- optional uint32 category_group_name_index = 16;
-}
-
-message ChromeMetadata {
- optional string name = 1;
-
- oneof value {
- string string_value = 2;
- bool bool_value = 3;
- int64 int_value = 4;
- string json_value = 5;
- }
-}
-
-// Subtraces produced in legacy json format by Chrome tracing agents not yet
-// updated to support the new binary format, e.g. ETW and CrOS ARC.
-// TODO(eseckler): Update these agents to become perfetto producers.
-message ChromeLegacyJsonTrace {
- enum TraceType {
- USER_TRACE = 0;
-
- // Deprecated.
- SYSTEM_TRACE = 1;
- }
- optional TraceType type = 1;
- optional string data = 2;
-}
-
-message ChromeEventBundle {
- // Deprecated, use TrackEvent protos instead.
- repeated ChromeTraceEvent trace_events = 1 [deprecated = true];
- // TODO(ssid): This should be deprecated in favor of ChromeMetadataPacket
- // which contains typed fields.
- repeated ChromeMetadata metadata = 2;
- // ftrace output from CrOS and Cast system tracing agents.
- // TODO(eseckler): Replace system traces with native perfetto service.
- repeated string legacy_ftrace_output = 4;
- repeated ChromeLegacyJsonTrace legacy_json_trace = 5;
-
- // Contents of a string table that's valid for
- // the whole ChromeEventBundle entry.
- repeated ChromeStringTableEntry string_table = 3 [deprecated = true];
-}
-
-// End of protos/perfetto/trace/chrome/chrome_trace_event.proto
-
-// Begin of protos/perfetto/trace/clock_snapshot.proto
-
-// A snapshot of clock readings to allow for trace alignment.
-message ClockSnapshot {
- message Clock {
- // DEPRECATED. This enum has moved to ../common/builtin_clock.proto.
- enum BuiltinClocks {
- UNKNOWN = 0;
- REALTIME = 1;
- REALTIME_COARSE = 2;
- MONOTONIC = 3;
- MONOTONIC_COARSE = 4;
- MONOTONIC_RAW = 5;
- BOOTTIME = 6;
- BUILTIN_CLOCK_MAX_ID = 63;
-
- reserved 7, 8;
- }
-
- // Clock IDs have the following semantic:
- // [1, 63]: Builtin types, see BuiltinClock from
- // ../common/builtin_clock.proto.
- // [64, 127]: User-defined clocks. These clocks are sequence-scoped. They
- // are only valid within the same |trusted_packet_sequence_id|
- // (i.e. only for TracePacket(s) emitted by the same TraceWriter
- // that emitted the clock snapshot).
- // [128, MAX]: Reserved for future use. The idea is to allow global clock
- // IDs and setting this ID to hash(full_clock_name) & ~127.
- optional uint32 clock_id = 1;
-
- // Absolute timestamp. Unit is ns unless specified otherwise by the
- // unit_multiplier_ns field below.
- optional uint64 timestamp = 2;
-
- // When true each TracePacket's timestamp should be interpreted as a delta
- // from the last TracePacket's timestamp (referencing this clock) emitted by
- // the same packet_sequence_id. Should only be used for user-defined
- // sequence-local clocks. The first packet timestamp after each
- // ClockSnapshot that contains this clock is relative to the |timestamp| in
- // the ClockSnapshot.
- optional bool is_incremental = 3;
-
- // Allows to specify a custom unit different than the default (ns) for this
- // clock domain. A multiplier of 1000 means that a timestamp = 3 should be
- // interpreted as 3000 ns = 3 us. All snapshots for the same clock within a
- // trace need to use the same unit.
- optional uint64 unit_multiplier_ns = 4;
- }
- repeated Clock clocks = 1;
-
- // The authoritative clock domain for the trace. Defaults to BOOTTIME, but can
- // be overridden in TraceConfig's builtin_data_sources. Trace processor will
- // attempt to translate packet/event timestamps from various data sources (and
- // their chosen clock domains) to this domain during import.
- optional BuiltinClock primary_trace_clock = 2;
-}
-
-// End of protos/perfetto/trace/clock_snapshot.proto
-
-// Begin of protos/perfetto/common/descriptor.proto
-
-// The protocol compiler can output a FileDescriptorSet containing the .proto
-// files it parses.
-message FileDescriptorSet {
- repeated FileDescriptorProto file = 1;
-}
-
-// Describes a complete .proto file.
-message FileDescriptorProto {
- // file name, relative to root of source tree
- optional string name = 1;
- // e.g. "foo", "foo.bar", etc.
- optional string package = 2;
-
- // Names of files imported by this file.
- repeated string dependency = 3;
- // Indexes of the public imported files in the dependency list above.
- repeated int32 public_dependency = 10;
- // Indexes of the weak imported files in the dependency list.
- // For Google-internal migration only. Do not use.
- repeated int32 weak_dependency = 11;
-
- // All top-level definitions in this file.
- repeated DescriptorProto message_type = 4;
- repeated EnumDescriptorProto enum_type = 5;
- repeated FieldDescriptorProto extension = 7;
-
- reserved 6;
- reserved 8;
- reserved 9;
- reserved 12;
-}
-
-// Describes a message type.
-message DescriptorProto {
- optional string name = 1;
-
- repeated FieldDescriptorProto field = 2;
- repeated FieldDescriptorProto extension = 6;
-
- repeated DescriptorProto nested_type = 3;
- repeated EnumDescriptorProto enum_type = 4;
-
- reserved 5;
-
- repeated OneofDescriptorProto oneof_decl = 8;
-
- reserved 7;
-
- // Range of reserved tag numbers. Reserved tag numbers may not be used by
- // fields or extension ranges in the same message. Reserved ranges may
- // not overlap.
- message ReservedRange {
- // Inclusive.
- optional int32 start = 1;
- // Exclusive.
- optional int32 end = 2;
- }
- repeated ReservedRange reserved_range = 9;
- // Reserved field names, which may not be used by fields in the same message.
- // A given name may only be reserved once.
- repeated string reserved_name = 10;
-}
-
-// Describes a field within a message.
-message FieldDescriptorProto {
- enum Type {
- // 0 is reserved for errors.
- // Order is weird for historical reasons.
- TYPE_DOUBLE = 1;
- TYPE_FLOAT = 2;
- // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if
- // negative values are likely.
- TYPE_INT64 = 3;
- TYPE_UINT64 = 4;
- // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if
- // negative values are likely.
- TYPE_INT32 = 5;
- TYPE_FIXED64 = 6;
- TYPE_FIXED32 = 7;
- TYPE_BOOL = 8;
- TYPE_STRING = 9;
- // Tag-delimited aggregate.
- // Group type is deprecated and not supported in proto3. However, Proto3
- // implementations should still be able to parse the group wire format and
- // treat group fields as unknown fields.
- TYPE_GROUP = 10;
- // Length-delimited aggregate.
- TYPE_MESSAGE = 11;
-
- // New in version 2.
- TYPE_BYTES = 12;
- TYPE_UINT32 = 13;
- TYPE_ENUM = 14;
- TYPE_SFIXED32 = 15;
- TYPE_SFIXED64 = 16;
- // Uses ZigZag encoding.
- TYPE_SINT32 = 17;
- // Uses ZigZag encoding.
- TYPE_SINT64 = 18;
- };
-
- enum Label {
- // 0 is reserved for errors
- LABEL_OPTIONAL = 1;
- LABEL_REQUIRED = 2;
- LABEL_REPEATED = 3;
- };
-
- optional string name = 1;
- optional int32 number = 3;
- optional Label label = 4;
-
- // If type_name is set, this need not be set. If both this and type_name
- // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
- optional Type type = 5;
-
- // For message and enum types, this is the name of the type. If the name
- // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping
- // rules are used to find the type (i.e. first the nested types within this
- // message are searched, then within the parent, on up to the root
- // namespace).
- optional string type_name = 6;
-
- // For extensions, this is the name of the type being extended. It is
- // resolved in the same manner as type_name.
- optional string extendee = 2;
-
- // For numeric types, contains the original text representation of the value.
- // For booleans, "true" or "false".
- // For strings, contains the default text contents (not escaped in any way).
- // For bytes, contains the C escaped value. All bytes >= 128 are escaped.
- // TODO(kenton): Base-64 encode?
- optional string default_value = 7;
-
- // If set, gives the index of a oneof in the containing type's oneof_decl
- // list. This field is a member of that oneof.
- optional int32 oneof_index = 9;
-
- reserved 10;
-
- reserved 8;
-}
-
-// Describes a oneof.
-message OneofDescriptorProto {
- optional string name = 1;
- optional OneofOptions options = 2;
-}
-
-// Describes an enum type.
-message EnumDescriptorProto {
- optional string name = 1;
-
- repeated EnumValueDescriptorProto value = 2;
-
- reserved 3;
- reserved 4;
-
- // Reserved enum value names, which may not be reused. A given name may only
- // be reserved once.
- repeated string reserved_name = 5;
-}
-
-// Describes a value within an enum.
-message EnumValueDescriptorProto {
- optional string name = 1;
- optional int32 number = 2;
-
- reserved 3;
-}
-
-message OneofOptions {
- reserved 999;
-
- // Clients can define custom options in extensions of this message. See above.
- extensions 1000 to max;
-}
-
-// End of protos/perfetto/common/descriptor.proto
-
-// Begin of protos/perfetto/trace/extension_descriptor.proto
-
-// This message contains descriptors used to parse extension fields of
-// TrackEvent.
-//
-// See docs/design-docs/extensions.md for more details.
-message ExtensionDescriptor {
- optional FileDescriptorSet extension_set = 1;
-}
-
-// End of protos/perfetto/trace/extension_descriptor.proto
-
-// Begin of protos/perfetto/trace/filesystem/inode_file_map.proto
-
-// Represents the mapping between inode numbers in a block device and their path
-// on the filesystem
-message InodeFileMap {
- // Representation of Entry
- message Entry {
- optional uint64 inode_number = 1;
-
- // The path to the file, e.g. "etc/file.xml"
- // List of strings for multiple hardlinks
- repeated string paths = 2;
-
- // The file type
- enum Type {
- UNKNOWN = 0;
- FILE = 1;
- DIRECTORY = 2;
- }
- optional Type type = 3;
- }
-
- optional uint64 block_device_id = 1;
-
- // The mount points of the block device, e.g. ["system"].
- repeated string mount_points = 2;
-
- // The list of all the entries from the block device
- repeated Entry entries = 3;
-}
-
-// End of protos/perfetto/trace/filesystem/inode_file_map.proto
-
-// Begin of protos/perfetto/trace/ftrace/binder.proto
-
-message BinderTransactionFtraceEvent {
- optional int32 debug_id = 1;
- optional int32 target_node = 2;
- optional int32 to_proc = 3;
- optional int32 to_thread = 4;
- optional int32 reply = 5;
- optional uint32 code = 6;
- optional uint32 flags = 7;
-}
-message BinderTransactionReceivedFtraceEvent {
- optional int32 debug_id = 1;
-}
-message BinderSetPriorityFtraceEvent {
- optional int32 proc = 1;
- optional int32 thread = 2;
- optional uint32 old_prio = 3;
- optional uint32 new_prio = 4;
- optional uint32 desired_prio = 5;
-}
-message BinderLockFtraceEvent {
- optional string tag = 1;
-}
-message BinderLockedFtraceEvent {
- optional string tag = 1;
-}
-message BinderUnlockFtraceEvent {
- optional string tag = 1;
-}
-message BinderTransactionAllocBufFtraceEvent {
- optional uint64 data_size = 1;
- optional int32 debug_id = 2;
- optional uint64 offsets_size = 3;
-}
-
-// End of protos/perfetto/trace/ftrace/binder.proto
-
-// Begin of protos/perfetto/trace/ftrace/block.proto
-
-message BlockRqIssueFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional uint32 bytes = 4;
- optional string rwbs = 5;
- optional string comm = 6;
- optional string cmd = 7;
-}
-message BlockBioBackmergeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional string rwbs = 4;
- optional string comm = 5;
-}
-message BlockBioBounceFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional string rwbs = 4;
- optional string comm = 5;
-}
-message BlockBioCompleteFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional int32 error = 4;
- optional string rwbs = 5;
-}
-message BlockBioFrontmergeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional string rwbs = 4;
- optional string comm = 5;
-}
-message BlockBioQueueFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional string rwbs = 4;
- optional string comm = 5;
-}
-message BlockBioRemapFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional uint64 old_dev = 4;
- optional uint64 old_sector = 5;
- optional string rwbs = 6;
-}
-message BlockDirtyBufferFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint64 size = 3;
-}
-message BlockGetrqFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional string rwbs = 4;
- optional string comm = 5;
-}
-message BlockPlugFtraceEvent {
- optional string comm = 1;
-}
-message BlockRqAbortFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional int32 errors = 4;
- optional string rwbs = 5;
- optional string cmd = 6;
-}
-message BlockRqCompleteFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional int32 errors = 4;
- optional string rwbs = 5;
- optional string cmd = 6;
-}
-message BlockRqInsertFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional uint32 bytes = 4;
- optional string rwbs = 5;
- optional string comm = 6;
- optional string cmd = 7;
-}
-message BlockRqRemapFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional uint64 old_dev = 4;
- optional uint64 old_sector = 5;
- optional uint32 nr_bios = 6;
- optional string rwbs = 7;
-}
-message BlockRqRequeueFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional int32 errors = 4;
- optional string rwbs = 5;
- optional string cmd = 6;
-}
-message BlockSleeprqFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint32 nr_sector = 3;
- optional string rwbs = 4;
- optional string comm = 5;
-}
-message BlockSplitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint64 new_sector = 3;
- optional string rwbs = 4;
- optional string comm = 5;
-}
-message BlockTouchBufferFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 sector = 2;
- optional uint64 size = 3;
-}
-message BlockUnplugFtraceEvent {
- optional int32 nr_rq = 1;
- optional string comm = 2;
-}
-
-// End of protos/perfetto/trace/ftrace/block.proto
-
-// Begin of protos/perfetto/trace/ftrace/cgroup.proto
-
-message CgroupAttachTaskFtraceEvent {
- optional int32 dst_root = 1;
- optional int32 dst_id = 2;
- optional int32 pid = 3;
- optional string comm = 4;
- optional string cname = 5;
-}
-message CgroupMkdirFtraceEvent {
- optional int32 root = 1;
- optional int32 id = 2;
- optional string cname = 3;
-}
-message CgroupRemountFtraceEvent {
- optional int32 root = 1;
- optional uint32 ss_mask = 2;
- optional string name = 3;
-}
-message CgroupRmdirFtraceEvent {
- optional int32 root = 1;
- optional int32 id = 2;
- optional string cname = 3;
-}
-message CgroupTransferTasksFtraceEvent {
- optional int32 dst_root = 1;
- optional int32 dst_id = 2;
- optional int32 pid = 3;
- optional string comm = 4;
- optional string cname = 5;
-}
-message CgroupDestroyRootFtraceEvent {
- optional int32 root = 1;
- optional uint32 ss_mask = 2;
- optional string name = 3;
-}
-message CgroupReleaseFtraceEvent {
- optional int32 root = 1;
- optional int32 id = 2;
- optional string cname = 3;
-}
-message CgroupRenameFtraceEvent {
- optional int32 root = 1;
- optional int32 id = 2;
- optional string cname = 3;
-}
-message CgroupSetupRootFtraceEvent {
- optional int32 root = 1;
- optional uint32 ss_mask = 2;
- optional string name = 3;
-}
-
-// End of protos/perfetto/trace/ftrace/cgroup.proto
-
-// Begin of protos/perfetto/trace/ftrace/clk.proto
-
-message ClkEnableFtraceEvent {
- optional string name = 1;
-}
-message ClkDisableFtraceEvent {
- optional string name = 1;
-}
-message ClkSetRateFtraceEvent {
- optional string name = 1;
- optional uint64 rate = 2;
-}
-
-// End of protos/perfetto/trace/ftrace/clk.proto
-
-// Begin of protos/perfetto/trace/ftrace/compaction.proto
-
-message MmCompactionBeginFtraceEvent {
- optional uint64 zone_start = 1;
- optional uint64 migrate_pfn = 2;
- optional uint64 free_pfn = 3;
- optional uint64 zone_end = 4;
- optional uint32 sync = 5;
-}
-message MmCompactionDeferCompactionFtraceEvent {
- optional int32 nid = 1;
- optional uint32 idx = 2;
- optional int32 order = 3;
- optional uint32 considered = 4;
- optional uint32 defer_shift = 5;
- optional int32 order_failed = 6;
-}
-message MmCompactionDeferredFtraceEvent {
- optional int32 nid = 1;
- optional uint32 idx = 2;
- optional int32 order = 3;
- optional uint32 considered = 4;
- optional uint32 defer_shift = 5;
- optional int32 order_failed = 6;
-}
-message MmCompactionDeferResetFtraceEvent {
- optional int32 nid = 1;
- optional uint32 idx = 2;
- optional int32 order = 3;
- optional uint32 considered = 4;
- optional uint32 defer_shift = 5;
- optional int32 order_failed = 6;
-}
-message MmCompactionEndFtraceEvent {
- optional uint64 zone_start = 1;
- optional uint64 migrate_pfn = 2;
- optional uint64 free_pfn = 3;
- optional uint64 zone_end = 4;
- optional uint32 sync = 5;
- optional int32 status = 6;
-}
-message MmCompactionFinishedFtraceEvent {
- optional int32 nid = 1;
- optional uint32 idx = 2;
- optional int32 order = 3;
- optional int32 ret = 4;
-}
-message MmCompactionIsolateFreepagesFtraceEvent {
- optional uint64 start_pfn = 1;
- optional uint64 end_pfn = 2;
- optional uint64 nr_scanned = 3;
- optional uint64 nr_taken = 4;
-}
-message MmCompactionIsolateMigratepagesFtraceEvent {
- optional uint64 start_pfn = 1;
- optional uint64 end_pfn = 2;
- optional uint64 nr_scanned = 3;
- optional uint64 nr_taken = 4;
-}
-message MmCompactionKcompactdSleepFtraceEvent {
- optional int32 nid = 1;
-}
-message MmCompactionKcompactdWakeFtraceEvent {
- optional int32 nid = 1;
- optional int32 order = 2;
- optional uint32 classzone_idx = 3;
-}
-message MmCompactionMigratepagesFtraceEvent {
- optional uint64 nr_migrated = 1;
- optional uint64 nr_failed = 2;
-}
-message MmCompactionSuitableFtraceEvent {
- optional int32 nid = 1;
- optional uint32 idx = 2;
- optional int32 order = 3;
- optional int32 ret = 4;
-}
-message MmCompactionTryToCompactPagesFtraceEvent {
- optional int32 order = 1;
- optional uint32 gfp_mask = 2;
- optional uint32 mode = 3;
-}
-message MmCompactionWakeupKcompactdFtraceEvent {
- optional int32 nid = 1;
- optional int32 order = 2;
- optional uint32 classzone_idx = 3;
-}
-
-// End of protos/perfetto/trace/ftrace/compaction.proto
-
-// Begin of protos/perfetto/trace/ftrace/cpuhp.proto
-
-message CpuhpExitFtraceEvent {
- optional uint32 cpu = 1;
- optional int32 idx = 2;
- optional int32 ret = 3;
- optional int32 state = 4;
-}
-message CpuhpMultiEnterFtraceEvent {
- optional uint32 cpu = 1;
- optional uint64 fun = 2;
- optional int32 idx = 3;
- optional int32 target = 4;
-}
-message CpuhpEnterFtraceEvent {
- optional uint32 cpu = 1;
- optional uint64 fun = 2;
- optional int32 idx = 3;
- optional int32 target = 4;
-}
-message CpuhpLatencyFtraceEvent {
- optional uint32 cpu = 1;
- optional int32 ret = 2;
- optional uint32 state = 3;
- optional uint64 time = 4;
-}
-message CpuhpPauseFtraceEvent {
- optional uint32 active_cpus = 1;
- optional uint32 cpus = 2;
- optional uint32 pause = 3;
- optional uint32 time = 4;
-}
-
-// End of protos/perfetto/trace/ftrace/cpuhp.proto
-
-// Begin of protos/perfetto/trace/ftrace/dmabuf_heap.proto
-
-message DmaHeapStatFtraceEvent {
- optional uint64 inode = 1;
- optional int64 len = 2;
- optional uint64 total_allocated = 3;
-}
-
-// End of protos/perfetto/trace/ftrace/dmabuf_heap.proto
-
-// Begin of protos/perfetto/trace/ftrace/dpu.proto
-
-message DpuTracingMarkWriteFtraceEvent {
- optional int32 pid = 1;
- optional string trace_name = 2;
- optional uint32 trace_begin = 3;
- optional string name = 4;
- optional uint32 type = 5;
- optional int32 value = 6;
-}
-
-// End of protos/perfetto/trace/ftrace/dpu.proto
-
-// Begin of protos/perfetto/trace/ftrace/ext4.proto
-
-message Ext4DaWriteBeginFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 pos = 3;
- optional uint32 len = 4;
- optional uint32 flags = 5;
-}
-message Ext4DaWriteEndFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 pos = 3;
- optional uint32 len = 4;
- optional uint32 copied = 5;
-}
-message Ext4SyncFileEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 parent = 3;
- optional int32 datasync = 4;
-}
-message Ext4SyncFileExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 ret = 3;
-}
-message Ext4AllocDaBlocksFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 data_blocks = 3;
- optional uint32 meta_blocks = 4;
-}
-message Ext4AllocateBlocksFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 block = 3;
- optional uint32 len = 4;
- optional uint32 logical = 5;
- optional uint32 lleft = 6;
- optional uint32 lright = 7;
- optional uint64 goal = 8;
- optional uint64 pleft = 9;
- optional uint64 pright = 10;
- optional uint32 flags = 11;
-}
-message Ext4AllocateInodeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 dir = 3;
- optional uint32 mode = 4;
-}
-message Ext4BeginOrderedTruncateFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 new_size = 3;
-}
-message Ext4CollapseRangeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 offset = 3;
- optional int64 len = 4;
-}
-message Ext4DaReleaseSpaceFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 i_blocks = 3;
- optional int32 freed_blocks = 4;
- optional int32 reserved_data_blocks = 5;
- optional int32 reserved_meta_blocks = 6;
- optional int32 allocated_meta_blocks = 7;
- optional uint32 mode = 8;
-}
-message Ext4DaReserveSpaceFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 i_blocks = 3;
- optional int32 reserved_data_blocks = 4;
- optional int32 reserved_meta_blocks = 5;
- optional uint32 mode = 6;
- optional int32 md_needed = 7;
-}
-message Ext4DaUpdateReserveSpaceFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 i_blocks = 3;
- optional int32 used_blocks = 4;
- optional int32 reserved_data_blocks = 5;
- optional int32 reserved_meta_blocks = 6;
- optional int32 allocated_meta_blocks = 7;
- optional int32 quota_claim = 8;
- optional uint32 mode = 9;
-}
-message Ext4DaWritePagesFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 first_page = 3;
- optional int64 nr_to_write = 4;
- optional int32 sync_mode = 5;
- optional uint64 b_blocknr = 6;
- optional uint32 b_size = 7;
- optional uint32 b_state = 8;
- optional int32 io_done = 9;
- optional int32 pages_written = 10;
-}
-message Ext4DaWritePagesExtentFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 lblk = 3;
- optional uint32 len = 4;
- optional uint32 flags = 5;
-}
-message Ext4DirectIOEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 pos = 3;
- optional uint64 len = 4;
- optional int32 rw = 5;
-}
-message Ext4DirectIOExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 pos = 3;
- optional uint64 len = 4;
- optional int32 rw = 5;
- optional int32 ret = 6;
-}
-message Ext4DiscardBlocksFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 blk = 2;
- optional uint64 count = 3;
-}
-message Ext4DiscardPreallocationsFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
-}
-message Ext4DropInodeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 drop = 3;
-}
-message Ext4EsCacheExtentFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 lblk = 3;
- optional uint32 len = 4;
- optional uint64 pblk = 5;
- optional uint32 status = 6;
-}
-message Ext4EsFindDelayedExtentRangeEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 lblk = 3;
-}
-message Ext4EsFindDelayedExtentRangeExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 lblk = 3;
- optional uint32 len = 4;
- optional uint64 pblk = 5;
- optional uint64 status = 6;
-}
-message Ext4EsInsertExtentFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 lblk = 3;
- optional uint32 len = 4;
- optional uint64 pblk = 5;
- optional uint64 status = 6;
-}
-message Ext4EsLookupExtentEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 lblk = 3;
-}
-message Ext4EsLookupExtentExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 lblk = 3;
- optional uint32 len = 4;
- optional uint64 pblk = 5;
- optional uint64 status = 6;
- optional int32 found = 7;
-}
-message Ext4EsRemoveExtentFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 lblk = 3;
- optional int64 len = 4;
-}
-message Ext4EsShrinkFtraceEvent {
- optional uint64 dev = 1;
- optional int32 nr_shrunk = 2;
- optional uint64 scan_time = 3;
- optional int32 nr_skipped = 4;
- optional int32 retried = 5;
-}
-message Ext4EsShrinkCountFtraceEvent {
- optional uint64 dev = 1;
- optional int32 nr_to_scan = 2;
- optional int32 cache_cnt = 3;
-}
-message Ext4EsShrinkScanEnterFtraceEvent {
- optional uint64 dev = 1;
- optional int32 nr_to_scan = 2;
- optional int32 cache_cnt = 3;
-}
-message Ext4EsShrinkScanExitFtraceEvent {
- optional uint64 dev = 1;
- optional int32 nr_shrunk = 2;
- optional int32 cache_cnt = 3;
-}
-message Ext4EvictInodeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 nlink = 3;
-}
-message Ext4ExtConvertToInitializedEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 m_lblk = 3;
- optional uint32 m_len = 4;
- optional uint32 u_lblk = 5;
- optional uint32 u_len = 6;
- optional uint64 u_pblk = 7;
-}
-message Ext4ExtConvertToInitializedFastpathFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 m_lblk = 3;
- optional uint32 m_len = 4;
- optional uint32 u_lblk = 5;
- optional uint32 u_len = 6;
- optional uint64 u_pblk = 7;
- optional uint32 i_lblk = 8;
- optional uint32 i_len = 9;
- optional uint64 i_pblk = 10;
-}
-message Ext4ExtHandleUnwrittenExtentsFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 flags = 3;
- optional uint32 lblk = 4;
- optional uint64 pblk = 5;
- optional uint32 len = 6;
- optional uint32 allocated = 7;
- optional uint64 newblk = 8;
-}
-message Ext4ExtInCacheFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 lblk = 3;
- optional int32 ret = 4;
-}
-message Ext4ExtLoadExtentFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 pblk = 3;
- optional uint32 lblk = 4;
-}
-message Ext4ExtMapBlocksEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 lblk = 3;
- optional uint32 len = 4;
- optional uint32 flags = 5;
-}
-message Ext4ExtMapBlocksExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 flags = 3;
- optional uint64 pblk = 4;
- optional uint32 lblk = 5;
- optional uint32 len = 6;
- optional uint32 mflags = 7;
- optional int32 ret = 8;
-}
-message Ext4ExtPutInCacheFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 lblk = 3;
- optional uint32 len = 4;
- optional uint64 start = 5;
-}
-message Ext4ExtRemoveSpaceFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 start = 3;
- optional uint32 end = 4;
- optional int32 depth = 5;
-}
-message Ext4ExtRemoveSpaceDoneFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 start = 3;
- optional uint32 end = 4;
- optional int32 depth = 5;
- optional int64 partial = 6;
- optional uint32 eh_entries = 7;
-}
-message Ext4ExtRmIdxFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 pblk = 3;
-}
-message Ext4ExtRmLeafFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 partial = 3;
- optional uint32 start = 4;
- optional uint32 ee_lblk = 5;
- optional uint64 ee_pblk = 6;
- optional int32 ee_len = 7;
-}
-message Ext4ExtShowExtentFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 pblk = 3;
- optional uint32 lblk = 4;
- optional uint32 len = 5;
-}
-message Ext4FallocateEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 offset = 3;
- optional int64 len = 4;
- optional int32 mode = 5;
- optional int64 pos = 6;
-}
-message Ext4FallocateExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 pos = 3;
- optional uint32 blocks = 4;
- optional int32 ret = 5;
-}
-message Ext4FindDelallocRangeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 from = 3;
- optional uint32 to = 4;
- optional int32 reverse = 5;
- optional int32 found = 6;
- optional uint32 found_blk = 7;
-}
-message Ext4ForgetFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 block = 3;
- optional int32 is_metadata = 4;
- optional uint32 mode = 5;
-}
-message Ext4FreeBlocksFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 block = 3;
- optional uint64 count = 4;
- optional int32 flags = 5;
- optional uint32 mode = 6;
-}
-message Ext4FreeInodeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 uid = 3;
- optional uint32 gid = 4;
- optional uint64 blocks = 5;
- optional uint32 mode = 6;
-}
-message Ext4GetImpliedClusterAllocExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint32 flags = 2;
- optional uint32 lblk = 3;
- optional uint64 pblk = 4;
- optional uint32 len = 5;
- optional int32 ret = 6;
-}
-message Ext4GetReservedClusterAllocFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 lblk = 3;
- optional uint32 len = 4;
-}
-message Ext4IndMapBlocksEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 lblk = 3;
- optional uint32 len = 4;
- optional uint32 flags = 5;
-}
-message Ext4IndMapBlocksExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 flags = 3;
- optional uint64 pblk = 4;
- optional uint32 lblk = 5;
- optional uint32 len = 6;
- optional uint32 mflags = 7;
- optional int32 ret = 8;
-}
-message Ext4InsertRangeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 offset = 3;
- optional int64 len = 4;
-}
-message Ext4InvalidatepageFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 index = 3;
- optional uint64 offset = 4;
- optional uint32 length = 5;
-}
-message Ext4JournalStartFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ip = 2;
- optional int32 blocks = 3;
- optional int32 rsv_blocks = 4;
- optional int32 nblocks = 5;
-}
-message Ext4JournalStartReservedFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ip = 2;
- optional int32 blocks = 3;
-}
-message Ext4JournalledInvalidatepageFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 index = 3;
- optional uint64 offset = 4;
- optional uint32 length = 5;
-}
-message Ext4JournalledWriteEndFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 pos = 3;
- optional uint32 len = 4;
- optional uint32 copied = 5;
-}
-message Ext4LoadInodeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
-}
-message Ext4LoadInodeBitmapFtraceEvent {
- optional uint64 dev = 1;
- optional uint32 group = 2;
-}
-message Ext4MarkInodeDirtyFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 ip = 3;
-}
-message Ext4MbBitmapLoadFtraceEvent {
- optional uint64 dev = 1;
- optional uint32 group = 2;
-}
-message Ext4MbBuddyBitmapLoadFtraceEvent {
- optional uint64 dev = 1;
- optional uint32 group = 2;
-}
-message Ext4MbDiscardPreallocationsFtraceEvent {
- optional uint64 dev = 1;
- optional int32 needed = 2;
-}
-message Ext4MbNewGroupPaFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 pa_pstart = 3;
- optional uint64 pa_lstart = 4;
- optional uint32 pa_len = 5;
-}
-message Ext4MbNewInodePaFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 pa_pstart = 3;
- optional uint64 pa_lstart = 4;
- optional uint32 pa_len = 5;
-}
-message Ext4MbReleaseGroupPaFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 pa_pstart = 2;
- optional uint32 pa_len = 3;
-}
-message Ext4MbReleaseInodePaFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 block = 3;
- optional uint32 count = 4;
-}
-message Ext4MballocAllocFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 orig_logical = 3;
- optional int32 orig_start = 4;
- optional uint32 orig_group = 5;
- optional int32 orig_len = 6;
- optional uint32 goal_logical = 7;
- optional int32 goal_start = 8;
- optional uint32 goal_group = 9;
- optional int32 goal_len = 10;
- optional uint32 result_logical = 11;
- optional int32 result_start = 12;
- optional uint32 result_group = 13;
- optional int32 result_len = 14;
- optional uint32 found = 15;
- optional uint32 groups = 16;
- optional uint32 buddy = 17;
- optional uint32 flags = 18;
- optional uint32 tail = 19;
- optional uint32 cr = 20;
-}
-message Ext4MballocDiscardFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 result_start = 3;
- optional uint32 result_group = 4;
- optional int32 result_len = 5;
-}
-message Ext4MballocFreeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 result_start = 3;
- optional uint32 result_group = 4;
- optional int32 result_len = 5;
-}
-message Ext4MballocPreallocFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 orig_logical = 3;
- optional int32 orig_start = 4;
- optional uint32 orig_group = 5;
- optional int32 orig_len = 6;
- optional uint32 result_logical = 7;
- optional int32 result_start = 8;
- optional uint32 result_group = 9;
- optional int32 result_len = 10;
-}
-message Ext4OtherInodeUpdateTimeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 orig_ino = 3;
- optional uint32 uid = 4;
- optional uint32 gid = 5;
- optional uint32 mode = 6;
-}
-message Ext4PunchHoleFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 offset = 3;
- optional int64 len = 4;
- optional int32 mode = 5;
-}
-message Ext4ReadBlockBitmapLoadFtraceEvent {
- optional uint64 dev = 1;
- optional uint32 group = 2;
-}
-message Ext4ReadpageFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 index = 3;
-}
-message Ext4ReleasepageFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 index = 3;
-}
-message Ext4RemoveBlocksFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 from = 3;
- optional uint32 to = 4;
- optional int64 partial = 5;
- optional uint64 ee_pblk = 6;
- optional uint32 ee_lblk = 7;
- optional uint32 ee_len = 8;
-}
-message Ext4RequestBlocksFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 len = 3;
- optional uint32 logical = 4;
- optional uint32 lleft = 5;
- optional uint32 lright = 6;
- optional uint64 goal = 7;
- optional uint64 pleft = 8;
- optional uint64 pright = 9;
- optional uint32 flags = 10;
-}
-message Ext4RequestInodeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 dir = 2;
- optional uint32 mode = 3;
-}
-message Ext4SyncFsFtraceEvent {
- optional uint64 dev = 1;
- optional int32 wait = 2;
-}
-message Ext4TrimAllFreeFtraceEvent {
- optional int32 dev_major = 1;
- optional int32 dev_minor = 2;
- optional uint32 group = 3;
- optional int32 start = 4;
- optional int32 len = 5;
-}
-message Ext4TrimExtentFtraceEvent {
- optional int32 dev_major = 1;
- optional int32 dev_minor = 2;
- optional uint32 group = 3;
- optional int32 start = 4;
- optional int32 len = 5;
-}
-message Ext4TruncateEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 blocks = 3;
-}
-message Ext4TruncateExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 blocks = 3;
-}
-message Ext4UnlinkEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 parent = 3;
- optional int64 size = 4;
-}
-message Ext4UnlinkExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 ret = 3;
-}
-message Ext4WriteBeginFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 pos = 3;
- optional uint32 len = 4;
- optional uint32 flags = 5;
-}
-message Ext4WriteEndFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 pos = 3;
- optional uint32 len = 4;
- optional uint32 copied = 5;
-}
-message Ext4WritepageFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 index = 3;
-}
-message Ext4WritepagesFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 nr_to_write = 3;
- optional int64 pages_skipped = 4;
- optional int64 range_start = 5;
- optional int64 range_end = 6;
- optional uint64 writeback_index = 7;
- optional int32 sync_mode = 8;
- optional uint32 for_kupdate = 9;
- optional uint32 range_cyclic = 10;
-}
-message Ext4WritepagesResultFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 ret = 3;
- optional int32 pages_written = 4;
- optional int64 pages_skipped = 5;
- optional uint64 writeback_index = 6;
- optional int32 sync_mode = 7;
-}
-message Ext4ZeroRangeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 offset = 3;
- optional int64 len = 4;
- optional int32 mode = 5;
-}
-
-// End of protos/perfetto/trace/ftrace/ext4.proto
-
-// Begin of protos/perfetto/trace/ftrace/f2fs.proto
-
-message F2fsDoSubmitBioFtraceEvent {
- optional uint64 dev = 1;
- optional int32 btype = 2;
- optional uint32 sync = 3;
- optional uint64 sector = 4;
- optional uint32 size = 5;
-}
-message F2fsEvictInodeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 pino = 3;
- optional uint32 mode = 4;
- optional int64 size = 5;
- optional uint32 nlink = 6;
- optional uint64 blocks = 7;
- optional uint32 advise = 8;
-}
-message F2fsFallocateFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 mode = 3;
- optional int64 offset = 4;
- optional int64 len = 5;
- optional int64 size = 6;
- optional uint64 blocks = 7;
- optional int32 ret = 8;
-}
-message F2fsGetDataBlockFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 iblock = 3;
- optional uint64 bh_start = 4;
- optional uint64 bh_size = 5;
- optional int32 ret = 6;
-}
-message F2fsGetVictimFtraceEvent {
- optional uint64 dev = 1;
- optional int32 type = 2;
- optional int32 gc_type = 3;
- optional int32 alloc_mode = 4;
- optional int32 gc_mode = 5;
- optional uint32 victim = 6;
- optional uint32 ofs_unit = 7;
- optional uint32 pre_victim = 8;
- optional uint32 prefree = 9;
- optional uint32 free = 10;
-}
-message F2fsIgetFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 pino = 3;
- optional uint32 mode = 4;
- optional int64 size = 5;
- optional uint32 nlink = 6;
- optional uint64 blocks = 7;
- optional uint32 advise = 8;
-}
-message F2fsIgetExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 ret = 3;
-}
-message F2fsNewInodeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 ret = 3;
-}
-message F2fsReadpageFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 index = 3;
- optional uint64 blkaddr = 4;
- optional int32 type = 5;
-}
-message F2fsReserveNewBlockFtraceEvent {
- optional uint64 dev = 1;
- optional uint32 nid = 2;
- optional uint32 ofs_in_node = 3;
-}
-message F2fsSetPageDirtyFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 type = 3;
- optional int32 dir = 4;
- optional uint64 index = 5;
- optional int32 dirty = 6;
-}
-message F2fsSubmitWritePageFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 type = 3;
- optional uint64 index = 4;
- optional uint32 block = 5;
-}
-message F2fsSyncFileEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 pino = 3;
- optional uint32 mode = 4;
- optional int64 size = 5;
- optional uint32 nlink = 6;
- optional uint64 blocks = 7;
- optional uint32 advise = 8;
-}
-message F2fsSyncFileExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 need_cp = 3;
- optional int32 datasync = 4;
- optional int32 ret = 5;
-}
-message F2fsSyncFsFtraceEvent {
- optional uint64 dev = 1;
- optional int32 dirty = 2;
- optional int32 wait = 3;
-}
-message F2fsTruncateFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint64 pino = 3;
- optional uint32 mode = 4;
- optional int64 size = 5;
- optional uint32 nlink = 6;
- optional uint64 blocks = 7;
- optional uint32 advise = 8;
-}
-message F2fsTruncateBlocksEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 size = 3;
- optional uint64 blocks = 4;
- optional uint64 from = 5;
-}
-message F2fsTruncateBlocksExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 ret = 3;
-}
-message F2fsTruncateDataBlocksRangeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 nid = 3;
- optional uint32 ofs = 4;
- optional int32 free = 5;
-}
-message F2fsTruncateInodeBlocksEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 size = 3;
- optional uint64 blocks = 4;
- optional uint64 from = 5;
-}
-message F2fsTruncateInodeBlocksExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 ret = 3;
-}
-message F2fsTruncateNodeFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 nid = 3;
- optional uint32 blk_addr = 4;
-}
-message F2fsTruncateNodesEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 nid = 3;
- optional uint32 blk_addr = 4;
-}
-message F2fsTruncateNodesExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 ret = 3;
-}
-message F2fsTruncatePartialNodesFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional uint32 nid = 3;
- optional int32 depth = 4;
- optional int32 err = 5;
-}
-message F2fsUnlinkEnterFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 size = 3;
- optional uint64 blocks = 4;
- optional string name = 5;
-}
-message F2fsUnlinkExitFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 ret = 3;
-}
-message F2fsVmPageMkwriteFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int32 type = 3;
- optional int32 dir = 4;
- optional uint64 index = 5;
- optional int32 dirty = 6;
-}
-message F2fsWriteBeginFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 pos = 3;
- optional uint32 len = 4;
- optional uint32 flags = 5;
-}
-message F2fsWriteCheckpointFtraceEvent {
- optional uint64 dev = 1;
- optional uint32 is_umount = 2;
- optional string msg = 3;
-}
-message F2fsWriteEndFtraceEvent {
- optional uint64 dev = 1;
- optional uint64 ino = 2;
- optional int64 pos = 3;
- optional uint32 len = 4;
- optional uint32 copied = 5;
-}
-
-// End of protos/perfetto/trace/ftrace/f2fs.proto
-
-// Begin of protos/perfetto/trace/ftrace/fastrpc.proto
-
-message FastrpcDmaStatFtraceEvent {
- optional int32 cid = 1;
- optional int64 len = 2;
- optional uint64 total_allocated = 3;
-}
-
-// End of protos/perfetto/trace/ftrace/fastrpc.proto
-
-// Begin of protos/perfetto/trace/ftrace/fence.proto
-
-message FenceInitFtraceEvent {
- optional uint32 context = 1;
- optional string driver = 2;
- optional uint32 seqno = 3;
- optional string timeline = 4;
-}
-message FenceDestroyFtraceEvent {
- optional uint32 context = 1;
- optional string driver = 2;
- optional uint32 seqno = 3;
- optional string timeline = 4;
-}
-message FenceEnableSignalFtraceEvent {
- optional uint32 context = 1;
- optional string driver = 2;
- optional uint32 seqno = 3;
- optional string timeline = 4;
-}
-message FenceSignaledFtraceEvent {
- optional uint32 context = 1;
- optional string driver = 2;
- optional uint32 seqno = 3;
- optional string timeline = 4;
-}
-
-// End of protos/perfetto/trace/ftrace/fence.proto
-
-// Begin of protos/perfetto/trace/ftrace/filemap.proto
-
-message MmFilemapAddToPageCacheFtraceEvent {
- optional uint64 pfn = 1;
- optional uint64 i_ino = 2;
- optional uint64 index = 3;
- optional uint64 s_dev = 4;
- optional uint64 page = 5;
-}
-message MmFilemapDeleteFromPageCacheFtraceEvent {
- optional uint64 pfn = 1;
- optional uint64 i_ino = 2;
- optional uint64 index = 3;
- optional uint64 s_dev = 4;
- optional uint64 page = 5;
-}
-
-// End of protos/perfetto/trace/ftrace/filemap.proto
-
-// Begin of protos/perfetto/trace/ftrace/ftrace.proto
-
-message PrintFtraceEvent {
- optional uint64 ip = 1;
- optional string buf = 2;
-}
-
-// End of protos/perfetto/trace/ftrace/ftrace.proto
-
-// Begin of protos/perfetto/trace/ftrace/g2d.proto
-
-message G2dTracingMarkWriteFtraceEvent {
- optional int32 pid = 1;
- optional string name = 4;
- optional uint32 type = 5;
- optional int32 value = 6;
-}
-
-// End of protos/perfetto/trace/ftrace/g2d.proto
-
-// Begin of protos/perfetto/trace/ftrace/generic.proto
-
-// This generic proto is used to output events in the trace
-// when a specific proto for that event does not exist.
-message GenericFtraceEvent {
- message Field {
- optional string name = 1;
- oneof value {
- string str_value = 3;
- int64 int_value = 4;
- uint64 uint_value = 5;
- }
- }
-
- optional string event_name = 1;
- repeated Field field = 2;
-}
-
-// End of protos/perfetto/trace/ftrace/generic.proto
-
-// Begin of protos/perfetto/trace/ftrace/gpu_mem.proto
-
-message GpuMemTotalFtraceEvent {
- optional uint32 gpu_id = 1;
- optional uint32 pid = 2;
- optional uint64 size = 3;
-}
-
-// End of protos/perfetto/trace/ftrace/gpu_mem.proto
-
-// Begin of protos/perfetto/trace/ftrace/i2c.proto
-
-message I2cReadFtraceEvent {
- optional int32 adapter_nr = 1;
- optional uint32 msg_nr = 2;
- optional uint32 addr = 3;
- optional uint32 flags = 4;
- optional uint32 len = 5;
-}
-message I2cWriteFtraceEvent {
- optional int32 adapter_nr = 1;
- optional uint32 msg_nr = 2;
- optional uint32 addr = 3;
- optional uint32 flags = 4;
- optional uint32 len = 5;
- optional uint32 buf = 6;
-}
-message I2cResultFtraceEvent {
- optional int32 adapter_nr = 1;
- optional uint32 nr_msgs = 2;
- optional int32 ret = 3;
-}
-message I2cReplyFtraceEvent {
- optional int32 adapter_nr = 1;
- optional uint32 msg_nr = 2;
- optional uint32 addr = 3;
- optional uint32 flags = 4;
- optional uint32 len = 5;
- optional uint32 buf = 6;
-}
-message SmbusReadFtraceEvent {
- optional int32 adapter_nr = 1;
- optional uint32 flags = 2;
- optional uint32 addr = 3;
- optional uint32 command = 4;
- optional uint32 protocol = 5;
-}
-message SmbusWriteFtraceEvent {
- optional int32 adapter_nr = 1;
- optional uint32 addr = 2;
- optional uint32 flags = 3;
- optional uint32 command = 4;
- optional uint32 len = 5;
- optional uint32 protocol = 6;
-}
-message SmbusResultFtraceEvent {
- optional int32 adapter_nr = 1;
- optional uint32 addr = 2;
- optional uint32 flags = 3;
- optional uint32 read_write = 4;
- optional uint32 command = 5;
- optional int32 res = 6;
- optional uint32 protocol = 7;
-}
-message SmbusReplyFtraceEvent {
- optional int32 adapter_nr = 1;
- optional uint32 addr = 2;
- optional uint32 flags = 3;
- optional uint32 command = 4;
- optional uint32 len = 5;
- optional uint32 protocol = 6;
-}
-
-// End of protos/perfetto/trace/ftrace/i2c.proto
-
-// Begin of protos/perfetto/trace/ftrace/ion.proto
-
-message IonStatFtraceEvent {
- optional uint32 buffer_id = 1;
- optional int64 len = 2;
- optional uint64 total_allocated = 3;
-}
-
-// End of protos/perfetto/trace/ftrace/ion.proto
-
-// Begin of protos/perfetto/trace/ftrace/ipi.proto
-
-message IpiEntryFtraceEvent {
- optional string reason = 1;
-}
-message IpiExitFtraceEvent {
- optional string reason = 1;
-}
-message IpiRaiseFtraceEvent {
- optional uint32 target_cpus = 1;
- optional string reason = 2;
-}
-
-// End of protos/perfetto/trace/ftrace/ipi.proto
-
-// Begin of protos/perfetto/trace/ftrace/irq.proto
-
-message SoftirqEntryFtraceEvent {
- optional uint32 vec = 1;
-}
-message SoftirqExitFtraceEvent {
- optional uint32 vec = 1;
-}
-message SoftirqRaiseFtraceEvent {
- optional uint32 vec = 1;
-}
-message IrqHandlerEntryFtraceEvent {
- optional int32 irq = 1;
- optional string name = 2;
- optional uint32 handler = 3;
-}
-message IrqHandlerExitFtraceEvent {
- optional int32 irq = 1;
- optional int32 ret = 2;
-}
-
-// End of protos/perfetto/trace/ftrace/irq.proto
-
-// Begin of protos/perfetto/trace/ftrace/kmem.proto
-
-message AllocPagesIommuEndFtraceEvent {
- optional uint32 gfp_flags = 1;
- optional uint32 order = 2;
-}
-message AllocPagesIommuFailFtraceEvent {
- optional uint32 gfp_flags = 1;
- optional uint32 order = 2;
-}
-message AllocPagesIommuStartFtraceEvent {
- optional uint32 gfp_flags = 1;
- optional uint32 order = 2;
-}
-message AllocPagesSysEndFtraceEvent {
- optional uint32 gfp_flags = 1;
- optional uint32 order = 2;
-}
-message AllocPagesSysFailFtraceEvent {
- optional uint32 gfp_flags = 1;
- optional uint32 order = 2;
-}
-message AllocPagesSysStartFtraceEvent {
- optional uint32 gfp_flags = 1;
- optional uint32 order = 2;
-}
-message DmaAllocContiguousRetryFtraceEvent {
- optional int32 tries = 1;
-}
-message IommuMapRangeFtraceEvent {
- optional uint64 chunk_size = 1;
- optional uint64 len = 2;
- optional uint64 pa = 3;
- optional uint64 va = 4;
-}
-message IommuSecPtblMapRangeEndFtraceEvent {
- optional uint64 len = 1;
- optional int32 num = 2;
- optional uint32 pa = 3;
- optional int32 sec_id = 4;
- optional uint64 va = 5;
-}
-message IommuSecPtblMapRangeStartFtraceEvent {
- optional uint64 len = 1;
- optional int32 num = 2;
- optional uint32 pa = 3;
- optional int32 sec_id = 4;
- optional uint64 va = 5;
-}
-message IonAllocBufferEndFtraceEvent {
- optional string client_name = 1;
- optional uint32 flags = 2;
- optional string heap_name = 3;
- optional uint64 len = 4;
- optional uint32 mask = 5;
-}
-message IonAllocBufferFailFtraceEvent {
- optional string client_name = 1;
- optional int64 error = 2;
- optional uint32 flags = 3;
- optional string heap_name = 4;
- optional uint64 len = 5;
- optional uint32 mask = 6;
-}
-message IonAllocBufferFallbackFtraceEvent {
- optional string client_name = 1;
- optional int64 error = 2;
- optional uint32 flags = 3;
- optional string heap_name = 4;
- optional uint64 len = 5;
- optional uint32 mask = 6;
-}
-message IonAllocBufferStartFtraceEvent {
- optional string client_name = 1;
- optional uint32 flags = 2;
- optional string heap_name = 3;
- optional uint64 len = 4;
- optional uint32 mask = 5;
-}
-message IonCpAllocRetryFtraceEvent {
- optional int32 tries = 1;
-}
-message IonCpSecureBufferEndFtraceEvent {
- optional uint64 align = 1;
- optional uint64 flags = 2;
- optional string heap_name = 3;
- optional uint64 len = 4;
-}
-message IonCpSecureBufferStartFtraceEvent {
- optional uint64 align = 1;
- optional uint64 flags = 2;
- optional string heap_name = 3;
- optional uint64 len = 4;
-}
-message IonPrefetchingFtraceEvent {
- optional uint64 len = 1;
-}
-message IonSecureCmaAddToPoolEndFtraceEvent {
- optional uint32 is_prefetch = 1;
- optional uint64 len = 2;
- optional int32 pool_total = 3;
-}
-message IonSecureCmaAddToPoolStartFtraceEvent {
- optional uint32 is_prefetch = 1;
- optional uint64 len = 2;
- optional int32 pool_total = 3;
-}
-message IonSecureCmaAllocateEndFtraceEvent {
- optional uint64 align = 1;
- optional uint64 flags = 2;
- optional string heap_name = 3;
- optional uint64 len = 4;
-}
-message IonSecureCmaAllocateStartFtraceEvent {
- optional uint64 align = 1;
- optional uint64 flags = 2;
- optional string heap_name = 3;
- optional uint64 len = 4;
-}
-message IonSecureCmaShrinkPoolEndFtraceEvent {
- optional uint64 drained_size = 1;
- optional uint64 skipped_size = 2;
-}
-message IonSecureCmaShrinkPoolStartFtraceEvent {
- optional uint64 drained_size = 1;
- optional uint64 skipped_size = 2;
-}
-message KfreeFtraceEvent {
- optional uint64 call_site = 1;
- optional uint64 ptr = 2;
-}
-message KmallocFtraceEvent {
- optional uint64 bytes_alloc = 1;
- optional uint64 bytes_req = 2;
- optional uint64 call_site = 3;
- optional uint32 gfp_flags = 4;
- optional uint64 ptr = 5;
-}
-message KmallocNodeFtraceEvent {
- optional uint64 bytes_alloc = 1;
- optional uint64 bytes_req = 2;
- optional uint64 call_site = 3;
- optional uint32 gfp_flags = 4;
- optional int32 node = 5;
- optional uint64 ptr = 6;
-}
-message KmemCacheAllocFtraceEvent {
- optional uint64 bytes_alloc = 1;
- optional uint64 bytes_req = 2;
- optional uint64 call_site = 3;
- optional uint32 gfp_flags = 4;
- optional uint64 ptr = 5;
-}
-message KmemCacheAllocNodeFtraceEvent {
- optional uint64 bytes_alloc = 1;
- optional uint64 bytes_req = 2;
- optional uint64 call_site = 3;
- optional uint32 gfp_flags = 4;
- optional int32 node = 5;
- optional uint64 ptr = 6;
-}
-message KmemCacheFreeFtraceEvent {
- optional uint64 call_site = 1;
- optional uint64 ptr = 2;
-}
-message MigratePagesEndFtraceEvent {
- optional int32 mode = 1;
-}
-message MigratePagesStartFtraceEvent {
- optional int32 mode = 1;
-}
-message MigrateRetryFtraceEvent {
- optional int32 tries = 1;
-}
-message MmPageAllocFtraceEvent {
- optional uint32 gfp_flags = 1;
- optional int32 migratetype = 2;
- optional uint32 order = 3;
- optional uint64 page = 4;
- optional uint64 pfn = 5;
-}
-message MmPageAllocExtfragFtraceEvent {
- optional int32 alloc_migratetype = 1;
- optional int32 alloc_order = 2;
- optional int32 fallback_migratetype = 3;
- optional int32 fallback_order = 4;
- optional uint64 page = 5;
- optional int32 change_ownership = 6;
- optional uint64 pfn = 7;
-}
-message MmPageAllocZoneLockedFtraceEvent {
- optional int32 migratetype = 1;
- optional uint32 order = 2;
- optional uint64 page = 3;
- optional uint64 pfn = 4;
-}
-message MmPageFreeFtraceEvent {
- optional uint32 order = 1;
- optional uint64 page = 2;
- optional uint64 pfn = 3;
-}
-message MmPageFreeBatchedFtraceEvent {
- optional int32 cold = 1;
- optional uint64 page = 2;
- optional uint64 pfn = 3;
-}
-message MmPagePcpuDrainFtraceEvent {
- optional int32 migratetype = 1;
- optional uint32 order = 2;
- optional uint64 page = 3;
- optional uint64 pfn = 4;
-}
-message RssStatFtraceEvent {
- optional int32 member = 1;
- optional int64 size = 2;
- optional uint32 curr = 3;
- optional uint32 mm_id = 4;
-}
-message IonHeapShrinkFtraceEvent {
- optional string heap_name = 1;
- optional uint64 len = 2;
- optional int64 total_allocated = 3;
-}
-message IonHeapGrowFtraceEvent {
- optional string heap_name = 1;
- optional uint64 len = 2;
- optional int64 total_allocated = 3;
-}
-message IonBufferCreateFtraceEvent {
- optional uint64 addr = 1;
- optional uint64 len = 2;
-}
-message IonBufferDestroyFtraceEvent {
- optional uint64 addr = 1;
- optional uint64 len = 2;
-}
-
-// End of protos/perfetto/trace/ftrace/kmem.proto
-
-// Begin of protos/perfetto/trace/ftrace/lowmemorykiller.proto
-
-message LowmemoryKillFtraceEvent {
- optional string comm = 1;
- optional int32 pid = 2;
- optional int64 pagecache_size = 3;
- optional int64 pagecache_limit = 4;
- optional int64 free = 5;
-}
-
-// End of protos/perfetto/trace/ftrace/lowmemorykiller.proto
-
-// Begin of protos/perfetto/trace/ftrace/mali.proto
-
-message MaliTracingMarkWriteFtraceEvent {
- optional string name = 1;
- optional int32 pid = 2;
- optional uint32 type = 3;
- optional int32 value = 4;
-}
-
-// End of protos/perfetto/trace/ftrace/mali.proto
-
-// Begin of protos/perfetto/trace/ftrace/mdss.proto
-
-message MdpCmdKickoffFtraceEvent {
- optional uint32 ctl_num = 1;
- optional int32 kickoff_cnt = 2;
-}
-message MdpCommitFtraceEvent {
- optional uint32 num = 1;
- optional uint32 play_cnt = 2;
- optional uint32 clk_rate = 3;
- optional uint64 bandwidth = 4;
-}
-message MdpPerfSetOtFtraceEvent {
- optional uint32 pnum = 1;
- optional uint32 xin_id = 2;
- optional uint32 rd_lim = 3;
- optional uint32 is_vbif_rt = 4;
-}
-message MdpSsppChangeFtraceEvent {
- optional uint32 num = 1;
- optional uint32 play_cnt = 2;
- optional uint32 mixer = 3;
- optional uint32 stage = 4;
- optional uint32 flags = 5;
- optional uint32 format = 6;
- optional uint32 img_w = 7;
- optional uint32 img_h = 8;
- optional uint32 src_x = 9;
- optional uint32 src_y = 10;
- optional uint32 src_w = 11;
- optional uint32 src_h = 12;
- optional uint32 dst_x = 13;
- optional uint32 dst_y = 14;
- optional uint32 dst_w = 15;
- optional uint32 dst_h = 16;
-}
-message TracingMarkWriteFtraceEvent {
- optional int32 pid = 1;
- optional string trace_name = 2;
- optional uint32 trace_begin = 3;
-}
-message MdpCmdPingpongDoneFtraceEvent {
- optional uint32 ctl_num = 1;
- optional uint32 intf_num = 2;
- optional uint32 pp_num = 3;
- optional int32 koff_cnt = 4;
-}
-message MdpCompareBwFtraceEvent {
- optional uint64 new_ab = 1;
- optional uint64 new_ib = 2;
- optional uint64 new_wb = 3;
- optional uint64 old_ab = 4;
- optional uint64 old_ib = 5;
- optional uint64 old_wb = 6;
- optional uint32 params_changed = 7;
- optional uint32 update_bw = 8;
-}
-message MdpPerfSetPanicLutsFtraceEvent {
- optional uint32 pnum = 1;
- optional uint32 fmt = 2;
- optional uint32 mode = 3;
- optional uint32 panic_lut = 4;
- optional uint32 robust_lut = 5;
-}
-message MdpSsppSetFtraceEvent {
- optional uint32 num = 1;
- optional uint32 play_cnt = 2;
- optional uint32 mixer = 3;
- optional uint32 stage = 4;
- optional uint32 flags = 5;
- optional uint32 format = 6;
- optional uint32 img_w = 7;
- optional uint32 img_h = 8;
- optional uint32 src_x = 9;
- optional uint32 src_y = 10;
- optional uint32 src_w = 11;
- optional uint32 src_h = 12;
- optional uint32 dst_x = 13;
- optional uint32 dst_y = 14;
- optional uint32 dst_w = 15;
- optional uint32 dst_h = 16;
-}
-message MdpCmdReadptrDoneFtraceEvent {
- optional uint32 ctl_num = 1;
- optional int32 koff_cnt = 2;
-}
-message MdpMisrCrcFtraceEvent {
- optional uint32 block_id = 1;
- optional uint32 vsync_cnt = 2;
- optional uint32 crc = 3;
-}
-message MdpPerfSetQosLutsFtraceEvent {
- optional uint32 pnum = 1;
- optional uint32 fmt = 2;
- optional uint32 intf = 3;
- optional uint32 rot = 4;
- optional uint32 fl = 5;
- optional uint32 lut = 6;
- optional uint32 linear = 7;
-}
-message MdpTraceCounterFtraceEvent {
- optional int32 pid = 1;
- optional string counter_name = 2;
- optional int32 value = 3;
-}
-message MdpCmdReleaseBwFtraceEvent {
- optional uint32 ctl_num = 1;
-}
-message MdpMixerUpdateFtraceEvent {
- optional uint32 mixer_num = 1;
-}
-message MdpPerfSetWmLevelsFtraceEvent {
- optional uint32 pnum = 1;
- optional uint32 use_space = 2;
- optional uint32 priority_bytes = 3;
- optional uint32 wm0 = 4;
- optional uint32 wm1 = 5;
- optional uint32 wm2 = 6;
- optional uint32 mb_cnt = 7;
- optional uint32 mb_size = 8;
-}
-message MdpVideoUnderrunDoneFtraceEvent {
- optional uint32 ctl_num = 1;
- optional uint32 underrun_cnt = 2;
-}
-message MdpCmdWaitPingpongFtraceEvent {
- optional uint32 ctl_num = 1;
- optional int32 kickoff_cnt = 2;
-}
-message MdpPerfPrefillCalcFtraceEvent {
- optional uint32 pnum = 1;
- optional uint32 latency_buf = 2;
- optional uint32 ot = 3;
- optional uint32 y_buf = 4;
- optional uint32 y_scaler = 5;
- optional uint32 pp_lines = 6;
- optional uint32 pp_bytes = 7;
- optional uint32 post_sc = 8;
- optional uint32 fbc_bytes = 9;
- optional uint32 prefill_bytes = 10;
-}
-message MdpPerfUpdateBusFtraceEvent {
- optional int32 client = 1;
- optional uint64 ab_quota = 2;
- optional uint64 ib_quota = 3;
-}
-message RotatorBwAoAsContextFtraceEvent {
- optional uint32 state = 1;
-}
-
-// End of protos/perfetto/trace/ftrace/mdss.proto
-
-// Begin of protos/perfetto/trace/ftrace/mm_event.proto
-
-message MmEventRecordFtraceEvent {
- optional uint32 avg_lat = 1;
- optional uint32 count = 2;
- optional uint32 max_lat = 3;
- optional uint32 type = 4;
-}
-
-// End of protos/perfetto/trace/ftrace/mm_event.proto
-
-// Begin of protos/perfetto/trace/ftrace/oom.proto
-
-message OomScoreAdjUpdateFtraceEvent {
- optional string comm = 1;
- optional int32 oom_score_adj = 2;
- optional int32 pid = 3;
-}
-message MarkVictimFtraceEvent {
- optional int32 pid = 1;
-}
-
-// End of protos/perfetto/trace/ftrace/oom.proto
-
-// Begin of protos/perfetto/trace/ftrace/power.proto
-
-message CpuFrequencyFtraceEvent {
- optional uint32 state = 1;
- optional uint32 cpu_id = 2;
-}
-message CpuFrequencyLimitsFtraceEvent {
- optional uint32 min_freq = 1;
- optional uint32 max_freq = 2;
- optional uint32 cpu_id = 3;
-}
-message CpuIdleFtraceEvent {
- optional uint32 state = 1;
- optional uint32 cpu_id = 2;
-}
-message ClockEnableFtraceEvent {
- optional string name = 1;
- optional uint64 state = 2;
- optional uint64 cpu_id = 3;
-}
-message ClockDisableFtraceEvent {
- optional string name = 1;
- optional uint64 state = 2;
- optional uint64 cpu_id = 3;
-}
-message ClockSetRateFtraceEvent {
- optional string name = 1;
- optional uint64 state = 2;
- optional uint64 cpu_id = 3;
-}
-message SuspendResumeFtraceEvent {
- optional string action = 1;
- optional int32 val = 2;
- optional uint32 start = 3;
-}
-message GpuFrequencyFtraceEvent {
- optional uint32 gpu_id = 1;
- optional uint32 state = 2;
-}
-
-// End of protos/perfetto/trace/ftrace/power.proto
-
-// Begin of protos/perfetto/trace/ftrace/raw_syscalls.proto
-
-message SysEnterFtraceEvent {
- optional int64 id = 1;
-}
-message SysExitFtraceEvent {
- optional int64 id = 1;
- optional int64 ret = 2;
-}
-
-// End of protos/perfetto/trace/ftrace/raw_syscalls.proto
-
-// Begin of protos/perfetto/trace/ftrace/regulator.proto
-
-message RegulatorDisableFtraceEvent {
- optional string name = 1;
-}
-message RegulatorDisableCompleteFtraceEvent {
- optional string name = 1;
-}
-message RegulatorEnableFtraceEvent {
- optional string name = 1;
-}
-message RegulatorEnableCompleteFtraceEvent {
- optional string name = 1;
-}
-message RegulatorEnableDelayFtraceEvent {
- optional string name = 1;
-}
-message RegulatorSetVoltageFtraceEvent {
- optional string name = 1;
- optional int32 min = 2;
- optional int32 max = 3;
-}
-message RegulatorSetVoltageCompleteFtraceEvent {
- optional string name = 1;
- optional uint32 val = 2;
-}
-
-// End of protos/perfetto/trace/ftrace/regulator.proto
-
-// Begin of protos/perfetto/trace/ftrace/sched.proto
-
-message SchedSwitchFtraceEvent {
- optional string prev_comm = 1;
- optional int32 prev_pid = 2;
- optional int32 prev_prio = 3;
- optional int64 prev_state = 4;
- optional string next_comm = 5;
- optional int32 next_pid = 6;
- optional int32 next_prio = 7;
-}
-message SchedWakeupFtraceEvent {
- optional string comm = 1;
- optional int32 pid = 2;
- optional int32 prio = 3;
- optional int32 success = 4;
- optional int32 target_cpu = 5;
-}
-message SchedBlockedReasonFtraceEvent {
- optional int32 pid = 1;
- optional uint64 caller = 2;
- optional uint32 io_wait = 3;
-}
-message SchedCpuHotplugFtraceEvent {
- optional int32 affected_cpu = 1;
- optional int32 error = 2;
- optional int32 status = 3;
-}
-message SchedWakingFtraceEvent {
- optional string comm = 1;
- optional int32 pid = 2;
- optional int32 prio = 3;
- optional int32 success = 4;
- optional int32 target_cpu = 5;
-}
-message SchedWakeupNewFtraceEvent {
- optional string comm = 1;
- optional int32 pid = 2;
- optional int32 prio = 3;
- optional int32 success = 4;
- optional int32 target_cpu = 5;
-}
-message SchedProcessExecFtraceEvent {
- optional string filename = 1;
- optional int32 pid = 2;
- optional int32 old_pid = 3;
-}
-message SchedProcessExitFtraceEvent {
- optional string comm = 1;
- optional int32 pid = 2;
- optional int32 tgid = 3;
- optional int32 prio = 4;
-}
-message SchedProcessForkFtraceEvent {
- optional string parent_comm = 1;
- optional int32 parent_pid = 2;
- optional string child_comm = 3;
- optional int32 child_pid = 4;
-}
-message SchedProcessFreeFtraceEvent {
- optional string comm = 1;
- optional int32 pid = 2;
- optional int32 prio = 3;
-}
-message SchedProcessHangFtraceEvent {
- optional string comm = 1;
- optional int32 pid = 2;
-}
-message SchedProcessWaitFtraceEvent {
- optional string comm = 1;
- optional int32 pid = 2;
- optional int32 prio = 3;
-}
-message SchedPiSetprioFtraceEvent {
- optional string comm = 1;
- optional int32 newprio = 2;
- optional int32 oldprio = 3;
- optional int32 pid = 4;
-}
-
-// End of protos/perfetto/trace/ftrace/sched.proto
-
-// Begin of protos/perfetto/trace/ftrace/scm.proto
-
-message ScmCallStartFtraceEvent {
- optional uint32 arginfo = 1;
- optional uint64 x0 = 2;
- optional uint64 x5 = 3;
-}
-message ScmCallEndFtraceEvent {}
-
-// End of protos/perfetto/trace/ftrace/scm.proto
-
-// Begin of protos/perfetto/trace/ftrace/sde.proto
-
-message SdeTracingMarkWriteFtraceEvent {
- optional int32 pid = 1;
- optional string trace_name = 2;
- optional uint32 trace_type = 3;
- optional int32 value = 4;
- optional uint32 trace_begin = 5;
-}
-message SdeSdeEvtlogFtraceEvent {
- optional string evtlog_tag = 1;
- optional int32 pid = 2;
- optional uint32 tag_id = 3;
-}
-message SdeSdePerfCalcCrtcFtraceEvent {
- optional uint64 bw_ctl_ebi = 1;
- optional uint64 bw_ctl_llcc = 2;
- optional uint64 bw_ctl_mnoc = 3;
- optional uint32 core_clk_rate = 4;
- optional uint32 crtc = 5;
- optional uint64 ib_ebi = 6;
- optional uint64 ib_llcc = 7;
- optional uint64 ib_mnoc = 8;
-}
-message SdeSdePerfCrtcUpdateFtraceEvent {
- optional uint64 bw_ctl_ebi = 1;
- optional uint64 bw_ctl_llcc = 2;
- optional uint64 bw_ctl_mnoc = 3;
- optional uint32 core_clk_rate = 4;
- optional uint32 crtc = 5;
- optional int32 params = 6;
- optional uint64 per_pipe_ib_ebi = 7;
- optional uint64 per_pipe_ib_llcc = 8;
- optional uint64 per_pipe_ib_mnoc = 9;
- optional uint32 stop_req = 10;
- optional uint32 update_bus = 11;
- optional uint32 update_clk = 12;
-}
-message SdeSdePerfSetQosLutsFtraceEvent {
- optional uint32 fl = 1;
- optional uint32 fmt = 2;
- optional uint64 lut = 3;
- optional uint32 lut_usage = 4;
- optional uint32 pnum = 5;
- optional uint32 rt = 6;
-}
-message SdeSdePerfUpdateBusFtraceEvent {
- optional uint64 ab_quota = 1;
- optional uint32 bus_id = 2;
- optional int32 client = 3;
- optional uint64 ib_quota = 4;
-}
-
-// End of protos/perfetto/trace/ftrace/sde.proto
-
-// Begin of protos/perfetto/trace/ftrace/signal.proto
-
-message SignalDeliverFtraceEvent {
- optional int32 code = 1;
- optional uint64 sa_flags = 2;
- optional int32 sig = 3;
-}
-message SignalGenerateFtraceEvent {
- optional int32 code = 1;
- optional string comm = 2;
- optional int32 group = 3;
- optional int32 pid = 4;
- optional int32 result = 5;
- optional int32 sig = 6;
-}
-
-// End of protos/perfetto/trace/ftrace/signal.proto
-
-// Begin of protos/perfetto/trace/ftrace/sync.proto
-
-message SyncPtFtraceEvent {
- optional string timeline = 1;
- optional string value = 2;
-}
-message SyncTimelineFtraceEvent {
- optional string name = 1;
- optional string value = 2;
-}
-message SyncWaitFtraceEvent {
- optional string name = 1;
- optional int32 status = 2;
- optional uint32 begin = 3;
-}
-
-// End of protos/perfetto/trace/ftrace/sync.proto
-
-// Begin of protos/perfetto/trace/ftrace/systrace.proto
-
-message ZeroFtraceEvent {
- optional int32 flag = 1;
- optional string name = 2;
- optional int32 pid = 3;
- optional int64 value = 4;
-}
-
-// End of protos/perfetto/trace/ftrace/systrace.proto
-
-// Begin of protos/perfetto/trace/ftrace/task.proto
-
-message TaskNewtaskFtraceEvent {
- optional int32 pid = 1;
- optional string comm = 2;
- optional uint64 clone_flags = 3;
- optional int32 oom_score_adj = 4;
-}
-message TaskRenameFtraceEvent {
- optional int32 pid = 1;
- optional string oldcomm = 2;
- optional string newcomm = 3;
- optional int32 oom_score_adj = 4;
-}
-
-// End of protos/perfetto/trace/ftrace/task.proto
-
-// Begin of protos/perfetto/trace/ftrace/thermal.proto
-
-message ThermalTemperatureFtraceEvent {
- optional int32 id = 1;
- optional int32 temp = 2;
- optional int32 temp_prev = 3;
- optional string thermal_zone = 4;
-}
-message CdevUpdateFtraceEvent {
- optional uint64 target = 1;
- optional string type = 2;
-}
-
-// End of protos/perfetto/trace/ftrace/thermal.proto
-
-// Begin of protos/perfetto/trace/ftrace/vmscan.proto
-
-message MmVmscanDirectReclaimBeginFtraceEvent {
- optional int32 order = 1;
- optional int32 may_writepage = 2;
- optional uint32 gfp_flags = 3;
-}
-message MmVmscanDirectReclaimEndFtraceEvent {
- optional uint64 nr_reclaimed = 1;
-}
-message MmVmscanKswapdWakeFtraceEvent {
- optional int32 nid = 1;
- optional int32 order = 2;
-}
-message MmVmscanKswapdSleepFtraceEvent {
- optional int32 nid = 1;
-}
-
-// End of protos/perfetto/trace/ftrace/vmscan.proto
-
-// Begin of protos/perfetto/trace/ftrace/workqueue.proto
-
-message WorkqueueActivateWorkFtraceEvent {
- optional uint64 work = 1;
-}
-message WorkqueueExecuteEndFtraceEvent {
- optional uint64 work = 1;
-}
-message WorkqueueExecuteStartFtraceEvent {
- optional uint64 work = 1;
- optional uint64 function = 2;
-}
-message WorkqueueQueueWorkFtraceEvent {
- optional uint64 work = 1;
- optional uint64 function = 2;
- optional uint64 workqueue = 3;
- optional uint32 req_cpu = 4;
- optional uint32 cpu = 5;
-}
-
-// End of protos/perfetto/trace/ftrace/workqueue.proto
-
-// Begin of protos/perfetto/trace/ftrace/ftrace_event.proto
-
-message FtraceEvent {
- // Nanoseconds since an epoch.
- // Epoch is configurable by writing into trace_clock.
- // By default this timestamp is CPU local.
- // TODO: Figure out a story for reconciling the various clocks.
- optional uint64 timestamp = 1;
-
- // Kernel pid (do not confuse with userspace pid aka tgid)
- optional uint32 pid = 2;
-
- oneof event {
- PrintFtraceEvent print = 3;
- SchedSwitchFtraceEvent sched_switch = 4;
- // removed field with id 5;
- // removed field with id 6;
- // removed field with id 7;
- // removed field with id 8;
- // removed field with id 9;
- // removed field with id 10;
- CpuFrequencyFtraceEvent cpu_frequency = 11;
- CpuFrequencyLimitsFtraceEvent cpu_frequency_limits = 12;
- CpuIdleFtraceEvent cpu_idle = 13;
- ClockEnableFtraceEvent clock_enable = 14;
- ClockDisableFtraceEvent clock_disable = 15;
- ClockSetRateFtraceEvent clock_set_rate = 16;
- SchedWakeupFtraceEvent sched_wakeup = 17;
- SchedBlockedReasonFtraceEvent sched_blocked_reason = 18;
- SchedCpuHotplugFtraceEvent sched_cpu_hotplug = 19;
- SchedWakingFtraceEvent sched_waking = 20;
- IpiEntryFtraceEvent ipi_entry = 21;
- IpiExitFtraceEvent ipi_exit = 22;
- IpiRaiseFtraceEvent ipi_raise = 23;
- SoftirqEntryFtraceEvent softirq_entry = 24;
- SoftirqExitFtraceEvent softirq_exit = 25;
- SoftirqRaiseFtraceEvent softirq_raise = 26;
- I2cReadFtraceEvent i2c_read = 27;
- I2cWriteFtraceEvent i2c_write = 28;
- I2cResultFtraceEvent i2c_result = 29;
- I2cReplyFtraceEvent i2c_reply = 30;
- SmbusReadFtraceEvent smbus_read = 31;
- SmbusWriteFtraceEvent smbus_write = 32;
- SmbusResultFtraceEvent smbus_result = 33;
- SmbusReplyFtraceEvent smbus_reply = 34;
- LowmemoryKillFtraceEvent lowmemory_kill = 35;
- IrqHandlerEntryFtraceEvent irq_handler_entry = 36;
- IrqHandlerExitFtraceEvent irq_handler_exit = 37;
- SyncPtFtraceEvent sync_pt = 38;
- SyncTimelineFtraceEvent sync_timeline = 39;
- SyncWaitFtraceEvent sync_wait = 40;
- Ext4DaWriteBeginFtraceEvent ext4_da_write_begin = 41;
- Ext4DaWriteEndFtraceEvent ext4_da_write_end = 42;
- Ext4SyncFileEnterFtraceEvent ext4_sync_file_enter = 43;
- Ext4SyncFileExitFtraceEvent ext4_sync_file_exit = 44;
- BlockRqIssueFtraceEvent block_rq_issue = 45;
- MmVmscanDirectReclaimBeginFtraceEvent mm_vmscan_direct_reclaim_begin = 46;
- MmVmscanDirectReclaimEndFtraceEvent mm_vmscan_direct_reclaim_end = 47;
- MmVmscanKswapdWakeFtraceEvent mm_vmscan_kswapd_wake = 48;
- MmVmscanKswapdSleepFtraceEvent mm_vmscan_kswapd_sleep = 49;
- BinderTransactionFtraceEvent binder_transaction = 50;
- BinderTransactionReceivedFtraceEvent binder_transaction_received = 51;
- BinderSetPriorityFtraceEvent binder_set_priority = 52;
- BinderLockFtraceEvent binder_lock = 53;
- BinderLockedFtraceEvent binder_locked = 54;
- BinderUnlockFtraceEvent binder_unlock = 55;
- WorkqueueActivateWorkFtraceEvent workqueue_activate_work = 56;
- WorkqueueExecuteEndFtraceEvent workqueue_execute_end = 57;
- WorkqueueExecuteStartFtraceEvent workqueue_execute_start = 58;
- WorkqueueQueueWorkFtraceEvent workqueue_queue_work = 59;
- RegulatorDisableFtraceEvent regulator_disable = 60;
- RegulatorDisableCompleteFtraceEvent regulator_disable_complete = 61;
- RegulatorEnableFtraceEvent regulator_enable = 62;
- RegulatorEnableCompleteFtraceEvent regulator_enable_complete = 63;
- RegulatorEnableDelayFtraceEvent regulator_enable_delay = 64;
- RegulatorSetVoltageFtraceEvent regulator_set_voltage = 65;
- RegulatorSetVoltageCompleteFtraceEvent regulator_set_voltage_complete = 66;
- CgroupAttachTaskFtraceEvent cgroup_attach_task = 67;
- CgroupMkdirFtraceEvent cgroup_mkdir = 68;
- CgroupRemountFtraceEvent cgroup_remount = 69;
- CgroupRmdirFtraceEvent cgroup_rmdir = 70;
- CgroupTransferTasksFtraceEvent cgroup_transfer_tasks = 71;
- CgroupDestroyRootFtraceEvent cgroup_destroy_root = 72;
- CgroupReleaseFtraceEvent cgroup_release = 73;
- CgroupRenameFtraceEvent cgroup_rename = 74;
- CgroupSetupRootFtraceEvent cgroup_setup_root = 75;
- MdpCmdKickoffFtraceEvent mdp_cmd_kickoff = 76;
- MdpCommitFtraceEvent mdp_commit = 77;
- MdpPerfSetOtFtraceEvent mdp_perf_set_ot = 78;
- MdpSsppChangeFtraceEvent mdp_sspp_change = 79;
- TracingMarkWriteFtraceEvent tracing_mark_write = 80;
- MdpCmdPingpongDoneFtraceEvent mdp_cmd_pingpong_done = 81;
- MdpCompareBwFtraceEvent mdp_compare_bw = 82;
- MdpPerfSetPanicLutsFtraceEvent mdp_perf_set_panic_luts = 83;
- MdpSsppSetFtraceEvent mdp_sspp_set = 84;
- MdpCmdReadptrDoneFtraceEvent mdp_cmd_readptr_done = 85;
- MdpMisrCrcFtraceEvent mdp_misr_crc = 86;
- MdpPerfSetQosLutsFtraceEvent mdp_perf_set_qos_luts = 87;
- MdpTraceCounterFtraceEvent mdp_trace_counter = 88;
- MdpCmdReleaseBwFtraceEvent mdp_cmd_release_bw = 89;
- MdpMixerUpdateFtraceEvent mdp_mixer_update = 90;
- MdpPerfSetWmLevelsFtraceEvent mdp_perf_set_wm_levels = 91;
- MdpVideoUnderrunDoneFtraceEvent mdp_video_underrun_done = 92;
- MdpCmdWaitPingpongFtraceEvent mdp_cmd_wait_pingpong = 93;
- MdpPerfPrefillCalcFtraceEvent mdp_perf_prefill_calc = 94;
- MdpPerfUpdateBusFtraceEvent mdp_perf_update_bus = 95;
- RotatorBwAoAsContextFtraceEvent rotator_bw_ao_as_context = 96;
- MmFilemapAddToPageCacheFtraceEvent mm_filemap_add_to_page_cache = 97;
- MmFilemapDeleteFromPageCacheFtraceEvent mm_filemap_delete_from_page_cache = 98;
- MmCompactionBeginFtraceEvent mm_compaction_begin = 99;
- MmCompactionDeferCompactionFtraceEvent mm_compaction_defer_compaction = 100;
- MmCompactionDeferredFtraceEvent mm_compaction_deferred = 101;
- MmCompactionDeferResetFtraceEvent mm_compaction_defer_reset = 102;
- MmCompactionEndFtraceEvent mm_compaction_end = 103;
- MmCompactionFinishedFtraceEvent mm_compaction_finished = 104;
- MmCompactionIsolateFreepagesFtraceEvent mm_compaction_isolate_freepages = 105;
- MmCompactionIsolateMigratepagesFtraceEvent mm_compaction_isolate_migratepages = 106;
- MmCompactionKcompactdSleepFtraceEvent mm_compaction_kcompactd_sleep = 107;
- MmCompactionKcompactdWakeFtraceEvent mm_compaction_kcompactd_wake = 108;
- MmCompactionMigratepagesFtraceEvent mm_compaction_migratepages = 109;
- MmCompactionSuitableFtraceEvent mm_compaction_suitable = 110;
- MmCompactionTryToCompactPagesFtraceEvent mm_compaction_try_to_compact_pages = 111;
- MmCompactionWakeupKcompactdFtraceEvent mm_compaction_wakeup_kcompactd = 112;
- SuspendResumeFtraceEvent suspend_resume = 113;
- SchedWakeupNewFtraceEvent sched_wakeup_new = 114;
- BlockBioBackmergeFtraceEvent block_bio_backmerge = 115;
- BlockBioBounceFtraceEvent block_bio_bounce = 116;
- BlockBioCompleteFtraceEvent block_bio_complete = 117;
- BlockBioFrontmergeFtraceEvent block_bio_frontmerge = 118;
- BlockBioQueueFtraceEvent block_bio_queue = 119;
- BlockBioRemapFtraceEvent block_bio_remap = 120;
- BlockDirtyBufferFtraceEvent block_dirty_buffer = 121;
- BlockGetrqFtraceEvent block_getrq = 122;
- BlockPlugFtraceEvent block_plug = 123;
- BlockRqAbortFtraceEvent block_rq_abort = 124;
- BlockRqCompleteFtraceEvent block_rq_complete = 125;
- BlockRqInsertFtraceEvent block_rq_insert = 126;
- // removed field with id 127;
- BlockRqRemapFtraceEvent block_rq_remap = 128;
- BlockRqRequeueFtraceEvent block_rq_requeue = 129;
- BlockSleeprqFtraceEvent block_sleeprq = 130;
- BlockSplitFtraceEvent block_split = 131;
- BlockTouchBufferFtraceEvent block_touch_buffer = 132;
- BlockUnplugFtraceEvent block_unplug = 133;
- Ext4AllocDaBlocksFtraceEvent ext4_alloc_da_blocks = 134;
- Ext4AllocateBlocksFtraceEvent ext4_allocate_blocks = 135;
- Ext4AllocateInodeFtraceEvent ext4_allocate_inode = 136;
- Ext4BeginOrderedTruncateFtraceEvent ext4_begin_ordered_truncate = 137;
- Ext4CollapseRangeFtraceEvent ext4_collapse_range = 138;
- Ext4DaReleaseSpaceFtraceEvent ext4_da_release_space = 139;
- Ext4DaReserveSpaceFtraceEvent ext4_da_reserve_space = 140;
- Ext4DaUpdateReserveSpaceFtraceEvent ext4_da_update_reserve_space = 141;
- Ext4DaWritePagesFtraceEvent ext4_da_write_pages = 142;
- Ext4DaWritePagesExtentFtraceEvent ext4_da_write_pages_extent = 143;
- Ext4DirectIOEnterFtraceEvent ext4_direct_IO_enter = 144;
- Ext4DirectIOExitFtraceEvent ext4_direct_IO_exit = 145;
- Ext4DiscardBlocksFtraceEvent ext4_discard_blocks = 146;
- Ext4DiscardPreallocationsFtraceEvent ext4_discard_preallocations = 147;
- Ext4DropInodeFtraceEvent ext4_drop_inode = 148;
- Ext4EsCacheExtentFtraceEvent ext4_es_cache_extent = 149;
- Ext4EsFindDelayedExtentRangeEnterFtraceEvent ext4_es_find_delayed_extent_range_enter = 150;
- Ext4EsFindDelayedExtentRangeExitFtraceEvent ext4_es_find_delayed_extent_range_exit = 151;
- Ext4EsInsertExtentFtraceEvent ext4_es_insert_extent = 152;
- Ext4EsLookupExtentEnterFtraceEvent ext4_es_lookup_extent_enter = 153;
- Ext4EsLookupExtentExitFtraceEvent ext4_es_lookup_extent_exit = 154;
- Ext4EsRemoveExtentFtraceEvent ext4_es_remove_extent = 155;
- Ext4EsShrinkFtraceEvent ext4_es_shrink = 156;
- Ext4EsShrinkCountFtraceEvent ext4_es_shrink_count = 157;
- Ext4EsShrinkScanEnterFtraceEvent ext4_es_shrink_scan_enter = 158;
- Ext4EsShrinkScanExitFtraceEvent ext4_es_shrink_scan_exit = 159;
- Ext4EvictInodeFtraceEvent ext4_evict_inode = 160;
- Ext4ExtConvertToInitializedEnterFtraceEvent ext4_ext_convert_to_initialized_enter = 161;
- Ext4ExtConvertToInitializedFastpathFtraceEvent ext4_ext_convert_to_initialized_fastpath =
- 162;
- Ext4ExtHandleUnwrittenExtentsFtraceEvent ext4_ext_handle_unwritten_extents = 163;
- Ext4ExtInCacheFtraceEvent ext4_ext_in_cache = 164;
- Ext4ExtLoadExtentFtraceEvent ext4_ext_load_extent = 165;
- Ext4ExtMapBlocksEnterFtraceEvent ext4_ext_map_blocks_enter = 166;
- Ext4ExtMapBlocksExitFtraceEvent ext4_ext_map_blocks_exit = 167;
- Ext4ExtPutInCacheFtraceEvent ext4_ext_put_in_cache = 168;
- Ext4ExtRemoveSpaceFtraceEvent ext4_ext_remove_space = 169;
- Ext4ExtRemoveSpaceDoneFtraceEvent ext4_ext_remove_space_done = 170;
- Ext4ExtRmIdxFtraceEvent ext4_ext_rm_idx = 171;
- Ext4ExtRmLeafFtraceEvent ext4_ext_rm_leaf = 172;
- Ext4ExtShowExtentFtraceEvent ext4_ext_show_extent = 173;
- Ext4FallocateEnterFtraceEvent ext4_fallocate_enter = 174;
- Ext4FallocateExitFtraceEvent ext4_fallocate_exit = 175;
- Ext4FindDelallocRangeFtraceEvent ext4_find_delalloc_range = 176;
- Ext4ForgetFtraceEvent ext4_forget = 177;
- Ext4FreeBlocksFtraceEvent ext4_free_blocks = 178;
- Ext4FreeInodeFtraceEvent ext4_free_inode = 179;
- Ext4GetImpliedClusterAllocExitFtraceEvent ext4_get_implied_cluster_alloc_exit = 180;
- Ext4GetReservedClusterAllocFtraceEvent ext4_get_reserved_cluster_alloc = 181;
- Ext4IndMapBlocksEnterFtraceEvent ext4_ind_map_blocks_enter = 182;
- Ext4IndMapBlocksExitFtraceEvent ext4_ind_map_blocks_exit = 183;
- Ext4InsertRangeFtraceEvent ext4_insert_range = 184;
- Ext4InvalidatepageFtraceEvent ext4_invalidatepage = 185;
- Ext4JournalStartFtraceEvent ext4_journal_start = 186;
- Ext4JournalStartReservedFtraceEvent ext4_journal_start_reserved = 187;
- Ext4JournalledInvalidatepageFtraceEvent ext4_journalled_invalidatepage = 188;
- Ext4JournalledWriteEndFtraceEvent ext4_journalled_write_end = 189;
- Ext4LoadInodeFtraceEvent ext4_load_inode = 190;
- Ext4LoadInodeBitmapFtraceEvent ext4_load_inode_bitmap = 191;
- Ext4MarkInodeDirtyFtraceEvent ext4_mark_inode_dirty = 192;
- Ext4MbBitmapLoadFtraceEvent ext4_mb_bitmap_load = 193;
- Ext4MbBuddyBitmapLoadFtraceEvent ext4_mb_buddy_bitmap_load = 194;
- Ext4MbDiscardPreallocationsFtraceEvent ext4_mb_discard_preallocations = 195;
- Ext4MbNewGroupPaFtraceEvent ext4_mb_new_group_pa = 196;
- Ext4MbNewInodePaFtraceEvent ext4_mb_new_inode_pa = 197;
- Ext4MbReleaseGroupPaFtraceEvent ext4_mb_release_group_pa = 198;
- Ext4MbReleaseInodePaFtraceEvent ext4_mb_release_inode_pa = 199;
- Ext4MballocAllocFtraceEvent ext4_mballoc_alloc = 200;
- Ext4MballocDiscardFtraceEvent ext4_mballoc_discard = 201;
- Ext4MballocFreeFtraceEvent ext4_mballoc_free = 202;
- Ext4MballocPreallocFtraceEvent ext4_mballoc_prealloc = 203;
- Ext4OtherInodeUpdateTimeFtraceEvent ext4_other_inode_update_time = 204;
- Ext4PunchHoleFtraceEvent ext4_punch_hole = 205;
- Ext4ReadBlockBitmapLoadFtraceEvent ext4_read_block_bitmap_load = 206;
- Ext4ReadpageFtraceEvent ext4_readpage = 207;
- Ext4ReleasepageFtraceEvent ext4_releasepage = 208;
- Ext4RemoveBlocksFtraceEvent ext4_remove_blocks = 209;
- Ext4RequestBlocksFtraceEvent ext4_request_blocks = 210;
- Ext4RequestInodeFtraceEvent ext4_request_inode = 211;
- Ext4SyncFsFtraceEvent ext4_sync_fs = 212;
- Ext4TrimAllFreeFtraceEvent ext4_trim_all_free = 213;
- Ext4TrimExtentFtraceEvent ext4_trim_extent = 214;
- Ext4TruncateEnterFtraceEvent ext4_truncate_enter = 215;
- Ext4TruncateExitFtraceEvent ext4_truncate_exit = 216;
- Ext4UnlinkEnterFtraceEvent ext4_unlink_enter = 217;
- Ext4UnlinkExitFtraceEvent ext4_unlink_exit = 218;
- Ext4WriteBeginFtraceEvent ext4_write_begin = 219;
- // removed field with id 220;
- // removed field with id 221;
- // removed field with id 222;
- // removed field with id 223;
- // removed field with id 224;
- // removed field with id 225;
- // removed field with id 226;
- // removed field with id 227;
- // removed field with id 228;
- // removed field with id 229;
- Ext4WriteEndFtraceEvent ext4_write_end = 230;
- Ext4WritepageFtraceEvent ext4_writepage = 231;
- Ext4WritepagesFtraceEvent ext4_writepages = 232;
- Ext4WritepagesResultFtraceEvent ext4_writepages_result = 233;
- Ext4ZeroRangeFtraceEvent ext4_zero_range = 234;
- TaskNewtaskFtraceEvent task_newtask = 235;
- TaskRenameFtraceEvent task_rename = 236;
- SchedProcessExecFtraceEvent sched_process_exec = 237;
- SchedProcessExitFtraceEvent sched_process_exit = 238;
- SchedProcessForkFtraceEvent sched_process_fork = 239;
- SchedProcessFreeFtraceEvent sched_process_free = 240;
- SchedProcessHangFtraceEvent sched_process_hang = 241;
- SchedProcessWaitFtraceEvent sched_process_wait = 242;
- F2fsDoSubmitBioFtraceEvent f2fs_do_submit_bio = 243;
- F2fsEvictInodeFtraceEvent f2fs_evict_inode = 244;
- F2fsFallocateFtraceEvent f2fs_fallocate = 245;
- F2fsGetDataBlockFtraceEvent f2fs_get_data_block = 246;
- F2fsGetVictimFtraceEvent f2fs_get_victim = 247;
- F2fsIgetFtraceEvent f2fs_iget = 248;
- F2fsIgetExitFtraceEvent f2fs_iget_exit = 249;
- F2fsNewInodeFtraceEvent f2fs_new_inode = 250;
- F2fsReadpageFtraceEvent f2fs_readpage = 251;
- F2fsReserveNewBlockFtraceEvent f2fs_reserve_new_block = 252;
- F2fsSetPageDirtyFtraceEvent f2fs_set_page_dirty = 253;
- F2fsSubmitWritePageFtraceEvent f2fs_submit_write_page = 254;
- F2fsSyncFileEnterFtraceEvent f2fs_sync_file_enter = 255;
- F2fsSyncFileExitFtraceEvent f2fs_sync_file_exit = 256;
- F2fsSyncFsFtraceEvent f2fs_sync_fs = 257;
- F2fsTruncateFtraceEvent f2fs_truncate = 258;
- F2fsTruncateBlocksEnterFtraceEvent f2fs_truncate_blocks_enter = 259;
- F2fsTruncateBlocksExitFtraceEvent f2fs_truncate_blocks_exit = 260;
- F2fsTruncateDataBlocksRangeFtraceEvent f2fs_truncate_data_blocks_range = 261;
- F2fsTruncateInodeBlocksEnterFtraceEvent f2fs_truncate_inode_blocks_enter = 262;
- F2fsTruncateInodeBlocksExitFtraceEvent f2fs_truncate_inode_blocks_exit = 263;
- F2fsTruncateNodeFtraceEvent f2fs_truncate_node = 264;
- F2fsTruncateNodesEnterFtraceEvent f2fs_truncate_nodes_enter = 265;
- F2fsTruncateNodesExitFtraceEvent f2fs_truncate_nodes_exit = 266;
- F2fsTruncatePartialNodesFtraceEvent f2fs_truncate_partial_nodes = 267;
- F2fsUnlinkEnterFtraceEvent f2fs_unlink_enter = 268;
- F2fsUnlinkExitFtraceEvent f2fs_unlink_exit = 269;
- F2fsVmPageMkwriteFtraceEvent f2fs_vm_page_mkwrite = 270;
- F2fsWriteBeginFtraceEvent f2fs_write_begin = 271;
- F2fsWriteCheckpointFtraceEvent f2fs_write_checkpoint = 272;
- F2fsWriteEndFtraceEvent f2fs_write_end = 273;
- AllocPagesIommuEndFtraceEvent alloc_pages_iommu_end = 274;
- AllocPagesIommuFailFtraceEvent alloc_pages_iommu_fail = 275;
- AllocPagesIommuStartFtraceEvent alloc_pages_iommu_start = 276;
- AllocPagesSysEndFtraceEvent alloc_pages_sys_end = 277;
- AllocPagesSysFailFtraceEvent alloc_pages_sys_fail = 278;
- AllocPagesSysStartFtraceEvent alloc_pages_sys_start = 279;
- DmaAllocContiguousRetryFtraceEvent dma_alloc_contiguous_retry = 280;
- IommuMapRangeFtraceEvent iommu_map_range = 281;
- IommuSecPtblMapRangeEndFtraceEvent iommu_sec_ptbl_map_range_end = 282;
- IommuSecPtblMapRangeStartFtraceEvent iommu_sec_ptbl_map_range_start = 283;
- IonAllocBufferEndFtraceEvent ion_alloc_buffer_end = 284;
- IonAllocBufferFailFtraceEvent ion_alloc_buffer_fail = 285;
- IonAllocBufferFallbackFtraceEvent ion_alloc_buffer_fallback = 286;
- IonAllocBufferStartFtraceEvent ion_alloc_buffer_start = 287;
- IonCpAllocRetryFtraceEvent ion_cp_alloc_retry = 288;
- IonCpSecureBufferEndFtraceEvent ion_cp_secure_buffer_end = 289;
- IonCpSecureBufferStartFtraceEvent ion_cp_secure_buffer_start = 290;
- IonPrefetchingFtraceEvent ion_prefetching = 291;
- IonSecureCmaAddToPoolEndFtraceEvent ion_secure_cma_add_to_pool_end = 292;
- IonSecureCmaAddToPoolStartFtraceEvent ion_secure_cma_add_to_pool_start = 293;
- IonSecureCmaAllocateEndFtraceEvent ion_secure_cma_allocate_end = 294;
- IonSecureCmaAllocateStartFtraceEvent ion_secure_cma_allocate_start = 295;
- IonSecureCmaShrinkPoolEndFtraceEvent ion_secure_cma_shrink_pool_end = 296;
- IonSecureCmaShrinkPoolStartFtraceEvent ion_secure_cma_shrink_pool_start = 297;
- KfreeFtraceEvent kfree = 298;
- KmallocFtraceEvent kmalloc = 299;
- KmallocNodeFtraceEvent kmalloc_node = 300;
- KmemCacheAllocFtraceEvent kmem_cache_alloc = 301;
- KmemCacheAllocNodeFtraceEvent kmem_cache_alloc_node = 302;
- KmemCacheFreeFtraceEvent kmem_cache_free = 303;
- MigratePagesEndFtraceEvent migrate_pages_end = 304;
- MigratePagesStartFtraceEvent migrate_pages_start = 305;
- MigrateRetryFtraceEvent migrate_retry = 306;
- MmPageAllocFtraceEvent mm_page_alloc = 307;
- MmPageAllocExtfragFtraceEvent mm_page_alloc_extfrag = 308;
- MmPageAllocZoneLockedFtraceEvent mm_page_alloc_zone_locked = 309;
- MmPageFreeFtraceEvent mm_page_free = 310;
- MmPageFreeBatchedFtraceEvent mm_page_free_batched = 311;
- MmPagePcpuDrainFtraceEvent mm_page_pcpu_drain = 312;
- RssStatFtraceEvent rss_stat = 313;
- IonHeapShrinkFtraceEvent ion_heap_shrink = 314;
- IonHeapGrowFtraceEvent ion_heap_grow = 315;
- FenceInitFtraceEvent fence_init = 316;
- FenceDestroyFtraceEvent fence_destroy = 317;
- FenceEnableSignalFtraceEvent fence_enable_signal = 318;
- FenceSignaledFtraceEvent fence_signaled = 319;
- ClkEnableFtraceEvent clk_enable = 320;
- ClkDisableFtraceEvent clk_disable = 321;
- ClkSetRateFtraceEvent clk_set_rate = 322;
- BinderTransactionAllocBufFtraceEvent binder_transaction_alloc_buf = 323;
- SignalDeliverFtraceEvent signal_deliver = 324;
- SignalGenerateFtraceEvent signal_generate = 325;
- OomScoreAdjUpdateFtraceEvent oom_score_adj_update = 326;
- GenericFtraceEvent generic = 327;
- MmEventRecordFtraceEvent mm_event_record = 328;
- SysEnterFtraceEvent sys_enter = 329;
- SysExitFtraceEvent sys_exit = 330;
- ZeroFtraceEvent zero = 331;
- GpuFrequencyFtraceEvent gpu_frequency = 332;
- SdeTracingMarkWriteFtraceEvent sde_tracing_mark_write = 333;
- MarkVictimFtraceEvent mark_victim = 334;
- IonStatFtraceEvent ion_stat = 335;
- IonBufferCreateFtraceEvent ion_buffer_create = 336;
- IonBufferDestroyFtraceEvent ion_buffer_destroy = 337;
- ScmCallStartFtraceEvent scm_call_start = 338;
- ScmCallEndFtraceEvent scm_call_end = 339;
- GpuMemTotalFtraceEvent gpu_mem_total = 340;
- ThermalTemperatureFtraceEvent thermal_temperature = 341;
- CdevUpdateFtraceEvent cdev_update = 342;
- CpuhpExitFtraceEvent cpuhp_exit = 343;
- CpuhpMultiEnterFtraceEvent cpuhp_multi_enter = 344;
- CpuhpEnterFtraceEvent cpuhp_enter = 345;
- CpuhpLatencyFtraceEvent cpuhp_latency = 346;
- FastrpcDmaStatFtraceEvent fastrpc_dma_stat = 347;
- DpuTracingMarkWriteFtraceEvent dpu_tracing_mark_write = 348;
- G2dTracingMarkWriteFtraceEvent g2d_tracing_mark_write = 349;
- MaliTracingMarkWriteFtraceEvent mali_tracing_mark_write = 350;
- DmaHeapStatFtraceEvent dma_heap_stat = 351;
- CpuhpPauseFtraceEvent cpuhp_pause = 352;
- SchedPiSetprioFtraceEvent sched_pi_setprio = 353;
- SdeSdeEvtlogFtraceEvent sde_sde_evtlog = 354;
- SdeSdePerfCalcCrtcFtraceEvent sde_sde_perf_calc_crtc = 355;
- SdeSdePerfCrtcUpdateFtraceEvent sde_sde_perf_crtc_update = 356;
- SdeSdePerfSetQosLutsFtraceEvent sde_sde_perf_set_qos_luts = 357;
- SdeSdePerfUpdateBusFtraceEvent sde_sde_perf_update_bus = 358;
- }
-}
-
-// End of protos/perfetto/trace/ftrace/ftrace_event.proto
-
-// Begin of protos/perfetto/trace/ftrace/ftrace_event_bundle.proto
-
-// The result of tracing one or more ftrace data pages from a single per-cpu
-// kernel ring buffer. If collating multiple pages' worth of events, all of
-// them come from contiguous pages, with no kernel data loss in between.
-message FtraceEventBundle {
- optional uint32 cpu = 1;
- repeated FtraceEvent event = 2;
- // Set to true if there was data loss between the last time we've read from
- // the corresponding per-cpu kernel buffer, and the earliest event recorded
- // in this bundle.
- optional bool lost_events = 3;
-
- // Optionally-enabled compact encoding of a batch of scheduling events. Only
- // a subset of events & their fields is recorded.
- // All fields (except comms) are stored in a structure-of-arrays form, one
- // entry in each repeated field per event.
- message CompactSched {
- // Interned table of unique strings for this bundle.
- repeated string intern_table = 5;
-
- // Delta-encoded timestamps across all sched_switch events within this
- // bundle. The first is absolute, each next one is relative to its
- // predecessor.
- repeated uint64 switch_timestamp = 1 [packed = true];
- repeated int64 switch_prev_state = 2 [packed = true];
- repeated int32 switch_next_pid = 3 [packed = true];
- repeated int32 switch_next_prio = 4 [packed = true];
- // One per event, index into |intern_table| corresponding to the
- // next_comm field of the event.
- repeated uint32 switch_next_comm_index = 6 [packed = true];
-
- // Delta-encoded timestamps across all sched_waking events within this
- // bundle. The first is absolute, each next one is relative to its
- // predecessor.
- repeated uint64 waking_timestamp = 7 [packed = true];
- repeated int32 waking_pid = 8 [packed = true];
- repeated int32 waking_target_cpu = 9 [packed = true];
- repeated int32 waking_prio = 10 [packed = true];
- // One per event, index into |intern_table| corresponding to the
- // comm field of the event.
- repeated uint32 waking_comm_index = 11 [packed = true];
- }
- optional CompactSched compact_sched = 4;
-}
-
-// End of protos/perfetto/trace/ftrace/ftrace_event_bundle.proto
-
-// Begin of protos/perfetto/trace/ftrace/ftrace_stats.proto
-
-// Per-CPU stats for the ftrace data source gathered from the kernel from
-// /sys/kernel/debug/tracing/per_cpu/cpuX/stats.
-message FtraceCpuStats {
- // CPU index.
- optional uint64 cpu = 1;
-
- // Number of entries still in the kernel buffer. Ideally this should be close
- // to zero, as events are consumed regularly and moved into the userspace
- // buffers (or file).
- optional uint64 entries = 2;
-
- // Number of events lost in kernel buffers due to overwriting of old events
- // before userspace had a chance to drain them.
- optional uint64 overrun = 3;
-
- // This should always be zero. If not the buffer size is way too small or
- // something went wrong with the tracer.
- optional uint64 commit_overrun = 4;
-
- // Bytes actually read (not overwritten).
- optional uint64 bytes_read = 5;
-
- // The timestamp for the oldest event still in the ring buffer.
- optional double oldest_event_ts = 6;
-
- // The current timestamp.
- optional double now_ts = 7;
-
- // If the kernel buffer has overwrite mode disabled, this will show the number
- // of new events that were lost because the buffer was full. This is similar
- // to |overrun| but only for the overwrite=false case.
- optional uint64 dropped_events = 8;
-
- // The number of events read.
- optional uint64 read_events = 9;
-}
-
-// Ftrace stats for all CPUs.
-message FtraceStats {
- enum Phase {
- UNSPECIFIED = 0;
- START_OF_TRACE = 1;
- END_OF_TRACE = 2;
- }
-
- // Tells when stats were sampled. There should be one sample at the beginning
- // of the trace and one sample at the end.
- optional Phase phase = 1;
-
- // Per-CPU stats (one entry for each CPU).
- repeated FtraceCpuStats cpu_stats = 2;
-
- // When FtraceConfig.symbolize_ksyms = true, this records the number of
- // symbols parsed from /proc/kallsyms, whether they have been seen in the
- // trace or not. It can be used to debug kptr_restrict or security-related
- // errors.
- // Note: this will be valid only when phase = END_OF_TRACE. The symbolizer is
- // initialized. When START_OF_TRACE is emitted it is not ready yet.
- optional uint32 kernel_symbols_parsed = 3;
-
- // The memory used by the kernel symbolizer (KernelSymbolMap.size_bytes()).
- optional uint32 kernel_symbols_mem_kb = 4;
-}
-
-// End of protos/perfetto/trace/ftrace/ftrace_stats.proto
-
-// Begin of protos/perfetto/trace/gpu/gpu_counter_event.proto
-
-message GpuCounterEvent {
- // The first trace packet of each session should include counter_spec.
- optional GpuCounterDescriptor counter_descriptor = 1;
-
- message GpuCounter {
- // required. Identifier for counter.
- optional uint32 counter_id = 1;
- // required. Value of the counter.
- oneof value {
- int64 int_value = 2;
- double double_value = 3;
- }
- }
- repeated GpuCounter counters = 2;
-
- // optional. Identifier for GPU in a multi-gpu device.
- optional int32 gpu_id = 3;
-}
-
-// End of protos/perfetto/trace/gpu/gpu_counter_event.proto
-
-// Begin of protos/perfetto/trace/gpu/gpu_log.proto
-
-// Message for logging events GPU data producer.
-message GpuLog {
- enum Severity {
- LOG_SEVERITY_UNSPECIFIED = 0;
- LOG_SEVERITY_VERBOSE = 1;
- LOG_SEVERITY_DEBUG = 2;
- LOG_SEVERITY_INFO = 3;
- LOG_SEVERITY_WARNING = 4;
- LOG_SEVERITY_ERROR = 5;
- };
- optional Severity severity = 1;
-
- optional string tag = 2;
-
- optional string log_message = 3;
-}
-
-// End of protos/perfetto/trace/gpu/gpu_log.proto
-
-// Begin of protos/perfetto/trace/gpu/gpu_render_stage_event.proto
-
-// next id: 15
-message GpuRenderStageEvent {
- // required. Unique ID for the event.
- optional uint64 event_id = 1;
-
- // optional. Duration of the event in nanoseconds. If unset, this is a
- // single time point event.
- optional uint64 duration = 2;
-
- // required. ID to a hardware queue description in the specifications.
- // InternedGpuRenderStageSpecification
- optional uint64 hw_queue_iid = 13;
-
- // required. ID to a render stage description in the specifications.
- // InternedGpuRenderStageSpecification
- optional uint64 stage_iid = 14;
-
- // optional. Identifier for GPU in a multi-gpu device.
- optional int32 gpu_id = 11;
-
- // required. Graphics context for the event.
- // For OpenGL, this is the GL context.
- // For Vulkan, this is the VkDevice.
- optional uint64 context = 5;
-
- // optional. The render target for this event.
- // For OpenGL, this is the GL frame buffer handle.
- // For Vulkan, this is the VkFrameBuffer handle.
- optional uint64 render_target_handle = 8;
-
- // optional. Submission ID generated by the UMD.
- // For OpenGL, the ID should map to an API submission (e.g., glFlush,
- // glFinish, eglSwapBufffers) event. The set of submissions to the HW due
- // to a single API submission should share the same ID.
- // For Vulkan, it should map 1:1 with a vkQueueSubmit.
- optional uint32 submission_id = 10;
-
- // optional. Additional data for the user. This may include attributes for
- // the event like resource ids, shaders, etc.
- message ExtraData {
- optional string name = 1;
- optional string value = 2;
- }
- repeated ExtraData extra_data = 6;
-
- // VULKAN SPECIFICS
-
- // optional. The Vulkan render pass handle.
- optional uint64 render_pass_handle = 9;
-
- // optional. A bit mask representing which render subpasses contributed to
- // this render stage event. Subpass index 0 is represented by setting the
- // LSB of the mask. Additional mask can be added for subpass index greater
- // than 63.
- repeated uint64 render_subpass_index_mask = 15;
-
- // optional. The Vulkan command buffer handle.
- optional uint64 command_buffer_handle = 12;
-
- // DEPRECATED
-
- // Deprecated. Use InternedGpuRenderStageSpecification instead.
- // The first trace packet of each session should include a Specifications
- // to enumerate *all* IDs that will be used. The timestamp of this packet
- // must be earlier than all other packets. Only one packet with Specifications
- // is expected.
- message Specifications {
- message ContextSpec {
- optional uint64 context = 1;
- optional int32 pid = 2;
- }
- optional ContextSpec context_spec = 1;
-
- message Description {
- optional string name = 1;
- optional string description = 2;
- }
-
- // Labels to categorize the hw Queue this event goes on.
- repeated Description hw_queue = 2;
-
- // Labels to categorize render stage(binning, render, compute etc).
- repeated Description stage = 3;
- }
- // Deprecated. Use hw_queue_iid and stage_iid to refer to
- // InternedGpuRenderStageSpecification instead.
- optional Specifications specifications = 7 [deprecated = true];
-
- // Deprecated. Use hw_queue_iid instead;
- optional int32 hw_queue_id = 3 [deprecated = true];
-
- // Deprecated. Use stage_iid instead;
- optional int32 stage_id = 4 [deprecated = true];
-
- // Extension for vendor's custom proto.
- extensions 100;
-}
-
-// Interned data.
-
-// The iid is the numeric value of either the GL Context or the VkDevice
-// handle.
-message InternedGraphicsContext {
- optional uint64 iid = 1;
- optional int32 pid = 2;
- enum Api {
- UNDEFINED = 0;
- OPEN_GL = 1;
- VULKAN = 2;
- OPEN_CL = 3;
- }
- optional Api api = 3;
-}
-
-message InternedGpuRenderStageSpecification {
- optional uint64 iid = 1;
- optional string name = 2;
- optional string description = 3;
-
- enum RenderStageCategory {
- OTHER = 0;
- GRAPHICS = 1;
- COMPUTE = 2;
- }
- optional RenderStageCategory category = 4;
-}
-
-// End of protos/perfetto/trace/gpu/gpu_render_stage_event.proto
-
-// Begin of protos/perfetto/trace/gpu/vulkan_api_event.proto
-
-// Message for recording the Vulkan call.
-message VulkanApiEvent {
- oneof event {
- VkDebugUtilsObjectName vk_debug_utils_object_name = 1;
- VkQueueSubmit vk_queue_submit = 2;
- }
-
- // For recording vkSetDebugUtilsObjectNameEXT and
- // vkDebugMarkerSetObjectNameEXT
- message VkDebugUtilsObjectName {
- optional uint32 pid = 1;
- optional uint64 vk_device = 2;
- // VkObjectType. Value must match
- // https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkObjectType.html.
- optional int32 object_type = 3;
- optional uint64 object = 4;
- optional string object_name = 5;
- }
-
- // For recording vkQueueSubmit call.
- message VkQueueSubmit {
- optional uint64 duration_ns = 1;
- optional uint32 pid = 2;
- optional uint32 tid = 3;
- optional uint64 vk_queue = 4;
- repeated uint64 vk_command_buffers = 5;
- // Submission ID. An identifier unique to each vkQueueSubmit call. This
- // submission_id must match GpuRenderStageEvent.submission_id if the
- // GpuRenderStageEvent is created due to this vkQueueSubmit.
- optional uint32 submission_id = 6;
- }
-}
-
-// End of protos/perfetto/trace/gpu/vulkan_api_event.proto
-
-// Begin of protos/perfetto/trace/gpu/vulkan_memory_event.proto
-
-// All the information that cannot be sent within a VulkanMemoryEvent message,
-// are sent as annotations to the main memory event. One example is the
-// properties of the object that consumes the allocated memory, for example, a
-// buffer or an image.
-// key_iid and string_iid are both interned strings. Original string value is
-// stored in vulkan_memory_keys from
-// protos/perfetto/trace/interned_data/interned_data.proto.
-message VulkanMemoryEventAnnotation {
- optional uint64 key_iid = 1;
- oneof value {
- int64 int_value = 2;
- double double_value = 3;
- uint64 string_iid = 4;
- }
-}
-
-// Each VulkanMemoryEvent encompasses information regarding one single function
-// call that results in reserving, binding or freeing host or GPU memory. There
-// is a special message type, ANNOTATIONS, which is used to communicate
-// information that are not directly related to a memory event, nonetheless are
-// essential to understand the memory usage. An example is the size and memory
-// types of the memory heaps.
-//
-// Next reserved id: 10 (up to 15).
-// Next id: 21.
-message VulkanMemoryEvent {
- enum Source {
- SOURCE_UNSPECIFIED = 0;
- SOURCE_DRIVER = 1;
- SOURCE_DEVICE = 2;
- SOURCE_DEVICE_MEMORY = 3;
- SOURCE_BUFFER = 4;
- SOURCE_IMAGE = 5;
- }
-
- enum Operation {
- OP_UNSPECIFIED = 0;
-
- // alloc, create
- OP_CREATE = 1;
-
- // free, destroy(non-bound)
- OP_DESTROY = 2;
-
- // bind buffer and image
- OP_BIND = 3;
-
- // destroy (bound)
- OP_DESTROY_BOUND = 4;
-
- // only annotations
- OP_ANNOTATIONS = 5;
- }
-
- enum AllocationScope {
- SCOPE_UNSPECIFIED = 0;
- SCOPE_COMMAND = 1;
- SCOPE_OBJECT = 2;
- SCOPE_CACHE = 3;
- SCOPE_DEVICE = 4;
- SCOPE_INSTANCE = 5;
- }
-
- optional Source source = 1;
- optional Operation operation = 2;
- optional int64 timestamp = 3;
- optional uint32 pid = 4;
- optional fixed64 memory_address = 5;
- optional uint64 memory_size = 6;
- // Interned string. Original string value is stored in function_names from
- // protos/perfetto/trace/interned_data/interned_data.proto.
- optional uint64 caller_iid = 7;
- optional AllocationScope allocation_scope = 8;
- // Extra related information, e.g., create configs, etc.
- repeated VulkanMemoryEventAnnotation annotations = 9;
-
- // Field IDs used for device memory (low sampling rate)
- optional fixed64 device = 16;
- optional fixed64 device_memory = 17;
- optional uint32 memory_type = 18;
- optional uint32 heap = 19;
- optional fixed64 object_handle = 20;
-}
-
-// End of protos/perfetto/trace/gpu/vulkan_memory_event.proto
-
-// Begin of protos/perfetto/trace/profiling/profile_common.proto
-
-// TODO(fmayer): Figure out naming thoroughout this file to get a
-// nomenclature that works between Windows and Linux.
-
-// The interning fields in this file can refer to 2 different intern tables,
-// depending on the message they are used in. If the interned fields are present
-// in ProfilePacket proto, then the intern tables included in the ProfilePacket
-// should be used. If the intered fields are present in the
-// StreamingProfilePacket proto, then the intern tables included in all of the
-// previous InternedData message with same sequence ID should be used.
-// TODO(fmayer): Move to the intern tables to a common location.
-message InternedString {
- optional uint64 iid = 1;
- optional bytes str = 2;
-}
-
-// A symbol field that is emitted after the trace is written. These tables would
-// be appended as the last packets in the trace that the profiler will use, so
-// that the actual trace need not be rewritten to symbolize the profiles.
-message ProfiledFrameSymbols {
- // Use the frame id as the interning key for the symbols.
- optional uint64 frame_iid = 1;
-
- // These are repeated because when inlining happens, multiple functions'
- // frames can be at a single address. Imagine function Foo calling the
- // std::vector<int> constructor, which gets inlined at 0xf00. We then get
- // both Foo and the std::vector<int> constructor when we symbolize the
- // address.
-
- // key to InternedString
- repeated uint64 function_name_id = 2;
-
- // key to InternedString
- repeated uint64 file_name_id = 3;
-
- repeated uint32 line_number = 4;
-}
-
-message Line {
- optional string function_name = 1;
- optional string source_file_name = 2;
- optional uint32 line_number = 3;
-}
-
-// Symbols for a given address in a module.
-message AddressSymbols {
- optional uint64 address = 1;
-
- // Source lines that correspond to this address.
- //
- // These are repeated because when inlining happens, multiple functions'
- // frames can be at a single address. Imagine function Foo calling the
- // std::vector<int> constructor, which gets inlined at 0xf00. We then get
- // both Foo and the std::vector<int> constructor when we symbolize the
- // address.
- repeated Line lines = 2;
-}
-
-// Symbols for addresses seen in a module.
-message ModuleSymbols {
- // Fully qualified path to the mapping.
- // E.g. /system/lib64/libc.so.
- optional string path = 1;
-
- // .note.gnu.build-id on Linux (not hex encoded).
- // uuid on MacOS.
- // Module GUID on Windows.
- optional string build_id = 2;
- repeated AddressSymbols address_symbols = 3;
-}
-
-message Mapping {
- // Interning key.
- optional uint64 iid = 1;
-
- // Interning key.
- optional uint64 build_id = 2;
-
- // The linker may create multiple memory mappings for the same shared
- // library.
- // This is so that the ELF header is mapped as read only, while the
- // executable memory is mapped as executable only.
- // The details of this depend on the linker, a possible mapping of an ELF
- // file is this:
- // +----------------------+
- // ELF |xxxxxxxxxyyyyyyyyyyyyy|
- // +---------+------------+
- // | |
- // | read | executable
- // v mapping v mapping
- // +----------------------+
- // Memory |xxxxxxxxx|yyyyyyyyyyyy|
- // +------------------+---+
- // ^ ^ ^
- // + + +
- // start exact relpc
- // offset offset 0x1800
- // 0x0000 0x1000
- //
- // exact_offset is the offset into the library file of this mapping.
- // start_offset is the offset into the library file of the first mapping
- // for that library. For native libraries (.so files) this should be 0.
-
- // This is not set on Android 10.
- optional uint64 exact_offset = 8;
-
- optional uint64 start_offset = 3;
- optional uint64 start = 4;
- optional uint64 end = 5;
- optional uint64 load_bias = 6;
-
- // E.g. ["system", "lib64", "libc.so"]
- // id of string.
- repeated uint64 path_string_ids = 7;
-}
-
-message Frame {
- // Interning key
- optional uint64 iid = 1;
-
- // E.g. "fopen"
- // id of string.
- optional uint64 function_name_id = 2;
-
- optional uint64 mapping_id = 3;
- optional uint64 rel_pc = 4;
-}
-
-message Callstack {
- optional uint64 iid = 1;
- // Frames of this callstack. Bottom frame first.
- repeated uint64 frame_ids = 2;
-}
-
-// End of protos/perfetto/trace/profiling/profile_common.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_histogram_sample.proto
-
-message HistogramName {
- optional uint64 iid = 1;
- optional string name = 2;
-}
-
-// An individual histogram sample logged via Chrome's UMA metrics system.
-message ChromeHistogramSample {
- // MD5 hash of the metric name. Either |name_hash| or |name|/|name_iid| or
- // both must be present.
- optional uint64 name_hash = 1;
- optional string name = 2;
- optional int64 sample = 3;
- // Interned HistogramName. Only one of |name|, |name_iid| can be set.
- optional uint64 name_iid = 4;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_histogram_sample.proto
-
-// Begin of protos/perfetto/trace/track_event/debug_annotation.proto
-
-// Proto representation of untyped key/value annotations provided in TRACE_EVENT
-// macros. Users of the Perfetto SDK should prefer to use the
-// perfetto::TracedValue API to fill these protos, rather than filling them
-// manually.
-//
-// Debug annotations are intended for debug use and are not considered a stable
-// API of the trace contents. Trace-based metrics that use debug annotation
-// values are prone to breakage, so please rely on typed TrackEvent fields for
-// these instead.
-//
-// DebugAnnotations support nested arrays and dictionaries. Each entry is
-// encoded as a single DebugAnnotation message. Only dictionary entries
-// set the "name" field. The TrackEvent message forms an implicit root
-// dictionary.
-//
-// Example TrackEvent with nested annotations:
-// track_event {
-// debug_annotations {
-// name: "foo"
-// dict_entries {
-// name: "a"
-// bool_value: true
-// }
-// dict_entries {
-// name: "b"
-// int_value: 123
-// }
-// }
-// debug_annotations {
-// name: "bar"
-// array_values {
-// string_value: "hello"
-// }
-// array_values {
-// string_value: "world"
-// }
-// }
-// }
-//
-// Next ID: 13.
-message DebugAnnotation {
- // Name fields are set only for dictionary entries.
- oneof name_field {
- // interned DebugAnnotationName.
- uint64 name_iid = 1;
- // non-interned variant.
- string name = 10;
- }
-
- oneof value {
- bool bool_value = 2;
- uint64 uint_value = 3;
- int64 int_value = 4;
- double double_value = 5;
- string string_value = 6;
- // Pointers are stored in a separate type as the JSON output treats them
- // differently from other uint64 values.
- uint64 pointer_value = 7;
-
- // Deprecated. Use dict_entries / array_values instead.
- NestedValue nested_value = 8;
-
- // Legacy instrumentation may not support conversion of nested data to
- // NestedValue yet.
- string legacy_json_value = 9;
- }
-
- repeated DebugAnnotation dict_entries = 11;
- repeated DebugAnnotation array_values = 12;
-
- // Deprecated legacy way to use nested values. Only kept for
- // backwards-compatibility in TraceProcessor. May be removed in the future -
- // code filling protos should use |dict_entries| and |array_values| instead.
- message NestedValue {
- enum NestedType {
- // leaf value.
- UNSPECIFIED = 0;
- DICT = 1;
- ARRAY = 2;
- }
- optional NestedType nested_type = 1;
-
- repeated string dict_keys = 2;
- repeated NestedValue dict_values = 3;
- repeated NestedValue array_values = 4;
- optional int64 int_value = 5;
- optional double double_value = 6;
- optional bool bool_value = 7;
- optional string string_value = 8;
- }
-}
-
-// --------------------
-// Interned data types:
-// --------------------
-
-message DebugAnnotationName {
- optional uint64 iid = 1;
- optional string name = 2;
-}
-
-// End of protos/perfetto/trace/track_event/debug_annotation.proto
-
-// Begin of protos/perfetto/trace/track_event/log_message.proto
-
-message LogMessage {
- // interned SourceLocation.
- optional uint64 source_location_iid = 1;
- // interned LogMessageBody.
- optional uint64 body_iid = 2;
-}
-
-// --------------------
-// Interned data types:
-// --------------------
-
-message LogMessageBody {
- optional uint64 iid = 1;
- optional string body = 2;
-}
-// End of protos/perfetto/trace/track_event/log_message.proto
-
-// Begin of protos/perfetto/trace/track_event/source_location.proto
-
-// --------------------
-// Interned data types:
-// --------------------
-
-message SourceLocation {
- optional uint64 iid = 1;
-
- // We intend to add a binary symbol version of this in the future.
- optional string file_name = 2;
- optional string function_name = 3;
- optional uint32 line_number = 4;
-}
-
-// End of protos/perfetto/trace/track_event/source_location.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_application_state_info.proto
-
-// Trace event arguments for application state changes.
-message ChromeApplicationStateInfo {
- // Enum definition taken from:
- // https://source.chromium.org/chromium/chromium/src/+/master:base/android/application_status_listener.h
- enum ChromeApplicationState {
- APPLICATION_STATE_UNKNOWN = 0;
- APPLICATION_STATE_HAS_RUNNING_ACTIVITIES = 1;
- APPLICATION_STATE_HAS_PAUSED_ACTIVITIES = 2;
- APPLICATION_STATE_HAS_STOPPED_ACTIVITIES = 3;
- APPLICATION_STATE_HAS_DESTROYED_ACTIVITIES = 4;
- };
- optional ChromeApplicationState application_state = 1;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_application_state_info.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_compositor_scheduler_state.proto
-
-// Describes Chrome's Compositor scheduler's current state and associated
-// variables.
-//
-// These protos and enums were adapted from the corresponding original JSON
-// trace event for the scheduler state. In contrast to the JSON, we use strongly
-// typed enum values instead of strings for many fields, and
-// microsecond-granularity timestamps.
-//
-// The original format was generated in JSON by the code at
-// https://cs.chromium.org/chromium/src/cc/scheduler/scheduler.cc?l=870&rcl=5e15eabc9c0eec8daf94fdf78e93f13b6e3b63dd
-//
-// TODO(nuskos): Update link once we've switched to writing this proto.
-//
-// All non-delta-timestamps are absolute CLOCK_MONOTONIC timestamps.
-
-enum ChromeCompositorSchedulerAction {
- CC_SCHEDULER_ACTION_UNSPECIFIED = 0;
- CC_SCHEDULER_ACTION_NONE = 1;
- CC_SCHEDULER_ACTION_SEND_BEGIN_MAIN_FRAME = 2;
- CC_SCHEDULER_ACTION_COMMIT = 3;
- CC_SCHEDULER_ACTION_ACTIVATE_SYNC_TREE = 4;
- CC_SCHEDULER_ACTION_DRAW_IF_POSSIBLE = 5;
- CC_SCHEDULER_ACTION_DRAW_FORCED = 6;
- CC_SCHEDULER_ACTION_DRAW_ABORT = 7;
- CC_SCHEDULER_ACTION_BEGIN_LAYER_TREE_FRAME_SINK_CREATION = 8;
- CC_SCHEDULER_ACTION_PREPARE_TILES = 9;
- CC_SCHEDULER_ACTION_INVALIDATE_LAYER_TREE_FRAME_SINK = 10;
- CC_SCHEDULER_ACTION_PERFORM_IMPL_SIDE_INVALIDATION = 11;
- CC_SCHEDULER_ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_UNTIL = 12;
- CC_SCHEDULER_ACTION_NOTIFY_BEGIN_MAIN_FRAME_NOT_EXPECTED_SOON = 13;
-}
-
-// Next id: 18
-message ChromeCompositorSchedulerState {
- enum BeginImplFrameDeadlineMode {
- DEADLINE_MODE_UNSPECIFIED = 0;
- DEADLINE_MODE_NONE = 1;
- DEADLINE_MODE_IMMEDIATE = 2;
- DEADLINE_MODE_REGULAR = 3;
- DEADLINE_MODE_LATE = 4;
- DEADLINE_MODE_BLOCKED = 5;
- }
- optional ChromeCompositorStateMachine state_machine = 1;
- optional bool observing_begin_frame_source = 2;
- optional bool begin_impl_frame_deadline_task = 3;
- optional bool pending_begin_frame_task = 4;
- optional bool skipped_last_frame_missed_exceeded_deadline = 5;
- optional bool skipped_last_frame_to_reduce_latency = 6;
- optional ChromeCompositorSchedulerAction inside_action = 7;
- optional BeginImplFrameDeadlineMode deadline_mode = 8;
- optional int64 deadline_us = 9;
- optional int64 deadline_scheduled_at_us = 10;
- optional int64 now_us = 11;
- optional int64 now_to_deadline_delta_us = 12;
- optional int64 now_to_deadline_scheduled_at_delta_us = 13;
- optional BeginImplFrameArgs begin_impl_frame_args = 14;
- optional BeginFrameObserverState begin_frame_observer_state = 15;
- optional BeginFrameSourceState begin_frame_source_state = 16;
- optional CompositorTimingHistory compositor_timing_history = 17;
-}
-
-// Describes the current values stored in the Chrome Compositor state machine.
-// Next id: 3
-message ChromeCompositorStateMachine {
- // Next id: 6
- message MajorState {
- enum BeginImplFrameState {
- BEGIN_IMPL_FRAME_UNSPECIFIED = 0;
- BEGIN_IMPL_FRAME_IDLE = 1;
- BEGIN_IMPL_FRAME_INSIDE_BEGIN_FRAME = 2;
- BEGIN_IMPL_FRAME_INSIDE_DEADLINE = 3;
- }
- enum BeginMainFrameState {
- BEGIN_MAIN_FRAME_UNSPECIFIED = 0;
- BEGIN_MAIN_FRAME_IDLE = 1;
- BEGIN_MAIN_FRAME_SENT = 2;
- BEGIN_MAIN_FRAME_READY_TO_COMMIT = 3;
- }
- enum LayerTreeFrameSinkState {
- LAYER_TREE_FRAME_UNSPECIFIED = 0;
- LAYER_TREE_FRAME_NONE = 1;
- LAYER_TREE_FRAME_ACTIVE = 2;
- LAYER_TREE_FRAME_CREATING = 3;
- LAYER_TREE_FRAME_WAITING_FOR_FIRST_COMMIT = 4;
- LAYER_TREE_FRAME_WAITING_FOR_FIRST_ACTIVATION = 5;
- }
- enum ForcedRedrawOnTimeoutState {
- FORCED_REDRAW_UNSPECIFIED = 0;
- FORCED_REDRAW_IDLE = 1;
- FORCED_REDRAW_WAITING_FOR_COMMIT = 2;
- FORCED_REDRAW_WAITING_FOR_ACTIVATION = 3;
- FORCED_REDRAW_WAITING_FOR_DRAW = 4;
- }
- optional ChromeCompositorSchedulerAction next_action = 1;
- optional BeginImplFrameState begin_impl_frame_state = 2;
- optional BeginMainFrameState begin_main_frame_state = 3;
- optional LayerTreeFrameSinkState layer_tree_frame_sink_state = 4;
- optional ForcedRedrawOnTimeoutState forced_redraw_state = 5;
- }
- optional MajorState major_state = 1;
-
- // Next id: 47
- message MinorState {
- enum TreePriority {
- TREE_PRIORITY_UNSPECIFIED = 0;
- TREE_PRIORITY_SAME_PRIORITY_FOR_BOTH_TREES = 1;
- TREE_PRIORITY_SMOOTHNESS_TAKES_PRIORITY = 2;
- TREE_PRIORITY_NEW_CONTENT_TAKES_PRIORITY = 3;
- }
- enum ScrollHandlerState {
- SCROLL_HANDLER_UNSPECIFIED = 0;
- SCROLL_AFFECTS_SCROLL_HANDLER = 1;
- SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER = 2;
- }
- optional int32 commit_count = 1;
- optional int32 current_frame_number = 2;
- optional int32 last_frame_number_submit_performed = 3;
- optional int32 last_frame_number_draw_performed = 4;
- optional int32 last_frame_number_begin_main_frame_sent = 5;
- optional bool did_draw = 6;
- optional bool did_send_begin_main_frame_for_current_frame = 7;
- optional bool did_notify_begin_main_frame_not_expected_until = 8;
- optional bool did_notify_begin_main_frame_not_expected_soon = 9;
- optional bool wants_begin_main_frame_not_expected = 10;
- optional bool did_commit_during_frame = 11;
- optional bool did_invalidate_layer_tree_frame_sink = 12;
- optional bool did_perform_impl_side_invalidaion = 13;
- optional bool did_prepare_tiles = 14;
- optional int32 consecutive_checkerboard_animations = 15;
- optional int32 pending_submit_frames = 16;
- optional int32 submit_frames_with_current_layer_tree_frame_sink = 17;
- optional bool needs_redraw = 18;
- optional bool needs_prepare_tiles = 19;
- optional bool needs_begin_main_frame = 20;
- optional bool needs_one_begin_impl_frame = 21;
- optional bool visible = 22;
- optional bool begin_frame_source_paused = 23;
- optional bool can_draw = 24;
- optional bool resourceless_draw = 25;
- optional bool has_pending_tree = 26;
- optional bool pending_tree_is_ready_for_activation = 27;
- optional bool active_tree_needs_first_draw = 28;
- optional bool active_tree_is_ready_to_draw = 29;
- optional bool did_create_and_initialize_first_layer_tree_frame_sink = 30;
- optional TreePriority tree_priority = 31;
- optional ScrollHandlerState scroll_handler_state = 32;
- optional bool critical_begin_main_frame_to_activate_is_fast = 33;
- optional bool main_thread_missed_last_deadline = 34;
- optional bool skip_next_begin_main_frame_to_reduce_latency = 35;
- optional bool video_needs_begin_frames = 36;
- optional bool defer_begin_main_frame = 37;
- optional bool last_commit_had_no_updates = 38;
- optional bool did_draw_in_last_frame = 39;
- optional bool did_submit_in_last_frame = 40;
- optional bool needs_impl_side_invalidation = 41;
- optional bool current_pending_tree_is_impl_side = 42;
- optional bool previous_pending_tree_was_impl_side = 43;
- optional bool processing_animation_worklets_for_active_tree = 44;
- optional bool processing_animation_worklets_for_pending_tree = 45;
- optional bool processing_paint_worklets_for_pending_tree = 46;
- }
- optional MinorState minor_state = 2;
-}
-
-// Next id: 12
-message BeginFrameArgs {
- // JSON format has a "type" field that was always just "BeginFrameArgs" we
- // drop this in the proto representation, and instead make the JSON format
- // "subtype" field become the type field.
- enum BeginFrameArgsType {
- BEGIN_FRAME_ARGS_TYPE_UNSPECIFIED = 0;
- BEGIN_FRAME_ARGS_TYPE_INVALID = 1;
- BEGIN_FRAME_ARGS_TYPE_NORMAL = 2;
- BEGIN_FRAME_ARGS_TYPE_MISSED = 3;
- }
- optional BeginFrameArgsType type = 1;
- optional uint64 source_id = 2;
- optional uint64 sequence_number = 3;
- optional int64 frame_time_us = 4;
- optional int64 deadline_us = 5;
- optional int64 interval_delta_us = 6;
- optional bool on_critical_path = 7;
- optional bool animate_only = 8;
- oneof created_from {
- // The interned SourceLocation.
- uint64 source_location_iid = 9;
- // The SourceLocation that this args was created from.
- // TODO(nuskos): Eventually we will support interning inside of
- // TypedArgument TraceEvents and then we shouldn't need this SourceLocation
- // since we can emit it as part of the InternedData message. When we can
- // remove this |source_location|.
- SourceLocation source_location = 10;
- }
-}
-
-// Next id: 7
-message BeginImplFrameArgs {
- optional int64 updated_at_us = 1;
- optional int64 finished_at_us = 2;
- enum State {
- BEGIN_FRAME_FINISHED = 0;
- BEGIN_FRAME_USING = 1;
- }
- optional State state = 3;
- oneof args {
- // Only set if |state| is BEGIN_FRAME_FINISHED.
- BeginFrameArgs current_args = 4;
- // Only set if |state| is BEGIN_FRAME_USING.
- BeginFrameArgs last_args = 5;
- }
- message TimestampsInUs {
- optional int64 interval_delta = 1;
- optional int64 now_to_deadline_delta = 2;
- optional int64 frame_time_to_now_delta = 3;
- optional int64 frame_time_to_deadline_delta = 4;
- optional int64 now = 5;
- optional int64 frame_time = 6;
- optional int64 deadline = 7;
- }
- optional TimestampsInUs timestamps_in_us = 6;
-}
-
-message BeginFrameObserverState {
- optional int64 dropped_begin_frame_args = 1;
- optional BeginFrameArgs last_begin_frame_args = 2;
-}
-
-message BeginFrameSourceState {
- optional uint32 source_id = 1;
- optional bool paused = 2;
- optional uint32 num_observers = 3;
- optional BeginFrameArgs last_begin_frame_args = 4;
-}
-
-message CompositorTimingHistory {
- optional int64 begin_main_frame_queue_critical_estimate_delta_us = 1;
- optional int64 begin_main_frame_queue_not_critical_estimate_delta_us = 2;
- optional int64 begin_main_frame_start_to_ready_to_commit_estimate_delta_us = 3;
- optional int64 commit_to_ready_to_activate_estimate_delta_us = 4;
- optional int64 prepare_tiles_estimate_delta_us = 5;
- optional int64 activate_estimate_delta_us = 6;
- optional int64 draw_estimate_delta_us = 7;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_compositor_scheduler_state.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_content_settings_event_info.proto
-
-// Details about ContentSettings trace events.
-message ChromeContentSettingsEventInfo {
- // The number of user defined hostname patterns for content settings at
- // browser start. Similar to UMA histogram
- // 'ContentSettings.NumberOfExceptions'.
- optional uint32 number_of_exceptions = 1;
-}
-// End of protos/perfetto/trace/track_event/chrome_content_settings_event_info.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_frame_reporter.proto
-
-message ChromeFrameReporter {
- enum State {
- // The frame did not have any updates to present.
- STATE_NO_UPDATE_DESIRED = 0;
-
- // The frame presented all the desired updates (i.e. any updates requested
- // from both the compositor thread and main-threads were handled).
- STATE_PRESENTED_ALL = 1;
-
- // The frame was presented with some updates, but also missed some updates
- // (e.g. missed updates from the main-thread, but included updates from the
- // compositor thread).
- STATE_PRESENTED_PARTIAL = 2;
-
- // The frame was dropped, i.e. some updates were desired for the frame, but
- // was not presented.
- STATE_DROPPED = 3;
- };
-
- optional State state = 1;
-
- enum FrameDropReason {
- REASON_UNSPECIFIED = 0;
-
- // Frame was dropped by the display-compositor.
- // The display-compositor may drop a frame some times (e.g. the frame missed
- // the deadline, or was blocked on surface-sync, etc.)
- REASON_DISPLAY_COMPOSITOR = 1;
-
- // Frame was dropped because of the main-thread.
- // The main-thread may cause a frame to be dropped, e.g. if the main-thread
- // is running expensive javascript, or doing a lot of layout updates, etc.
- REASON_MAIN_THREAD = 2;
-
- // Frame was dropped by the client compositor.
- // The client compositor can drop some frames too (e.g. attempting to
- // recover latency, missing the deadline, etc.).
- REASON_CLIENT_COMPOSITOR = 3;
- };
-
- // The reason is set only if |state| is not |STATE_UPDATED_ALL|.
- optional FrameDropReason reason = 2;
-
- optional uint64 frame_source = 3;
- optional uint64 frame_sequence = 4;
-
- // If this is a droped frame (i.e. if |state| is set to |STATE_DROPPED| or
- // |STATE_PRESENTED_PARTIAL|), then indicates whether this frame impacts
- // smoothness.
- optional bool affects_smoothness = 5;
-
- enum ScrollState {
- SCROLL_NONE = 0;
- SCROLL_MAIN_THREAD = 1;
- SCROLL_COMPOSITOR_THREAD = 2;
-
- // Used when it can't be determined wheter a scroll is in progress or not.
- SCROLL_UNKNOWN = 3;
- }
-
- // The type of active scroll
- optional ScrollState scroll_state = 6;
-
- // If any main thread animation is active during this frame.
- optional bool has_main_animation = 7;
- // If any compositor thread animation is active during this frame.
- optional bool has_compositor_animation = 8;
- // If any touch-driven UX (not scroll) is active during this frame.
- optional bool has_smooth_input_main = 9;
-
- // Whether the frame contained any missing content (i.e. whether there was
- // checkerboarding in the frame).
- optional bool has_missing_content = 10;
-
- // The id of layer_tree_host that the frame has been produced for.
- optional uint64 layer_tree_host_id = 11;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_frame_reporter.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_keyed_service.proto
-
-// Details about one of Chrome's keyed services associated with the event.
-message ChromeKeyedService {
- // Name of the service, e.g. "MediaRouter", "PreviewsService", etc. (in
- // Chrome, these are static strings known at compile time).
- optional string name = 1;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_keyed_service.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_latency_info.proto
-
-message ChromeLatencyInfo {
- optional int64 trace_id = 1;
-
- // NEXT ID: 12
- // All step are optional but the enum is ordered (not by number) below in the
- // order we expect them to appear if they are emitted in trace in a blocking
- // fashion.
- enum Step {
- STEP_UNSPECIFIED = 0;
- // Emitted on the browser main thread.
- STEP_SEND_INPUT_EVENT_UI = 3;
- // Happens on the renderer's compositor.
- STEP_HANDLE_INPUT_EVENT_IMPL = 5;
- STEP_DID_HANDLE_INPUT_AND_OVERSCROLL = 8;
- // Occurs on the Renderer's main thread.
- STEP_HANDLE_INPUT_EVENT_MAIN = 4;
- STEP_MAIN_THREAD_SCROLL_UPDATE = 2;
- STEP_HANDLE_INPUT_EVENT_MAIN_COMMIT = 1;
- // Could be emitted on both the renderer's main OR compositor.
- STEP_HANDLED_INPUT_EVENT_MAIN_OR_IMPL = 9;
- // Optionally sometimes HANDLED_INPUT_EVENT_MAIN_OR_IMPL will proxy to the
- // renderer's compositor and this will be emitted.
- STEP_HANDLED_INPUT_EVENT_IMPL = 10;
- // Renderer's compositor.
- STEP_SWAP_BUFFERS = 6;
- // Happens on the VizCompositor in the GPU process.
- STEP_DRAW_AND_SWAP = 7;
- // Happens on the GPU main thread after the swap has completed.
- STEP_FINISHED_SWAP_BUFFERS = 11;
- // See above for NEXT ID, enum steps are not ordered by tag number.
- };
-
- optional Step step = 2;
- optional int32 frame_tree_node_id = 3;
-
- // This enum is a copy of LatencyComponentType enum in Chrome, located in
- // ui/latency/latency_info.h, modulo added UNKNOWN value per protobuf
- // practices.
- enum LatencyComponentType {
- COMPONENT_UNSPECIFIED = 0;
- COMPONENT_INPUT_EVENT_LATENCY_BEGIN_RWH = 1;
- COMPONENT_INPUT_EVENT_LATENCY_SCROLL_UPDATE_ORIGINAL = 2;
- COMPONENT_INPUT_EVENT_LATENCY_FIRST_SCROLL_UPDATE_ORIGINAL = 3;
- COMPONENT_INPUT_EVENT_LATENCY_ORIGINAL = 4;
- COMPONENT_INPUT_EVENT_LATENCY_UI = 5;
- COMPONENT_INPUT_EVENT_LATENCY_RENDERER_MAIN = 6;
- COMPONENT_INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_MAIN = 7;
- COMPONENT_INPUT_EVENT_LATENCY_RENDERING_SCHEDULED_IMPL = 8;
- COMPONENT_INPUT_EVENT_LATENCY_SCROLL_UPDATE_LAST_EVENT = 9;
- COMPONENT_INPUT_EVENT_LATENCY_ACK_RWH = 10;
- COMPONENT_INPUT_EVENT_LATENCY_RENDERER_SWAP = 11;
- COMPONENT_DISPLAY_COMPOSITOR_RECEIVED_FRAME = 12;
- COMPONENT_INPUT_EVENT_GPU_SWAP_BUFFER = 13;
- COMPONENT_INPUT_EVENT_LATENCY_FRAME_SWAP = 14;
- }
-
- message ComponentInfo {
- optional LatencyComponentType component_type = 1;
-
- // Microsecond timestamp in CLOCK_MONOTONIC domain
- optional uint64 time_us = 2;
- };
-
- repeated ComponentInfo component_info = 4;
- optional bool is_coalesced = 5;
- optional int64 gesture_scroll_id = 6;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_latency_info.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_legacy_ipc.proto
-
-// Details about a legacy Chrome IPC message that is either sent by the event.
-// TODO(eseckler): Also use this message on the receiving side?
-message ChromeLegacyIpc {
- enum MessageClass {
- CLASS_UNSPECIFIED = 0;
- CLASS_AUTOMATION = 1;
- CLASS_FRAME = 2;
- CLASS_PAGE = 3;
- CLASS_VIEW = 4;
- CLASS_WIDGET = 5;
- CLASS_INPUT = 6;
- CLASS_TEST = 7;
- CLASS_WORKER = 8;
- CLASS_NACL = 9;
- CLASS_GPU_CHANNEL = 10;
- CLASS_MEDIA = 11;
- CLASS_PPAPI = 12;
- CLASS_CHROME = 13;
- CLASS_DRAG = 14;
- CLASS_PRINT = 15;
- CLASS_EXTENSION = 16;
- CLASS_TEXT_INPUT_CLIENT = 17;
- CLASS_BLINK_TEST = 18;
- CLASS_ACCESSIBILITY = 19;
- CLASS_PRERENDER = 20;
- CLASS_CHROMOTING = 21;
- CLASS_BROWSER_PLUGIN = 22;
- CLASS_ANDROID_WEB_VIEW = 23;
- CLASS_NACL_HOST = 24;
- CLASS_ENCRYPTED_MEDIA = 25;
- CLASS_CAST = 26;
- CLASS_GIN_JAVA_BRIDGE = 27;
- CLASS_CHROME_UTILITY_PRINTING = 28;
- CLASS_OZONE_GPU = 29;
- CLASS_WEB_TEST = 30;
- CLASS_NETWORK_HINTS = 31;
- CLASS_EXTENSIONS_GUEST_VIEW = 32;
- CLASS_GUEST_VIEW = 33;
- CLASS_MEDIA_PLAYER_DELEGATE = 34;
- CLASS_EXTENSION_WORKER = 35;
- CLASS_SUBRESOURCE_FILTER = 36;
- CLASS_UNFREEZABLE_FRAME = 37;
- }
-
- // Corresponds to the message class type defined in Chrome's IPCMessageStart
- // enum, e.g. FrameMsgStart,
- optional MessageClass message_class = 1;
-
- // Line number of the message definition. See Chrome's IPC_MESSAGE_ID and
- // IPC_MESSAGE_START macros.
- optional uint32 message_line = 2;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_legacy_ipc.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_message_pump.proto
-
-// Details about Chrome message pump events
-message ChromeMessagePump {
- // True if there are sent messages in the queue.
- optional bool sent_messages_in_queue = 1;
- // Interned SourceLocation of IO handler that MessagePumpForIO is about to
- // invoke.
- optional uint64 io_handler_location_iid = 2;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_message_pump.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_mojo_event_info.proto
-
-// Contains information to identify mojo handling events. The trace events in
-// mojo are common for all mojo interfaces and this information is used to
-// identify who is the caller or callee.
-message ChromeMojoEventInfo {
- // Contains the interface name or the file name of the creator of a mojo
- // handle watcher, recorded when an event if notified to the watcher. The code
- // that runs within the track event belongs to the interface.
- optional string watcher_notify_interface_tag = 1;
-
- // The hash of the IPC message that is being handled.
- optional uint32 ipc_hash = 2;
-
- // A static string representing the mojo interface name of the message that is
- // being handled.
- optional string mojo_interface_tag = 3;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_mojo_event_info.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_renderer_scheduler_state.proto
-
-// Describes the state of the RendererScheduler for a given Renderer Process.
-
-// RAIL Mode is an indication of the kind of work that a Renderer is currently
-// performing which is in turn used to prioritise work accordingly.
-// A fuller description of these modes can be found https://web.dev/rail/
-enum ChromeRAILMode {
- RAIL_MODE_NONE = 0;
- RAIL_MODE_RESPONSE = 1;
- RAIL_MODE_ANIMATION = 2;
- RAIL_MODE_IDLE = 3;
- RAIL_MODE_LOAD = 4;
-}
-
-// Next id: 2
-message ChromeRendererSchedulerState {
- optional ChromeRAILMode rail_mode = 1;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_renderer_scheduler_state.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_user_event.proto
-
-// Details about a UI interaction initiated by the user, such as opening or
-// closing a tab or a context menu.
-message ChromeUserEvent {
- // Name of the action, e.g. "NewTab", "ShowBookmarkManager", etc. (in
- // Chrome, these are usually static strings known at compile time, or
- // concatenations of multiple such static strings).
- optional string action = 1;
-
- // MD5 hash of the action string.
- optional uint64 action_hash = 2;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_user_event.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_window_handle_event_info.proto
-
-// Details about HWNDMessageHandler trace events.
-message ChromeWindowHandleEventInfo {
- optional uint32 dpi = 1;
- optional uint32 message_id = 2;
- optional fixed64 hwnd_ptr = 3;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_window_handle_event_info.proto
-
-// Begin of protos/perfetto/trace/track_event/task_execution.proto
-
-// TrackEvent arguments describing the execution of a task.
-message TaskExecution {
- // Source location that the task was posted from.
- // interned SourceLocation.
- optional uint64 posted_from_iid = 1;
-}
-// End of protos/perfetto/trace/track_event/task_execution.proto
-
-// Begin of protos/perfetto/trace/track_event/track_event.proto
-
-// NOTE: Full TrackEvent support in the client lib and chrome is WIP, thus these
-// protos are still subject to change. Don't depend on them staying as they are.
-
-// Trace events emitted by client instrumentation library (TRACE_EVENT macros),
-// which describe activity on a track, such as a thread or asynchronous event
-// track. The track is specified using separate TrackDescriptor messages and
-// referred to via the track's UUID.
-//
-// A simple TrackEvent packet specifies a timestamp, category, name and type:
-// ```protobuf
-// trace_packet {
-// timestamp: 1000
-// track_event {
-// categories: ["my_cat"]
-// name: "my_event"
-// type: TYPE_INSTANT
-// }
-// }
-// ```
-//
-// To associate an event with a custom track (e.g. a thread), the track is
-// defined in a separate packet and referred to from the TrackEvent by its UUID:
-// ```protobuf
-// trace_packet {
-// track_descriptor {
-// track_uuid: 1234
-// name: "my_track"
-//
-// // Optionally, associate the track with a thread.
-// thread_descriptor {
-// pid: 10
-// tid: 10
-// ..
-// }
-// }
-// }
-// ```
-//
-// A pair of TYPE_SLICE_BEGIN and _END events form a slice on the track:
-//
-// ```protobuf
-// trace_packet {
-// timestamp: 1200
-// track_event {
-// track_uuid: 1234
-// categories: ["my_cat"]
-// name: "my_slice"
-// type: TYPE_SLICE_BEGIN
-// }
-// }
-// trace_packet {
-// timestamp: 1400
-// track_event {
-// track_uuid: 1234
-// type: TYPE_SLICE_END
-// }
-// }
-// ```
-// TrackEvents also support optimizations to reduce data repetition and encoded
-// data size, e.g. through data interning (names, categories, ...) and delta
-// encoding of timestamps/counters. For details, see the InternedData message.
-// Further, default values for attributes of events on the same sequence (e.g.
-// their default track association) can be emitted as part of a
-// TrackEventDefaults message.
-//
-// Next reserved id: 13 (up to 15). Next id: 47.
-message TrackEvent {
- // Names of categories of the event. In the client library, categories are a
- // way to turn groups of individual events on or off.
- // interned EventCategoryName.
- repeated uint64 category_iids = 3;
- // non-interned variant.
- repeated string categories = 22;
-
- // Optional name of the event for its display in trace viewer. May be left
- // unspecified for events with typed arguments.
- //
- // Note that metrics should not rely on event names, as they are prone to
- // changing. Instead, they should use typed arguments to identify the events
- // they are interested in.
- oneof name_field {
- // interned EventName.
- uint64 name_iid = 10;
- // non-interned variant.
- string name = 23;
- }
-
- // TODO(eseckler): Support using binary symbols for category/event names.
-
- // Type of the TrackEvent (required if |phase| in LegacyEvent is not set).
- enum Type {
- TYPE_UNSPECIFIED = 0;
-
- // Slice events are events that have a begin and end timestamp, i.e. a
- // duration. They can be nested similar to a callstack: If, on the same
- // track, event B begins after event A, but before A ends, B is a child
- // event of A and will be drawn as a nested event underneath A in the UI.
- // Note that child events should always end before their parents (e.g. B
- // before A).
- //
- // Each slice event is formed by a pair of BEGIN + END events. The END event
- // does not need to repeat any TrackEvent fields it has in common with its
- // corresponding BEGIN event. Arguments and debug annotations of the BEGIN +
- // END pair will be merged during trace import.
- //
- // Note that we deliberately chose not to support COMPLETE events (which
- // would specify a duration directly) since clients would need to delay
- // writing them until the slice is completed, which can result in reordered
- // events in the trace and loss of unfinished events at the end of a trace.
- TYPE_SLICE_BEGIN = 1;
- TYPE_SLICE_END = 2;
-
- // Instant events are nestable events without duration. They can be children
- // of slice events on the same track.
- TYPE_INSTANT = 3;
-
- // Event that provides a value for a counter track. |track_uuid| should
- // refer to a counter track and |counter_value| set to the new value. Note
- // that most other TrackEvent fields (e.g. categories, name, ..) are not
- // supported for TYPE_COUNTER events. See also CounterDescriptor.
- TYPE_COUNTER = 4;
- }
- optional Type type = 9;
-
- // Identifies the track of the event. The default value may be overridden
- // using TrackEventDefaults, e.g., to specify the track of the TraceWriter's
- // sequence (in most cases sequence = one thread). If no value is specified
- // here or in TrackEventDefaults, the TrackEvent will be associated with an
- // implicit trace-global track (uuid 0). See TrackDescriptor::uuid.
- optional uint64 track_uuid = 11;
-
- // A new value for a counter track. |track_uuid| should refer to a track with
- // a CounterDescriptor, and |type| should be TYPE_COUNTER. For a more
- // efficient encoding of counter values that are sampled at the beginning/end
- // of a slice, see |extra_counter_values| and |extra_counter_track_uuids|.
- // Counter values can optionally be encoded in as delta values (positive or
- // negative) on each packet sequence (see CounterIncrementalBase).
- oneof counter_value_field {
- int64 counter_value = 30;
- double double_counter_value = 44;
- }
-
- // To encode counter values more efficiently, we support attaching additional
- // counter values to a TrackEvent of any type. All values will share the same
- // timestamp specified in the TracePacket. The value at
- // extra_counter_values[N] is for the counter track referenced by
- // extra_counter_track_uuids[N].
- //
- // |extra_counter_track_uuids| may also be set via TrackEventDefaults. There
- // should always be equal or more uuids than values. It is valid to set more
- // uuids (e.g. via defaults) than values. If uuids are specified in
- // TrackEventDefaults and a TrackEvent, the TrackEvent uuids override the
- // default uuid list.
- //
- // For example, this allows snapshotting the thread time clock at each
- // thread-track BEGIN and END event to capture the cpu time delta of a slice.
- repeated uint64 extra_counter_track_uuids = 31;
- repeated int64 extra_counter_values = 12;
-
- // Counter snapshots using floating point instead of integer values.
- repeated uint64 extra_double_counter_track_uuids = 45;
- repeated double extra_double_counter_values = 46;
-
- // IDs of flows originating, passing through, or ending at this event.
- // Flow IDs are global within a trace.
- //
- // A flow connects a sequence of TrackEvents within or across tracks, e.g.
- // an input event may be handled on one thread but cause another event on
- // a different thread - a flow between the two events can associate them.
- //
- // The direction of the flows between events is inferred from the events'
- // timestamps. The earliest event with the same flow ID becomes the source
- // of the flow. Any events thereafter are intermediate steps of the flow,
- // until the flow terminates at the last event with the flow ID.
- //
- // Flows can also be explicitly terminated (see |terminating_flow_ids|), so
- // that the same ID can later be reused for another flow.
- repeated uint64 flow_ids = 36;
-
- // List of flow ids which should terminate on this event, otherwise same as
- // |flow_ids|.
- // Any one flow ID should be either listed as part of |flow_ids| OR
- // |terminating_flow_ids|, not both.
- repeated uint64 terminating_flow_ids = 42;
-
- // ---------------------------------------------------------------------------
- // TrackEvent arguments:
- // ---------------------------------------------------------------------------
-
- // Unstable key/value annotations shown in the trace viewer but not intended
- // for metrics use.
- repeated DebugAnnotation debug_annotations = 4;
-
- // Typed event arguments:
- optional TaskExecution task_execution = 5;
- optional LogMessage log_message = 21;
- optional ChromeCompositorSchedulerState cc_scheduler_state = 24;
- optional ChromeUserEvent chrome_user_event = 25;
- optional ChromeKeyedService chrome_keyed_service = 26;
- optional ChromeLegacyIpc chrome_legacy_ipc = 27;
- optional ChromeHistogramSample chrome_histogram_sample = 28;
- optional ChromeLatencyInfo chrome_latency_info = 29;
- optional ChromeFrameReporter chrome_frame_reporter = 32;
- optional ChromeApplicationStateInfo chrome_application_state_info = 39;
- optional ChromeRendererSchedulerState chrome_renderer_scheduler_state = 40;
- optional ChromeWindowHandleEventInfo chrome_window_handle_event_info = 41;
- optional ChromeContentSettingsEventInfo chrome_content_settings_event_info = 43;
-
- // This field is used only if the source location represents the function that
- // executes during this event.
- oneof source_location_field {
- // Non-interned field.
- SourceLocation source_location = 33;
- // Interned field.
- uint64 source_location_iid = 34;
- }
-
- optional ChromeMessagePump chrome_message_pump = 35;
- optional ChromeMojoEventInfo chrome_mojo_event_info = 38;
-
- // New argument types go here :)
-
- // Extension range for typed events defined externally.
- // See docs/design-docs/extensions.md for more details.
- //
- // Extension support is work-in-progress, in the future the way to reserve a
- // subrange for a particular project will be described here and in the design
- // document linked above.
- //
- // Contact perfetto-dev@googlegroups.com if you are interested in a subrange
- // for your project.
-
- // Extension range for future use.
- extensions 1000 to 9899;
- // Reserved for Perfetto unit and integration tests.
- extensions 9900 to 10000;
-
- // ---------------------------------------------------------------------------
- // Deprecated / legacy event fields, which will be removed in the future:
- // ---------------------------------------------------------------------------
-
- // Deprecated. Use the |timestamp| and |timestamp_clock_id| fields in
- // TracePacket instead.
- //
- // Timestamp in microseconds (usually CLOCK_MONOTONIC).
- oneof timestamp {
- // Delta timestamp value since the last TrackEvent or ThreadDescriptor. To
- // calculate the absolute timestamp value, sum up all delta values of the
- // preceding TrackEvents since the last ThreadDescriptor and add the sum to
- // the |reference_timestamp| in ThreadDescriptor. This value should always
- // be positive.
- int64 timestamp_delta_us = 1;
- // Absolute value (e.g. a manually specified timestamp in the macro).
- // This is a one-off value that does not affect delta timestamp computation
- // in subsequent TrackEvents.
- int64 timestamp_absolute_us = 16;
- }
-
- // Deprecated. Use |extra_counter_values| and |extra_counter_track_uuids| to
- // encode thread time instead.
- //
- // CPU time for the current thread (e.g., CLOCK_THREAD_CPUTIME_ID) in
- // microseconds.
- oneof thread_time {
- // Delta timestamp value since the last TrackEvent or ThreadDescriptor. To
- // calculate the absolute timestamp value, sum up all delta values of the
- // preceding TrackEvents since the last ThreadDescriptor and add the sum to
- // the |reference_timestamp| in ThreadDescriptor. This value should always
- // be positive.
- int64 thread_time_delta_us = 2;
- // This is a one-off absolute value that does not affect delta timestamp
- // computation in subsequent TrackEvents.
- int64 thread_time_absolute_us = 17;
- }
-
- // Deprecated. Use |extra_counter_values| and |extra_counter_track_uuids| to
- // encode thread instruction count instead.
- //
- // Value of the instruction counter for the current thread.
- oneof thread_instruction_count {
- // Same encoding as |thread_time| field above.
- int64 thread_instruction_count_delta = 8;
- int64 thread_instruction_count_absolute = 20;
- }
-
- // Apart from {category, time, thread time, tid, pid}, other legacy trace
- // event attributes are initially simply proxied for conversion to a JSON
- // trace. We intend to gradually transition these attributes to similar native
- // features in TrackEvent (e.g. async + flow events), or deprecate them
- // without replacement where transition is unsuitable.
- //
- // Next reserved id: 16 (up to 16).
- // Next id: 20.
- message LegacyEvent {
- // Deprecated, use TrackEvent::name(_iid) instead.
- // interned EventName.
- optional uint64 name_iid = 1;
- optional int32 phase = 2;
- optional int64 duration_us = 3;
- optional int64 thread_duration_us = 4;
-
- // Elapsed retired instruction count during the event.
- optional int64 thread_instruction_delta = 15;
-
- // used to be |flags|.
- reserved 5;
-
- oneof id {
- uint64 unscoped_id = 6;
- uint64 local_id = 10;
- uint64 global_id = 11;
- }
- // Additional optional scope for |id|.
- optional string id_scope = 7;
-
- // Consider the thread timestamps for async BEGIN/END event pairs as valid.
- optional bool use_async_tts = 9;
-
- // Idenfifies a flow. Flow events with the same bind_id are connected.
- optional uint64 bind_id = 8;
- // Use the enclosing slice as binding point for a flow end event instead of
- // the next slice. Flow start/step events always bind to the enclosing
- // slice.
- optional bool bind_to_enclosing = 12;
-
- enum FlowDirection {
- FLOW_UNSPECIFIED = 0;
- FLOW_IN = 1;
- FLOW_OUT = 2;
- FLOW_INOUT = 3;
- }
- optional FlowDirection flow_direction = 13;
-
- enum InstantEventScope {
- SCOPE_UNSPECIFIED = 0;
- SCOPE_GLOBAL = 1;
- SCOPE_PROCESS = 2;
- SCOPE_THREAD = 3;
- }
- optional InstantEventScope instant_event_scope = 14;
-
- // Override the pid/tid if the writer needs to emit events on behalf of
- // another process/thread. This should be the exception. Normally, the
- // pid+tid from ThreadDescriptor is used.
- optional int32 pid_override = 18;
- optional int32 tid_override = 19;
- }
-
- optional LegacyEvent legacy_event = 6;
-}
-
-// Default values for fields of all TrackEvents on the same packet sequence.
-// Should be emitted as part of TracePacketDefaults whenever incremental state
-// is cleared. It's defined here because field IDs should match those of the
-// corresponding fields in TrackEvent.
-message TrackEventDefaults {
- optional uint64 track_uuid = 11;
- repeated uint64 extra_counter_track_uuids = 31;
- repeated uint64 extra_double_counter_track_uuids = 45;
-
- // TODO(eseckler): Support default values for more TrackEvent fields.
-}
-
-// --------------------
-// Interned data types:
-// --------------------
-
-message EventCategory {
- optional uint64 iid = 1;
- optional string name = 2;
-}
-
-message EventName {
- optional uint64 iid = 1;
- optional string name = 2;
-}
-
-// End of protos/perfetto/trace/track_event/track_event.proto
-
-// Begin of protos/perfetto/trace/interned_data/interned_data.proto
-
-// ------------------------------ DATA INTERNING: ------------------------------
-// Interning indexes are built up gradually by adding the entries contained in
-// each TracePacket of the same packet sequence (packets emitted by the same
-// producer and TraceWriter, see |trusted_packet_sequence_id|). Thus, packets
-// can only refer to interned data from other packets in the same sequence.
-//
-// The writer will emit new entries when it encounters new internable values
-// that aren't yet in the index. Data in current and subsequent TracePackets can
-// then refer to the entry by its position (interning ID, abbreviated "iid") in
-// its index. An interning ID with value 0 is considered invalid (not set).
-//
-// Because of the incremental build-up, the interning index will miss data when
-// TracePackets are lost, e.g. because a chunk was overridden in the central
-// ring buffer. To avoid invalidation of the whole trace in such a case, the
-// index is periodically reset (see SEQ_INCREMENTAL_STATE_CLEARED).
-// When packet loss occurs, the reader will only lose interning data up to the
-// next reset.
-// -----------------------------------------------------------------------------
-
-// Message that contains new entries for the interning indices of a packet
-// sequence.
-//
-// The writer will usually emit new entries in the same TracePacket that first
-// refers to them (since the last reset of interning state). They may also be
-// emitted proactively in advance of referring to them in later packets.
-//
-// Next reserved id: 8 (up to 15).
-// Next id: 27.
-message InternedData {
- // TODO(eseckler): Replace iid fields inside interned messages with
- // map<iid, message> type fields in InternedData.
-
- // Each field's message type needs to specify an |iid| field, which is the ID
- // of the entry in the field's interning index. Each field constructs its own
- // index, thus interning IDs are scoped to the tracing session and field
- // (usually as a counter for efficient var-int encoding). It is illegal to
- // override entries in an index (using the same iid for two different values)
- // within the same tracing session, even after a reset of the emitted
- // interning state.
- repeated EventCategory event_categories = 1;
- repeated EventName event_names = 2;
- repeated DebugAnnotationName debug_annotation_names = 3;
- repeated SourceLocation source_locations = 4;
- repeated LogMessageBody log_message_body = 20;
- repeated HistogramName histogram_names = 25;
-
- // Note: field IDs up to 15 should be used for frequent data only.
-
- // Build IDs of exectuable files.
- repeated InternedString build_ids = 16;
- // Paths to executable files.
- repeated InternedString mapping_paths = 17;
- // Paths to source files.
- repeated InternedString source_paths = 18;
- // Names of functions used in frames below.
- repeated InternedString function_names = 5;
- // Symbols that were added to this trace after the fact.
- repeated ProfiledFrameSymbols profiled_frame_symbols = 21;
-
- // Executable files mapped into processes.
- repeated Mapping mappings = 19;
- // Frames of callstacks of a program.
- repeated Frame frames = 6;
- // A callstack of a program.
- repeated Callstack callstacks = 7;
-
- // Additional Vulkan information sent in a VulkanMemoryEvent message
- repeated InternedString vulkan_memory_keys = 22;
-
- // Graphics context of a render stage event. This represent the GL
- // context for an OpenGl app or the VkDevice for a Vulkan app.
- repeated InternedGraphicsContext graphics_contexts = 23;
-
- // Description of a GPU hardware queue or render stage.
- repeated InternedGpuRenderStageSpecification gpu_specifications = 24;
-
- // This is set when FtraceConfig.symbolize_ksyms = true.
- // The id of each symbol the number that will be reported in ftrace events
- // like sched_block_reason.caller and is obtained from a monotonic counter.
- // The same symbol can have different indexes in different bundles.
- // This is is NOT the real address. This is to avoid disclosing KASLR through
- // traces.
- repeated InternedString kernel_symbols = 26;
-}
-
-// End of protos/perfetto/trace/interned_data/interned_data.proto
-
-// Begin of protos/perfetto/trace/memory_graph.proto
-
-// Message definitions for app-reported memory breakdowns. At the moment, this
-// is a Chrome-only tracing feature, historically known as 'memory-infra'. See
-// https://chromium.googlesource.com/chromium/src/+/master/docs/memory-infra/ .
-// This is unrelated to the native or java heap profilers (those protos live
-// in //protos/perfetto/trace/profiling/).
-
-message MemoryTrackerSnapshot {
- // Memory snapshot of a process. The snapshot contains memory data that is
- // from 2 different sources, namely system stats and instrumentation stats.
- // The system memory usage stats come from the OS based on standard API
- // available in the platform to query memory usage. The instrumentation stats
- // are added by instrumenting specific piece of code which tracks memory
- // allocations and deallocations made by a small sub-system within the
- // application.
- // The system stats of the global memory snapshot are recorded as part of
- // ProcessStats and SmapsPacket fields in trace packet with the same
- // timestamp.
- message ProcessSnapshot {
- // Process ID of the process
- optional int32 pid = 1;
-
- // Memory dumps are represented as a graph of memory nodes which contain
- // statistics. To avoid double counting the same memory across different
- // nodes, edges are used to mark nodes that account for the same memory. See
- // this doc for examples of the usage:
- // https://docs.google.com/document/d/1WGQRJ1sjJrfVkNcgPVY6frm64UqPc94tsxUOXImZUZI
-
- // A single node in the memory graph.
- message MemoryNode {
- // Unique ID of the node across all processes involved in the global
- // memory dump. The ID is only unique within this particular global dump
- // identified by GlobalMemoryDumpPacket.global_dump_id.
- optional uint64 id = 1;
-
- // Absolute name is a unique name for the memory node within the process
- // with ProcessMemoryDump.pid. The name can contain multiple parts
- // separated by '/', which traces the edges of the node from the root
- // node.
- // Eg: "partition_allocator/array_buffers/buffer1" refers to the child
- // node "buffer1" in a graph structure of:
- // root -> partition_allocator -> array_buffers -> buffer1.
- optional string absolute_name = 2;
-
- // A weak node means that the instrumentation that added the current node
- // is unsure about the existence of the actual memory. Unless a "strong"
- // (non-weak is default) node that has an edge to the current node exists
- // in the current global dump, the current node will be discarded.
- optional bool weak = 3;
-
- // Size of the node in bytes, used to compute the effective size of the
- // nodes without double counting.
- optional uint64 size_bytes = 4;
-
- // Entries in the memory node that contain statistics and additional
- // debuggable information about the memory. The size of the node is
- // tracked separately in the |size_bytes| field.
- message MemoryNodeEntry {
- optional string name = 1;
-
- enum Units {
- UNSPECIFIED = 0;
- BYTES = 1;
- COUNT = 2;
- }
- optional Units units = 2;
-
- // Contains either one of uint64 or string value.
- optional uint64 value_uint64 = 3;
- optional string value_string = 4;
- }
- repeated MemoryNodeEntry entries = 5;
- }
- repeated MemoryNode allocator_dumps = 2;
-
- // A directed edge that connects any 2 nodes in the graph above. These are
- // in addition to the inherent edges added due to the tree structure of the
- // node's absolute names.
- // Node with id |source_id| owns the node with id |target_id|, and has the
- // effect of attributing the memory usage of target to source. |importance|
- // is optional and relevant only for the cases of co-ownership, where it
- // acts as a z-index: the owner with the highest importance will be
- // attributed target's memory.
- message MemoryEdge {
- optional uint64 source_id = 1;
- optional uint64 target_id = 2;
- optional uint32 importance = 3;
- optional bool overridable = 4;
- }
- repeated MemoryEdge memory_edges = 3;
- }
-
- // Unique ID that represents the global memory dump.
- optional uint64 global_dump_id = 1;
-
- enum LevelOfDetail {
- DETAIL_FULL = 0;
- DETAIL_LIGHT = 1;
- DETAIL_BACKGROUND = 2;
- }
- optional LevelOfDetail level_of_detail = 2;
-
- repeated ProcessSnapshot process_memory_dumps = 3;
-}
-
-// End of protos/perfetto/trace/memory_graph.proto
-
-// Begin of protos/perfetto/trace/perfetto/perfetto_metatrace.proto
-
-// Used to trace the execution of perfetto itself.
-message PerfettoMetatrace {
- // See base/metatrace_events.h for definitions.
- oneof record_type {
- uint32 event_id = 1;
- uint32 counter_id = 2;
-
- // For trace processor metatracing.
- string event_name = 8;
- string counter_name = 9;
- }
- message Arg {
- optional string key = 1;
- optional string value = 2;
- }
-
- // Only when using |event_id|.
- optional uint32 event_duration_ns = 3;
-
- // Only when using |counter_id|.
- optional int32 counter_value = 4;
-
- // ID of the thread that emitted the event.
- optional uint32 thread_id = 5;
-
- // If true the meta-tracing ring buffer had overruns and hence some data is
- // missing from this point.
- optional bool has_overruns = 6;
-
- // Args for the event.
- repeated Arg args = 7;
-}
-
-// End of protos/perfetto/trace/perfetto/perfetto_metatrace.proto
-
-// Begin of protos/perfetto/trace/perfetto/tracing_service_event.proto
-
-// Events emitted by the tracing service.
-message TracingServiceEvent {
- oneof event_type {
- // When each of the following booleans are set to true, they report the
- // point in time (through TracePacket's timestamp) where the condition
- // they describe happened.
- // The order of the booleans below matches the timestamp ordering
- // they would generally be expected to have.
-
- // Emitted when we start tracing and specifically, this will be before any
- // producer is notified about the existence of this trace. This is always
- // emitted before the all_data_sources_started event. This event is also
- // guaranteed to be seen (byte-offset wise) before any data packets from
- // producers.
- bool tracing_started = 2;
-
- // Emitted after all data sources saw the start event and ACKed it.
- // This identifies the point in time when it's safe to assume that all data
- // sources have been recording events.
- bool all_data_sources_started = 1;
-
- // Emitted when all data sources have been flushed successfully or with an
- // error (including timeouts). This can generally happen many times over the
- // course of the trace.
- bool all_data_sources_flushed = 3;
-
- // Emitted when reading back the central tracing buffers has been completed.
- // If |write_into_file| is specified, this can happen many times over the
- // course of the trace.
- bool read_tracing_buffers_completed = 4;
-
- // Emitted after tracing has been disabled and specifically, this will be
- // after all packets from producers have been included in the central
- // tracing buffer.
- bool tracing_disabled = 5;
-
- // Emitted if perfetto --save-for-bugreport was invoked while the current
- // tracing session was running and it had the highest bugreport_score. In
- // this case the original consumer will see a nearly empty trace, because
- // the contents are routed onto the bugreport file. This event flags the
- // situation explicitly. Traces that contain this marker should be discarded
- // by test infrastructures / pipelines.
- bool seized_for_bugreport = 6;
- }
-}
-
-// End of protos/perfetto/trace/perfetto/tracing_service_event.proto
-
-// Begin of protos/perfetto/common/android_energy_consumer_descriptor.proto
-
-// Energy consumer based on aidl class:
-// android.hardware.power.stats.EnergyConsumer.
-message AndroidEnergyConsumer {
- // Unique ID of this energy consumer. Matches the ID in a
- // AndroidEnergyEstimationBreakdown.
- optional int32 energy_consumer_id = 1;
-
- // For a group of energy consumers of the same logical type, sorting by
- // ordinal gives their physical order. Ordinals must be consecutive integers
- // starting from 0.
- optional int32 ordinal = 2;
-
- // Type of this energy consumer.
- optional string type = 3;
-
- // Unique name of this energy consumer. Vendor/device specific. Opaque to
- // framework.
- optional string name = 4;
-}
-
-message AndroidEnergyConsumerDescriptor {
- repeated AndroidEnergyConsumer energy_consumers = 1;
-}
-
-// End of protos/perfetto/common/android_energy_consumer_descriptor.proto
-
-// Begin of protos/perfetto/trace/power/android_energy_estimation_breakdown.proto
-
-// Energy data retrieve using the ODPM(On Device Power Monitor) API.
-// This proto represents the aidl class:
-// android.hardware.power.stats.EnergyConsumerResult.
-message AndroidEnergyEstimationBreakdown {
- // The first trace packet of each session should include a energy consumer
- // descriptor.
- optional AndroidEnergyConsumerDescriptor energy_consumer_descriptor = 1;
-
- // ID of the AndroidEnergyConsumer associated with this result. Matches
- // the energy_consumer_id in the AndroidEnergyConsumerDescriptor that
- // should be sent at the beginning of a trace.
- optional int32 energy_consumer_id = 2;
-
- // Total accumulated energy since boot in microwatt-seconds (uWs)
- optional int64 energy_uws = 3;
-
- message EnergyUidBreakdown {
- // Android ID/Linux UID, the accumulated energy is attributed to.
- optional int32 uid = 1;
-
- // Accumulated energy since boot in microwatt-seconds (uWs).
- optional int64 energy_uws = 2;
- }
- // Optional attributed energy per Android ID / Linux UID for this
- // EnergyConsumer. Sum total of attributed energy must be less than or equal
- // to total accumulated energy.
- repeated EnergyUidBreakdown per_uid_breakdown = 4;
-}
-
-// End of protos/perfetto/trace/power/android_energy_estimation_breakdown.proto
-
-// Begin of protos/perfetto/trace/power/battery_counters.proto
-
-message BatteryCounters {
- // Battery capacity in microampere-hours(µAh). Also known as Coulomb counter.
- optional int64 charge_counter_uah = 1;
-
- // Remaining battery capacity percentage of total capacity
- optional float capacity_percent = 2;
-
- // Instantaneous battery current in microamperes(µA).
- // Positive values indicate current drained from the battery,
- // negative values current feeding the battery from a charge source (USB).
- // See https://perfetto.dev/docs/data-sources/battery-counters for more.
- optional int64 current_ua = 3;
-
- // Instantaneous battery current in microamperes(µA).
- optional int64 current_avg_ua = 4;
-}
-
-// End of protos/perfetto/trace/power/battery_counters.proto
-
-// Begin of protos/perfetto/trace/power/power_rails.proto
-
-message PowerRails {
- message RailDescriptor {
- // Index corresponding to the rail
- optional uint32 index = 1;
-
- // Name of the rail
- optional string rail_name = 2;
-
- // Name of the subsystem to which this rail belongs
- optional string subsys_name = 3;
-
- // Hardware sampling rate (Hz).
- optional uint32 sampling_rate = 4;
- }
-
- // This is only emitted at the beginning of the trace.
- repeated RailDescriptor rail_descriptor = 1;
-
- message EnergyData {
- // Index corresponding to RailDescriptor.index
- optional uint32 index = 1;
-
- // Time since device boot(CLOCK_BOOTTIME) in milli-seconds.
- optional uint64 timestamp_ms = 2;
-
- // Accumulated energy since device boot in microwatt-seconds (uWs).
- optional uint64 energy = 3;
- }
-
- repeated EnergyData energy_data = 2;
-}
-
-// End of protos/perfetto/trace/power/power_rails.proto
-
-// Begin of protos/perfetto/trace/profiling/deobfuscation.proto
-
-message ObfuscatedMember {
- // This is the obfuscated field name relative to the class containing the
- // ObfuscatedMember.
- optional string obfuscated_name = 1;
- // If this is fully qualified (i.e. contains a '.') this is the deobfuscated
- // field name including its class. Otherwise, this is this the unqualified
- // deobfuscated field name relative to the class containing this
- // ObfuscatedMember.
- optional string deobfuscated_name = 2;
-}
-
-message ObfuscatedClass {
- optional string obfuscated_name = 1;
- optional string deobfuscated_name = 2;
- // fields.
- repeated ObfuscatedMember obfuscated_members = 3;
- repeated ObfuscatedMember obfuscated_methods = 4;
-}
-
-message DeobfuscationMapping {
- optional string package_name = 1;
- optional int64 version_code = 2;
- repeated ObfuscatedClass obfuscated_classes = 3;
-}
-// End of protos/perfetto/trace/profiling/deobfuscation.proto
-
-// Begin of protos/perfetto/trace/profiling/heap_graph.proto
-
-message HeapGraphRoot {
- enum Type {
- ROOT_UNKNOWN = 0;
- ROOT_JNI_GLOBAL = 1;
- ROOT_JNI_LOCAL = 2;
- ROOT_JAVA_FRAME = 3;
- ROOT_NATIVE_STACK = 4;
- ROOT_STICKY_CLASS = 5;
- ROOT_THREAD_BLOCK = 6;
- ROOT_MONITOR_USED = 7;
- ROOT_THREAD_OBJECT = 8;
- ROOT_INTERNED_STRING = 9;
- ROOT_FINALIZING = 10;
- ROOT_DEBUGGER = 11;
- ROOT_REFERENCE_CLEANUP = 12;
- ROOT_VM_INTERNAL = 13;
- ROOT_JNI_MONITOR = 14;
- };
- // Objects retained by this root.
- repeated uint64 object_ids = 1 [packed = true];
-
- optional Type root_type = 2;
-}
-
-message HeapGraphType {
- enum Kind {
- KIND_UNKNOWN = 0;
- KIND_NORMAL = 1;
- KIND_NOREFERENCES = 2;
- KIND_STRING = 3;
- KIND_ARRAY = 4;
- KIND_CLASS = 5;
- KIND_CLASSLOADER = 6;
- KIND_DEXCACHE = 7;
- KIND_SOFT_REFERENCE = 8;
- KIND_WEAK_REFERENCE = 9;
- KIND_FINALIZER_REFERENCE = 10;
- KIND_PHANTOM_REFERENCE = 11;
- };
- // TODO(fmayer): Consider removing this and using the index in the repeaed
- // field to save space.
- optional uint64 id = 1;
- optional uint64 location_id = 2;
- optional string class_name = 3;
- // Size of objects of this type.
- optional uint64 object_size = 4;
- optional uint64 superclass_id = 5;
- // Indices for InternedData.field_names for the names of the fields of
- // instances of this class. This does NOT include the fields from
- // superclasses. The consumer of this data needs to walk all super
- // classes to get a full lists of fields. Objects always write the
- // fields in order of most specific class to the furthest up superclass.
- repeated uint64 reference_field_id = 6 [packed = true];
- optional Kind kind = 7;
- optional uint64 classloader_id = 8;
-}
-
-message HeapGraphObject {
- oneof identifier {
- uint64 id = 1;
- uint64 id_delta = 7;
- }
-
- // Index for InternedData.types for the name of the type of this object.
- optional uint64 type_id = 2;
-
- // Bytes occupied by this objects.
- optional uint64 self_size = 3;
-
- // Add this to all non-zero values in reference_field_id. This is used to
- // get more compact varint encoding.
- optional uint64 reference_field_id_base = 6;
-
- // Indices for InternedData.field_names for the name of the field referring
- // to the object. For Android S+ and for instances of normal classes (e.g.
- // not instances of java.lang.Class or arrays), this is instead set in the
- // corresponding HeapGraphType, and this is left empty.
- repeated uint64 reference_field_id = 4 [packed = true];
-
- // Ids of the Object that is referred to.
- repeated uint64 reference_object_id = 5 [packed = true];
-}
-
-message HeapGraph {
- optional int32 pid = 1;
-
- // This contains all objects at the time this dump was taken. Some of these
- // will be live, some of those unreachable (garbage). To find the live
- // objects, the client needs to build the transitive closure of objects
- // reachable from |roots|.
- // All objects not contained within that transitive closure are garbage that
- // has not yet been collected.
- repeated HeapGraphObject objects = 2;
-
- // Roots at the time this dump was taken.
- // All live objects are reachable from the roots. All other objects are
- // garbage.
- repeated HeapGraphRoot roots = 7;
-
- // Types used in HeapGraphObjects.
- repeated HeapGraphType types = 9;
-
- reserved 3;
-
- // Field names for references in managed heap graph.
- repeated InternedString field_names = 4;
-
- // Paths of files used in managed heap graph.
- repeated InternedString location_names = 8;
-
- optional bool continued = 5;
- optional uint64 index = 6;
-}
-
-// End of protos/perfetto/trace/profiling/heap_graph.proto
-
-// Begin of protos/perfetto/trace/profiling/profile_packet.proto
-
-message ProfilePacket {
- // The following interning tables are only used in Android version Q.
- // In newer versions, these tables are in InternedData
- // (see protos/perfetto/trace/interned_data) and are shared across
- // multiple ProfilePackets.
- // For backwards compatibility, consumers need to first look up interned
- // data in the tables within the ProfilePacket, and then, if they are empty,
- // look up in the InternedData instead.
- repeated InternedString strings = 1;
- repeated Mapping mappings = 4;
- repeated Frame frames = 2;
- repeated Callstack callstacks = 3;
-
- // Next ID: 9
- message HeapSample {
- optional uint64 callstack_id = 1;
- // bytes allocated at this callstack.
- optional uint64 self_allocated = 2;
- // bytes allocated at this callstack that have been freed.
- optional uint64 self_freed = 3;
- // deprecated self_idle.
- reserved 7;
- // Bytes allocated by this callstack but not freed at the time the malloc
- // heap usage of this process was maximal. This is only set if dump_at_max
- // is true in HeapprofdConfig. In that case, self_allocated, self_freed and
- // self_idle will not be set.
- optional uint64 self_max = 8;
- // Number of allocations that were sampled at this callstack but not freed
- // at the time the malloc heap usage of this process was maximal. This is
- // only set if dump_at_max is true in HeapprofdConfig. In that case,
- // self_allocated, self_freed and self_idle will not be set.
- optional uint64 self_max_count = 9;
- // timestamp [opt]
- optional uint64 timestamp = 4;
- // Number of allocations that were sampled at this callstack.
- optional uint64 alloc_count = 5;
- // Number of allocations that were sampled at this callstack that have been
- // freed.
- optional uint64 free_count = 6;
- }
-
- message Histogram {
- message Bucket {
- // This bucket counts values from the previous bucket's (or -infinity if
- // this is the first bucket) upper_limit (inclusive) to this upper_limit
- // (exclusive).
- optional uint64 upper_limit = 1;
- // This is the highest bucket. This is set instead of the upper_limit. Any
- // values larger or equal to the previous bucket's upper_limit are counted
- // in this bucket.
- optional bool max_bucket = 2;
- // Number of values that fall into this range.
- optional uint64 count = 3;
- }
- repeated Bucket buckets = 1;
- }
-
- message ProcessStats {
- optional uint64 unwinding_errors = 1;
- optional uint64 heap_samples = 2;
- optional uint64 map_reparses = 3;
- optional Histogram unwinding_time_us = 4;
- optional uint64 total_unwinding_time_us = 5;
- optional uint64 client_spinlock_blocked_us = 6;
- }
-
- repeated ProcessHeapSamples process_dumps = 5;
- message ProcessHeapSamples {
- enum ClientError {
- CLIENT_ERROR_NONE = 0;
- CLIENT_ERROR_HIT_TIMEOUT = 1;
- CLIENT_ERROR_INVALID_STACK_BOUNDS = 2;
- }
- optional uint64 pid = 1;
-
- // This process was profiled from startup.
- // If false, this process was already running when profiling started.
- optional bool from_startup = 3;
-
- // This process was not profiled because a concurrent session was active.
- // If this is true, samples will be empty.
- optional bool rejected_concurrent = 4;
-
- // This process disconnected while it was profiled.
- // If false, the process outlived the profiling session.
- optional bool disconnected = 6;
-
- // If disconnected, this disconnect was caused by the client overrunning
- // the buffer.
- // Equivalent to client_error == CLIENT_ERROR_HIT_TIMEOUT
- // on new S builds.
- optional bool buffer_overran = 7;
-
- optional ClientError client_error = 14;
-
- // If disconnected, this disconnected was caused by the shared memory
- // buffer being corrupted. THIS IS ALWAYS A BUG IN HEAPPROFD OR CLIENT
- // MEMORY CORRUPTION.
- optional bool buffer_corrupted = 8;
-
- // If disconnected, this disconnect was caused by heapprofd exceeding
- // guardrails during this profiling session.
- optional bool hit_guardrail = 10;
-
- optional string heap_name = 11;
- optional uint64 sampling_interval_bytes = 12;
- optional uint64 orig_sampling_interval_bytes = 13;
-
- // Timestamp of the state of the target process that this dump represents.
- // This can be different to the timestamp of the TracePackets for various
- // reasons:
- // * If disconnected is set above, this is the timestamp of last state
- // heapprofd had of the process before it disconnected.
- // * Otherwise, if the rate of events produced by the process is high,
- // heapprofd might be behind.
- //
- // TODO(fmayer): This is MONOTONIC_COARSE. Refactor ClockSnapshot::Clock
- // to have a type enum that we can reuse here.
- optional uint64 timestamp = 9;
-
- // Metadata about heapprofd.
- optional ProcessStats stats = 5;
-
- repeated HeapSample samples = 2;
- }
-
- // If this is true, the next ProfilePacket in this package_sequence_id is a
- // continuation of this one.
- // To get all samples for a process, accummulate its
- // ProcessHeapSamples.samples until you see continued=false.
- optional bool continued = 6;
-
- // Index of this ProfilePacket on its package_sequence_id. Can be used
- // to detect dropped data.
- // Verify these are consecutive.
- optional uint64 index = 7;
-}
-
-message StreamingAllocation {
- // TODO(fmayer): Add callstack.
- repeated uint64 address = 1;
- repeated uint64 size = 2;
- repeated uint64 sample_size = 3;
- repeated uint64 clock_monotonic_coarse_timestamp = 4;
- repeated uint32 heap_id = 5;
- repeated uint64 sequence_number = 6;
-};
-
-message StreamingFree {
- // TODO(fmayer): Add callstack.
- repeated uint64 address = 1;
- repeated uint32 heap_id = 2;
- repeated uint64 sequence_number = 3;
-};
-
-// Message used to represent individual stack samples sampled at discrete
-// points in time, rather than aggregated over an interval.
-message StreamingProfilePacket {
- // Index into InternedData.callstacks
- repeated uint64 callstack_iid = 1;
- // TODO(eseckler): ThreadDescriptor-based timestamps are deprecated. Replace
- // this with ClockSnapshot-based delta encoding instead.
- repeated int64 timestamp_delta_us = 2;
- optional int32 process_priority = 3;
-}
-
-// Namespace for the contained enums.
-message Profiling {
- enum CpuMode {
- MODE_UNKNOWN = 0;
- MODE_KERNEL = 1;
- MODE_USER = 2;
- // The following values aren't expected, but included for completeness:
- MODE_HYPERVISOR = 3;
- MODE_GUEST_KERNEL = 4;
- MODE_GUEST_USER = 5;
- }
-
- // Enumeration of libunwindstack's error codes.
- // NB: the integral representations of the two enums are different.
- enum StackUnwindError {
- UNWIND_ERROR_UNKNOWN = 0;
- UNWIND_ERROR_NONE = 1;
- UNWIND_ERROR_MEMORY_INVALID = 2;
- UNWIND_ERROR_UNWIND_INFO = 3;
- UNWIND_ERROR_UNSUPPORTED = 4;
- UNWIND_ERROR_INVALID_MAP = 5;
- UNWIND_ERROR_MAX_FRAMES_EXCEEDED = 6;
- UNWIND_ERROR_REPEATED_FRAME = 7;
- UNWIND_ERROR_INVALID_ELF = 8;
- UNWIND_ERROR_SYSTEM_CALL = 9;
- UNWIND_ERROR_THREAD_TIMEOUT = 10;
- UNWIND_ERROR_THREAD_DOES_NOT_EXIST = 11;
- }
-}
-
-// Individual performance sampling packet payload. Typically corresponds to a
-// stack sample on a configration-dependent counter overflow.
-//
-// Timestamps are within the root packet. This used to use the CLOCK_BOOTTIME
-// domain, but now the default is CLOCK_MONOTONIC_RAW which is compatible with
-// more event types.
-//
-// There are several distinct views of this message:
-// * completely processed sample (callstack_iid set)
-// * indication of kernel buffer data loss (kernel_records_lost set)
-// * indication of skipped samples (sample_skipped_reason set)
-// * notable event in the sampling implementation (producer_event set)
-message PerfSample {
- optional uint32 cpu = 1;
- optional uint32 pid = 2;
- optional uint32 tid = 3;
-
- // Execution state that the process was sampled at.
- optional Profiling.CpuMode cpu_mode = 5;
-
- // Value of the timebase counter (since the event was configured, no deltas).
- optional uint64 timebase_count = 6;
-
- // Unwound callstack. Might be partial, in which case a synthetic "error"
- // frame is appended, and |unwind_error| is set accordingly.
- optional uint64 callstack_iid = 4;
-
- // If set, stack unwinding was incomplete due to an error.
- // Unset values should be treated as UNWIND_ERROR_NONE.
- oneof optional_unwind_error { Profiling.StackUnwindError unwind_error = 16; };
-
- // If set, indicates that this message is not a sample, but rather an
- // indication of data loss in the ring buffer allocated for |cpu|. Such data
- // loss occurs when the kernel has insufficient ring buffer capacity to write
- // a record (which gets discarded). A record in this context is an individual
- // ring buffer entry, and counts more than just sample records.
- //
- // The |timestamp| of the packet corresponds to the time that the producer
- // wrote the packet for trace-sorting purposes alone, and should not be
- // interpreted relative to the sample timestamps. This field is sufficient to
- // detect that *some* kernel data loss happened within the trace, but not the
- // specific time bounds of that loss (which would require tracking precedessor
- // & successor timestamps, which is not deemed necessary at the moment).
- optional uint64 kernel_records_lost = 17;
-
- // If set, indicates that the profiler encountered a sample that was relevant,
- // but was skipped.
- enum SampleSkipReason {
- PROFILER_SKIP_UNKNOWN = 0;
- PROFILER_SKIP_READ_STAGE = 1;
- PROFILER_SKIP_UNWIND_STAGE = 2;
- PROFILER_SKIP_UNWIND_ENQUEUE = 3;
- }
- oneof optional_sample_skipped_reason { SampleSkipReason sample_skipped_reason = 18; };
-
- // A notable event within the sampling implementation.
- message ProducerEvent {
- enum DataSourceStopReason {
- PROFILER_STOP_UNKNOWN = 0;
- PROFILER_STOP_GUARDRAIL = 1;
- }
- oneof optional_source_stop_reason { DataSourceStopReason source_stop_reason = 1; }
- }
- optional ProducerEvent producer_event = 19;
-}
-
-// Submessage for TracePacketDefaults.
-message PerfSampleDefaults {
- // The sampling timebase. Might not be identical to the data source config if
- // the implementation decided to default/override some parameters.
- optional PerfEvents.Timebase timebase = 1;
-}
-// End of protos/perfetto/trace/profiling/profile_packet.proto
-
-// Begin of protos/perfetto/trace/profiling/smaps.proto
-
-message SmapsEntry {
- optional string path = 1;
- optional uint64 size_kb = 2;
- optional uint64 private_dirty_kb = 3;
- optional uint64 swap_kb = 4;
-
- // for field upload (instead of path).
- optional string file_name = 5;
-
- // TODO(crbug.com/1098746): Consider encoding this as incremental values.
- optional uint64 start_address = 6;
- optional uint64 module_timestamp = 7;
- optional string module_debugid = 8;
- optional string module_debug_path = 9;
- optional uint32 protection_flags = 10;
-
- optional uint64 private_clean_resident_kb = 11;
- optional uint64 shared_dirty_resident_kb = 12;
- optional uint64 shared_clean_resident_kb = 13;
- optional uint64 locked_kb = 14;
- optional uint64 proportional_resident_kb = 15;
-};
-
-message SmapsPacket {
- optional uint32 pid = 1;
- repeated SmapsEntry entries = 2;
-};
-
-// End of protos/perfetto/trace/profiling/smaps.proto
-
-// Begin of protos/perfetto/trace/ps/process_stats.proto
-
-// Per-process periodically sampled stats. These samples are wrapped in a
-// dedicated message (as opposite to be fields in process_tree.proto) because
-// they are dumped at a different rate than cmdline and thread list.
-// Note: not all of these stats will be present in every ProcessStats message
-// and sometimes processes may be missing . This is because counters are
-// cached to reduce emission of counters which do not change.
-message ProcessStats {
- // Per-thread periodically sampled stats.
- // Note: not all of these stats will be present in every message. See the note
- // for ProcessStats.
- message Thread {
- optional int32 tid = 1;
-
- // Pairs of frequency (represented as a (1-based) index to CpuInfo
- // frequencies) and time at that frequency (represented as a number of
- // ticks, see SystemInfo for the HZ (ticks / second) value to convert this
- // to time). Frequencies with zero ticks are never uploaded. Read from
- // /proc/tid/time_in_state.
- repeated uint32 cpu_freq_indices = 2;
- repeated uint64 cpu_freq_ticks = 3;
- // Whether all frequencies with non-zero ticks are present in
- // `cpu_freq_indices`. This marker is used to detect packets that describe
- // time_in_state exhaustively.
- optional bool cpu_freq_full = 4;
- }
-
- message Process {
- optional int32 pid = 1;
-
- // See /proc/[pid]/status in `man 5 proc` for a description of these fields.
- optional uint64 vm_size_kb = 2;
- optional uint64 vm_rss_kb = 3;
- optional uint64 rss_anon_kb = 4;
- optional uint64 rss_file_kb = 5;
- optional uint64 rss_shmem_kb = 6;
- optional uint64 vm_swap_kb = 7;
- optional uint64 vm_locked_kb = 8;
- optional uint64 vm_hwm_kb = 9;
- // When adding a new field remember to update kProcMemCounterSize in
- // the trace processor.
-
- optional int64 oom_score_adj = 10;
-
- repeated Thread threads = 11;
-
- // The peak resident set size is resettable in newer Posix kernels.
- // This field specifies if reset is supported and if the writer had reset
- // the peaks after each process stats recording.
- optional bool is_peak_rss_resettable = 12;
-
- // Private, shared and swap footprint of the process as measured by
- // Chrome. To know more about these metrics refer to:
- // https://docs.google.com/document/d/1_WmgE1F5WUrhwkPqJis3dWyOiUmQKvpXp5cd4w86TvA
- optional uint32 chrome_private_footprint_kb = 13;
- optional uint32 chrome_peak_resident_set_kb = 14;
- }
- repeated Process processes = 1;
-
- // The time at which we finish collecting this batch of samples;
- // the top-level packet timestamp is the time at which
- // we begin collection.
- // TODO(dancol): analysis might be improved by
- // time-bracketing each sample as well as the whole
- // ProcessStats, but doing that is probably gated on
- // a vdso for CLOCK_BOOTTIME.
- optional uint64 collection_end_timestamp = 2;
-}
-
-// End of protos/perfetto/trace/ps/process_stats.proto
-
-// Begin of protos/perfetto/trace/ps/process_tree.proto
-
-// Metadata about the processes and threads in the trace.
-// Note: this proto was designed to be filled in by traced_probes and should
-// only be populated with accurate information coming from the system. Other
-// trace writers should prefer to fill ThreadDescriptor and ProcessDescriptor
-// in TrackDescriptor.
-message ProcessTree {
- // Representation of a thread.
- message Thread {
- // The thread id (as per gettid())
- optional int32 tid = 1;
-
- // Thread group id (i.e. the PID of the process, == TID of the main thread)
- optional int32 tgid = 3;
-
- // The name of the thread.
- optional string name = 2;
- }
-
- // Representation of a process.
- message Process {
- // The UNIX process ID, aka thread group ID (as per getpid()).
- optional int32 pid = 1;
-
- // The parent process ID, as per getppid().
- optional int32 ppid = 2;
-
- // The command line for the process, as per /proc/pid/cmdline.
- // If it is a kernel thread there will only be one cmdline field
- // and it will contain /proc/pid/comm.
- repeated string cmdline = 3;
-
- // No longer used as of Apr 2018, when the dedicated |threads| field was
- // introduced in ProcessTree.
- repeated Thread threads_deprecated = 4 [deprecated = true];
-
- // The uid for the process, as per /proc/pid/status.
- optional int32 uid = 5;
- }
-
- // List of processes and threads in the client. These lists are incremental
- // and not exhaustive. A process and its threads might show up separately in
- // different ProcessTree messages. A thread might event not show up at all, if
- // no sched_switch activity was detected, for instance:
- // #0 { processes: [{pid: 10, ...}], threads: [{pid: 11, tgid: 10}] }
- // #1 { threads: [{pid: 12, tgid: 10}] }
- // #2 { processes: [{pid: 20, ...}], threads: [{pid: 13, tgid: 10}] }
- repeated Process processes = 1;
- repeated Thread threads = 2;
-
- // The time at which we finish collecting this process tree;
- // the top-level packet timestamp is the time at which
- // we begin collection.
- optional uint64 collection_end_timestamp = 3;
-}
-
-// End of protos/perfetto/trace/ps/process_tree.proto
-
-// Begin of protos/perfetto/trace/sys_stats/sys_stats.proto
-
-// Various Linux system stat counters from /proc.
-// The fields in this message can be reported at different rates and with
-// different granularity. See sys_stats_config.proto.
-message SysStats {
- // Counters from /proc/meminfo. Values are in KB.
- message MeminfoValue {
- optional MeminfoCounters key = 1;
- optional uint64 value = 2;
- };
- repeated MeminfoValue meminfo = 1;
-
- // Counter from /proc/vmstat. Units are often pages, not KB.
- message VmstatValue {
- optional VmstatCounters key = 1;
- optional uint64 value = 2;
- };
- repeated VmstatValue vmstat = 2;
-
- // Times in each mode, since boot. Unit: nanoseconds.
- message CpuTimes {
- optional uint32 cpu_id = 1;
-
- // Time spent in user mode.
- optional uint64 user_ns = 2;
-
- // Time spent in user mode (low prio).
- optional uint64 user_ice_ns = 3;
-
- // Time spent in system mode.
- optional uint64 system_mode_ns = 4;
-
- // Time spent in the idle task.
- optional uint64 idle_ns = 5;
-
- // Time spent waiting for I/O.
- optional uint64 io_wait_ns = 6;
-
- // Time spent servicing interrupts.
- optional uint64 irq_ns = 7;
-
- // Time spent servicing softirqs.
- optional uint64 softirq_ns = 8;
- }
- // One entry per cpu.
- repeated CpuTimes cpu_stat = 3;
-
- // Num processes forked since boot.
- // Populated only if FORK_COUNT in config.stat_counters.
- optional uint64 num_forks = 4;
-
- message InterruptCount {
- optional int32 irq = 1;
- optional uint64 count = 2;
- }
-
- // Number of interrupts, broken by IRQ number.
- // Populated only if IRQ_COUNTS in config.stat_counters.
-
- // Total num of irqs serviced since boot.
- optional uint64 num_irq_total = 5;
- repeated InterruptCount num_irq = 6;
-
- // Number of softirqs, broken by softirq number.
- // Populated only if SOFTIRQ_COUNTS in config.stat_counters.
-
- // Total num of softirqs since boot.
- optional uint64 num_softirq_total = 7;
-
- // Per-softirq count.
- repeated InterruptCount num_softirq = 8;
-
- // The time at which we finish collecting this set of samples;
- // the top-level packet timestamp is the time at which
- // we begin collection.
- optional uint64 collection_end_timestamp = 9;
-
- // Frequencies for /sys/class/devfreq/ entries in kHz.
- message DevfreqValue {
- optional string key = 1;
- optional uint64 value = 2;
- };
-
- // One entry per device.
- repeated DevfreqValue devfreq = 10;
-}
-
-// End of protos/perfetto/trace/sys_stats/sys_stats.proto
-
-// Begin of protos/perfetto/trace/system_info.proto
-
-message Utsname {
- optional string sysname = 1;
- optional string version = 2;
- optional string release = 3;
- optional string machine = 4;
-}
-
-message SystemInfo {
- optional Utsname utsname = 1;
- optional string android_build_fingerprint = 2;
-
- // Ticks per second - sysconf(_SC_CLK_TCK).
- optional int64 hz = 3;
-
- // The version of traced (the same returned by `traced --version`).
- // This is a human readable string with and its format varies depending on
- // the build system and the repo (standalone vs AOSP).
- // This is intended for human debugging only.
- optional string tracing_service_version = 4;
-}
-
-// End of protos/perfetto/trace/system_info.proto
-
-// Begin of protos/perfetto/trace/system_info/cpu_info.proto
-
-// Information about CPUs from procfs and sysfs.
-message CpuInfo {
- // Information about a single CPU.
- message Cpu {
- // Value of "Processor" field from /proc/cpuinfo for this CPU.
- // Example: "AArch64 Processor rev 12 (aarch64)"
- optional string processor = 1;
-
- // Frequencies from
- // /sys/devices/system/cpu/cpuX/cpufreq/scaling_available_frequencies
- // where X is the index of this CPU.
- repeated uint32 frequencies = 2;
- }
-
- // Describes available CPUs, one entry per CPU.
- repeated Cpu cpus = 1;
-}
-
-// End of protos/perfetto/trace/system_info/cpu_info.proto
-
-// Begin of protos/perfetto/trace/test_event.proto
-
-// Event used by testing code.
-message TestEvent {
- // Arbitrary string used in tests.
- optional string str = 1;
-
- // The current value of the random number sequence used in tests.
- optional uint32 seq_value = 2;
-
- // Monotonically increased on each packet.
- optional uint64 counter = 3;
-
- // No more packets should follow (from the current sequence).
- optional bool is_last = 4;
-
- message TestPayload {
- repeated string str = 1;
- repeated TestPayload nested = 2;
-
- optional string single_string = 4;
-
- optional int32 single_int = 5;
- repeated int32 repeated_ints = 6;
-
- // When 0 this is the bottom-most nested message.
- optional uint32 remaining_nesting_depth = 3;
- }
- optional TestPayload payload = 5;
-}
-
-// End of protos/perfetto/trace/test_event.proto
-
-// Begin of protos/perfetto/trace/trace_packet_defaults.proto
-
-// Default values for TracePacket fields that hold for a particular TraceWriter
-// packet sequence. This message contains a subset of the TracePacket fields
-// with matching IDs. When provided, these fields define the default values
-// that should be applied, at import time, to all TracePacket(s) with the same
-// |trusted_packet_sequence_id|, unless otherwise specified in each packet.
-//
-// Should be reemitted whenever incremental state is cleared on the sequence.
-message TracePacketDefaults {
- optional uint32 timestamp_clock_id = 58;
-
- // Default values for TrackEvents (e.g. default track).
- optional TrackEventDefaults track_event_defaults = 11;
-
- // Defaults for perf profiler packets (PerfSample).
- optional PerfSampleDefaults perf_sample_defaults = 12;
-}
-// End of protos/perfetto/trace/trace_packet_defaults.proto
-
-// Begin of protos/perfetto/trace/track_event/process_descriptor.proto
-
-// Describes a process's attributes. Emitted as part of a TrackDescriptor,
-// usually by the process's main thread.
-//
-// Next id: 8.
-message ProcessDescriptor {
- optional int32 pid = 1;
- repeated string cmdline = 2;
- optional string process_name = 6;
-
- optional int32 process_priority = 5;
- // Process start time in nanoseconds.
- // The timestamp refers to the trace clock by default. Other clock IDs
- // provided in TracePacket are not supported.
- optional int64 start_timestamp_ns = 7;
-
- // ---------------------------------------------------------------------------
- // Deprecated / legacy fields, which will be removed in the future:
- // ---------------------------------------------------------------------------
-
- // See chromium's content::ProcessType.
- enum ChromeProcessType {
- PROCESS_UNSPECIFIED = 0;
- PROCESS_BROWSER = 1;
- PROCESS_RENDERER = 2;
- PROCESS_UTILITY = 3;
- PROCESS_ZYGOTE = 4;
- PROCESS_SANDBOX_HELPER = 5;
- PROCESS_GPU = 6;
- PROCESS_PPAPI_PLUGIN = 7;
- PROCESS_PPAPI_BROKER = 8;
- }
- optional ChromeProcessType chrome_process_type = 4;
-
- // To support old UI. New UI should determine default sorting by process_type.
- optional int32 legacy_sort_index = 3;
-}
-
-// End of protos/perfetto/trace/track_event/process_descriptor.proto
-
-// Begin of protos/perfetto/trace/track_event/thread_descriptor.proto
-
-// Describes a thread's attributes. Emitted as part of a TrackDescriptor,
-// usually by the thread's trace writer.
-//
-// Next id: 9.
-message ThreadDescriptor {
- optional int32 pid = 1;
- optional int32 tid = 2;
-
- optional string thread_name = 5;
-
- // ---------------------------------------------------------------------------
- // Deprecated / legacy fields, which will be removed in the future:
- // ---------------------------------------------------------------------------
-
- enum ChromeThreadType {
- CHROME_THREAD_UNSPECIFIED = 0;
-
- CHROME_THREAD_MAIN = 1;
- CHROME_THREAD_IO = 2;
-
- // Scheduler:
- CHROME_THREAD_POOL_BG_WORKER = 3;
- CHROME_THREAD_POOL_FG_WORKER = 4;
- CHROME_THREAD_POOL_FB_BLOCKING = 5;
- CHROME_THREAD_POOL_BG_BLOCKING = 6;
- CHROME_THREAD_POOL_SERVICE = 7;
-
- // Compositor:
- CHROME_THREAD_COMPOSITOR = 8;
- CHROME_THREAD_VIZ_COMPOSITOR = 9;
- CHROME_THREAD_COMPOSITOR_WORKER = 10;
-
- // Renderer:
- CHROME_THREAD_SERVICE_WORKER = 11;
-
- // Tracing related threads:
- CHROME_THREAD_MEMORY_INFRA = 50;
- CHROME_THREAD_SAMPLING_PROFILER = 51;
- };
- optional ChromeThreadType chrome_thread_type = 4;
-
- // Deprecated. Use ClockSnapshot in combination with TracePacket's timestamp
- // and timestamp_clock_id fields instead.
- optional int64 reference_timestamp_us = 6;
-
- // Absolute reference values. Clock values in subsequent TrackEvents can be
- // encoded accumulatively and relative to these. This reduces their var-int
- // encoding size.
- // TODO(eseckler): Deprecated. Replace these with ClockSnapshot encoding.
- optional int64 reference_thread_time_us = 7;
- optional int64 reference_thread_instruction_count = 8;
-
- // To support old UI. New UI should determine default sorting by thread_type.
- optional int32 legacy_sort_index = 3;
-}
-
-// End of protos/perfetto/trace/track_event/thread_descriptor.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_process_descriptor.proto
-
-// Describes the attributes for a Chrome process. Must be paired with a
-// ProcessDescriptor in the same TrackDescriptor.
-//
-// Next id: 6.
-message ChromeProcessDescriptor {
- // See chromium's content::ProcessType.
- enum ProcessType {
- PROCESS_UNSPECIFIED = 0;
- PROCESS_BROWSER = 1;
- PROCESS_RENDERER = 2;
- PROCESS_UTILITY = 3;
- PROCESS_ZYGOTE = 4;
- PROCESS_SANDBOX_HELPER = 5;
- PROCESS_GPU = 6;
- PROCESS_PPAPI_PLUGIN = 7;
- PROCESS_PPAPI_BROKER = 8;
- PROCESS_SERVICE_NETWORK = 9;
- PROCESS_SERVICE_TRACING = 10;
- PROCESS_SERVICE_STORAGE = 11;
- PROCESS_SERVICE_AUDIO = 12;
- PROCESS_SERVICE_DATA_DECODER = 13;
- PROCESS_SERVICE_UTIL_WIN = 14;
- PROCESS_SERVICE_PROXY_RESOLVER = 15;
- PROCESS_SERVICE_CDM = 16;
- PROCESS_SERVICE_VIDEO_CAPTURE = 17;
- PROCESS_SERVICE_UNZIPPER = 18;
- PROCESS_SERVICE_MIRRORING = 19;
- PROCESS_SERVICE_FILEPATCHER = 20;
- PROCESS_SERVICE_TTS = 21;
- PROCESS_SERVICE_PRINTING = 22;
- PROCESS_SERVICE_QUARANTINE = 23;
- PROCESS_SERVICE_CROS_LOCALSEARCH = 24;
- PROCESS_SERVICE_CROS_ASSISTANT_AUDIO_DECODER = 25;
- PROCESS_SERVICE_FILEUTIL = 26;
- PROCESS_SERVICE_PRINTCOMPOSITOR = 27;
- PROCESS_SERVICE_PAINTPREVIEW = 28;
- PROCESS_SERVICE_SPEECHRECOGNITION = 29;
- PROCESS_SERVICE_XRDEVICE = 30;
- PROCESS_SERVICE_READICON = 31;
- PROCESS_SERVICE_LANGUAGEDETECTION = 32;
- PROCESS_SERVICE_SHARING = 33;
- PROCESS_SERVICE_MEDIAPARSER = 34;
- PROCESS_SERVICE_QRCODEGENERATOR = 35;
- PROCESS_SERVICE_PROFILEIMPORT = 36;
- PROCESS_SERVICE_IME = 37;
- PROCESS_SERVICE_RECORDING = 38;
- PROCESS_SERVICE_SHAPEDETECTION = 39;
- }
- optional ProcessType process_type = 1;
- optional int32 process_priority = 2;
-
- // To support old UI. New UI should determine default sorting by process_type.
- optional int32 legacy_sort_index = 3;
-
- // Name of the hosting app for WebView. Used to match renderer processes to
- // their hosting apps.
- optional string host_app_package_name = 4;
-
- // The ID to link crashes to trace.
- // Notes:
- // * The ID is per process. So, each trace may contain many IDs, and you need
- // to look for the ID from crashed process to find the crash report.
- // * Having a "chrome-trace-id" in crash doesn't necessarily mean we can
- // get an uploaded trace, since uploads could have failed.
- // * On the other hand, if there was a crash during the session and trace was
- // uploaded, it is very likely to find a crash report with the trace ID.
- // * This is not crash ID or trace ID. It is just a random 64-bit number
- // recorded in both traces and crashes. It is possible to have collisions,
- // though very rare.
- optional uint64 crash_trace_id = 5;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_process_descriptor.proto
-
-// Begin of protos/perfetto/trace/track_event/chrome_thread_descriptor.proto
-
-// Describes a Chrome thread's attributes. Emitted as part of a TrackDescriptor,
-// usually by the thread's trace writer. Must be paired with a ThreadDescriptor
-// in the same TrackDescriptor.
-//
-// Next id: 3.
-message ChromeThreadDescriptor {
- enum ThreadType {
- THREAD_UNSPECIFIED = 0;
-
- THREAD_MAIN = 1;
- THREAD_IO = 2;
-
- THREAD_POOL_BG_WORKER = 3;
- THREAD_POOL_FG_WORKER = 4;
- THREAD_POOL_FG_BLOCKING = 5;
- THREAD_POOL_BG_BLOCKING = 6;
- THREAD_POOL_SERVICE = 7;
-
- THREAD_COMPOSITOR = 8;
- THREAD_VIZ_COMPOSITOR = 9;
- THREAD_COMPOSITOR_WORKER = 10;
-
- THREAD_SERVICE_WORKER = 11;
- THREAD_NETWORK_SERVICE = 12;
-
- THREAD_CHILD_IO = 13;
- THREAD_BROWSER_IO = 14;
-
- THREAD_BROWSER_MAIN = 15;
- THREAD_RENDERER_MAIN = 16;
- THREAD_UTILITY_MAIN = 17;
- THREAD_GPU_MAIN = 18;
-
- THREAD_CACHE_BLOCKFILE = 19;
- THREAD_MEDIA = 20;
- THREAD_AUDIO_OUTPUTDEVICE = 21;
- THREAD_AUDIO_INPUTDEVICE = 22;
- THREAD_GPU_MEMORY = 23;
- THREAD_GPU_VSYNC = 24;
- THREAD_DXA_VIDEODECODER = 25;
- THREAD_BROWSER_WATCHDOG = 26;
- THREAD_WEBRTC_NETWORK = 27;
- THREAD_WINDOW_OWNER = 28;
- THREAD_WEBRTC_SIGNALING = 29;
- THREAD_WEBRTC_WORKER = 30;
- THREAD_PPAPI_MAIN = 31;
- THREAD_GPU_WATCHDOG = 32;
- THREAD_SWAPPER = 33;
- THREAD_GAMEPAD_POLLING = 34;
- THREAD_WEBCRYPTO = 35;
- THREAD_DATABASE = 36;
- THREAD_PROXYRESOLVER = 37;
- THREAD_DEVTOOLSADB = 38;
- THREAD_NETWORKCONFIGWATCHER = 39;
- THREAD_WASAPI_RENDER = 40;
-
- THREAD_MEMORY_INFRA = 50;
- THREAD_SAMPLING_PROFILER = 51;
- };
-
- optional ThreadType thread_type = 1;
-
- // To support old UI. New UI should determine default sorting by thread_type.
- optional int32 legacy_sort_index = 2;
-}
-
-// End of protos/perfetto/trace/track_event/chrome_thread_descriptor.proto
-
-// Begin of protos/perfetto/trace/track_event/counter_descriptor.proto
-
-// Defines properties of a counter track, e.g. for built-in counters (thread
-// time, instruction count, ..) or user-specified counters (e.g. memory usage of
-// a specific app component).
-//
-// Counter tracks only support TYPE_COUNTER track events, which specify new
-// values for the counter. For counters that require per-slice values, counter
-// values can instead be provided in a more efficient encoding via TrackEvent's
-// |extra_counter_track_uuids| and |extra_counter_values| fields. However,
-// slice-type events cannot be emitted onto a counter track.
-//
-// Values for counters that are only emitted on a single packet sequence can
-// optionally be delta-encoded, see |is_incremental|.
-//
-// Next id: 7.
-message CounterDescriptor {
- // Built-in counters, usually with special meaning in the client library,
- // trace processor, legacy JSON format, or UI. Trace processor will infer a
- // track name from the enum value if none is provided in TrackDescriptor.
- enum BuiltinCounterType {
- COUNTER_UNSPECIFIED = 0;
-
- // Thread-scoped counters. The thread's track should be specified via
- // |parent_uuid| in the TrackDescriptor for such a counter.
-
- // implies UNIT_TIME_NS.
- COUNTER_THREAD_TIME_NS = 1;
-
- // implies UNIT_COUNT.
- COUNTER_THREAD_INSTRUCTION_COUNT = 2;
- }
-
- // Type of the values for the counters - to supply lower granularity units,
- // see also |unit_multiplier|.
- enum Unit {
- UNIT_UNSPECIFIED = 0;
- UNIT_TIME_NS = 1;
- UNIT_COUNT = 2;
- UNIT_SIZE_BYTES = 3;
- // TODO(eseckler): Support more units as necessary.
- }
-
- // For built-in counters (e.g. thread time). Custom user-specified counters
- // (e.g. those emitted by TRACE_COUNTER macros of the client library)
- // shouldn't set this, and instead provide a counter name via TrackDescriptor.
- optional BuiltinCounterType type = 1;
-
- // Names of categories of the counter (usually for user-specified counters).
- // In the client library, categories are a way to turn groups of individual
- // counters (or events) on or off.
- repeated string categories = 2;
-
- // Type of the counter's values. Built-in counters imply a value for this
- // field.
- optional Unit unit = 3;
-
- // In order to use a unit not defined as a part of |Unit|, a free-form unit
- // name can be used instead.
- optional string unit_name = 6;
-
- // Multiplication factor of this counter's values, e.g. to supply
- // COUNTER_THREAD_TIME_NS timestamps in microseconds instead.
- optional int64 unit_multiplier = 4;
-
- // Whether values for this counter are provided as delta values. Only
- // supported for counters that are emitted on a single packet-sequence (e.g.
- // thread time). Counter values in subsequent packets on the current packet
- // sequence will be interpreted as delta values from the sequence's most
- // recent value for the counter. When incremental state is cleared, the
- // counter value is considered to be reset to 0. Thus, the first value after
- // incremental state is cleared is effectively an absolute value.
- optional bool is_incremental = 5;
-
- // TODO(eseckler): Support arguments describing the counter (?).
- // repeated DebugAnnotation debug_annotations;
-}
-
-// End of protos/perfetto/trace/track_event/counter_descriptor.proto
-
-// Begin of protos/perfetto/trace/track_event/track_descriptor.proto
-
-// Defines a track for TrackEvents. Slices and instant events on the same track
-// will be nested based on their timestamps, see TrackEvent::Type.
-//
-// A TrackDescriptor only needs to be emitted by one trace writer / producer and
-// is valid for the entirety of the trace. To ensure the descriptor isn't lost
-// when the ring buffer wraps, it should be reemitted whenever incremental state
-// is cleared.
-//
-// As a fallback, TrackEvents emitted without an explicit track association will
-// be associated with an implicit trace-global track (uuid = 0), see also
-// |TrackEvent::track_uuid|. It is possible but not necessary to emit a
-// TrackDescriptor for this implicit track.
-//
-// Next id: 9.
-message TrackDescriptor {
- // Unique ID that identifies this track. This ID is global to the whole trace.
- // Producers should ensure that it is unlikely to clash with IDs emitted by
- // other producers. A value of 0 denotes the implicit trace-global track.
- //
- // For example, legacy TRACE_EVENT macros may use a hash involving the async
- // event id + id_scope, pid, and/or tid to compute this ID.
- optional uint64 uuid = 1;
-
- // A parent track reference can be used to describe relationships between
- // tracks. For example, to define an asynchronous track which is scoped to a
- // specific process, specify the uuid for that process's process track here.
- // Similarly, to associate a COUNTER_THREAD_TIME_NS counter track with a
- // thread, specify the uuid for that thread's thread track here.
- optional uint64 parent_uuid = 5;
-
- // Name of the track. Optional - if unspecified, it may be derived from the
- // process/thread name (process/thread tracks), the first event's name (async
- // tracks), or counter name (counter tracks).
- optional string name = 2;
-
- // Associate the track with a process, making it the process-global track.
- // There should only be one such track per process (usually for instant
- // events; trace processor uses this fact to detect pid reuse). If you need
- // more (e.g. for asynchronous events), create child tracks using parent_uuid.
- //
- // Trace processor will merge events on a process track with slice-type events
- // from other sources (e.g. ftrace) for the same process into a single
- // timeline view.
- optional ProcessDescriptor process = 3;
- optional ChromeProcessDescriptor chrome_process = 6;
-
- // Associate the track with a thread, indicating that the track's events
- // describe synchronous code execution on the thread. There should only be one
- // such track per thread (trace processor uses this fact to detect tid reuse).
- //
- // Trace processor will merge events on a thread track with slice-type events
- // from other sources (e.g. ftrace) for the same thread into a single timeline
- // view.
- optional ThreadDescriptor thread = 4;
- optional ChromeThreadDescriptor chrome_thread = 7;
-
- // Descriptor for a counter track. If set, the track will only support
- // TYPE_COUNTER TrackEvents (and values provided via TrackEvent's
- // |extra_counter_values|).
- optional CounterDescriptor counter = 8;
-}
-
-// End of protos/perfetto/trace/track_event/track_descriptor.proto
-
-// Begin of protos/perfetto/trace/trigger.proto
-
-// When a TracingSession receives a trigger it records the boot time nanoseconds
-// in the TracePacket's timestamp field as well as the name of the producer that
-// triggered it. We emit this data so filtering can be done on triggers received
-// in the trace.
-message Trigger {
- // Name of the trigger which was received.
- optional string trigger_name = 1;
- // The actual producer that activated |trigger|.
- optional string producer_name = 2;
- // The verified UID of the producer.
- optional int32 trusted_producer_uid = 3;
-}
-
-// End of protos/perfetto/trace/trigger.proto
-
-// Begin of protos/perfetto/trace/ui_state.proto
-
-// Common state for UIs visualizing Perfetto traces.
-// This message can be appended as a TracePacket by UIs to save the
-// visible state (e.g. scroll position/zoom state) for future opening
-// of the trace.
-// Design doc: go/trace-ui-state.
-message UiState {
- // The start and end bounds of the viewport of the UI in nanoseconds.
- //
- // This is the absolute time associated to slices and other events in
- // trace processor tables (i.e. the |ts| column of most tables)
- optional int64 timeline_start_ts = 1;
- optional int64 timeline_end_ts = 2;
-
- // Indicates that the given process should be highlighted by the UI.
- message HighlightProcess {
- oneof selector {
- // The pid of the process to highlight. This is useful for UIs to focus
- // on tracks of a particular process in the trace.
- //
- // If more than one process in a trace has the same pid, it is UI
- // implementation specific how the process to be focused will be
- // chosen.
- uint32 pid = 1;
-
- // The command line of the process to highlight; for most Android apps,
- // this is the package name of the app. This is useful for UIs to focus
- // on a particular app in the trace.
- //
- // If more than one process hasthe same cmdline, it is UI implementation
- // specific how the process to be focused will be chosen.
- string cmdline = 2;
- }
- }
- optional HighlightProcess highlight_process = 3;
-}
-// End of protos/perfetto/trace/ui_state.proto
-
-// Begin of protos/perfetto/trace/trace_packet.proto
-
-// TracePacket is the root object of a Perfeto trace.
-// A Perfetto trace is a linear sequence of TracePacket(s).
-//
-// The tracing service guarantees that all TracePacket(s) written by a given
-// TraceWriter are seen in-order, without gaps or duplicates. If, for any
-// reason, a TraceWriter sequence becomes invalid, no more packets are returned
-// to the Consumer (or written into the trace file).
-// TracePacket(s) written by different TraceWriter(s), hence even different
-// data sources, can be seen in arbitrary order.
-// The consumer can re-establish a total order, if interested, using the packet
-// timestamps, after having synchronized the different clocks onto a global
-// clock.
-//
-// The tracing service is agnostic of the content of TracePacket, with the
-// exception of few fields (e.g.. trusted_*, trace_config) that are written by
-// the service itself.
-//
-// See the [Buffers and Dataflow](/docs/concepts/buffers.md) doc for details.
-//
-// Next reserved id: 14 (up to 15).
-// Next id: 79.
-message TracePacket {
- // The timestamp of the TracePacket.
- // By default this timestamps refers to the trace clock (CLOCK_BOOTTIME on
- // Android). It can be overridden using a different timestamp_clock_id.
- // The clock domain definition in ClockSnapshot can also override:
- // - The unit (default: 1ns).
- // - The absolute vs delta encoding (default: absolute timestamp).
- optional uint64 timestamp = 8;
-
- // Specifies the ID of the clock used for the TracePacket |timestamp|. Can be
- // one of the built-in types from ClockSnapshot::BuiltinClocks, or a
- // producer-defined clock id.
- // If unspecified and if no default per-sequence value has been provided via
- // TracePacketDefaults, it defaults to BuiltinClocks::BOOTTIME.
- optional uint32 timestamp_clock_id = 58;
-
- oneof data {
- ProcessTree process_tree = 2;
- ProcessStats process_stats = 9;
- InodeFileMap inode_file_map = 4;
- ChromeEventBundle chrome_events = 5;
- ClockSnapshot clock_snapshot = 6;
- SysStats sys_stats = 7;
- TrackEvent track_event = 11;
-
- // IDs up to 15 are reserved. They take only one byte to encode their
- // preamble so should be used for frequent events.
-
- TraceConfig trace_config = 33;
- FtraceStats ftrace_stats = 34;
- TraceStats trace_stats = 35;
- ProfilePacket profile_packet = 37;
- StreamingAllocation streaming_allocation = 74;
- StreamingFree streaming_free = 75;
- BatteryCounters battery = 38;
- PowerRails power_rails = 40;
- AndroidLogPacket android_log = 39;
- SystemInfo system_info = 45;
- Trigger trigger = 46;
- PackagesList packages_list = 47;
- ChromeBenchmarkMetadata chrome_benchmark_metadata = 48;
- PerfettoMetatrace perfetto_metatrace = 49;
- ChromeMetadataPacket chrome_metadata = 51;
- GpuCounterEvent gpu_counter_event = 52;
- GpuRenderStageEvent gpu_render_stage_event = 53;
- StreamingProfilePacket streaming_profile_packet = 54;
- HeapGraph heap_graph = 56;
- GraphicsFrameEvent graphics_frame_event = 57;
- VulkanMemoryEvent vulkan_memory_event = 62;
- GpuLog gpu_log = 63;
- VulkanApiEvent vulkan_api_event = 65;
- PerfSample perf_sample = 66;
- CpuInfo cpu_info = 67;
- SmapsPacket smaps_packet = 68;
- TracingServiceEvent service_event = 69;
- InitialDisplayState initial_display_state = 70;
- GpuMemTotalEvent gpu_mem_total_event = 71;
- MemoryTrackerSnapshot memory_tracker_snapshot = 73;
- FrameTimelineEvent frame_timeline_event = 76;
- AndroidEnergyEstimationBreakdown android_energy_estimation_breakdown = 77;
- UiState ui_state = 78;
-
- // Only used in profile packets.
- ProfiledFrameSymbols profiled_frame_symbols = 55;
- ModuleSymbols module_symbols = 61;
- DeobfuscationMapping deobfuscation_mapping = 64;
-
- // Only used by TrackEvent.
- TrackDescriptor track_descriptor = 60;
-
- // Deprecated, use TrackDescriptor instead.
- ProcessDescriptor process_descriptor = 43;
-
- // Deprecated, use TrackDescriptor instead.
- ThreadDescriptor thread_descriptor = 44;
-
- // Events from the Linux kernel ftrace infrastructure.
- FtraceEventBundle ftrace_events = 1;
-
- // This field is emitted at periodic intervals (~10s) and
- // contains always the binary representation of the UUID
- // {82477a76-b28d-42ba-81dc-33326d57a079}. This is used to be able to
- // efficiently partition long traces without having to fully parse them.
- bytes synchronization_marker = 36;
-
- // Zero or more proto encoded trace packets compressed using deflate.
- // Each compressed_packets TracePacket (including the two field ids and
- // sizes) should be less than 512KB.
- bytes compressed_packets = 50;
-
- // Data sources can extend the trace proto with custom extension protos (see
- // docs/design-docs/extensions.md). When they do that, the descriptor of
- // their extension proto descriptor is serialized in this packet. This
- // allows trace_processor to deserialize extended messages using reflection
- // even if the extension proto is not checked in the Perfetto repo.
- ExtensionDescriptor extension_descriptor = 72;
-
- // This field is only used for testing.
- // In previous versions of this proto this field had the id 268435455
- // This caused many problems:
- // - protozero decoder does not handle field ids larger than 999.
- // - old versions of protoc produce Java bindings with syntax errors when
- // the field id is large enough.
- TestEvent for_testing = 900;
- }
-
- // Trusted user id of the producer which generated this packet. Keep in sync
- // with TrustedPacket.trusted_uid.
- //
- // TODO(eseckler): Emit this field in a PacketSequenceDescriptor message
- // instead.
- oneof optional_trusted_uid { int32 trusted_uid = 3; };
-
- // Service-assigned identifier of the packet sequence this packet belongs to.
- // Uniquely identifies a producer + writer pair within the tracing session. A
- // value of zero denotes an invalid ID. Keep in sync with
- // TrustedPacket.trusted_packet_sequence_id.
- oneof optional_trusted_packet_sequence_id { uint32 trusted_packet_sequence_id = 10; }
-
- // Incrementally emitted interned data, valid only on the packet's sequence
- // (packets with the same |trusted_packet_sequence_id|). The writer will
- // usually emit new interned data in the same TracePacket that first refers to
- // it (since the last reset of interning state). It may also be emitted
- // proactively in advance of referring to them in later packets.
- optional InternedData interned_data = 12;
-
- enum SequenceFlags {
- SEQ_UNSPECIFIED = 0;
-
- // Set by the writer to indicate that it will re-emit any incremental data
- // for the packet's sequence before referring to it again. This includes
- // interned data as well as periodically emitted data like
- // Process/ThreadDescriptors. This flag only affects the current packet
- // sequence (see |trusted_packet_sequence_id|).
- //
- // When set, this TracePacket and subsequent TracePackets on the same
- // sequence will not refer to any incremental data emitted before this
- // TracePacket. For example, previously emitted interned data will be
- // re-emitted if it is referred to again.
- //
- // When the reader detects packet loss (|previous_packet_dropped|), it needs
- // to skip packets in the sequence until the next one with this flag set, to
- // ensure intact incremental data.
- SEQ_INCREMENTAL_STATE_CLEARED = 1;
-
- // This packet requires incremental state, such as TracePacketDefaults or
- // InternedData, to be parsed correctly. The trace reader should skip this
- // packet if incremental state is not valid on this sequence, i.e. if no
- // packet with the SEQ_INCREMENTAL_STATE_CLEARED flag has been seen on the
- // current |trusted_packet_sequence_id|.
- SEQ_NEEDS_INCREMENTAL_STATE = 2;
- };
- optional uint32 sequence_flags = 13;
-
- // DEPRECATED. Moved to SequenceFlags::SEQ_INCREMENTAL_STATE_CLEARED.
- optional bool incremental_state_cleared = 41;
-
- // Default values for fields of later TracePackets emitted on this packet's
- // sequence (TracePackets with the same |trusted_packet_sequence_id|).
- // It must be reemitted when incremental state is cleared (see
- // |incremental_state_cleared|).
- // Requires that any future packet emitted on the same sequence specifies
- // the SEQ_NEEDS_INCREMENTAL_STATE flag.
- // TracePacketDefaults always override the global defaults for any future
- // packet on this sequence (regardless of SEQ_NEEDS_INCREMENTAL_STATE).
- optional TracePacketDefaults trace_packet_defaults = 59;
-
- // Flag set by the service if, for the current packet sequence (see
- // |trusted_packet_sequence_id|), either:
- // * this is the first packet, or
- // * one or multiple packets were dropped since the last packet that the
- // consumer read from the sequence. This can happen if chunks in the trace
- // buffer are overridden before the consumer could read them when the trace
- // is configured in ring buffer mode.
- //
- // When packet loss occurs, incrementally emitted data (including interned
- // data) on the sequence should be considered invalid up until the next packet
- // with SEQ_INCREMENTAL_STATE_CLEARED set.
- optional bool previous_packet_dropped = 42;
-}
-
-// End of protos/perfetto/trace/trace_packet.proto
-
-// Begin of protos/perfetto/trace/trace.proto
-
-message Trace {
- repeated TracePacket packet = 1;
-
- // Do NOT add any other field here. This is just a convenience wrapper for
- // the use case of a trace being saved to a file. There are other cases
- // (streaming) where TracePacket are directly streamed without being wrapped
- // in a Trace proto. Nothing should ever rely on the full trace, all the
- // logic should be based on TracePacket(s).
-}
-
-// End of protos/perfetto/trace/trace.proto