diff --git a/Android.bp b/Android.bp
index 34b35eb..9391926 100644
--- a/Android.bp
+++ b/Android.bp
@@ -240,6 +240,11 @@
   local_include_dirs: [
     "include",
   ],
+  product_variables: {
+    debuggable: {
+      cflags: ["-DPERFETTO_BUILD_WITH_ANDROID_USERDEBUG"],
+    },
+  },
 }
 
 // GN target: //:perfetto_integrationtests
diff --git a/include/perfetto/base/build_config.h b/include/perfetto/base/build_config.h
index de4a436..5f1c31d 100644
--- a/include/perfetto/base/build_config.h
+++ b/include/perfetto/base/build_config.h
@@ -58,4 +58,10 @@
 #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_START_DAEMONS() 0
 #endif
 
+#if defined(PERFETTO_BUILD_WITH_ANDROID_USERDEBUG)
+#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_ANDROID_USERDEBUG_BUILD() 1
+#else
+#define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_ANDROID_USERDEBUG_BUILD() 0
+#endif
+
 #endif  // INCLUDE_PERFETTO_BASE_BUILD_CONFIG_H_
diff --git a/include/perfetto/tracing/core/trace_config.h b/include/perfetto/tracing/core/trace_config.h
index 2097906..d94b72a 100644
--- a/include/perfetto/tracing/core/trace_config.h
+++ b/include/perfetto/tracing/core/trace_config.h
@@ -52,6 +52,7 @@
 class TestConfig;
 class TraceConfig_ProducerConfig;
 class TraceConfig_StatsdMetadata;
+class TraceConfig_GuardrailOverrides;
 }  // namespace protos
 }  // namespace perfetto
 
@@ -203,6 +204,34 @@
     std::string unknown_fields_;
   };
 
+  class PERFETTO_EXPORT GuardrailOverrides {
+   public:
+    GuardrailOverrides();
+    ~GuardrailOverrides();
+    GuardrailOverrides(GuardrailOverrides&&) noexcept;
+    GuardrailOverrides& operator=(GuardrailOverrides&&);
+    GuardrailOverrides(const GuardrailOverrides&);
+    GuardrailOverrides& operator=(const GuardrailOverrides&);
+
+    // Conversion methods from/to the corresponding protobuf types.
+    void FromProto(const perfetto::protos::TraceConfig_GuardrailOverrides&);
+    void ToProto(perfetto::protos::TraceConfig_GuardrailOverrides*) const;
+
+    uint64_t max_upload_per_day_bytes() const {
+      return max_upload_per_day_bytes_;
+    }
+    void set_max_upload_per_day_bytes(uint64_t value) {
+      max_upload_per_day_bytes_ = value;
+    }
+
+   private:
+    uint64_t max_upload_per_day_bytes_ = {};
+
+    // Allows to preserve unknown protobuf fields for compatibility
+    // with future versions of .proto files.
+    std::string unknown_fields_;
+  };
+
   TraceConfig();
   ~TraceConfig();
   TraceConfig(TraceConfig&&) noexcept;
@@ -264,6 +293,13 @@
   uint64_t max_file_size_bytes() const { return max_file_size_bytes_; }
   void set_max_file_size_bytes(uint64_t value) { max_file_size_bytes_ = value; }
 
+  const GuardrailOverrides& guardrail_overrides() const {
+    return guardrail_overrides_;
+  }
+  GuardrailOverrides* mutable_guardrail_overrides() {
+    return &guardrail_overrides_;
+  }
+
  private:
   std::vector<BufferConfig> buffers_;
   std::vector<DataSource> data_sources_;
@@ -275,6 +311,7 @@
   bool write_into_file_ = {};
   uint32_t file_write_period_ms_ = {};
   uint64_t max_file_size_bytes_ = {};
+  GuardrailOverrides guardrail_overrides_ = {};
 
   // Allows to preserve unknown protobuf fields for compatibility
   // with future versions of .proto files.
diff --git a/perfetto.rc b/perfetto.rc
index 23abaf2..8c795ad 100644
--- a/perfetto.rc
+++ b/perfetto.rc
@@ -39,6 +39,12 @@
 on property:sys.traced.enable_override=0
     setprop persist.traced.enable 0
 
+on property:debug.atrace.user_initiated=1
+    stop traced_probes
+
+on property:persist.traced.enable=1 && property:debug.atrace.user_initiated=""
+    start traced_probes
+
 on property:persist.traced.enable=1
     # Trace files need to be:
     # - Written by either uid:shell or uid:statsd.
