Logging should be configurable using human-readable channel names rather than crazy...
authormrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 6 Aug 2013 02:53:49 +0000 (02:53 +0000)
committermrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 6 Aug 2013 02:53:49 +0000 (02:53 +0000)
<http://webkit.org/b/119031>

Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.

Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
"all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
for history and loading being enabled.

For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
the old user defaults to remain set for those people that need to switch between version of WebKit before and
after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.

For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
consistency with the other platforms and to enable more code sharing.

While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
adding a new logging channel. Now only the header in the relevant project needs to be updated.

Reviewed by Sam Weinig.

Source/WebCore:

* GNUmakefile.list.am: Remove the now-unused InitializeLogging.h
* Target.pri: Ditto.
* WebCore.xcodeproj/project.pbxproj: Ditto.
* platform/InitializeLogging.h: Removed. Ditto.
* platform/Logging.cpp: Use WEBCORE_LOG_CHANNELS to define all of the channels.
(WebCore::logChannelByName): Renamed to match our naming conventions. Calls through to the new WTF function
to find a log channel rather than repeating the names of the log channels a further two times each.
(WebCore::initializeLoggingChannelsIfNecessary): Pass the channels and the log level string to the new
WTF function that handles the initialization.
* platform/Logging.h: Declare a WEBCORE_LOG_CHANNELS macro that can be used to apply a preprocessor macro
across the set of all logging channels. Use this macro to declare the logging channels.
* platform/blackberry/LoggingBlackBerry.cpp:
(WebCore::logLevelString): Pull the value out of the WEBKIT_DEBUG environment variable.
* platform/efl/LoggingEfl.cpp:
(WebCore::logLevelString): Pull the value out of the WEBKIT_DEBUG environment variable, and then prepend
NotYetImplemented to it so that that channel will be enabled by default.
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
(WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink): Accommodate the rename to logChannelByName.
* platform/gtk/LoggingGtk.cpp:
(WebCore::logLevelString): Pull the value out of the WEBKIT_DEBUG environment variable, and then prepend
NotYetImplemented to it so that that channel will be enabled by default.
* platform/mac/LoggingMac.mm:
(WebCore::logLevelString): Pull the value out of the WebCoreLogging user default key.
* platform/qt/LoggingQt.cpp:
(WebCore::logLevelString): Pull the value out of the QT_WEBKIT_LOG environment variable, and then prepend
NotYetImplemented to it so that the channel will be enabled by default.
* platform/win/LoggingWin.cpp:
(WebCore::logLevelString): Pull the value out of the WebCoreLogging environment variable.

Source/WebKit/blackberry:

* Api/BlackBerryGlobal.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.

Source/WebKit/efl:

* ewk/ewk_main.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.

Source/WebKit/gtk:

* webkit/webkitglobals.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.

Source/WebKit/mac:

* Misc/WebKitLogging.h: Declare a WEBKIT_LOG_CHANNELS macro that can be used to apply a preprocessor macro
across the set of all logging channels. Use this macro to declare the logging channels.
* Misc/WebKitLogging.m: Use WEBKIT_LOG_CHANNELS to define all of the channels. Pass the channels and the
preference value to the new WTF function that handles the initialization.
* WebView/WebPreferenceKeysPrivate.h: Remove a key that does not need to be here.
* WebView/WebView.mm: Switch from WebCore's InitializeLogging.h to Logging.h.

Source/WebKit/qt:

* WebCoreSupport/InitWebCoreQt.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.

Source/WebKit/win:

* WebKitLogging.cpp: Declare a WEBKIT_LOG_CHANNELS macro that can be used to apply a preprocessor macro across
the set of all logging channels. Use this macro to declare the logging channels.
* WebKitLogging.h: Use WEBKIT_LOG_CHANNELS to define all of the channels. Pass the channels to the new WTF
function that handles the initialization. As per the previous implementation a developer needs to hard-code
their desired log level here.
* WebView.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.

Source/WebKit2:

* NetworkProcess/NetworkProcess.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.
* Platform/Logging.cpp: Use WEBKIT2_LOG_CHANNELS to define all of the channels.
(WebKit::initializeLogChannelsIfNecessary): Pass the channels and the log level string to the new WTF function
that handles the initialization.
(WebKit::logChannelByName): Renamed to match our naming conventions. Calls through to the new WTF function
to find a log channel rather than repeating the names of the log channels a further two times each.
(WebKit::logLevelString): Provide a no-op implementation.
* Platform/Logging.h: Declare a WEBKIT2_LOG_CHANNELS macro that can be used to apply a preprocessor macro
across the set of all logging channels. Use this macro to declare the logging channels.
* Platform/efl/LoggingEfl.cpp:
(WebKit::logLevelString): Pull the value out of the WEBKIT_DEBUG environment variable.
* Platform/gtk/LoggingGtk.cpp:
(WebKit::logLevelString): Ditto.
* Platform/mac/Logging.mac.mm:
(WebKit::logLevelString): Pull the value out of the WebKit2Logging user default key.
* Platform/qt/LoggingQt.cpp:
(WebKit::logLevelString): Pull the value out of the QT_WEBKIT_LOG environment variable.
* Shared/WebKit2Initialize.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.
* UIProcess/WebContext.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.

Source/WTF:

* wtf/Assertions.cpp:
(WTFLogChannelByName): Iterate over the provided array of log channels, returning the first whose name
matches case-insensitively.
(setStateOfAllChannels): Helper function to set the state of all channels to a single value.
(WTFInitializeLogChannelStatesFromString): Parse a string containing a case-insensitive, comma-separated list
of channel names to enable or disable, with the latter being prefixed by a "-".
* wtf/Assertions.h: Update the layout of WTFLogChannel to include only the state of the channel and its name.
Declare WTFLogChannelByName and WTFInitializeLogChannelStatesFromString.
* wtf/RefCountedLeakCounter.cpp: Update to the new format of WTFLogChannel.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@153736 268f45cc-cd09-0410-ab3c-d52691b4dbfc

45 files changed:
Source/WTF/ChangeLog
Source/WTF/wtf/Assertions.cpp
Source/WTF/wtf/Assertions.h
Source/WTF/wtf/RefCountedLeakCounter.cpp
Source/WebCore/ChangeLog
Source/WebCore/GNUmakefile.list.am
Source/WebCore/Target.pri
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/platform/InitializeLogging.h [deleted file]
Source/WebCore/platform/Logging.cpp
Source/WebCore/platform/Logging.h
Source/WebCore/platform/blackberry/LoggingBlackBerry.cpp
Source/WebCore/platform/efl/LoggingEfl.cpp
Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp
Source/WebCore/platform/gtk/LoggingGtk.cpp
Source/WebCore/platform/mac/LoggingMac.mm
Source/WebCore/platform/qt/LoggingQt.cpp
Source/WebCore/platform/win/LoggingWin.cpp
Source/WebKit/blackberry/Api/BlackBerryGlobal.cpp
Source/WebKit/blackberry/ChangeLog
Source/WebKit/efl/ChangeLog
Source/WebKit/efl/ewk/ewk_main.cpp
Source/WebKit/gtk/ChangeLog
Source/WebKit/gtk/webkit/webkitglobals.cpp
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/Misc/WebKitLogging.h
Source/WebKit/mac/Misc/WebKitLogging.m
Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
Source/WebKit/mac/WebView/WebView.mm
Source/WebKit/qt/ChangeLog
Source/WebKit/qt/WebCoreSupport/InitWebCoreQt.cpp
Source/WebKit/win/ChangeLog
Source/WebKit/win/WebKitLogging.cpp
Source/WebKit/win/WebKitLogging.h
Source/WebKit/win/WebView.cpp
Source/WebKit2/ChangeLog
Source/WebKit2/NetworkProcess/NetworkProcess.cpp
Source/WebKit2/Platform/Logging.cpp
Source/WebKit2/Platform/Logging.h
Source/WebKit2/Platform/efl/LoggingEfl.cpp
Source/WebKit2/Platform/gtk/LoggingGtk.cpp
Source/WebKit2/Platform/mac/Logging.mac.mm
Source/WebKit2/Platform/qt/LoggingQt.cpp
Source/WebKit2/Shared/WebKit2Initialize.cpp
Source/WebKit2/UIProcess/WebContext.cpp

index c9d4a01..f194235 100644 (file)
@@ -1,3 +1,39 @@
+2013-07-26  Mark Rowe  <mrowe@apple.com>
+
+        Logging should be configurable using human-readable channel names rather than crazy bitmasks
+        <http://webkit.org/b/119031>
+
+        Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
+        and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.
+
+        Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
+        "all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
+        being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
+        for history and loading being enabled.
+
+        For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
+        the old user defaults to remain set for those people that need to switch between version of WebKit before and
+        after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
+        the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.
+
+        For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
+        consistency with the other platforms and to enable more code sharing.
+
+        While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
+        adding a new logging channel. Now only the header in the relevant project needs to be updated.
+
+        Reviewed by Sam Weinig.
+
+        * wtf/Assertions.cpp:
+        (WTFLogChannelByName): Iterate over the provided array of log channels, returning the first whose name
+        matches case-insensitively.
+        (setStateOfAllChannels): Helper function to set the state of all channels to a single value.
+        (WTFInitializeLogChannelStatesFromString): Parse a string containing a case-insensitive, comma-separated list
+        of channel names to enable or disable, with the latter being prefixed by a "-".
+        * wtf/Assertions.h: Update the layout of WTFLogChannel to include only the state of the channel and its name.
+        Declare WTFLogChannelByName and WTFInitializeLogChannelStatesFromString.
+        * wtf/RefCountedLeakCounter.cpp: Update to the new format of WTFLogChannel.
+
 2013-08-05  Benjamin Poulain  <bpoulain@apple.com>
 
         Disable <meter> by default on iOS, it is enabled through the xconfig files
index f462a3f..49b0ed2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003, 2006, 2007 Apple Inc.  All rights reserved.
+ * Copyright (C) 2003, 2006, 2007, 2013 Apple Inc.  All rights reserved.
  * Copyright (C) 2007-2009 Torch Mobile, Inc.
  * Copyright (C) 2011 University of Szeged. All rights reserved.
  *
@@ -36,6 +36,9 @@
 
 #include "Compiler.h"
 #include "OwnArrayPtr.h"
+#include <wtf/StdLibExtras.h>
+#include <wtf/text/CString.h>
+#include <wtf/text/WTFString.h>
 
 #include <stdio.h>
 #include <stdarg.h>
@@ -433,4 +436,48 @@ void WTFLogAlways(const char* format, ...)
     va_end(args);
 }
 
