blob: 2108e69f7c2d051d8d7a61038ae6bed712d36f9a [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef PARTITION_ALLOC_PARTITION_ALLOC_BASE_FUCHSIA_FUCHSIA_LOGGING_H_
#define PARTITION_ALLOC_PARTITION_ALLOC_BASE_FUCHSIA_FUCHSIA_LOGGING_H_
#include <lib/fit/function.h>
#include <zircon/types.h>
#include "partition_alloc/build_config.h"
#include "partition_alloc/partition_alloc_base/component_export.h"
#include "partition_alloc/partition_alloc_base/debug/debugging_buildflags.h"
#include "partition_alloc/partition_alloc_base/logging.h"
// Use the PA_ZX_LOG family of macros along with a zx_status_t containing a
// Zircon error. The error value will be decoded so that logged messages explain
// the error.
namespace partition_alloc::internal::logging {
class PA_COMPONENT_EXPORT(PARTITION_ALLOC_BASE) ZxLogMessage
: public logging::LogMessage {
public:
ZxLogMessage(const char* file_path,
int line,
LogSeverity severity,
zx_status_t zx_err);
ZxLogMessage(const ZxLogMessage&) = delete;
ZxLogMessage& operator=(const ZxLogMessage&) = delete;
~ZxLogMessage() override;
private:
zx_status_t zx_err_;
};
} // namespace partition_alloc::internal::logging
#define PA_ZX_LOG_STREAM(severity, zx_err) \
PA_COMPACT_GOOGLE_PLOG_EX_##severity(ZxLogMessage, zx_err).stream()
#define PA_ZX_LOG(severity, zx_err) \
PA_LAZY_STREAM(PA_ZX_LOG_STREAM(severity, zx_err), PA_LOG_IS_ON(severity))
#define PA_ZX_LOG_IF(severity, condition, zx_err) \
PA_LAZY_STREAM(PA_ZX_LOG_STREAM(severity, zx_err), \
PA_LOG_IS_ON(severity) && (condition))
#define PA_ZX_CHECK(condition, zx_err) \
PA_LAZY_STREAM(PA_ZX_LOG_STREAM(FATAL, zx_err), !(condition)) \
<< "Check failed: " #condition << ". "
#define PA_ZX_DLOG(severity, zx_err) \
PA_LAZY_STREAM(PA_ZX_LOG_STREAM(severity, zx_err), PA_DLOG_IS_ON(severity))
#if PA_BUILDFLAG(PA_DCHECK_IS_ON)
#define PA_ZX_DLOG_IF(severity, condition, zx_err) \
PA_LAZY_STREAM(PA_ZX_LOG_STREAM(severity, zx_err), \
PA_DLOG_IS_ON(severity) && (condition))
#else // PA_BUILDFLAG(PA_DCHECK_IS_ON)
#define PA_ZX_DLOG_IF(severity, condition, zx_err) PA_EAT_STREAM_PARAMETERS
#endif // PA_BUILDFLAG(PA_DCHECK_IS_ON)
#define PA_ZX_DCHECK(condition, zx_err) \
PA_LAZY_STREAM(PA_ZX_LOG_STREAM(DCHECK, zx_err), \
PA_BUILDFLAG(PA_DCHECK_IS_ON) && !(condition)) \
<< "Check failed: " #condition << ". "
#endif // PARTITION_ALLOC_PARTITION_ALLOC_BASE_FUCHSIA_FUCHSIA_LOGGING_H_