From 5a6155f6a38a2d5515667406a5926c39753627e5 Mon Sep 17 00:00:00 2001 From: Gil Date: Wed, 3 Jan 2018 07:00:54 -0800 Subject: Build and test both C++ loggers where possible (#595) * Rename FIREBASE_BINARY_DIR to FIREBASE_INSTALL_DIR Make this consistent with the outer superbuild and also make the association with CMAKE_INSTALL_PREFIX more obvious. * Build and test log_stdio separate from the rest of util This is in preparation for adding a test for log_apple * Build and test log_apple under CMake Also add notes about how FIRLogger's debug mode can break this test * Refactor log_apple to cut down duplicate switch statements There's also a slight reduction in final binary size. --- .../core/src/firebase/firestore/util/log_apple.mm | 64 ++++++++-------------- 1 file changed, 23 insertions(+), 41 deletions(-) (limited to 'Firestore/core/src/firebase/firestore/util/log_apple.mm') diff --git a/Firestore/core/src/firebase/firestore/util/log_apple.mm b/Firestore/core/src/firebase/firestore/util/log_apple.mm index 7cd834b..afa087f 100644 --- a/Firestore/core/src/firebase/firestore/util/log_apple.mm +++ b/Firestore/core/src/firebase/firestore/util/log_apple.mm @@ -16,47 +16,50 @@ #include "Firestore/core/src/firebase/firestore/util/log.h" -#include - #import +#import -#import "Firestore/Source/API/FIRFirestore+Internal.h" +#include namespace firebase { namespace firestore { namespace util { -static NSString* FormatString(const char* format) { +namespace { + +// Translates a C format string to the equivalent NSString without making a +// copy. +NSString* FormatString(const char* format) { return [[NSString alloc] initWithBytesNoCopy:(void*)format length:strlen(format) encoding:NSUTF8StringEncoding freeWhenDone:NO]; } -void LogSetLevel(LogLevel level) { +// Translates a C++ LogLevel to the equivalent Objective-C FIRLoggerLevel +FIRLoggerLevel ToFIRLoggerLevel(LogLevel level) { switch (level) { - case kLogLevelVerbose: - FIRSetLoggerLevel(FIRLoggerLevelMax); - break; + case kLogLevelVerbose: // fall through case kLogLevelDebug: - FIRSetLoggerLevel(FIRLoggerLevelDebug); - break; + return FIRLoggerLevelDebug; case kLogLevelInfo: - FIRSetLoggerLevel(FIRLoggerLevelInfo); - break; + return FIRLoggerLevelInfo; case kLogLevelWarning: - FIRSetLoggerLevel(FIRLoggerLevelWarning); - break; + return FIRLoggerLevelWarning; case kLogLevelError: - FIRSetLoggerLevel(FIRLoggerLevelError); - break; + return FIRLoggerLevelError; default: // Unsupported log level. FIRSetLoggerLevel will deal with it. - FIRSetLoggerLevel((FIRLoggerLevel)-1); - break; + return static_cast(-1); } } +} // namespace + +void LogSetLevel(LogLevel level) { + FIRSetLoggerLevel(ToFIRLoggerLevel(level)); +} + LogLevel LogGetLevel() { // We return the true log level. True log level is what the SDK used to // determine whether to log instead of what parameter is used in the last call @@ -111,29 +114,8 @@ void LogError(const char* format, ...) { } void LogMessageV(LogLevel log_level, const char* format, va_list args) { - switch (log_level) { - case kLogLevelVerbose: // fall through - case kLogLevelDebug: - FIRLogBasic(FIRLoggerLevelDebug, kFIRLoggerFirestore, @"I-FST000001", - FormatString(format), args); - break; - case kLogLevelInfo: - FIRLogBasic(FIRLoggerLevelInfo, kFIRLoggerFirestore, @"I-FST000001", - FormatString(format), args); - break; - case kLogLevelWarning: - FIRLogBasic(FIRLoggerLevelWarning, kFIRLoggerFirestore, @"I-FST000001", - FormatString(format), args); - break; - case kLogLevelError: - FIRLogBasic(FIRLoggerLevelError, kFIRLoggerFirestore, @"I-FST000001", - FormatString(format), args); - break; - default: - FIRLogBasic(FIRLoggerLevelError, kFIRLoggerFirestore, @"I-FST000001", - FormatString(format), args); - break; - } + FIRLogBasic(ToFIRLoggerLevel(log_level), kFIRLoggerFirestore, @"I-FST000001", + FormatString(format), args); } void LogMessage(LogLevel log_level, const char* format, ...) { -- cgit v1.2.3