+WTFLogChannel* WTFLogChannelByName(WTFLogChannel* channels[], size_t count, const char* name)
+{
+    for (size_t i = 0; i < count; ++i) {
+        WTFLogChannel* channel = channels[i];
+        if (!strcasecmp(name, channel->name))
+            return channel;
+    }
+
+    return 0;
+}
+
+static void setStateOfAllChannels(WTFLogChannel* channels[], size_t channelCount, WTFLogChannelState state)
+{
+    for (size_t i = 0; i < channelCount; ++i)
+        channels[i]->state = state;
+}
+
+void WTFInitializeLogChannelStatesFromString(WTFLogChannel* channels[], size_t count, const char* logLevel)
+{
+    String logLevelString = logLevel;
+    Vector<String> components;
+    logLevelString.split(',', components);
+
+    for (size_t i = 0; i < components.size(); ++i) {
+        String component = components[i];
+
+        WTFLogChannelState logChannelState = WTFLogChannelOn;
+        if (component.startsWith('-')) {
+            logChannelState = WTFLogChannelOff;
+            component = component.substring(1);
+        }
+
+        if (equalIgnoringCase(component, "all")) {
+            setStateOfAllChannels(channels, count, logChannelState);
+            continue;
+        }
+
+        if (WTFLogChannel* channel = WTFLogChannelByName(channels, count, component.utf8().data()))
+            channel->state = logChannelState;
+        else
+            WTFLogAlways("Unknown logging channel: %s", component.utf8().data());
+    }
+}
+
 } // extern "C"
index b8ac68f..ebace2e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003, 2006, 2007 Apple Inc.  All rights reserved.
+ * Copyright (C) 2003, 2006, 2007, 2013 Apple Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -103,9 +103,8 @@ extern "C" {
 typedef enum { WTFLogChannelOff, WTFLogChannelOn } WTFLogChannelState;
 
 typedef struct {
-    unsigned mask;
-    const char *defaultName;
     WTFLogChannelState state;
+    const char* name;
 } WTFLogChannel;
 
 WTF_EXPORT_PRIVATE void WTFReportAssertionFailure(const char* file, int line, const char* function, const char* assertion);
@@ -116,6 +115,8 @@ WTF_EXPORT_PRIVATE void WTFReportError(const char* file, int line, const char* f
 WTF_EXPORT_PRIVATE void WTFLog(WTFLogChannel*, const char* format, ...) WTF_ATTRIBUTE_PRINTF(2, 3);
 WTF_EXPORT_PRIVATE void WTFLogVerbose(const char* file, int line, const char* function, WTFLogChannel*, const char* format, ...) WTF_ATTRIBUTE_PRINTF(5, 6);
 WTF_EXPORT_PRIVATE void WTFLogAlways(const char* format, ...) WTF_ATTRIBUTE_PRINTF(1, 2);
+WTF_EXPORT_PRIVATE WTFLogChannel* WTFLogChannelByName(WTFLogChannel*[], size_t count, const char*);
+WTF_EXPORT_PRIVATE void WTFInitializeLogChannelStatesFromString(WTFLogChannel*[], size_t count, const char*);
 
 WTF_EXPORT_PRIVATE void WTFGetBacktrace(void** stack, int* size);
 WTF_EXPORT_PRIVATE void WTFReportBacktrace();
index 4a04528..e627d1d 100644 (file)
@@ -39,7 +39,7 @@ void RefCountedLeakCounter::decrement() { }
 #else
 
 #define LOG_CHANNEL_PREFIX Log
-static WTFLogChannel LogRefCountedLeaks = { 0x00000000, "", WTFLogChannelOn };
+static WTFLogChannel LogRefCountedLeaks = { WTFLogChannelOn, "RefCountedLeaks" };
 
 typedef HashCountedSet<const char*, PtrHash<const char*> > ReasonSet;
 static ReasonSet* leakMessageSuppressionReasons;
index a23b8f9..5d861da 100644 (file)
@@ -1,3 +1,58 @@
+2013-07-27  Mark Rowe  <mrowe@apple.com>
+
+        Logging should be configurable using human-readable channel names rather than crazy bitmasks
+        <http://webkit.org/b/119031>
+
+        Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
+        and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.
+
+        Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
+        "all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
+        being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
+        for history and loading being enabled.
+
+        For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
+        the old user defaults to remain set for those people that need to switch between version of WebKit before and
+        after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
+        the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.
+
+        For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
+        consistency with the other platforms and to enable more code sharing.
+
+        While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
+        adding a new logging channel. Now only the header in the relevant project needs to be updated.
+
+        Reviewed by Sam Weinig.
+
+        * GNUmakefile.list.am: Remove the now-unused InitializeLogging.h
+        * Target.pri: Ditto.
+        * WebCore.xcodeproj/project.pbxproj: Ditto.
+        * platform/InitializeLogging.h: Removed. Ditto.
+        * platform/Logging.cpp: Use WEBCORE_LOG_CHANNELS to define all of the channels.
+        (WebCore::logChannelByName): Renamed to match our naming conventions. Calls through to the new WTF function
+        to find a log channel rather than repeating the names of the log channels a further two times each.
+        (WebCore::initializeLoggingChannelsIfNecessary): Pass the channels and the log level string to the new
+        WTF function that handles the initialization.
+        * platform/Logging.h: Declare a WEBCORE_LOG_CHANNELS macro that can be used to apply a preprocessor macro
+        across the set of all logging channels. Use this macro to declare the logging channels.
+        * platform/blackberry/LoggingBlackBerry.cpp:
+        (WebCore::logLevelString): Pull the value out of the WEBKIT_DEBUG environment variable.
+        * platform/efl/LoggingEfl.cpp:
+        (WebCore::logLevelString): Pull the value out of the WEBKIT_DEBUG environment variable, and then prepend
+        NotYetImplemented to it so that that channel will be enabled by default.
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
+        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink): Accommodate the rename to logChannelByName.
+        * platform/gtk/LoggingGtk.cpp:
+        (WebCore::logLevelString): Pull the value out of the WEBKIT_DEBUG environment variable, and then prepend
+        NotYetImplemented to it so that that channel will be enabled by default.
+        * platform/mac/LoggingMac.mm:
+        (WebCore::logLevelString): Pull the value out of the WebCoreLogging user default key.
+        * platform/qt/LoggingQt.cpp:
+        (WebCore::logLevelString): Pull the value out of the QT_WEBKIT_LOG environment variable, and then prepend
+        NotYetImplemented to it so that the channel will be enabled by default.
+        * platform/win/LoggingWin.cpp:
+        (WebCore::logLevelString): Pull the value out of the WebCoreLogging environment variable.
+
 2013-08-05  Ryosuke Niwa  <rniwa@webkit.org>
 
         Editor::updateMarkersForWordsAffectedByEditing(bool) shouldn't compute start and end of words when there are nor markers
index 3d4f2cd..a4c9094 100644 (file)
@@ -6066,7 +6066,6 @@ platform_sources += \
        Source/WebCore/platform/HistogramSupport.cpp \
        Source/WebCore/platform/HistogramSupport.h \
        Source/WebCore/platform/HostWindow.h \
-       Source/WebCore/platform/InitializeLogging.h \
        Source/WebCore/platform/KURL.cpp \
        Source/WebCore/platform/KURL.h \
        Source/WebCore/platform/KURLHash.h \
index 3b03551..62584ea 100644 (file)
@@ -2134,7 +2134,6 @@ HEADERS += \
     platform/FileStreamClient.h \
     platform/FileSystem.h \
     platform/HistogramSupport.h \
-    platform/InitializeLogging.h \
     platform/image-decoders/ImageDecoder.h \
     platform/mock/DeviceMotionClientMock.h \
     platform/mock/DeviceOrientationClientMock.h \
index b3734b2..9009a3a 100644 (file)
                A81872240977D3C0005826D9 /* NameNodeList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A81872190977D3C0005826D9 /* NameNodeList.cpp */; };
                A81872250977D3C0005826D9 /* ChildNodeList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A818721A0977D3C0005826D9 /* ChildNodeList.cpp */; };
                A8239E0009B3CF8A00B60641 /* Logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8239DFE09B3CF8A00B60641 /* Logging.cpp */; };
-               A8239E0109B3CF8A00B60641 /* Logging.h in Headers */ = {isa = PBXBuildFile; fileRef = A8239DFF09B3CF8A00B60641 /* Logging.h */; settings = {ATTRIBUTES = (); }; };
+               A8239E0109B3CF8A00B60641 /* Logging.h in Headers */ = {isa = PBXBuildFile; fileRef = A8239DFF09B3CF8A00B60641 /* Logging.h */; settings = {ATTRIBUTES = (Private, ); }; };
                A824B4650E2EF2EA0081A7B7 /* TextRun.h in Headers */ = {isa = PBXBuildFile; fileRef = A824B4640E2EF2EA0081A7B7 /* TextRun.h */; settings = {ATTRIBUTES = (Private, ); }; };
                A833C7CA0A2CF06B00D57664 /* SVGNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 656581E809D1508D000E61D7 /* SVGNames.cpp */; };
                A833C7CC0A2CF07400D57664 /* XLinkNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 656581EA09D1508D000E61D7 /* XLinkNames.cpp */; };
                E14A94D716DFDF950068DE82 /* BlobRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E14A94D616DFDF950068DE82 /* BlobRegistry.cpp */; };
                E14F1C4414B5DAC600EA9009 /* HTMLFormControlElementWithState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E14F1C4214B5DAC600EA9009 /* HTMLFormControlElementWithState.cpp */; };
                E14F1C4514B5DAC600EA9009 /* HTMLFormControlElementWithState.h in Headers */ = {isa = PBXBuildFile; fileRef = E14F1C4314B5DAC600EA9009 /* HTMLFormControlElementWithState.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               E1513D4F1677EA8300149FCB /* InitializeLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = E1513D4E1677EA8300149FCB /* InitializeLogging.h */; settings = {ATTRIBUTES = (Private, ); }; };
                E1513D511677F08800149FCB /* NotImplemented.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E1513D501677F08800149FCB /* NotImplemented.cpp */; };
                E152551516FD2350003D7ADB /* WebCoreResourceHandleAsOperationQueueDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = E152551316FD234F003D7ADB /* WebCoreResourceHandleAsOperationQueueDelegate.h */; };
                E152551616FD2350003D7ADB /* WebCoreResourceHandleAsOperationQueueDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = E152551416FD234F003D7ADB /* WebCoreResourceHandleAsOperationQueueDelegate.mm */; };
                E14A94D616DFDF950068DE82 /* BlobRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BlobRegistry.cpp; sourceTree = "<group>"; };
                E14F1C4214B5DAC600EA9009 /* HTMLFormControlElementWithState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTMLFormControlElementWithState.cpp; sourceTree = "<group>"; };
                E14F1C4314B5DAC600EA9009 /* HTMLFormControlElementWithState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLFormControlElementWithState.h; sourceTree = "<group>"; };
-               E1513D4E1677EA8300149FCB /* InitializeLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InitializeLogging.h; sourceTree = "<group>"; };
                E1513D501677F08800149FCB /* NotImplemented.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NotImplemented.cpp; sourceTree = "<group>"; };
                E152551316FD234F003D7ADB /* WebCoreResourceHandleAsOperationQueueDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebCoreResourceHandleAsOperationQueueDelegate.h; sourceTree = "<group>"; };
                E152551416FD234F003D7ADB /* WebCoreResourceHandleAsOperationQueueDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCoreResourceHandleAsOperationQueueDelegate.mm; sourceTree = "<group>"; };
                                D6FDAEF2149C06190037B1E1 /* HistogramSupport.cpp */,
                                D630E2AB149BF344005B2F93 /* HistogramSupport.h */,
                                BC3BC29B0E91AB0F00835588 /* HostWindow.h */,
