In the trace record the time value is generated
after acquiring the mutex. The time accuracy is improved
when generated before seizing the mutext.
---
src/base/logtrace.cc | 2 +-
src/base/logtrace_client.cc | 15 ++++++++-------
src/base/logtrace_client.h | 9 +++++----
3 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/src/base/logtrace.cc b/src/base/logtrace.cc
index 8908c1ff3..9822879ab 100644
--- a/src/base/logtrace.cc
+++ b/src/base/logtrace.cc
@@ -97,7 +97,7 @@ void trace_output(const char *file, unsigned line, unsigned
priority,
if (!entry) {
entry = gl_local_thread_trace->CreateLogEntry(
static_cast<base::LogMessage::Severity>(priority),
- preamble, ap);
+ base::ReadRealtimeClock(), preamble, ap);
}
gl_thread_buffer.WriteToBuffer(entry);
}
diff --git a/src/base/logtrace_client.cc b/src/base/logtrace_client.cc
index e22112a43..104e08ce1 100644
--- a/src/base/logtrace_client.cc
+++ b/src/base/logtrace_client.cc
@@ -96,32 +96,33 @@ const char* LogTraceClient::Log(LogTraceClient* tracelog,
const char* LogTraceClient::Log(base::LogMessage::Severity severity,
const char *fmt, va_list ap) {
if (log_socket_ != nullptr && log_mutex_ != nullptr) {
- return LogInternal(severity, fmt, ap);
+ return LogInternal(severity, base::ReadRealtimeClock(), fmt, ap);
}
return nullptr;
}
const char* LogTraceClient::LogInternal(base::LogMessage::Severity severity,
- const char *fmt, va_list ap) {
+ timespec time_spec, const char *fmt, va_list ap) {
base::Lock lock(*log_mutex_);
- CreateLogEntryInternal(severity, fmt, ap);
+ CreateLogEntryInternal(severity, time_spec, fmt, ap);
log_socket_->Send(buffer_.data(), buffer_.size());
return buffer_.data();
}
const char* LogTraceClient::CreateLogEntry(base::LogMessage::Severity severity,
- const char *fmt, va_list ap) {
+ timespec time_spec, const char *fmt, va_list ap) {
base::Lock lock(*log_mutex_);
- return CreateLogEntryInternal(severity, fmt, ap);
+ return CreateLogEntryInternal(severity, time_spec, fmt, ap);
}
const char* LogTraceClient::CreateLogEntryInternal(
- base::LogMessage::Severity severity, const char *fmt, va_list ap) {
+ base::LogMessage::Severity severity, timespec time_spec,
+ const char *fmt, va_list ap) {
uint32_t id = sequence_id_;
sequence_id_ = id < kMaxSequenceId ? id + 1 : 1;
buffer_.clear();
base::LogMessage::Write(
- base::LogMessage::Facility::kLocal1, severity, base::ReadRealtimeClock(),
+ base::LogMessage::Facility::kLocal1, severity, time_spec,
fqdn_, app_name_, proc_id_, msg_id_,
{{base::LogMessage::SdName{"meta"},
{base::LogMessage::Parameter{base::LogMessage::SdName{"sequenceId"},
diff --git a/src/base/logtrace_client.h b/src/base/logtrace_client.h
index 5b165e528..1ccb44d06 100644
--- a/src/base/logtrace_client.h
+++ b/src/base/logtrace_client.h
@@ -44,7 +44,7 @@ class LogTraceClient {
const char* Log(base::LogMessage::Severity severity, const char *fmt,
va_list ap);
const char* CreateLogEntry(base::LogMessage::Severity severity,
- const char *fmt, va_list ap);
+ timespec time_spec, const char *fmt, va_list ap);
void AddExternalBuffer(int64_t tid, LogTraceBuffer* buffer);
void RemoveExternalBuffer(int64_t tid);
void RequestFlushExternalBuffer();
@@ -56,10 +56,11 @@ class LogTraceClient {
private:
bool Init(const char *msg_id, WriteMode mode);
- const char* LogInternal(base::LogMessage::Severity severity, const char *fmt,
- va_list ap);
+
+ const char* LogInternal(base::LogMessage::Severity severity,
+ timespec time_spec, const char *fmt, va_list ap);
const char* CreateLogEntryInternal(base::LogMessage::Severity severity,
- const char *fmt, va_list ap);
+ timespec time_spec, const char *fmt, va_list ap);
static constexpr const uint32_t kMaxSequenceId = uint32_t{0x7fffffff};
base::LogMessage::HostName fqdn_{""};
base::LogMessage::AppName app_name_{""};