Nagram/TMessagesProj/jni/webrtc/base/trace_event/thread_instruction_count.h
2020-08-14 19:58:22 +03:00

60 lines
1.8 KiB
C++

// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BASE_TRACE_EVENT_THREAD_INSTRUCTION_COUNT_H_
#define BASE_TRACE_EVENT_THREAD_INSTRUCTION_COUNT_H_
#include <stdint.h>
#include "base/base_export.h"
namespace base {
namespace trace_event {
// Represents the number of instructions that were retired between two samples
// of a thread's performance counters.
class BASE_EXPORT ThreadInstructionDelta {
public:
constexpr ThreadInstructionDelta() : delta_(0) {}
explicit constexpr ThreadInstructionDelta(int64_t delta) : delta_(delta) {}
constexpr int64_t ToInternalValue() const { return delta_; }
private:
int64_t delta_;
};
// Uses the system's performance counters in order to measure the number of
// instructions that have been retired on the current thread.
class BASE_EXPORT ThreadInstructionCount {
public:
// Returns true if the platform supports hardware retired instruction
// counters.
static bool IsSupported();
// Returns the number of retired instructions relative to some epoch count,
// or -1 if getting the current instruction count failed / is disabled.
static ThreadInstructionCount Now();
constexpr ThreadInstructionCount() : value_(-1) {}
explicit constexpr ThreadInstructionCount(int64_t value) : value_(value) {}
constexpr bool is_null() const { return value_ == -1; }
constexpr ThreadInstructionDelta operator-(
ThreadInstructionCount other) const {
return ThreadInstructionDelta(value_ - other.value_);
}
constexpr int64_t ToInternalValue() const { return value_; }
private:
int64_t value_;
};
} // namespace trace_event
} // namespace base
#endif // BASE_TRACE_EVENT_THREAD_INSTRUCTION_COUNT_H_