Generate process global trace identifiers for pipeline flow traces. (flutter/engine#5818)

This commit is contained in:
Chinmay Garde 2018-07-20 21:13:36 -07:00 committed by GitHub
parent 14fad641d2
commit e693601ffb
2 changed files with 13 additions and 4 deletions

View File

@ -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

View File

@ -24,6 +24,8 @@ enum class PipelineConsumeResult {
MoreAvailable,
};
size_t GetNextPipelineTraceID();
template <class R>
class Pipeline : public fxl::RefCountedThreadSafe<Pipeline<R>> {
public:
@ -84,8 +86,7 @@ class Pipeline : public fxl::RefCountedThreadSafe<Pipeline<R>> {
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<Pipeline<R>> {
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<void(ResourcePtr)>;
@ -143,7 +144,6 @@ class Pipeline : public fxl::RefCountedThreadSafe<Pipeline<R>> {
Semaphore available_;
std::mutex queue_mutex_;
std::queue<std::pair<ResourcePtr, size_t>> queue_;
std::atomic_size_t last_trace_id_;
void ProducerCommit(ResourcePtr resource, size_t trace_id) {
{