Commit 77d6545d authored by Andrew Shulaev's avatar Andrew Shulaev Committed by Commit Bot

services/tracing: Annotate code for static locking enforcement

Bug: 1138893
Change-Id: I9bb9f1c0115d7081795dfd69dee24cd93640392c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2485069
Commit-Queue: Andrew Shulaev <ddrone@google.com>
Reviewed-by: default avatarEric Seckler <eseckler@chromium.org>
Cr-Commit-Position: refs/heads/master@{#819347}
parent a55284cd
...@@ -119,11 +119,14 @@ static_assert( ...@@ -119,11 +119,14 @@ static_assert(
// Helper class used to ensure no tasks are posted while // Helper class used to ensure no tasks are posted while
// TraceEventDataSource::lock_ is held. // TraceEventDataSource::lock_ is held.
class AutoLockWithDeferredTaskPosting { class SCOPED_LOCKABLE AutoLockWithDeferredTaskPosting {
public: public:
explicit AutoLockWithDeferredTaskPosting(base::Lock& lock) explicit AutoLockWithDeferredTaskPosting(base::Lock& lock)
EXCLUSIVE_LOCK_FUNCTION(lock)
: autolock_(lock) {} : autolock_(lock) {}
~AutoLockWithDeferredTaskPosting() UNLOCK_FUNCTION() = default;
private: private:
// The ordering is important: |defer_task_posting_| must be destroyed // The ordering is important: |defer_task_posting_| must be destroyed
// after |autolock_| to ensure the lock is not held when any deferred // after |autolock_| to ensure the lock is not held when any deferred
...@@ -159,7 +162,10 @@ TraceEventMetadataSource::~TraceEventMetadataSource() = default; ...@@ -159,7 +162,10 @@ TraceEventMetadataSource::~TraceEventMetadataSource() = default;
void TraceEventMetadataSource::AddGeneratorFunction( void TraceEventMetadataSource::AddGeneratorFunction(
JsonMetadataGeneratorFunction generator) { JsonMetadataGeneratorFunction generator) {
DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); DCHECK(origin_task_runner_->RunsTasksInCurrentSequence());
{
base::AutoLock lock(lock_);
json_generator_functions_.push_back(generator); json_generator_functions_.push_back(generator);
}
// An EventBundle is created when nullptr is passed. // An EventBundle is created when nullptr is passed.
GenerateJsonMetadataFromGenerator(generator, nullptr); GenerateJsonMetadataFromGenerator(generator, nullptr);
} }
...@@ -167,14 +173,20 @@ void TraceEventMetadataSource::AddGeneratorFunction( ...@@ -167,14 +173,20 @@ void TraceEventMetadataSource::AddGeneratorFunction(
void TraceEventMetadataSource::AddGeneratorFunction( void TraceEventMetadataSource::AddGeneratorFunction(
MetadataGeneratorFunction generator) { MetadataGeneratorFunction generator) {
DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); DCHECK(origin_task_runner_->RunsTasksInCurrentSequence());
{
base::AutoLock lock(lock_);
generator_functions_.push_back(generator); generator_functions_.push_back(generator);
}
GenerateMetadataFromGenerator(generator); GenerateMetadataFromGenerator(generator);
} }
void TraceEventMetadataSource::AddGeneratorFunction( void TraceEventMetadataSource::AddGeneratorFunction(
PacketGeneratorFunction generator) { PacketGeneratorFunction generator) {
DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); DCHECK(origin_task_runner_->RunsTasksInCurrentSequence());
{
base::AutoLock lock(lock_);
packet_generator_functions_.push_back(generator); packet_generator_functions_.push_back(generator);
}
GenerateMetadataPacket(generator); GenerateMetadataPacket(generator);
} }
...@@ -282,7 +294,12 @@ TraceEventMetadataSource::GenerateLegacyMetadataDict() { ...@@ -282,7 +294,12 @@ TraceEventMetadataSource::GenerateLegacyMetadataDict() {
DCHECK(!privacy_filtering_enabled_); DCHECK(!privacy_filtering_enabled_);
auto merged_metadata = std::make_unique<base::DictionaryValue>(); auto merged_metadata = std::make_unique<base::DictionaryValue>();
for (auto& generator : json_generator_functions_) { std::vector<JsonMetadataGeneratorFunction> json_generators;
{
base::AutoLock lock(lock_);
json_generators = json_generator_functions_;
}
for (auto& generator : json_generators) {
std::unique_ptr<base::DictionaryValue> metadata_dict = generator.Run(); std::unique_ptr<base::DictionaryValue> metadata_dict = generator.Run();
if (!metadata_dict) { if (!metadata_dict) {
continue; continue;
......
...@@ -122,19 +122,20 @@ class COMPONENT_EXPORT(TRACING_CPP) TraceEventMetadataSource ...@@ -122,19 +122,20 @@ class COMPONENT_EXPORT(TRACING_CPP) TraceEventMetadataSource
// TODO(crbug.com/1138893): Change annotations to GUARDED_BY // TODO(crbug.com/1138893): Change annotations to GUARDED_BY
base::Lock lock_; base::Lock lock_;
std::vector<JsonMetadataGeneratorFunction> json_generator_functions_ std::vector<JsonMetadataGeneratorFunction> json_generator_functions_
GUARDED_BY_FIXME(lock_); GUARDED_BY(lock_);
std::vector<MetadataGeneratorFunction> generator_functions_ std::vector<MetadataGeneratorFunction> generator_functions_ GUARDED_BY(lock_);
GUARDED_BY_FIXME(lock_);
std::vector<PacketGeneratorFunction> packet_generator_functions_ std::vector<PacketGeneratorFunction> packet_generator_functions_
GUARDED_BY_FIXME(lock_); GUARDED_BY(lock_);
const scoped_refptr<base::SequencedTaskRunner> origin_task_runner_; const scoped_refptr<base::SequencedTaskRunner> origin_task_runner_
GUARDED_BY_FIXME(lock_);
std::unique_ptr<perfetto::TraceWriter> trace_writer_; std::unique_ptr<perfetto::TraceWriter> trace_writer_ GUARDED_BY_FIXME(lock_);
bool privacy_filtering_enabled_ = false; bool privacy_filtering_enabled_ GUARDED_BY_FIXME(lock_) = false;
std::string chrome_config_; std::string chrome_config_ GUARDED_BY(lock_);
std::unique_ptr<base::trace_event::TraceConfig> parsed_chrome_config_; std::unique_ptr<base::trace_event::TraceConfig> parsed_chrome_config_
bool emit_metadata_at_start_ = false; GUARDED_BY(lock_);
bool emit_metadata_at_start_ GUARDED_BY(lock_) = false;
DISALLOW_COPY_AND_ASSIGN(TraceEventMetadataSource); DISALLOW_COPY_AND_ASSIGN(TraceEventMetadataSource);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment