diff --git a/engine/src/flutter/synchronization/pipeline.cc b/engine/src/flutter/synchronization/pipeline.cc index 304fdca9604..df8505dbee7 100644 --- a/engine/src/flutter/synchronization/pipeline.cc +++ b/engine/src/flutter/synchronization/pipeline.cc @@ -3,3 +3,12 @@ // found in the LICENSE file. #include "flutter/synchronization/pipeline.h" + +namespace flutter { + +size_t GetNextPipelineTraceID() { + static std::atomic_size_t PipelineLastTraceID = {0}; + return ++PipelineLastTraceID; +} + +} // namespace flutter diff --git a/engine/src/flutter/synchronization/pipeline.h b/engine/src/flutter/synchronization/pipeline.h index 3b17fb2c4d3..23bf0abecd6 100644 --- a/engine/src/flutter/synchronization/pipeline.h +++ b/engine/src/flutter/synchronization/pipeline.h @@ -24,6 +24,8 @@ enum class PipelineConsumeResult { MoreAvailable, }; +size_t GetNextPipelineTraceID(); + template class Pipeline : public fxl::RefCountedThreadSafe> { public: @@ -84,8 +86,7 @@ class Pipeline : public fxl::RefCountedThreadSafe> { FXL_DISALLOW_COPY_AND_ASSIGN(ProducerContinuation); }; - explicit Pipeline(uint32_t depth) - : empty_(depth), available_(0), last_trace_id_(0) {} + explicit Pipeline(uint32_t depth) : empty_(depth), available_(0) {} ~Pipeline() = default; @@ -99,7 +100,7 @@ class Pipeline : public fxl::RefCountedThreadSafe> { return ProducerContinuation{ std::bind(&Pipeline::ProducerCommit, this, std::placeholders::_1, std::placeholders::_2), // continuation - ++last_trace_id_}; // trace id + GetNextPipelineTraceID()}; // trace id } using Consumer = std::function; @@ -143,7 +144,6 @@ class Pipeline : public fxl::RefCountedThreadSafe> { Semaphore available_; std::mutex queue_mutex_; std::queue> queue_; - std::atomic_size_t last_trace_id_; void ProducerCommit(ResourcePtr resource, size_t trace_id) { {