-                               E1513D4E1677EA8300149FCB /* InitializeLogging.h */,
                                521D46F711AEC9B100514613 /* KillRing.h */,
                                4306E4E514955543007F17AC /* KillRingNone.cpp */,
                                6593923509AE4346002C531F /* KURL.cpp */,
                                07CE77D516712A6A00C55A47 /* InbandTextTrackPrivateClient.h in Headers */,
                                07367DDF172CA67F00D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.h in Headers */,
                                DB23C2CC0A508D29002489EB /* IndentOutdentCommand.h in Headers */,
-                               E1513D4F1677EA8300149FCB /* InitializeLogging.h in Headers */,
                                F3644B001119805900E0D537 /* InjectedScript.h in Headers */,
                                AAB6054F15874C58007B5031 /* InjectedScriptBase.h in Headers */,
                                AA73183F159255B900A93E6E /* InjectedScriptCanvasModule.h in Headers */,
diff --git a/Source/WebCore/platform/InitializeLogging.h b/Source/WebCore/platform/InitializeLogging.h
deleted file mode 100644 (file)
index 8b9a668..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2012 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef InitializeLogging_h
-#define InitializeLogging_h
-
-#if !LOG_DISABLED
-
-namespace WebCore {
-
-void initializeLoggingChannelsIfNecessary();
-
-}
-
-#endif // !LOG_DISABLED
-
-
-#endif // InitializeLogging_h
index 4886446..c284322 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003, 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2003, 2006, 2013 Apple Computer, Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 #include "config.h"
 #include "Logging.h"
 
