[tracing] Add feature param for perfetto buffer params
To experiment with data loss / performance balance. bug: 40574594 Change-Id: I327c9281a717057cc36c8a4db38a8f3cbb74661c Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6318180 Commit-Queue: Etienne Pierre-Doray <etiennep@chromium.org> Reviewed-by: Mikhail Khokhlov <khokhlov@google.com> Cr-Commit-Position: refs/heads/main@{#1427748}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
5946483134
commit
cbce8ba72f
services/tracing/public/cpp
@ -8,6 +8,7 @@
|
||||
#include "base/command_line.h"
|
||||
#include "base/containers/flat_map.h"
|
||||
#include "base/containers/flat_set.h"
|
||||
#include "base/feature_list.h"
|
||||
#include "base/memory/ptr_util.h"
|
||||
#include "base/memory/raw_ptr.h"
|
||||
#include "base/memory/shared_memory_switch.h"
|
||||
@ -22,6 +23,7 @@
|
||||
#include "mojo/public/cpp/system/data_pipe_drainer.h"
|
||||
#include "services/tracing/public/cpp/perfetto/shared_memory.h"
|
||||
#include "services/tracing/public/cpp/perfetto/trace_packet_tokenizer.h"
|
||||
#include "services/tracing/public/cpp/tracing_features.h"
|
||||
#include "services/tracing/public/mojom/perfetto_service.mojom.h"
|
||||
#include "services/tracing/public/mojom/tracing_service.mojom.h"
|
||||
#include "third_party/perfetto/include/perfetto/base/task_runner.h"
|
||||
@ -40,15 +42,6 @@ using ShmemMode = perfetto::SharedMemoryArbiter::ShmemMode;
|
||||
namespace tracing {
|
||||
namespace {
|
||||
|
||||
// TODO(crbug.com/40574593): Find a good compromise between performance and
|
||||
// data granularity (mainly relevant to running with small buffer sizes
|
||||
// when we use background tracing) on Android.
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
constexpr size_t kDefaultSMBPageSizeBytes = 4 * 1024;
|
||||
#else
|
||||
constexpr size_t kDefaultSMBPageSizeBytes = 32 * 1024;
|
||||
#endif
|
||||
|
||||
constexpr char kErrorTracingFailed[] = "Tracing failed";
|
||||
|
||||
} // namespace
|
||||
@ -686,9 +679,9 @@ PerfettoTracingBackend::ConnectProducer(const ConnectProducerArgs& args) {
|
||||
uint32_t shmem_size_hint = args.shmem_size_hint_bytes;
|
||||
uint32_t shmem_page_size_hint = args.shmem_page_size_hint_bytes;
|
||||
if (shmem_size_hint == 0)
|
||||
shmem_size_hint = kDefaultSharedMemorySize;
|
||||
shmem_size_hint = features::kPerfettoSharedMemorySizeBytes.Get();
|
||||
if (shmem_page_size_hint == 0)
|
||||
shmem_page_size_hint = kDefaultSMBPageSizeBytes;
|
||||
shmem_page_size_hint = features::kPerfettoSMBPageSizeBytes.Get();
|
||||
|
||||
if (args.use_producer_provided_smb) {
|
||||
auto* command_line = base::CommandLine::ForCurrentProcess();
|
||||
|
@ -14,9 +14,6 @@
|
||||
|
||||
namespace tracing {
|
||||
|
||||
// TODO(crbug.com/40574594): Figure out a good buffer size.
|
||||
inline constexpr size_t kDefaultSharedMemorySize = 4 * 1024 * 1024; // 4 KB
|
||||
|
||||
// This wraps //base's shmem implementation for Perfetto to consume.
|
||||
class COMPONENT_EXPORT(TRACING_CPP) ChromeBaseSharedMemory
|
||||
: public perfetto::SharedMemory {
|
||||
|
@ -167,7 +167,8 @@ base::UnsafeSharedMemoryRegion CreateTracingOutputSharedMemory() {
|
||||
}
|
||||
#endif // DCHECK_IS_ON()
|
||||
|
||||
auto shm = base::UnsafeSharedMemoryRegion::Create(kDefaultSharedMemorySize);
|
||||
auto shm = base::UnsafeSharedMemoryRegion::Create(
|
||||
features::kPerfettoSharedMemorySizeBytes.Get());
|
||||
if (!shm.IsValid()) {
|
||||
return base::UnsafeSharedMemoryRegion();
|
||||
}
|
||||
|
@ -20,6 +20,7 @@
|
||||
#include "services/tracing/public/cpp/perfetto/shared_memory.h"
|
||||
#include "services/tracing/public/cpp/trace_startup.h"
|
||||
#include "services/tracing/public/cpp/trace_startup_config.h"
|
||||
#include "services/tracing/public/cpp/tracing_features.h"
|
||||
#include "testing/gtest/include/gtest/gtest.h"
|
||||
#include "testing/multiprocess_func_list.h"
|
||||
|
||||
@ -41,7 +42,7 @@ TEST(TraceStartupSharedMemoryTest, Create) {
|
||||
auto shared_memory = CreateTracingOutputSharedMemory();
|
||||
|
||||
ASSERT_TRUE(shared_memory.IsValid());
|
||||
EXPECT_EQ(kDefaultSharedMemorySize, shared_memory.GetSize());
|
||||
EXPECT_EQ(kDefaultSharedMemorySizeBytes, shared_memory.GetSize());
|
||||
}
|
||||
|
||||
MULTIPROCESS_TEST_MAIN(InitFromLaunchParameters) {
|
||||
@ -82,7 +83,7 @@ MULTIPROCESS_TEST_MAIN(InitFromLaunchParameters) {
|
||||
auto shmem_region = base::shared_memory::UnsafeSharedMemoryRegionFrom(
|
||||
command_line->GetSwitchValueASCII(switches::kTraceBufferHandle));
|
||||
EXPECT_TRUE(shmem_region->IsValid());
|
||||
EXPECT_EQ(kDefaultSharedMemorySize, shmem_region->GetSize());
|
||||
EXPECT_EQ(kDefaultSharedMemorySizeBytes, shmem_region->GetSize());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -20,6 +20,14 @@
|
||||
|
||||
namespace features {
|
||||
|
||||
namespace {
|
||||
|
||||
BASE_FEATURE(kPerfettoBackendParams,
|
||||
"kPerfettoBackendParams",
|
||||
base::FEATURE_DISABLED_BY_DEFAULT);
|
||||
|
||||
} // namespace
|
||||
|
||||
// Runs the tracing service as an in-process browser service.
|
||||
BASE_FEATURE(kTracingServiceInProcess,
|
||||
"TracingServiceInProcess",
|
||||
@ -44,6 +52,21 @@ BASE_FEATURE(kEnablePerfettoSystemBackgroundTracing,
|
||||
"EnablePerfettoSystemBackgroundTracing",
|
||||
base::FEATURE_DISABLED_BY_DEFAULT);
|
||||
|
||||
// Controls the preferred size of each page in the shmem buffer.
|
||||
BASE_FEATURE_PARAM(int,
|
||||
kPerfettoSMBPageSizeBytes,
|
||||
&kPerfettoBackendParams,
|
||||
"page_size_bytes",
|
||||
tracing::kDefaultSMBPageSizeBytes);
|
||||
|
||||
// Controls the size of the shared memory buffer between the current process and
|
||||
// the service backend(s)
|
||||
BASE_FEATURE_PARAM(int,
|
||||
kPerfettoSharedMemorySizeBytes,
|
||||
&kPerfettoBackendParams,
|
||||
"shared_memory_size_bytes",
|
||||
tracing::kDefaultSharedMemorySizeBytes);
|
||||
|
||||
} // namespace features
|
||||
|
||||
namespace tracing {
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
#include "base/component_export.h"
|
||||
#include "base/feature_list.h"
|
||||
#include "base/metrics/field_trial_params.h"
|
||||
|
||||
namespace features {
|
||||
|
||||
@ -24,10 +25,29 @@ extern const COMPONENT_EXPORT(TRACING_CPP) base::Feature
|
||||
extern const COMPONENT_EXPORT(TRACING_CPP) base::Feature
|
||||
kEnablePerfettoSystemBackgroundTracing;
|
||||
|
||||
COMPONENT_EXPORT(TRACING_CPP)
|
||||
BASE_DECLARE_FEATURE_PARAM(int, kPerfettoSMBPageSizeBytes);
|
||||
|
||||
COMPONENT_EXPORT(TRACING_CPP)
|
||||
BASE_DECLARE_FEATURE_PARAM(int, kPerfettoSharedMemorySizeBytes);
|
||||
|
||||
} // namespace features
|
||||
|
||||
namespace tracing {
|
||||
|
||||
// TODO(crbug.com/40574594): Figure out a good buffer size.
|
||||
inline constexpr size_t kDefaultSharedMemorySizeBytes =
|
||||
4 * 1024 * 1024; // 4 MB
|
||||
|
||||
// TODO(crbug.com/40574593): Find a good compromise between performance and
|
||||
// data granularity (mainly relevant to running with small buffer sizes
|
||||
// when we use background tracing) on Android.
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
inline constexpr size_t kDefaultSMBPageSizeBytes = 4 * 1024;
|
||||
#else
|
||||
inline constexpr size_t kDefaultSMBPageSizeBytes = 32 * 1024;
|
||||
#endif
|
||||
|
||||
// Returns true if the system tracing Perfetto producer should be setup. This
|
||||
// can be influenced by the feature above or other situations (like debug
|
||||
// android builds).
|
||||
|
Reference in New Issue
Block a user