diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2018-05-24 07:24:37 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2018-05-24 07:24:37 +0000 |
commit | f33903d03a446fd2ccdf4c8ee169ca9420cb6d17 (patch) | |
tree | 217282da512b0f30837f55d75901cfd7ee002c64 | |
parent | d90fafc70ac04ae28230a196fc200f1aa17661c8 (diff) | |
parent | 05cd4b895e5d78ef82448cb9bf71fba6b1ad48ae (diff) | |
download | perfetto-pie-s2-release.tar.gz |
Snap for 4801384 from 05cd4b895e5d78ef82448cb9bf71fba6b1ad48ae to pi-releaseandroid-wear-9.0.0_r9android-wear-9.0.0_r8android-wear-9.0.0_r7android-wear-9.0.0_r6android-wear-9.0.0_r5android-wear-9.0.0_r4android-wear-9.0.0_r34android-wear-9.0.0_r33android-wear-9.0.0_r32android-wear-9.0.0_r31android-wear-9.0.0_r30android-wear-9.0.0_r3android-wear-9.0.0_r29android-wear-9.0.0_r28android-wear-9.0.0_r27android-wear-9.0.0_r26android-wear-9.0.0_r25android-wear-9.0.0_r24android-wear-9.0.0_r23android-wear-9.0.0_r22android-wear-9.0.0_r21android-wear-9.0.0_r20android-wear-9.0.0_r2android-wear-9.0.0_r19android-wear-9.0.0_r18android-wear-9.0.0_r17android-wear-9.0.0_r16android-wear-9.0.0_r15android-wear-9.0.0_r14android-wear-9.0.0_r13android-wear-9.0.0_r12android-wear-9.0.0_r11android-wear-9.0.0_r10android-wear-9.0.0_r1android-vts-9.0_r9android-vts-9.0_r8android-vts-9.0_r7android-vts-9.0_r6android-vts-9.0_r5android-vts-9.0_r4android-vts-9.0_r19android-vts-9.0_r18android-vts-9.0_r17android-vts-9.0_r16android-vts-9.0_r15android-vts-9.0_r14android-vts-9.0_r13android-vts-9.0_r12android-vts-9.0_r11android-vts-9.0_r10android-security-9.0.0_r76android-security-9.0.0_r75android-security-9.0.0_r74android-security-9.0.0_r73android-security-9.0.0_r72android-security-9.0.0_r71android-security-9.0.0_r70android-security-9.0.0_r69android-security-9.0.0_r68android-security-9.0.0_r67android-security-9.0.0_r66android-security-9.0.0_r65android-security-9.0.0_r64android-security-9.0.0_r63android-security-9.0.0_r62android-cts-9.0_r9android-cts-9.0_r8android-cts-9.0_r7android-cts-9.0_r6android-cts-9.0_r5android-cts-9.0_r4android-cts-9.0_r3android-cts-9.0_r2android-cts-9.0_r13android-cts-9.0_r12android-cts-9.0_r11android-cts-9.0_r10android-cts-9.0_r1android-9.0.0_r9android-9.0.0_r8android-9.0.0_r7android-9.0.0_r61android-9.0.0_r60android-9.0.0_r6android-9.0.0_r59android-9.0.0_r58android-9.0.0_r57android-9.0.0_r56android-9.0.0_r55android-9.0.0_r54android-9.0.0_r53android-9.0.0_r52android-9.0.0_r51android-9.0.0_r50android-9.0.0_r5android-9.0.0_r49android-9.0.0_r48android-9.0.0_r3android-9.0.0_r2android-9.0.0_r18android-9.0.0_r17android-9.0.0_r10android-9.0.0_r1security-pi-releasepie-vts-releasepie-security-releasepie-s2-releasepie-release-2pie-releasepie-r2-s2-releasepie-r2-s1-releasepie-r2-release
Change-Id: I9302ca41fad7b7d8c0790c183d9051867da452e0
-rw-r--r-- | Android.bp | 5 | ||||
-rw-r--r-- | include/perfetto/base/build_config.h | 6 | ||||
-rw-r--r-- | include/perfetto/tracing/core/trace_config.h | 37 | ||||
-rw-r--r-- | perfetto.rc | 6 | ||||
-rw-r--r-- | protos/perfetto/config/perfetto_config.proto | 10 | ||||
-rw-r--r-- | protos/perfetto/config/trace_config.proto | 10 | ||||
-rw-r--r-- | src/perfetto_cmd/perfetto_cmd.cc | 4 | ||||
-rw-r--r-- | src/perfetto_cmd/rate_limiter.cc | 5 | ||||
-rw-r--r-- | src/perfetto_cmd/rate_limiter.h | 1 | ||||
-rw-r--r-- | src/perfetto_cmd/rate_limiter_unittest.cc | 16 | ||||
-rw-r--r-- | src/tracing/core/trace_config.cc | 38 | ||||
-rwxr-xr-x | tools/gen_android_bp | 17 |
12 files changed, 150 insertions, 5 deletions
diff --git a/Android.bp b/Android.bp index 34b35eba0..93919262f 100644 --- a/Android.bp +++ b/Android.bp @@ -240,6 +240,11 @@ cc_defaults { 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 de4a43691..5f1c31dc3 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 2097906ec..d94b72aec 100644 --- a/include/perfetto/tracing/core/trace_config.h +++ b/include/perfetto/tracing/core/trace_config.h @@ -52,6 +52,7 @@ class ProcessStatsConfig; class TestConfig; class TraceConfig_ProducerConfig; class TraceConfig_StatsdMetadata; +class TraceConfig_GuardrailOverrides; } // namespace protos } // namespace perfetto @@ -203,6 +204,34 @@ class PERFETTO_EXPORT TraceConfig { 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 @@ class PERFETTO_EXPORT TraceConfig { 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 @@ class PERFETTO_EXPORT TraceConfig { 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 23abaf25e..8c795ad3b 100644 --- a/perfetto.rc +++ b/perfetto.rc @@ -39,6 +39,12 @@ on property:sys.traced.enable_override=1 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 48202b8a7..f75fccb05 100644 --- a/protos/perfetto/config/perfetto_config.proto +++ b/protos/perfetto/config/perfetto_config.proto @@ -287,6 +287,16 @@ message TraceConfig { // 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 36a02bbec..94223374f 100644 --- a/protos/perfetto/config/trace_config.proto +++ b/protos/perfetto/config/trace_config.proto @@ -125,4 +125,14 @@ message TraceConfig { // 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 20e922864..9614642c9 100644 --- a/src/perfetto_cmd/perfetto_cmd.cc +++ b/src/perfetto_cmd/perfetto_cmd.cc @@ -230,6 +230,10 @@ int PerfettoCmd::Main(int argc, char** argv) { 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 f4df2fca1..1e2ef4f1e 100644 --- a/src/perfetto_cmd/rate_limiter.cc +++ b/src/perfetto_cmd/rate_limiter.cc @@ -96,7 +96,10 @@ bool RateLimiter::ShouldTrace(const Args& args) { // 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 c1633572a..0d89b7da6 100644 --- a/src/perfetto_cmd/rate_limiter.h +++ b/src/perfetto_cmd/rate_limiter.h @@ -28,6 +28,7 @@ class RateLimiter { 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 17ac97c1a..753e0e678 100644 --- a/src/perfetto_cmd/rate_limiter_unittest.cc +++ b/src/perfetto_cmd/rate_limiter_unittest.cc @@ -277,6 +277,22 @@ TEST(RateLimiterTest, DropBox_TooMuch) { 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 f3bfca5cb..b4d008177 100644 --- a/src/tracing/core/trace_config.cc +++ b/src/tracing/core/trace_config.cc @@ -90,6 +90,8 @@ void TraceConfig::FromProto(const perfetto::protos::TraceConfig& proto) { "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 @@ void TraceConfig::ToProto(perfetto::protos::TraceConfig* proto) const { 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 @@ void TraceConfig::StatsdMetadata::ToProto( *(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 f71e00183..d48c91cca 100755 --- a/tools/gen_android_bp +++ b/tools/gen_android_bp @@ -176,6 +176,7 @@ class Module(object): 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 @@ class Module(object): 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 @@ def create_blueprint_for_targets(desc, targets): '-fvisibility=hidden', '-Oz', ] + defaults.user_debug_flag = True blueprint.add_module(defaults) for target in targets: |