+#include <wtf/StdLibExtras.h>
+#include <wtf/text/CString.h>
 #include <wtf/text/WTFString.h>
 
 #if !LOG_DISABLED
 
 namespace WebCore {
 
-WTFLogChannel LogNotYetImplemented = { 0x00000001, "WebCoreLogLevel", WTFLogChannelOff };
+#define DEFINE_LOG_CHANNEL(name) \
+    WTFLogChannel JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, name) = { WTFLogChannelOff, #name };
+WEBCORE_LOG_CHANNELS(DEFINE_LOG_CHANNEL)
 
-WTFLogChannel LogFrames =            { 0x00000010, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogLoading =           { 0x00000020, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogPopupBlocking =     { 0x00000040, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogEvents =            { 0x00000080, "WebCoreLogLevel", WTFLogChannelOff };
+#define LOG_CHANNEL_ADDRESS(name)  &JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, name),
+WTFLogChannel* logChannels[] = {
+    WEBCORE_LOG_CHANNELS(LOG_CHANNEL_ADDRESS)
+};
 
-WTFLogChannel LogEditing =           { 0x00000100, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogLiveConnect =       { 0x00000200, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogIconDatabase =      { 0x00000400, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogSQLDatabase =       { 0x00000800, "WebCoreLogLevel", WTFLogChannelOff };
+size_t logChannelCount = WTF_ARRAY_LENGTH(logChannels);
 
-WTFLogChannel LogSpellingAndGrammar ={ 0x00001000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogBackForward =       { 0x00002000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogHistory =           { 0x00004000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogPageCache =         { 0x00008000, "WebCoreLogLevel", WTFLogChannelOff };
-
-WTFLogChannel LogPlatformLeaks =     { 0x00010000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogResourceLoading =   { 0x00020000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogAnimations =        { 0x00040000, "WebCoreLogLevel", WTFLogChannelOff };
-
-WTFLogChannel LogNetwork =           { 0x00100000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogFTP =               { 0x00200000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogThreading =         { 0x00400000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogStorageAPI =        { 0x00800000, "WebCoreLogLevel", WTFLogChannelOff };
-
-WTFLogChannel LogMedia =             { 0x01000000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogPlugins =           { 0x02000000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogArchives =          { 0x04000000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogProgress =          { 0x08000000, "WebCoreLogLevel", WTFLogChannelOff };
-
-WTFLogChannel LogFileAPI =           { 0x10000000, "WebCoreLogLevel", WTFLogChannelOff };
-
-WTFLogChannel LogWebAudio =          { 0x20000000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogCompositing =       { 0x40000000, "WebCoreLogLevel", WTFLogChannelOff };
-WTFLogChannel LogGamepad =           { 0x80000000, "WebCoreLogLevel", WTFLogChannelOff };
-
-
-WTFLogChannel* getChannelFromName(const String& channelName)
+WTFLogChannel* logChannelByName(const String& name)
 {
-    if (!(channelName.length() >= 2))
-        return 0;
-
-    if (equalIgnoringCase(channelName, String("BackForward")))
-        return &LogBackForward;
-
-    if (equalIgnoringCase(channelName, String("Editing")))
-        return &LogEditing;
-
-    if (equalIgnoringCase(channelName, String("Events")))
-        return &LogEvents;
-
-    if (equalIgnoringCase(channelName, String("Frames")))
-        return &LogFrames;
-
-    if (equalIgnoringCase(channelName, String("FTP")))
-        return &LogFTP;
-
-    if (equalIgnoringCase(channelName, String("History")))
-        return &LogHistory;
-
-    if (equalIgnoringCase(channelName, String("IconDatabase")))
-        return &LogIconDatabase;
-
-    if (equalIgnoringCase(channelName, String("Loading")))
-        return &LogLoading;
-
-    if (equalIgnoringCase(channelName, String("Media")))
-        return &LogMedia;
-
-    if (equalIgnoringCase(channelName, String("Network")))
-        return &LogNetwork;
-
-    if (equalIgnoringCase(channelName, String("NotYetImplemented")))
-        return &LogNotYetImplemented;
-
-    if (equalIgnoringCase(channelName, String("PageCache")))
-        return &LogPageCache;
-
-    if (equalIgnoringCase(channelName, String("PlatformLeaks")))
-        return &LogPlatformLeaks;
-
-    if (equalIgnoringCase(channelName, String("ResourceLoading")))
-        return &LogResourceLoading;
-
-    if (equalIgnoringCase(channelName, String("Animations")))
-        return &LogAnimations;
-
-    if (equalIgnoringCase(channelName, String("Plugins")))
-        return &LogPlugins;
-
-    if (equalIgnoringCase(channelName, String("PopupBlocking")))
-        return &LogPopupBlocking;
-
-    if (equalIgnoringCase(channelName, String("Progress")))
-        return &LogProgress;
-
-    if (equalIgnoringCase(channelName, String("SpellingAndGrammar")))
-        return &LogSpellingAndGrammar;
-
-    if (equalIgnoringCase(channelName, String("SQLDatabase")))
-        return &LogSQLDatabase;
-
-    if (equalIgnoringCase(channelName, String("StorageAPI")))
-        return &LogStorageAPI;
-
-    if (equalIgnoringCase(channelName, String("LiveConnect")))
-        return &LogLiveConnect;
-
-    if (equalIgnoringCase(channelName, String("Threading")))
-        return &LogThreading;
-
-    if (equalIgnoringCase(channelName, String("FileAPI")))
-        return &LogFileAPI;
-
-    if (equalIgnoringCase(channelName, String("WebAudio")))
-        return &LogWebAudio;
-
-    if (equalIgnoringCase(channelName, String("Compositing")))
-        return &LogCompositing;
+    return WTFLogChannelByName(logChannels, logChannelCount, name.utf8().data());
+}
 
-    if (equalIgnoringCase(channelName, String("Gamepad")))
-        return &LogGamepad;
+void initializeLoggingChannelsIfNecessary()
+{
+    static bool haveInitializedLoggingChannels = false;
+    if (haveInitializedLoggingChannels)
+        return;
+    haveInitializedLoggingChannels = true;
 
-    return 0;
+    WTFInitializeLogChannelStatesFromString(logChannels, logChannelCount, logLevelString().utf8().data());
 }
 
 }
index ee9a34e..697b410 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003, 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2003, 2006, 2013 Apple Computer, Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 
 namespace WebCore {
 
-    extern WTFLogChannel LogNotYetImplemented;
-    extern WTFLogChannel LogFrames;
-    extern WTFLogChannel LogLoading;
-    extern WTFLogChannel LogPopupBlocking;
-    extern WTFLogChannel LogEvents;
-    extern WTFLogChannel LogEditing;
-    extern WTFLogChannel LogLiveConnect;
-    extern WTFLogChannel LogIconDatabase;
-    extern WTFLogChannel LogSQLDatabase;
-    extern WTFLogChannel LogSpellingAndGrammar;
-    extern WTFLogChannel LogBackForward;
-    extern WTFLogChannel LogHistory;
-    extern WTFLogChannel LogPageCache;
-    extern WTFLogChannel LogPlatformLeaks;
-    extern WTFLogChannel LogResourceLoading;
-    extern WTFLogChannel LogAnimations;
-    extern WTFLogChannel LogNetwork;
-    extern WTFLogChannel LogFTP;
-    extern WTFLogChannel LogThreading;
-    extern WTFLogChannel LogStorageAPI;
-    extern WTFLogChannel LogMedia;
-    extern WTFLogChannel LogPlugins;
-    extern WTFLogChannel LogArchives;
-    extern WTFLogChannel LogProgress;
-    extern WTFLogChannel LogFileAPI;
-    extern WTFLogChannel LogWebAudio;
-    extern WTFLogChannel LogCompositing;
-    extern WTFLogChannel LogGamepad;
+#define WEBCORE_LOG_CHANNELS(M) \
+    M(Animations) \
+    M(Archives) \
+    M(BackForward) \
+    M(Compositing) \
+    M(Editing) \
+    M(Events) \
+    M(FTP) \
+    M(FileAPI) \
+    M(Frames) \
+    M(Gamepad) \
+    M(History) \
+    M(IconDatabase) \
+    M(LiveConnect) \
+    M(Loading) \
+    M(Media) \
+    M(Network) \
+    M(NotYetImplemented) \
+    M(PageCache) \
+    M(PlatformLeaks) \
+    M(Plugins) \
+    M(PopupBlocking) \
+    M(Progress) \
+    M(ResourceLoading) \
+    M(SQLDatabase) \
+    M(SpellingAndGrammar) \
+    M(StorageAPI) \
+    M(Threading) \
+    M(WebAudio) \
 
-    WTFLogChannel* getChannelFromName(const String& channelName);
+#define DECLARE_LOG_CHANNEL(name) \
+    extern WTFLogChannel JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, name);
+
+WEBCORE_LOG_CHANNELS(DECLARE_LOG_CHANNEL)
+
+#undef DECLARE_LOG_CHANNEL
+
+    extern WTFLogChannel* logChannels[];
+    extern size_t logChannelCount;
+
+    String logLevelString();
+    WTFLogChannel* logChannelByName(const String&);
+    void initializeLoggingChannelsIfNecessary();
 }
 
 #endif // !LOG_DISABLED
index 04ed9fd..7c33269 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2009, 2010, 2011 Research In Motion Limited. All rights reserved.
+ * Copyright (C) 2013 Apple Inc. All Rights Reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
 #include "config.h"
 #include "Logging.h"
 
-#include "InitializeLogging.h"
-
 #if !LOG_DISABLED
 
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
-static inline void initializeWithUserDefault(WTFLogChannel& channel, bool enabled)
-{
-    if (enabled)
-        channel.state = WTFLogChannelOn;
-    else
-        channel.state = WTFLogChannelOff;
-}
-
-void initializeLoggingChannelsIfNecessary()
+String logLevelString()
 {
-    static bool haveInitializedLoggingChannels = false;
-    if (haveInitializedLoggingChannels)
-        return;
-    haveInitializedLoggingChannels = true;
-
-    String logEnv = getenv("WEBKIT_DEBUG");
-    if (logEnv.isEmpty())
-        return;
-
-    Vector<String> logv;
-    logEnv.split(" ", logv);
-
-    Vector<String>::const_iterator it = logv.begin();
-    for (; it != logv.end(); ++it) {
-        if (WTFLogChannel* channel = getChannelFromName(*it))
-            channel->state = WTFLogChannelOn;
-    }
+    return getenv("WEBKIT_DEBUG");
 }
 
 } // namespace WebCore
index a6eff63..b70b63d 100644 (file)
@@ -3,6 +3,7 @@
  * Copyright (C) 2008 INdT - Instituto Nokia de Tecnologia
  * Copyright (C) 2009-2010 ProFUSION embedded systems
  * Copyright (C) 2009-2010 Samsung Electronics
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
  */
 
 #include "config.h"
-#include "InitializeLogging.h"
 #include "Logging.h"
 
 #if !LOG_DISABLED
 
-#include <Eina.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
-void initializeLoggingChannelsIfNecessary()
+String logLevelString()
 {
-    static bool didInitializeLoggingChannels = false;
-    if (didInitializeLoggingChannels)
-        return;
-
-    didInitializeLoggingChannels = true;
-
     char* logEnv = getenv("WEBKIT_DEBUG");
     if (!logEnv)
-        return;
+        return emptyString();
 
 #if defined(NDEBUG)
     EINA_LOG_WARN("WEBKIT_DEBUG is not empty, but this is a release build. Notice that many log messages will only appear in a debug build.");
 #endif
 
-    char** logv = eina_str_split(logEnv, ",", -1);
-
-    EINA_SAFETY_ON_NULL_RETURN(logv);
-
-    for (int i = 0; logv[i]; i++) {
-        if (WTFLogChannel* channel = getChannelFromName(logv[i]))
-            channel->state = WTFLogChannelOn;
-    }
-
-    free(*logv);
-    free(logv);
-
-    // To disable logging notImplemented set the DISABLE_NI_WARNING
-    // environment variable to 1.
-    LogNotYetImplemented.state = WTFLogChannelOn;
+    // To disable logging notImplemented set the DISABLE_NI_WARNING environment variable to 1.
+    String logLevel = "NotYetImplemented,";
+    logLevel.append(logEnv);
+    return logLevel;
 }
 
 }
index 2a02afb..542dcfe 100644 (file)
@@ -572,7 +572,7 @@ GstElement* MediaPlayerPrivateGStreamerBase::createVideoSink(GstElement* pipelin
 #if LOG_DISABLED
             g_object_set(m_fpsSink, "text-overlay", FALSE , NULL);
 #else
-            WTFLogChannel* channel = getChannelFromName("Media");
+            WTFLogChannel* channel = logChannelByName("Media");
             if (channel->state != WTFLogChannelOn)
                 g_object_set(m_fpsSink, "text-overlay", FALSE , NULL);
 #endif // LOG_DISABLED
index a898af7..a8450bb 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2007 Alp Toker <alp@atoker.com>
  * Copyright (C) 2009 Gustavo Noronha Silva <gns@gnome.org>
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -19,7 +20,6 @@
  */
 
 #include "config.h"
-#include "InitializeLogging.h"
 #include "Logging.h"
 
 #if !LOG_DISABLED
 
 namespace WebCore {
 
-// Inspired by the code used by the Qt port
-
-void initializeLoggingChannelsIfNecessary()
+String logLevelString()
 {
-    static bool didInitializeLoggingChannels = false;
-    if (didInitializeLoggingChannels)
-        return;
-
-    didInitializeLoggingChannels = true;
-
     char* logEnv = getenv("WEBKIT_DEBUG");
     if (!logEnv)
-        return;
+        return emptyString();
 
-    // we set up the logs anyway because some of our logging, such as
-    // soup's is available in release builds
+    // We set up the logs anyway because some of our logging, such as Soup's is available in release builds.
 #if defined(NDEBUG)
     g_warning("WEBKIT_DEBUG is not empty, but this is a release build. Notice that many log messages will only appear in a debug build.");
 #endif
 
-    char** logv = g_strsplit(logEnv, " ", -1);
-
-    for (int i = 0; logv[i]; i++) {
-        if (WTFLogChannel* channel = getChannelFromName(logv[i]))
-            channel->state = WTFLogChannelOn;
-    }
-
-    g_strfreev(logv);
-
-    // to disable logging notImplemented set the DISABLE_NI_WARNING
-    // environment variable to 1
-    LogNotYetImplemented.state = WTFLogChannelOn;
+    // To disable logging notImplemented set the DISABLE_NI_WARNING environment variable to 1.
+    String logLevel = "NotYetImplemented,";
+    logLevel.append(logEnv);
+    return logLevel;
 }
 
 } // namespace WebCore
index 2eee8d6..0c7d056 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003, 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2003, 2006, 2013 Apple Computer, Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  */
 
 #include "config.h"
-#include "InitializeLogging.h"
 #include "Logging.h"
 
+#include <wtf/text/WTFString.h>
+
 #if !LOG_DISABLED
 
 namespace WebCore {
 
-static inline void initializeWithUserDefault(WTFLogChannel& channel)
-{
-    NSString *logLevelString = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithUTF8String:channel.defaultName]];
-    if (logLevelString) {
-        unsigned logLevel;
-        if (![[NSScanner scannerWithString:logLevelString] scanHexInt:&logLevel])
-            NSLog(@"unable to parse hex value for %s (%@), logging is off", channel.defaultName, logLevelString);
-        if ((logLevel & channel.mask) == channel.mask)
-            channel.state = WTFLogChannelOn;
-        else
-            channel.state = WTFLogChannelOff;
-    }
-}
+static NSString * const defaultsDomain = @"WebCoreLogging";
 
-void initializeLoggingChannelsIfNecessary()
+String logLevelString()
 {
-    static bool haveInitializedLoggingChannels = false;
-    if (haveInitializedLoggingChannels)
-        return;
-    haveInitializedLoggingChannels = true;
-    
-    initializeWithUserDefault(LogNotYetImplemented);
-    initializeWithUserDefault(LogFrames);
-    initializeWithUserDefault(LogLoading);
-    initializeWithUserDefault(LogPopupBlocking);
-    initializeWithUserDefault(LogEvents);
-    initializeWithUserDefault(LogEditing);
-    initializeWithUserDefault(LogLiveConnect);
-    initializeWithUserDefault(LogIconDatabase);
-    initializeWithUserDefault(LogSQLDatabase);
-    initializeWithUserDefault(LogSpellingAndGrammar);
-    initializeWithUserDefault(LogBackForward);
-    initializeWithUserDefault(LogHistory);
-    initializeWithUserDefault(LogPageCache);
-    initializeWithUserDefault(LogPlatformLeaks);
-    initializeWithUserDefault(LogResourceLoading);
-    initializeWithUserDefault(LogAnimations);
-    initializeWithUserDefault(LogNetwork);
-    initializeWithUserDefault(LogFTP);
-    initializeWithUserDefault(LogThreading);
-    initializeWithUserDefault(LogStorageAPI);
-    initializeWithUserDefault(LogMedia);
-    initializeWithUserDefault(LogPlugins);
-    initializeWithUserDefault(LogArchives);
-    initializeWithUserDefault(LogWebAudio);
-    initializeWithUserDefault(LogCompositing);
+    return [[NSUserDefaults standardUserDefaults] stringForKey:defaultsDomain];
 }
 
 }
index c38a634..ab148df 100644 (file)
@@ -1,5 +1,6 @@
 /*
     Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+    Copyright (C) 2013 Apple Inc. All rights reserved.
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
 */
 
 #include "config.h"
-#include "InitializeLogging.h"
 #include "Logging.h"
 
 #if !LOG_DISABLED
 
 #include <QDebug>
-#include <QStringList>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
-void initializeLoggingChannelsIfNecessary()
+String logLevelString()
 {
-    static bool haveInitializedLoggingChannels = false;
-    if (haveInitializedLoggingChannels)
-        return;
-
-    haveInitializedLoggingChannels = true;
-
     QByteArray loggingEnv = qgetenv("QT_WEBKIT_LOG");
     if (loggingEnv.isEmpty())
-        return;
+        return emptyString();
 
 #if defined(NDEBUG)
     qWarning("This is a release build. Setting QT_WEBKIT_LOG will have no effect.");
 #else
-    QStringList channels = QString::fromLocal8Bit(loggingEnv).split(QLatin1String(","));
-    for (int i = 0; i < channels.count(); i++) {
-        if (WTFLogChannel* channel = getChannelFromName(channels.at(i)))
-            channel->state = WTFLogChannelOn;
-    }
-
-    // By default we log calls to notImplemented(). This can be turned
-    // off by setting the environment variable DISABLE_NI_WARNING to 1
-    LogNotYetImplemented.state = WTFLogChannelOn;
+
+    // To disable logging notImplemented set the DISABLE_NI_WARNING environment variable to 1.
+    String logLevel = "NotYetImplemented,";
+    logLevel.append(QString::fromLocal8Bit(loggingEnv));
+    return logLevel;
 #endif
 }
 
index 0943661..3e367d9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2008, 2013 Apple Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -24,7 +24,6 @@
  */
 
 #include "config.h"
-#include "InitializeLogging.h"
 #include "Logging.h"
 
 #if !LOG_DISABLED
 
 namespace WebCore {
 
-static inline void initializeWithUserDefault(WTFLogChannel& channel)
+static char * const loggingEnvironmentVariable = "WebCoreLogging";
+
+String logLevelString()
 {
-    DWORD length = GetEnvironmentVariableA(channel.defaultName, 0, 0);
+    DWORD length = GetEnvironmentVariableA(loggingEnvironmentVariable, 0, 0);
     if (!length)
-        return;
+        return emptyString();
 
     OwnArrayPtr<char> buffer = adoptArrayPtr(new char[length]);
 
-    if (!GetEnvironmentVariableA(channel.defaultName, buffer.get(), length))
-        return;
-
-    String variableValue(buffer.get());
-
-    static const String& hexadecimalPrefix = *new String("0x");
-    if (variableValue.length() < 3 || !variableValue.startsWith(hexadecimalPrefix, false)) {
-        LOG_ERROR("Unable to parse hex value for %s (%s), logging is off", channel.defaultName, buffer.get());
-        return;
-    }
-
-    String unprefixedValue = variableValue.substring(2);
-
-    // Now parse the unprefixed string as a hexadecimal number.
-    bool parsedSuccessfully = false;
-    unsigned logLevel = unprefixedValue.toUIntStrict(&parsedSuccessfully, 16);
-
-    if (!parsedSuccessfully) {
-        LOG_ERROR("Unable to parse hex value for %s (%s), logging is off", channel.defaultName, buffer.get());
-        return;
-    }
-
-    if ((logLevel & channel.mask) == channel.mask)
-        channel.state = WTFLogChannelOn;
-    else
-        channel.state = WTFLogChannelOff;
-}
-
-void initializeLoggingChannelsIfNecessary()
-{
-    static bool haveInitializedLoggingChannels = false;
-    if (haveInitializedLoggingChannels)
-        return;
-    haveInitializedLoggingChannels = true;
+    if (!GetEnvironmentVariableA(loggingEnvironmentVariable, buffer.get(), length))
+        return emptyString();
 
-    initializeWithUserDefault(LogNotYetImplemented);
-    initializeWithUserDefault(LogFrames);
-    initializeWithUserDefault(LogLoading);
-    initializeWithUserDefault(LogPopupBlocking);
-    initializeWithUserDefault(LogEvents);
-    initializeWithUserDefault(LogEditing);
-    initializeWithUserDefault(LogLiveConnect);
-    initializeWithUserDefault(LogIconDatabase);
-    initializeWithUserDefault(LogSQLDatabase);
-    initializeWithUserDefault(LogSpellingAndGrammar);
-    initializeWithUserDefault(LogBackForward);
-    initializeWithUserDefault(LogHistory);
-    initializeWithUserDefault(LogPageCache);
-    initializeWithUserDefault(LogPlatformLeaks);
-    initializeWithUserDefault(LogResourceLoading);
-    initializeWithUserDefault(LogAnimations);
-    initializeWithUserDefault(LogNetwork);
-    initializeWithUserDefault(LogFTP);
-    initializeWithUserDefault(LogThreading);
-    initializeWithUserDefault(LogStorageAPI);
-    initializeWithUserDefault(LogMedia);
-    initializeWithUserDefault(LogPlugins);
-    initializeWithUserDefault(LogArchives);
-    initializeWithUserDefault(LogProgress);
-    initializeWithUserDefault(LogFileAPI);
+    return String(buffer.get());
 }
 
 } // namespace WebCore
index a7feffd..fc9661b 100644 (file)
 #include "CrossOriginPreflightResultCache.h"
 #include "FontCache.h"
 #include "ImageSource.h"
-#include "InitializeLogging.h"
 #include "InitializeThreading.h"
 #include "JSDOMWindow.h"
-#include "VM.h"
+#include "Logging.h"
 #include "MemoryCache.h"
 #include "NetworkStateNotifier.h"
 #include "PageCache.h"
@@ -36,6 +35,7 @@
 #include "PlatformStrategiesBlackBerry.h"
 #include "Settings.h"
 #include "TextureCacheCompositingThread.h"
+#include "VM.h"
 #include "bindings/js/GCController.h"
 #include "runtime/JSLock.h"
 #include <BlackBerryPlatformExecutableMessage.h>
index 32cfd26..1cb8bef 100644 (file)
@@ -1,3 +1,31 @@
+2013-07-27  Mark Rowe  <mrowe@apple.com>
+
+        Logging should be configurable using human-readable channel names rather than crazy bitmasks
+        <http://webkit.org/b/119031>
+
+        Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
+        and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.
+
+        Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
+        "all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
+        being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
+        for history and loading being enabled.
+
+        For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
+        the old user defaults to remain set for those people that need to switch between version of WebKit before and
+        after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
+        the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.
+
+        For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
+        consistency with the other platforms and to enable more code sharing.
+
+        While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
+        adding a new logging channel. Now only the header in the relevant project needs to be updated.
+
+        Reviewed by Sam Weinig.
+
+        * Api/BlackBerryGlobal.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.
+
 2013-07-31  Jacky Jiang  <zhajiang@blackberry.com>
 
         [BlackBerry] Page scrolls when width equals device width and initial scale is greater than 0.92
index c3c8f20..8d31be5 100644 (file)
@@ -1,3 +1,31 @@
+2013-07-27  Mark Rowe  <mrowe@apple.com>
+
+        Logging should be configurable using human-readable channel names rather than crazy bitmasks
+        <http://webkit.org/b/119031>
+
+        Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
+        and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.
+
+        Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
+        "all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
+        being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
+        for history and loading being enabled.
+
+        For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
+        the old user defaults to remain set for those people that need to switch between version of WebKit before and
+        after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
+        the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.
+
+        For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
+        consistency with the other platforms and to enable more code sharing.
+
+        While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
+        adding a new logging channel. Now only the header in the relevant project needs to be updated.
+
+        Reviewed by Sam Weinig.
+
+        * ewk/ewk_main.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.
+
 2013-07-27  Jacky Jiang  <zhajiang@blackberry.com>
 
         Replace all uses of GraphicsLayer::create function with the one that takes a GraphicsLayerFactory
index 3caa425..ed19ef3 100644 (file)
@@ -22,7 +22,7 @@
 #include "ewk_main.h"
 
 #include "FileSystem.h"
-#include "InitializeLogging.h"
+#include "Logging.h"
 #include "PageCache.h"
 #include "PageGroup.h"
 #include "PlatformStrategiesEfl.h"
index f6a703c..37e4813 100644 (file)
@@ -1,3 +1,31 @@
+2013-07-27  Mark Rowe  <mrowe@apple.com>
+
+        Logging should be configurable using human-readable channel names rather than crazy bitmasks
+        <http://webkit.org/b/119031>
+
+        Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
+        and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.
+
+        Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
+        "all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
+        being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
+        for history and loading being enabled.
+
+        For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
+        the old user defaults to remain set for those people that need to switch between version of WebKit before and
+        after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
+        the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.
+
+        For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
+        consistency with the other platforms and to enable more code sharing.
+
+        While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
+        adding a new logging channel. Now only the header in the relevant project needs to be updated.
+
+        Reviewed by Sam Weinig.
+
+        * webkit/webkitglobals.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.
+
 2013-08-02  Mario Sanchez Prada  <mario.prada@samsung.com>
 
         Implement atk_text_get_text_*_offset for WORD
index c9c67d1..15017dc 100644 (file)
 #include "ContextMenuItem.h"
 #include "FrameNetworkingContextGtk.h"
 #include "IconDatabase.h"
-#include "InitializeLogging.h"
+#include "Logging.h"
 #include "MemoryCache.h"
 #include "Page.h"
 #include "PageCache.h"
 #include "PageGroup.h"
-#include "PlatformStrategiesGtk.h"
-#include "TextEncodingRegistry.h"
 #include "Pasteboard.h"
 #include "PasteboardHelperGtk.h"
+#include "PlatformStrategiesGtk.h"
 #include "ResourceHandle.h"
 #include "ResourceHandleClient.h"
 #include "ResourceHandleInternal.h"
 #include "ResourceResponse.h"
 #include "SchemeRegistry.h"
+#include "TextEncodingRegistry.h"
 #include "webkitapplicationcache.h"
 #include "webkitfavicondatabase.h"
 #include "webkitglobalsprivate.h"
index 333225c..ec118d8 100644 (file)
@@ -1,3 +1,36 @@
+2013-07-26  Mark Rowe  <mrowe@apple.com>
+
+        Logging should be configurable using human-readable channel names rather than crazy bitmasks
+        <http://webkit.org/b/119031>
+
+        Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
+        and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.
+
+        Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
+        "all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
+        being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
+        for history and loading being enabled.
+
+        For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
+        the old user defaults to remain set for those people that need to switch between version of WebKit before and
+        after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
+        the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.
+
+        For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
+        consistency with the other platforms and to enable more code sharing.
+
+        While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
+        adding a new logging channel. Now only the header in the relevant project needs to be updated.
+
+        Reviewed by Sam Weinig.
+
+        * Misc/WebKitLogging.h: Declare a WEBKIT_LOG_CHANNELS macro that can be used to apply a preprocessor macro
+        across the set of all logging channels. Use this macro to declare the logging channels.
+        * Misc/WebKitLogging.m: Use WEBKIT_LOG_CHANNELS to define all of the channels. Pass the channels and the
+        preference value to the new WTF function that handles the initialization.
+        * WebView/WebPreferenceKeysPrivate.h: Remove a key that does not need to be here.
+        * WebView/WebView.mm: Switch from WebCore's InitializeLogging.h to Logging.h.
+
 2013-08-01  Ruth Fong  <ruth_fong@apple.com>
 
         [Forms: color] <input type='color'> popover color well implementation
index 5f3428d..8d6bb83 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2007, 2008, 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -37,30 +37,39 @@ extern "C" {
 #endif
 
 #if !LOG_DISABLED
-extern WTFLogChannel WebKitLogTiming;
-extern WTFLogChannel WebKitLogLoading;
-extern WTFLogChannel WebKitLogFontCache;
-extern WTFLogChannel WebKitLogFontSubstitution;
-extern WTFLogChannel WebKitLogFontSelection;
-extern WTFLogChannel WebKitLogDownload;
-extern WTFLogChannel WebKitLogDocumentLoad;
-extern WTFLogChannel WebKitLogPlugins;
-extern WTFLogChannel WebKitLogEvents;
-extern WTFLogChannel WebKitLogView;
-extern WTFLogChannel WebKitLogRedirect;
-extern WTFLogChannel WebKitLogPageCache;
-extern WTFLogChannel WebKitLogCacheSizes;
-extern WTFLogChannel WebKitLogFormDelegate;
-extern WTFLogChannel WebKitLogFileDatabaseActivity;
-extern WTFLogChannel WebKitLogHistory;
-extern WTFLogChannel WebKitLogBindings;
-extern WTFLogChannel WebKitLogEncoding;
-extern WTFLogChannel WebKitLogLiveConnect;
-extern WTFLogChannel WebKitLogBackForward;
-extern WTFLogChannel WebKitLogProgress;
-extern WTFLogChannel WebKitLogPluginEvents;
-extern WTFLogChannel WebKitLogIconDatabase;
-extern WTFLogChannel WebKitLogTextInput;
+
+#define WEBKIT_LOG_CHANNELS(M) \
+    M(BackForward) \
+    M(Bindings) \
+    M(CacheSizes) \
+    M(DocumentLoad) \
+    M(Download) \
+    M(Encoding) \
+    M(Events) \
+    M(FileDatabaseActivity) \
+    M(FontCache) \
+    M(FontSelection) \
+    M(FontSubstitution) \
+    M(FormDelegate) \
+    M(History) \
+    M(IconDatabase) \
+    M(LiveConnect) \
+    M(Loading) \
+    M(PageCache) \
+    M(PluginEvents) \
+    M(Plugins) \
+    M(Progress) \
+    M(Redirect) \
+    M(TextInput) \
+    M(Timing) \
+    M(View) \
+
+#define DECLARE_LOG_CHANNEL(name) \
+extern WTFLogChannel JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, name);
+
+WEBKIT_LOG_CHANNELS(DECLARE_LOG_CHANNEL)
+
+#undef DECLARE_LOG_CHANNEL
 
 void WebKitInitializeLoggingChannelsIfNecessary(void);
 #endif // !LOG_DISABLED
index e8d0378..faa2ed9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2007, 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 
 #if !LOG_DISABLED
 
-WTFLogChannel WebKitLogTextInput =              { 0x00000010, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogTiming =                 { 0x00000020, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogLoading =                { 0x00000040, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogFontCache =              { 0x00000100, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogFontSubstitution =       { 0x00000200, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogDownload =               { 0x00000800, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogDocumentLoad =           { 0x00001000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogPlugins =                { 0x00002000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogEvents =                 { 0x00010000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogView =                   { 0x00020000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogRedirect =               { 0x00040000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogPageCache =              { 0x00080000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogCacheSizes =             { 0x00100000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogFormDelegate =           { 0x00200000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogFileDatabaseActivity =   { 0x00400000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogHistory =                { 0x00800000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogBindings =               { 0x01000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogFontSelection =          { 0x02000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogEncoding =               { 0x04000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogLiveConnect =            { 0x08000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogBackForward =            { 0x10000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogProgress =               { 0x20000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogPluginEvents =           { 0x40000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogIconDatabase =           { 0x80000000, "WebKitLogLevel", WTFLogChannelOff };
+#define DEFINE_LOG_CHANNEL(name) \
+    WTFLogChannel JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, name) = { WTFLogChannelOff, #name };
+WEBKIT_LOG_CHANNELS(DEFINE_LOG_CHANNEL)
 
-static void initializeLogChannel(WTFLogChannel *channel)
-{
-    NSString *logLevelString = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithUTF8String:channel->defaultName]];
+#define LOG_CHANNEL_ADDRESS(name)  &JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, name),
+static WTFLogChannel* logChannels[] = {
+    WEBKIT_LOG_CHANNELS(LOG_CHANNEL_ADDRESS)
+};
 
-    // If there's no log level string from the user defaults, don't obliterate the compiled in values.
-    if (logLevelString) {
-        channel->state = WTFLogChannelOff;
-        unsigned logLevel;
-        if (![[NSScanner scannerWithString:logLevelString] scanHexInt:&logLevel])
-            NSLog(@"unable to parse hex value for %s (%@), logging is off", channel->defaultName, logLevelString);
-        if ((logLevel & channel->mask) == channel->mask)
-            channel->state = WTFLogChannelOn;
-    }
-}
+static const size_t logChannelCount = sizeof(logChannels) / sizeof(logChannels[0]);
+
+
+static NSString * const defaultsDomain = @"WebKitLogging";
 
 void WebKitInitializeLoggingChannelsIfNecessary()
 {
@@ -76,32 +50,14 @@ void WebKitInitializeLoggingChannelsIfNecessary()
     if (haveInitializedLoggingChannels)
         return;
     haveInitializedLoggingChannels = true;
+
+    NSString *logLevel = [[NSUserDefaults standardUserDefaults] stringForKey:defaultsDomain];
+    if (!logLevel)
+        return;
     
-    initializeLogChannel(&WebKitLogTiming);
-    initializeLogChannel(&WebKitLogLoading);
-    initializeLogChannel(&WebKitLogFontCache);
-    initializeLogChannel(&WebKitLogFontSubstitution);
-    initializeLogChannel(&WebKitLogDownload);
-    initializeLogChannel(&WebKitLogDocumentLoad);
-    initializeLogChannel(&WebKitLogPlugins);
-    initializeLogChannel(&WebKitLogEvents);
-    initializeLogChannel(&WebKitLogView);
-    initializeLogChannel(&WebKitLogRedirect);
-    initializeLogChannel(&WebKitLogPageCache);
-    initializeLogChannel(&WebKitLogCacheSizes);
-    initializeLogChannel(&WebKitLogFormDelegate);
-    initializeLogChannel(&WebKitLogFileDatabaseActivity);
-    initializeLogChannel(&WebKitLogHistory);
-    initializeLogChannel(&WebKitLogBindings);
-    initializeLogChannel(&WebKitLogFontSelection);
-    initializeLogChannel(&WebKitLogEncoding);
-    initializeLogChannel(&WebKitLogLiveConnect);
-    initializeLogChannel(&WebKitLogBackForward);
-    initializeLogChannel(&WebKitLogProgress);
-    initializeLogChannel(&WebKitLogPluginEvents);
-    initializeLogChannel(&WebKitLogIconDatabase);
-    initializeLogChannel(&WebKitLogTextInput);
+    WTFInitializeLogChannelStatesFromString(logChannels, logChannelCount, [logLevel UTF8String]);
 }
+
 #endif // !LOG_DISABLED
 
 void ReportDiscardedDelegateException(SEL delegateSelector, id exception)
index 1507c05..254bb3f 100644 (file)
@@ -29,7 +29,6 @@
 // These are private because callers should be using the cover methods. They are in
 // a Private (as opposed to Internal) header file because Safari uses some of them
 // for managed preferences.
-#define WebKitLogLevelPreferenceKey @"WebKitLogLevel"
 #define WebKitStandardFontPreferenceKey @"WebKitStandardFont"
 #define WebKitFixedFontPreferenceKey @"WebKitFixedFont"
 #define WebKitSerifFontPreferenceKey @"WebKitSerifFont"
index 552cb9d..52a8be8 100644 (file)
 #import <WebCore/HistoryController.h>
 #import <WebCore/HistoryItem.h>
 #import <WebCore/IconDatabase.h>
-#import <WebCore/InitializeLogging.h>
 #import <WebCore/JSCSSStyleDeclaration.h>
 #import <WebCore/JSDocument.h>
 #import <WebCore/JSElement.h>
 #import <WebCore/JSNodeList.h>
 #import <WebCore/JSNotification.h>
-#import <WebCore/MemoryPressureHandler.h>
+#import <WebCore/Logging.h>
 #import <WebCore/MIMETypeRegistry.h>
+#import <WebCore/MemoryPressureHandler.h>
 #import <WebCore/NodeList.h>
 #import <WebCore/Notification.h>
 #import <WebCore/NotificationController.h>
index 796ade1..a880bc2 100644 (file)
@@ -1,3 +1,31 @@
+2013-07-27  Mark Rowe  <mrowe@apple.com>
+
+        Logging should be configurable using human-readable channel names rather than crazy bitmasks
+        <http://webkit.org/b/119031>
+
+        Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
+        and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.
+
+        Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
+        "all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
+        being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
+        for history and loading being enabled.
+
+        For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
+        the old user defaults to remain set for those people that need to switch between version of WebKit before and
+        after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
+        the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.
+
+        For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
+        consistency with the other platforms and to enable more code sharing.
+
+        While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
+        adding a new logging channel. Now only the header in the relevant project needs to be updated.
+
+        Reviewed by Sam Weinig.
+
+        * WebCoreSupport/InitWebCoreQt.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.
+
 2013-07-31  Kwang Yul Seo  <skyul@company100.net>
 
         Use emptyString instead of String("")
index 8e56ad3..5b15c61 100644 (file)
@@ -34,7 +34,7 @@
 #include "ChromeClientQt.h"
 #include "Font.h"
 #include "Image.h"
-#include "InitializeLogging.h"
+#include "Logging.h"
 #include "MemoryCache.h"
 #include "NotImplemented.h"
 #include "Page.h"
index a1f88fb..ebe52d2 100644 (file)
@@ -1,3 +1,36 @@
+2013-07-26  Mark Rowe  <mrowe@apple.com>
+
+        Logging should be configurable using human-readable channel names rather than crazy bitmasks
+        <http://webkit.org/b/119031>
+
+        Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
+        and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.
+
+        Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
+        "all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
+        being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
+        for history and loading being enabled.
+
+        For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
+        the old user defaults to remain set for those people that need to switch between version of WebKit before and
+        after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
+        the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.
+
+        For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
+        consistency with the other platforms and to enable more code sharing.
+
+        While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
+        adding a new logging channel. Now only the header in the relevant project needs to be updated.
+
+        Reviewed by Sam Weinig.
+
+        * WebKitLogging.cpp: Declare a WEBKIT_LOG_CHANNELS macro that can be used to apply a preprocessor macro across
+        the set of all logging channels. Use this macro to declare the logging channels.
+        * WebKitLogging.h: Use WEBKIT_LOG_CHANNELS to define all of the channels. Pass the channels to the new WTF
+        function that handles the initialization. As per the previous implementation a developer needs to hard-code
+        their desired log level here.
+        * WebView.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.
+
 2013-08-01  Brent Fulgham  <bfulgham@apple.com>
 
         [Windows] WebKit1 Fullscreen Video Play is Broken
index 273ab56..ee8992b 100644 (file)
@@ -1,6 +1,5 @@
 /*
- * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
+ * Copyright (C) 2005, 2007, 2013 Apple Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 #include "config.h"
 #include "WebKitLogging.h"
 
-WTFLogChannel WebKitLogTextInput =              { 0x00000010, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogTiming =                 { 0x00000020, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogLoading =                { 0x00000040, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogFontCache =              { 0x00000100, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogFontSubstitution =       { 0x00000200, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogDownload =               { 0x00000800, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogDocumentLoad =           { 0x00001000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogPlugins =                { 0x00002000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogEvents =                 { 0x00010000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogView =                   { 0x00020000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogRedirect =               { 0x00040000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogPageCache =              { 0x00080000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogCacheSizes =             { 0x00100000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogFormDelegate =           { 0x00200000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogFileDatabaseActivity =   { 0x00400000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogHistory =                { 0x00800000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogBindings =               { 0x01000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogFontSelection =          { 0x02000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogEncoding =               { 0x04000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogLiveConnect =            { 0x08000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogBackForward =            { 0x10000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogProgress =               { 0x20000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogPluginEvents =           { 0x40000000, "WebKitLogLevel", WTFLogChannelOff };
-WTFLogChannel WebKitLogIconDatabase =           { 0x80000000, "WebKitLogLevel", WTFLogChannelOff };
+#define DEFINE_LOG_CHANNEL(name) \
+    WTFLogChannel JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, name) = { WTFLogChannelOff, #name };
+WEBKIT_LOG_CHANNELS(DEFINE_LOG_CHANNEL)
 
-static void initializeLogChannel(WTFLogChannel *)
-{
-    // FIXME: Get the LogChannel preferences from somewhere, otherwise people will have to hard code
-    // the logging channels they want to WTFLogChannelOn
-/*
-    channel->state = WTFLogChannelOff;
-    NSString *logLevelString = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithUTF8String:channel->defaultName]];
-    if (logLevelString) {
-        unsigned logLevel;
-        if (![[NSScanner scannerWithString:logLevelString] scanHexInt:&logLevel])
-            NSLog(@"unable to parse hex value for %s (%@), logging is off", channel->defaultName, logLevelString);
-        if ((logLevel & channel->mask) == channel->mask)
-            channel->state = WTFLogChannelOn;
-    }
-*/
-}
+#define LOG_CHANNEL_ADDRESS(name)  &JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, name),
+static WTFLogChannel* logChannels[] = {
+    WEBKIT_LOG_CHANNELS(LOG_CHANNEL_ADDRESS)
+};
+
+static const size_t logChannelCount = sizeof(logChannels) / sizeof(logChannels[0]);
 
 void WebKitInitializeLoggingChannelsIfNecessary()
 {
@@ -77,30 +45,7 @@ void WebKitInitializeLoggingChannelsIfNecessary()
     if (haveInitializedLoggingChannels)
         return;
     haveInitializedLoggingChannels = true;
-    
-    initializeLogChannel(&WebKitLogTextInput);
-    initializeLogChannel(&WebKitLogTiming);
-    initializeLogChannel(&WebKitLogLoading);
-    initializeLogChannel(&WebKitLogFontCache);
-    initializeLogChannel(&WebKitLogFontSubstitution);
-    initializeLogChannel(&WebKitLogDownload);
-    initializeLogChannel(&WebKitLogDocumentLoad);
-    initializeLogChannel(&WebKitLogPlugins);
-    initializeLogChannel(&WebKitLogEvents);
-    initializeLogChannel(&WebKitLogView);
-    initializeLogChannel(&WebKitLogRedirect);
-    initializeLogChannel(&WebKitLogPageCache);
-    initializeLogChannel(&WebKitLogCacheSizes);
-    initializeLogChannel(&WebKitLogFormDelegate);
-    initializeLogChannel(&WebKitLogFileDatabaseActivity);
-    initializeLogChannel(&WebKitLogHistory);
-    initializeLogChannel(&WebKitLogBindings);
-    initializeLogChannel(&WebKitLogFontSelection);
-    initializeLogChannel(&WebKitLogEncoding);
-    initializeLogChannel(&WebKitLogLiveConnect);
-    initializeLogChannel(&WebKitLogBackForward);
-    initializeLogChannel(&WebKitLogProgress);
-    initializeLogChannel(&WebKitLogPluginEvents);
-    initializeLogChannel(&WebKitLogIconDatabase);
-}
 
+    // FIXME: Get the log channel string from somewhere so people don't have to hardcode it here.
+    WTFInitializeLogChannelStatesFromString(logChannels, logChannelCount, "");
+}
index d19933d..9ec2f0a 100644 (file)
@@ -1,6 +1,5 @@
 /*
- * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
+ * Copyright (C) 2005, 2007, 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 #define LOG_CHANNEL_PREFIX WebKitLog
 #endif
 
+#define WEBKIT_LOG_CHANNELS(M) \
+    M(BackForward) \
+    M(Bindings) \
+    M(CacheSizes) \
+    M(DocumentLoad) \
+    M(Download) \
+    M(Encoding) \
+    M(Events) \
+    M(FileDatabaseActivity) \
+    M(FontCache) \
+    M(FontSelection) \
+    M(FontSubstitution) \
+    M(FormDelegate) \
+    M(History) \
+    M(IconDatabase) \
+    M(LiveConnect) \
+    M(Loading) \
+    M(PageCache) \
+    M(PluginEvents) \
+    M(Plugins) \
+    M(Progress) \
+    M(Redirect) \
+    M(TextInput) \
+    M(Timing) \
+    M(View) \
 
-extern WTFLogChannel WebKitLogTextInput;
-extern WTFLogChannel WebKitLogTiming;
-extern WTFLogChannel WebKitLogLoading;
-extern WTFLogChannel WebKitLogFontCache;
-extern WTFLogChannel WebKitLogFontSubstitution;
-extern WTFLogChannel WebKitLogFontSelection;
-extern WTFLogChannel WebKitLogDownload;
-extern WTFLogChannel WebKitLogDocumentLoad;
-extern WTFLogChannel WebKitLogPlugins;
-extern WTFLogChannel WebKitLogEvents;
-extern WTFLogChannel WebKitLogView;
-extern WTFLogChannel WebKitLogRedirect;
-extern WTFLogChannel WebKitLogPageCache;
-extern WTFLogChannel WebKitLogCacheSizes;
-extern WTFLogChannel WebKitLogFormDelegate;
-extern WTFLogChannel WebKitLogFileDatabaseActivity;
-extern WTFLogChannel WebKitLogHistory;
-extern WTFLogChannel WebKitLogBindings;
-extern WTFLogChannel WebKitLogEncoding;
-extern WTFLogChannel WebKitLogLiveConnect;
-extern WTFLogChannel WebKitLogBackForward;
-extern WTFLogChannel WebKitLogProgress;
-extern WTFLogChannel WebKitLogPluginEvents;
-extern WTFLogChannel WebKitLogIconDatabase;
+#define DECLARE_LOG_CHANNEL(name) \
+extern WTFLogChannel JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, name);
+
+WEBKIT_LOG_CHANNELS(DECLARE_LOG_CHANNEL)
+
+#undef DECLARE_LOG_CHANNEL
 
 void WebKitInitializeLoggingChannelsIfNecessary(void);
 
index 196e532..60ac128 100644 (file)
 #include <WebCore/HistoryItem.h>
 #include <WebCore/HitTestRequest.h>
 #include <WebCore/HitTestResult.h>
-#include <WebCore/InitializeLogging.h>
 #include <WebCore/IntRect.h>
 #include <WebCore/JSElement.h>
 #include <WebCore/KeyboardEvent.h>
+#include <WebCore/Logging.h>
 #include <WebCore/MIMETypeRegistry.h>
 #include <WebCore/MemoryCache.h>
 #include <WebCore/Page.h>
index 9cf7ad0..e50e773 100644 (file)
@@ -1,3 +1,49 @@
+2013-07-26  Mark Rowe  <mrowe@apple.com>
+
+        Logging should be configurable using human-readable channel names rather than crazy bitmasks
+        <http://webkit.org/b/119031>
+
+        Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
+        and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.
+
+        Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
+        "all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
+        being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
+        for history and loading being enabled.
+
+        For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
+        the old user defaults to remain set for those people that need to switch between version of WebKit before and
+        after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
+        the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.
+
+        For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
+        consistency with the other platforms and to enable more code sharing.
+
+        While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
+        adding a new logging channel. Now only the header in the relevant project needs to be updated.
+
+        Reviewed by Sam Weinig.
+
+        * NetworkProcess/NetworkProcess.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.
+        * Platform/Logging.cpp: Use WEBKIT2_LOG_CHANNELS to define all of the channels.
+        (WebKit::initializeLogChannelsIfNecessary): Pass the channels and the log level string to the new WTF function
+        that handles the initialization.
+        (WebKit::logChannelByName): Renamed to match our naming conventions. Calls through to the new WTF function
+        to find a log channel rather than repeating the names of the log channels a further two times each.
+        (WebKit::logLevelString): Provide a no-op implementation.
+        * Platform/Logging.h: Declare a WEBKIT2_LOG_CHANNELS macro that can be used to apply a preprocessor macro
+        across the set of all logging channels. Use this macro to declare the logging channels.
+        * Platform/efl/LoggingEfl.cpp:
+        (WebKit::logLevelString): Pull the value out of the WEBKIT_DEBUG environment variable.
+        * Platform/gtk/LoggingGtk.cpp:
+        (WebKit::logLevelString): Ditto.
+        * Platform/mac/Logging.mac.mm:
+        (WebKit::logLevelString): Pull the value out of the WebKit2Logging user default key.
+        * Platform/qt/LoggingQt.cpp:
+        (WebKit::logLevelString): Pull the value out of the QT_WEBKIT_LOG environment variable.
+        * Shared/WebKit2Initialize.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.
+        * UIProcess/WebContext.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.
+
 2013-08-05  Anders Carlsson  <andersca@apple.com>
 
         Ignore the Apple Java placeholder plug-in
index 917ddc5..6af15db 100644 (file)
@@ -42,7 +42,7 @@
 #include "StatisticsData.h"
 #include "WebContextMessages.h"
 #include "WebCookieManager.h"
-#include <WebCore/InitializeLogging.h>
+#include <WebCore/Logging.h>
 #include <WebCore/ResourceRequest.h>
 #include <WebCore/RunLoop.h>
 #include <wtf/text/CString.h>
index 49b9467..1328a7a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2013 Apple Inc. All rights reserved.
  * Copyright (C) 2011 Samsung Electronics
  *
  * Redistribution and use in source and binary forms, with or without
 #include "config.h"
 #include "Logging.h"
 
+#include <wtf/text/CString.h>
+
 #if !LOG_DISABLED
 
 namespace WebKit {
 
-WTFLogChannel LogSessionState      = { 0x00000001, "WebKit2LogLevel", WTFLogChannelOff };
-WTFLogChannel LogContextMenu       = { 0x00000002, "WebKit2LogLevel", WTFLogChannelOff };
-WTFLogChannel LogTextInput         = { 0x00000004, "WebKit2LogLevel", WTFLogChannelOff };
-WTFLogChannel LogView              = { 0x00000008, "WebKit2LogLevel", WTFLogChannelOff };
-WTFLogChannel LogIconDatabase      = { 0x00000010, "WebKit2LogLevel", WTFLogChannelOff };
-WTFLogChannel LogKeyHandling       = { 0x00000020, "WebKit2LogLevel", WTFLogChannelOff };
-WTFLogChannel LogPlugins           = { 0x00000040, "WebKit2LogLevel", WTFLogChannelOff };
-WTFLogChannel LogNetwork           = { 0x00000080, "WebKit2LogLevel", WTFLogChannelOff };
-WTFLogChannel LogNetworkScheduling = { 0x00000100, "WebKit2LogLevel", WTFLogChannelOff };
-WTFLogChannel LogInspectorServer   = { 0x00000200, "WebKit2LogLevel", WTFLogChannelOff };
-
-#if !PLATFORM(MAC) && !PLATFORM(GTK) && !PLATFORM(QT) && !PLATFORM(EFL)
-void initializeLogChannel(WTFLogChannel* channel)
-{
-    // FIXME: Each platform will need to define their own initializeLogChannel().
-}
-#endif
-
-#if PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL)
-WTFLogChannel* getChannelFromName(const String& channelName)
-{
-    if (!(channelName.length() >= 2))
-        return 0;
-
-    if (equalIgnoringCase(channelName, String("SessionState")))
-        return &LogSessionState;
-
-    if (equalIgnoringCase(channelName, String("ContextMenu")))
-        return &LogContextMenu;
-
-    if (equalIgnoringCase(channelName, String("TextInput")))
-        return &LogTextInput;
-
-    if (equalIgnoringCase(channelName, String("View")))
-        return &LogView;
-
-    if (equalIgnoringCase(channelName, String("IconDatabase")))
-        return &LogIconDatabase;
-
-    if (equalIgnoringCase(channelName, String("KeyHandling")))
-        return &LogKeyHandling;
+#define DEFINE_LOG_CHANNEL(name) \
+    WTFLogChannel JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, name) = { WTFLogChannelOff, #name };
+WEBKIT2_LOG_CHANNELS(DEFINE_LOG_CHANNEL)
 
-    if (equalIgnoringCase(channelName, String("Plugins")))
-        return &LogPlugins;
+#define LOG_CHANNEL_ADDRESS(name)  &JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, name),
+static WTFLogChannel* logChannels[] = {
+    WEBKIT2_LOG_CHANNELS(LOG_CHANNEL_ADDRESS)
+};
 
-    if (equalIgnoringCase(channelName, String("Network")))
-        return &LogNetwork;
-
-    if (equalIgnoringCase(channelName, String("InspectorServer")))
-        return &LogInspectorServer;
-
-    return 0;
-}
-#endif
+const size_t logChannelCount = WTF_ARRAY_LENGTH(logChannels);
 
 void initializeLogChannelsIfNecessary()
 {
@@ -93,18 +51,29 @@ void initializeLogChannelsIfNecessary()
         return;
     haveInitializedLogChannels = true;
 
-    initializeLogChannel(&LogSessionState);
-    initializeLogChannel(&LogContextMenu);
-    initializeLogChannel(&LogTextInput);
-    initializeLogChannel(&LogView);
-    initializeLogChannel(&LogIconDatabase);
-    initializeLogChannel(&LogKeyHandling);
-    initializeLogChannel(&LogPlugins);
-    initializeLogChannel(&LogNetwork);
-    initializeLogChannel(&LogNetworkScheduling);
-    initializeLogChannel(&LogInspectorServer);
+    static bool haveInitializedLoggingChannels = false;
+    if (haveInitializedLoggingChannels)
+        return;
+    haveInitializedLoggingChannels = true;
+    
+    WTFInitializeLogChannelStatesFromString(logChannels, logChannelCount, logLevelString().utf8().data());
 }
 
+#if PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL)
+WTFLogChannel* logChannelByName(const String& name)
+{
+    return WTFLogChannelByName(logChannels, logChannelCount, name.utf8().data());
+}
+#endif
+
+#if !PLATFORM(MAC) && !PLATFORM(GTK) && !PLATFORM(QT) && !PLATFORM(EFL)
+String logLevelString()
+{
+    // FIXME: Each platform will need to define their own logLevelString();
+    return emptyString();
+}
+#endif
+
 } // namespace WebKit
 
 #endif // !LOG_DISABLED
index 072e315..50c15f2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 #if !LOG_DISABLED
 
 #ifndef LOG_CHANNEL_PREFIX
-#define LOG_CHANNEL_PREFIX Log
+#define LOG_CHANNEL_PREFIX WebKit2Log
 #endif
 
 namespace WebKit {
 
-extern WTFLogChannel LogContextMenu;
-extern WTFLogChannel LogIconDatabase;
-extern WTFLogChannel LogInspectorServer;
-extern WTFLogChannel LogKeyHandling;
-extern WTFLogChannel LogPlugins;
-extern WTFLogChannel LogSessionState;
-extern WTFLogChannel LogTextInput;
-extern WTFLogChannel LogView;
-extern WTFLogChannel LogNetwork;
-extern WTFLogChannel LogNetworkScheduling;
-
-void initializeLogChannel(WTFLogChannel*);
+#define WEBKIT2_LOG_CHANNELS(M) \
+    M(ContextMenu) \
+    M(IconDatabase) \
+    M(InspectorServer) \
+    M(KeyHandling) \
+    M(Network) \
+    M(NetworkScheduling) \
+    M(Plugins) \
+    M(SessionState) \
+    M(TextInput) \
+    M(View) \
+
+#define DECLARE_LOG_CHANNEL(name) \
+    extern WTFLogChannel JOIN_LOG_CHANNEL_WITH_PREFIX(LOG_CHANNEL_PREFIX, name);
+
+WEBKIT2_LOG_CHANNELS(DECLARE_LOG_CHANNEL)
+
+#undef DECLARE_LOG_CHANNEL
+
 void initializeLogChannelsIfNecessary(void);
+String logLevelString();
+
 #if PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL)
-WTFLogChannel* getChannelFromName(const String& channelName);
+WTFLogChannel* logChannelByName(const String&);
 #endif
 
 } // namespace WebKit
index 5c8b700..af64be5 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 Samsung Electronics. All rights reserved.
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 
 namespace WebKit {
 
-void initializeLogChannel(WTFLogChannel* channel)
+String logLevelString()
 {
-    DEFINE_STATIC_LOCAL(Vector<WTFLogChannel*>, activatedChannels, ());
-
-    // Fill activatedChannels vector only once based on names set in logValue.
-    if (activatedChannels.isEmpty()) {
-        const String logValue = getenv("WEBKIT_DEBUG");
-        if (logValue.isEmpty())
-            return;
-
-        Vector<String> activatedNames;
-        logValue.split(',', activatedNames);
-        for (size_t i = 0; i < activatedNames.size(); i++) {
-            WTFLogChannel* activeChannel = getChannelFromName(activatedNames[i]);
-            if (activeChannel)
-                activatedChannels.append(activeChannel);
-        }
-    }
-
-    if (activatedChannels.contains(channel))
-        channel->state = WTFLogChannelOn;
+    return getenv("WEBKIT_DEBUG");
 }
 
 } // namespace WebKit
index 8637c1e..44e5b11 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 Samsung Electronics
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -32,27 +33,9 @@ namespace WebKit {
 
 #if !LOG_DISABLED
 
-void initializeLogChannel(WTFLogChannel* channel)
+String logLevelString()
 {
-    static Vector<WTFLogChannel*> activatedChannels;
-    const static String logValue(g_getenv("WEBKIT_DEBUG"));
-
-    if (logValue.isEmpty())
-        return;
-
-    // Fill activatedChannels vector only once based on names set in logValue.
-    if (activatedChannels.isEmpty()) {
-        static Vector<String> activatedNames;
-        logValue.split(" ", activatedNames);
-        for (unsigned int i = 0; i < activatedNames.size(); i++) {
-            WTFLogChannel* activeChannel = getChannelFromName(activatedNames[i]);
-            if (activeChannel)
-                activatedChannels.append(activeChannel);
-        }
-    }
-
-    if (activatedChannels.contains(channel))
-        channel->state = WTFLogChannelOn;
+    return g_getenv("WEBKIT_DEBUG");
 }
 
 #endif // !LOG_DISABLED
index 8dc7bd7..95df98d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Apple Inc. All rights reserved.
+ * Copyright (C) 2011, 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -30,20 +30,11 @@ namespace WebKit {
 
 #if !LOG_DISABLED
 
-void initializeLogChannel(WTFLogChannel* channel)
-{
-    // If there is no log level string from the user defaults then don't change the logging channel at all.
-    NSString *logLevelString = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithUTF8String:channel->defaultName]];
-    if (!logLevelString)
-        return;
-
-    channel->state = WTFLogChannelOff;
+static NSString * const defaultsDomain = @"WebKit2Logging";
 
-    unsigned logLevel;
-    if (![[NSScanner scannerWithString:logLevelString] scanHexInt:&logLevel])
-        NSLog(@"unable to parse hex value for %s (%@), logging is off", channel->defaultName, logLevelString);
-    if ((logLevel & channel->mask) == channel->mask)
-        channel->state = WTFLogChannelOn;
+String logLevelString()
+{
+    return [[NSUserDefaults standardUserDefaults] stringForKey:defaultsDomain];
 }
 
 #endif
index 3c44e23..6f79518 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2011 Samsung Electronics
  * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies)
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 #include "Logging.h"
 
 #include <QDebug>
-#include <QStringList>
 
 namespace WebKit {
 
 #if !LOG_DISABLED
 
-void initializeLogChannel(WTFLogChannel* channel)
+String logLevelString()
 {
-    static Vector<WTFLogChannel*> activatedChannels;
-
-    QByteArray loggingEnv = qgetenv("QT_WEBKIT_LOG");
-    if (loggingEnv.isEmpty())
-        return;
-
-    // Fill activatedChannels vector only once based on names set in logValue.
-    if (activatedChannels.isEmpty()) {
-        QStringList channels = QString::fromLocal8Bit(loggingEnv).split(QLatin1String(","));
-        for (int i = 0; i < channels.count(); i++) {
-            if (WTFLogChannel* activeChannel = getChannelFromName(channels.at(i)))
-                activatedChannels.append(activeChannel);
-        }
-    }
-
-    if (activatedChannels.contains(channel))
-        channel->state = WTFLogChannelOn;
+    return QString::fromLocal8Bit(qgetenv("QT_WEBKIT_LOG"));
 }
 
 #endif // !LOG_DISABLED
index 84f736f..c8882d8 100644 (file)
@@ -27,7 +27,7 @@
 #include "WebKit2Initialize.h"
 
 #include "Logging.h"
-#include <WebCore/InitializeLogging.h>
+#include <WebCore/Logging.h>
 #include <WebCore/RunLoop.h>
 #include <runtime/InitializeThreading.h>
 #include <wtf/MainThread.h>
index e1ef102..bbc87bb 100644 (file)
@@ -56,9 +56,9 @@
 #include "WebProcessMessages.h"
 #include "WebProcessProxy.h"
 #include "WebResourceCacheManagerProxy.h"
-#include <WebCore/InitializeLogging.h>
 #include <WebCore/Language.h>
 #include <WebCore/LinkHash.h>
+#include <WebCore/Logging.h>
 #include <WebCore/ResourceRequest.h>
 #include <WebCore/RunLoop.h>
 #include <runtime/InitializeThreading.h>