Changeset 248288 in webkit
- Timestamp:
- Aug 5, 2019, 8:45:40 PM (7 years ago)
- Location:
- trunk/Source
- Files:
-
- 6 edited
-
WTF/ChangeLog (modified) (1 diff)
-
WTF/wtf/Logger.h (modified) (5 diffs)
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/dom/Document.cpp (modified) (1 diff)
-
WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp (modified) (1 diff)
-
WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r248268 r248288 1 2019-08-05 Youenn Fablet <youenn@apple.com> 2 3 Make Logger::log thread safe so that it can be used from background threads 4 https://bugs.webkit.org/show_bug.cgi?id=200448 5 6 Reviewed by Eric Carlson. 7 8 Add a lock to ensure calling log is thread-safe. 9 10 * wtf/Logger.h: 11 (WTF::Logger::addObserver): 12 (WTF::Logger::removeObserver): 13 (WTF::Logger::log): 14 (WTF::Logger::observerLock): 15 1 16 2019-08-05 Takashi Komori <Takashi.Komori@sony.com> 2 17 -
trunk/Source/WTF/wtf/Logger.h
r248043 r248288 26 26 #pragma once 27 27 28 #include <wtf/Lock.h> 28 29 #include <wtf/text/StringBuilder.h> 29 30 … … 113 114 public: 114 115 virtual ~Observer() = default; 116 // Can be called on any thread. 115 117 virtual void didLogMessage(const WTFLogChannel&, WTFLogLevel, Vector<JSONLogValue>&&) = 0; 116 118 }; … … 217 219 static inline void addObserver(Observer& observer) 218 220 { 221 auto lock = holdLock(observerLock()); 219 222 observers().append(observer); 220 223 } 221 224 static inline void removeObserver(Observer& observer) 222 225 { 226 auto lock = holdLock(observerLock()); 223 227 observers().removeFirstMatching([&observer](auto anObserver) { 224 228 return &anObserver.get() == &observer; … … 248 252 return; 249 253 254 auto lock = tryHoldLock(observerLock()); 255 if (!lock) 256 return; 257 250 258 for (Observer& observer : observers()) 251 259 observer.didLogMessage(channel, level, { ConsoleLogValue<Argument>::toValue(arguments)... }); … … 258 266 } 259 267 268 static Lock& observerLock() 269 { 270 static NeverDestroyed<Lock> observerLock; 271 return observerLock; 272 } 273 274 260 275 bool m_enabled { true }; 261 276 const void* m_owner; -
trunk/Source/WebCore/ChangeLog
r248287 r248288 1 2019-08-05 Youenn Fablet <youenn@apple.com> 2 3 Make Logger::log thread safe so that it can be used from background threads 4 https://bugs.webkit.org/show_bug.cgi?id=200448 5 6 Reviewed by Eric Carlson. 7 8 No change of behavior. 9 10 * dom/Document.cpp: 11 (WebCore::crossThreadCopy): 12 (WebCore::Document::didLogMessage): 13 Make sure to hop to the main thread if needed. 14 * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp: 15 (WebCore::RealtimeIncomingAudioSourceCocoa::OnData): 16 Remove hopping to the main thread. 17 * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: 18 (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame): 19 Remove hopping to the main thread. 20 1 21 2019-08-05 Devin Rousso <drousso@apple.com> 2 22 -
trunk/Source/WebCore/dom/Document.cpp
r248170 r248288 8021 8021 } 8022 8022 8023 static inline Vector<JSONLogValue> crossThreadCopy(Vector<JSONLogValue>&& source) 8024 { 8025 auto values = WTFMove(source); 8026 for (auto& value : values) 8027 value.value = crossThreadCopy(WTFMove(value.value)); 8028 return values; 8029 } 8030 8023 8031 void Document::didLogMessage(const WTFLogChannel& channel, WTFLogLevel level, Vector<JSONLogValue>&& logMessages) 8024 8032 { 8033 if (!isMainThread()) { 8034 postTask([this, channel, level, logMessages = crossThreadCopy(WTFMove(logMessages))](auto&) mutable { 8035 didLogMessage(channel, level, WTFMove(logMessages)); 8036 }); 8037 return; 8038 } 8025 8039 if (!page()) 8026 8040 return; -
trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp
r247480 r248288 88 88 89 89 #if !RELEASE_LOG_DISABLED 90 if (!(++m_chunksReceived % 200)) { 91 callOnMainThread([this, protectedThis = makeRef(*this)] { 92 ALWAYS_LOG_IF(loggerPtr(), LOGIDENTIFIER, "chunk ", m_chunksReceived); 93 }); 94 } 90 ALWAYS_LOG_IF(loggerPtr() && !(++m_chunksReceived % 200), LOGIDENTIFIER, "chunk ", m_chunksReceived); 95 91 #endif 96 92 -
trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm
r248190 r248288 159 159 160 160 #if !RELEASE_LOG_DISABLED 161 if (!(++m_numberOfFrames % 60)) { 162 callOnMainThread([this, protectedThis = makeRef(*this), numberOfFrames = m_numberOfFrames] { 163 ALWAYS_LOG_IF(loggerPtr(), LOGIDENTIFIER, "frame ", numberOfFrames); 164 }); 165 } 161 ALWAYS_LOG_IF(loggerPtr() && !(++m_numberOfFrames % 60), LOGIDENTIFIER, "frame ", m_numberOfFrames); 166 162 #endif 167 163 168 164 auto pixelBuffer = pixelBufferFromVideoFrame(frame); 169 165 if (!pixelBuffer) { 170 callOnMainThread([this, protectedThis = makeRef(*this)] { 171 ERROR_LOG_IF(loggerPtr(), LOGIDENTIFIER, "Failed to get a pixel buffer from a frame"); 172 }); 166 ERROR_LOG_IF(loggerPtr(), LOGIDENTIFIER, "Failed to get a pixel buffer from a frame"); 173 167 return; 174 168 } … … 184 178 OSStatus ostatus = CMVideoFormatDescriptionCreateForImageBuffer(kCFAllocatorDefault, (CVImageBufferRef)pixelBuffer, &formatDescription); 185 179 if (ostatus != noErr) { 186 callOnMainThread([this, protectedThis = makeRef(*this), ostatus] { 187 ERROR_LOG_IF(loggerPtr(), LOGIDENTIFIER, "Failed to initialize CMVideoFormatDescription with error ", static_cast<int>(ostatus)); 188 }); 180 ERROR_LOG_IF(loggerPtr(), LOGIDENTIFIER, "Failed to initialize CMVideoFormatDescription with error ", static_cast<int>(ostatus)); 189 181 return; 190 182 } … … 194 186 CFRelease(formatDescription); 195 187 if (ostatus != noErr) { 196 callOnMainThread([this, protectedThis = makeRef(*this), ostatus] { 197 ERROR_LOG_IF(loggerPtr(), LOGIDENTIFIER, "Failed to create the sample buffer with error ", static_cast<int>(ostatus)); 198 }); 188 ERROR_LOG_IF(loggerPtr(), LOGIDENTIFIER, "Failed to create the sample buffer with error ", static_cast<int>(ostatus)); 199 189 return; 200 190 }
Note:
See TracChangeset
for help on using the changeset viewer.