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(
// Helper class used to ensure no tasks are posted while
// TraceEventDataSource::lock_ is held.
class AutoLockWithDeferredTaskPosting {
class SCOPED_LOCKABLE AutoLockWithDeferredTaskPosting {
public:
explicit AutoLockWithDeferredTaskPosting(base::Lock& lock)
EXCLUSIVE_LOCK_FUNCTION(lock)
: autolock_(lock) {}
~AutoLockWithDeferredTaskPosting() UNLOCK_FUNCTION() = default;
private:
// The ordering is important: |defer_task_posting_| must be destroyed
// after |autolock_| to ensure the lock is not held when any deferred
......@@ -159,7 +162,10 @@ TraceEventMetadataSource::~TraceEventMetadataSource() = default;
void TraceEventMetadataSource::AddGeneratorFunction(
JsonMetadataGeneratorFunction generator) {
DCHECK(origin_task_runner_->RunsTasksInCurrentSequence());
json_generator_functions_.push_back(generator);
{
base::AutoLock lock(lock_);
json_generator_functions_.push_back(generator);
}
// An EventBundle is created when nullptr is passed.
GenerateJsonMetadataFromGenerator(generator, nullptr);
}
......@@ -167,14 +173,20 @@ void TraceEventMetadataSource::AddGeneratorFunction(
void TraceEventMetadataSource::AddGeneratorFunction(
MetadataGeneratorFunction generator) {
DCHECK(origin_task_runner_->RunsTasksInCurrentSequence());
generator_functions_.push_back(generator);
{
base::AutoLock lock(lock_);
generator_functions_.push_back(generator);
}
GenerateMetadataFromGenerator(generator);
}
void TraceEventMetadataSource::AddGeneratorFunction(
PacketGeneratorFunction generator) {
DCHECK(origin_task_runner_->RunsTasksInCurrentSequence());
packet_generator_functions_.push_back(generator);
{
base::AutoLock lock(lock_);
packet_generator_functions_.push_back(generator);
}
GenerateMetadataPacket(generator);
}
......@@ -282,7 +294,12 @@ TraceEventMetadataSource::GenerateLegacyMetadataDict() {
DCHECK(!privacy_filtering_enabled_);
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();
if (!metadata_dict) {
continue;
......
......@@ -122,19 +122,20 @@ class COMPONENT_EXPORT(TRACING_CPP) TraceEventMetadataSource
// TODO(crbug.com/1138893): Change annotations to GUARDED_BY
base::Lock lock_;
std::vector<JsonMetadataGeneratorFunction> json_generator_functions_
GUARDED_BY_FIXME(lock_);
std::vector<MetadataGeneratorFunction> generator_functions_
GUARDED_BY_FIXME(lock_);
GUARDED_BY(lock_);
std::vector<MetadataGeneratorFunction> generator_functions_ GUARDED_BY(lock_);
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_;
bool privacy_filtering_enabled_ = false;
std::string chrome_config_;
std::unique_ptr<base::trace_event::TraceConfig> parsed_chrome_config_;
bool emit_metadata_at_start_ = false;
std::unique_ptr<perfetto::TraceWriter> trace_writer_ GUARDED_BY_FIXME(lock_);
bool privacy_filtering_enabled_ GUARDED_BY_FIXME(lock_) = false;
std::string chrome_config_ GUARDED_BY(lock_);
std::unique_ptr<base::trace_event::TraceConfig> parsed_chrome_config_
GUARDED_BY(lock_);
bool emit_metadata_at_start_ GUARDED_BY(lock_) = false;
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