diff --git a/protos/perfetto/config/perfetto_config.proto b/protos/perfetto/config/perfetto_config.proto
index 48202b8..f75fccb 100644
--- a/protos/perfetto/config/perfetto_config.proto
+++ b/protos/perfetto/config/perfetto_config.proto
@@ -287,6 +287,16 @@
   // 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. These values are only affect userdebug builds.
+  message GuardrailOverrides {
+    // Override the default limit (in bytes) for uploading data to server within
+    // a 24 hour period.
+    optional uint64 max_upload_per_day_bytes = 1;
+  }
+
+  optional GuardrailOverrides guardrail_overrides = 11;
 }
 
 // End of protos/perfetto/config/trace_config.proto
diff --git a/protos/perfetto/config/trace_config.proto b/protos/perfetto/config/trace_config.proto
index 36a02bb..9422337 100644
--- a/protos/perfetto/config/trace_config.proto
+++ b/protos/perfetto/config/trace_config.proto
@@ -125,4 +125,14 @@
   // 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. These values are only affect userdebug builds.
+  message GuardrailOverrides {
+    // Override the default limit (in bytes) for uploading data to server within
+    // a 24 hour period.
+    optional uint64 max_upload_per_day_bytes = 1;
+  }
+
+  optional GuardrailOverrides guardrail_overrides = 11;
 }
diff --git a/src/perfetto_cmd/perfetto_cmd.cc b/src/perfetto_cmd/perfetto_cmd.cc
index 20e9228..9614642 100644
--- a/src/perfetto_cmd/perfetto_cmd.cc
+++ b/src/perfetto_cmd/perfetto_cmd.cc
@@ -230,6 +230,10 @@
   args.is_dropbox = !dropbox_tag_.empty();
   args.current_time = base::GetWallTimeS();
   args.ignore_guardrails = ignore_guardrails;
+#if PERFETTO_BUILDFLAG(PERFETTO_ANDROID_USERDEBUG_BUILD)
+  args.max_upload_bytes_override =
+      trace_config_->guardrail_overrides().max_upload_per_day_bytes();
+#endif
   if (!limiter.ShouldTrace(args))
     return 1;
 
diff --git a/src/perfetto_cmd/rate_limiter.cc b/src/perfetto_cmd/rate_limiter.cc
index f4df2fc..1e2ef4f 100644
--- a/src/perfetto_cmd/rate_limiter.cc
+++ b/src/perfetto_cmd/rate_limiter.cc
@@ -96,7 +96,10 @@
 
   // If we've uploaded more than 10mb in the last 24 hours we shouldn't trace
   // now.
-  if (state_.total_bytes_uploaded() > kMaxUploadInBytes) {
+  uint64_t max_upload_guardrail = args.max_upload_bytes_override > 0
+                                      ? args.max_upload_bytes_override
+                                      : kMaxUploadInBytes;
+  if (state_.total_bytes_uploaded() > max_upload_guardrail) {
     PERFETTO_ELOG("Guardrail: Uploaded >10mb DropBox in the last 24h.");
     if (!args.ignore_guardrails)
       return false;
diff --git a/src/perfetto_cmd/rate_limiter.h b/src/perfetto_cmd/rate_limiter.h
index c163357..0d89b7d 100644
--- a/src/perfetto_cmd/rate_limiter.h
+++ b/src/perfetto_cmd/rate_limiter.h
@@ -28,6 +28,7 @@
     bool is_dropbox = false;
     bool ignore_guardrails = false;
     base::TimeSeconds current_time = base::TimeSeconds(0);
+    uint64_t max_upload_bytes_override = 0;
   };
 
   RateLimiter();
diff --git a/src/perfetto_cmd/rate_limiter_unittest.cc b/src/perfetto_cmd/rate_limiter_unittest.cc
index 17ac97c..753e0e6 100644
--- a/src/perfetto_cmd/rate_limiter_unittest.cc
+++ b/src/perfetto_cmd/rate_limiter_unittest.cc
@@ -277,6 +277,22 @@
   ASSERT_FALSE(limiter.ShouldTrace(args));
 }
 
+TEST(RateLimiterTest, DropBox_TooMuch_Override) {
+  StrictMock<MockRateLimiter> limiter;
+  RateLimiter::Args args;
+
+  PerfettoCmdState input{};
+  input.set_total_bytes_uploaded(10 * 1024 * 1024 + 1);
+  ASSERT_TRUE(limiter.SaveStateConcrete(input));
+
+  args.is_dropbox = true;
+  args.current_time = base::TimeSeconds(60 * 60);
+  args.max_upload_bytes_override = 10 * 1024 * 1024 + 2;
+
+  EXPECT_CALL(limiter, LoadState(_));
+  ASSERT_TRUE(limiter.ShouldTrace(args));
+}
+
 TEST(RateLimiterTest, DropBox_TooMuchWasUploaded) {
   StrictMock<MockRateLimiter> limiter;
   RateLimiter::Args args;
diff --git a/src/tracing/core/trace_config.cc b/src/tracing/core/trace_config.cc
index f3bfca5..b4d0081 100644
--- a/src/tracing/core/trace_config.cc
+++ b/src/tracing/core/trace_config.cc
@@ -90,6 +90,8 @@
       "size mismatch");
   max_file_size_bytes_ =
       static_cast<decltype(max_file_size_bytes_)>(proto.max_file_size_bytes());
+
+  guardrail_overrides_.FromProto(proto.guardrail_overrides());
   unknown_fields_ = proto.unknown_fields();
 }
 
@@ -148,6 +150,8 @@
   proto->set_max_file_size_bytes(
       static_cast<decltype(proto->max_file_size_bytes())>(
           max_file_size_bytes_));
+
+  guardrail_overrides_.ToProto(proto->mutable_guardrail_overrides());
   *(proto->mutable_unknown_fields()) = unknown_fields_;
 }
 
@@ -336,4 +340,38 @@
   *(proto->mutable_unknown_fields()) = unknown_fields_;
 }
 
+TraceConfig::GuardrailOverrides::GuardrailOverrides() = default;
+TraceConfig::GuardrailOverrides::~GuardrailOverrides() = default;
+TraceConfig::GuardrailOverrides::GuardrailOverrides(
+    const TraceConfig::GuardrailOverrides&) = default;
+TraceConfig::GuardrailOverrides& TraceConfig::GuardrailOverrides::operator=(
+    const TraceConfig::GuardrailOverrides&) = default;
+TraceConfig::GuardrailOverrides::GuardrailOverrides(
+    TraceConfig::GuardrailOverrides&&) noexcept = default;
+TraceConfig::GuardrailOverrides& TraceConfig::GuardrailOverrides::operator=(
+    TraceConfig::GuardrailOverrides&&) = default;
+
+void TraceConfig::GuardrailOverrides::FromProto(
+    const perfetto::protos::TraceConfig_GuardrailOverrides& proto) {
+  static_assert(sizeof(max_upload_per_day_bytes_) ==
+                    sizeof(proto.max_upload_per_day_bytes()),
+                "size mismatch");
+  max_upload_per_day_bytes_ = static_cast<decltype(max_upload_per_day_bytes_)>(
+      proto.max_upload_per_day_bytes());
+  unknown_fields_ = proto.unknown_fields();
+}
+
+void TraceConfig::GuardrailOverrides::ToProto(
+    perfetto::protos::TraceConfig_GuardrailOverrides* proto) const {
+  proto->Clear();
+
+  static_assert(sizeof(max_upload_per_day_bytes_) ==
+                    sizeof(proto->max_upload_per_day_bytes()),
+                "size mismatch");
+  proto->set_max_upload_per_day_bytes(
+      static_cast<decltype(proto->max_upload_per_day_bytes())>(
+          max_upload_per_day_bytes_));
+  *(proto->mutable_unknown_fields()) = unknown_fields_;
+}
+
 }  // namespace perfetto
diff --git a/tools/gen_android_bp b/tools/gen_android_bp
index f71e001..d48c91c 100755
--- a/tools/gen_android_bp
+++ b/tools/gen_android_bp
@@ -176,6 +176,7 @@
         self.defaults = []
         self.cflags = set()
         self.local_include_dirs = []
+        self.user_debug_flag = False
 
     def to_string(self, output):
         if self.comment:
@@ -196,11 +197,18 @@
         self._output_field(output, 'defaults')
         self._output_field(output, 'cflags')
         self._output_field(output, 'local_include_dirs')
-        if any(name in library_not_in_pdk for name in self.shared_libs):
+
+        disable_pdk = any(name in library_not_in_pdk for name in self.shared_libs)
+        if self.user_debug_flag or disable_pdk:
             output.append('  product_variables: {')
-            output.append('    pdk: {')
-            output.append('      enabled: false,')
-            output.append('    },')
+            if disable_pdk:
+                output.append('    pdk: {')
+                output.append('      enabled: false,')
+                output.append('    },')
+            if self.user_debug_flag:
+                output.append('    debuggable: {')
+                output.append('      cflags: ["-DPERFETTO_BUILD_WITH_ANDROID_USERDEBUG"],')
+                output.append('    },')
             output.append('  },')
         output.append('}')
         output.append('')
@@ -561,6 +569,7 @@
         '-fvisibility=hidden',
         '-Oz',
     ]
+    defaults.user_debug_flag = True
 
     blueprint.add_module(defaults)
     for target in targets:
