WebKit icon indicating copy to clipboard operation
WebKit copied to clipboard

Add debug logging for process and page state

Open bnham opened this issue 2 years ago โ€ข 6 comments

e7d7304484632b6bd45655739197176a307f41cd

Add debug logging for process and page state
https://bugs.webkit.org/show_bug.cgi?id=245244
rdar://problem/99986063

Reviewed by NOBODY (OOPS!).

This adds notifyd callbacks that dump state about processes and pages. I've found this useful
recently to debug issues with enabling App Nap and adopting RunningBoard on macOS. I also intend to
use this so that Membuster5 knows which domain is loaded into a given WebContent pid. This will
allow the benchmark to provide per-origin memory footprint data.

I also added logging to UserActivity as we've needed this logging recently to debug and understand
issues with App Nap activation. As part of this I changed ProcessAssertion to take the description
string as a a string literal to make the logging marginally cheaper.

* Source/WTF/wtf/MemoryPressureHandler.cpp:
(WTF::MemoryPressureHandler::singleton):
(WTF::MemoryPressureHandler::singletonIfExists):
(WTF::MemoryPressureHandler::processStateDescription):
* Source/WTF/wtf/MemoryPressureHandler.h:
* Source/WebCore/history/BackForwardCache.h:
* Source/WebCore/page/MemoryRelease.cpp:
(WebCore::logMemoryStatistics):
* Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::logProcessPoolState):
(WebKit::WebProcessPool::platformInitialize):
* Source/WebKit/UIProcess/ProcessAssertion.cpp:
(WebKit::processAssertionTypeDescription):
* Source/WebKit/UIProcess/ProcessAssertion.h:
* Source/WebKit/UIProcess/ProcessThrottler.cpp:
(WebKit::activityNames):
(WebKit::operator<<):
* Source/WebKit/UIProcess/ProcessThrottler.h:
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::operator<<):
* Source/WebKit/UIProcess/WebProcessProxy.h:
(WebKit::WebProcessProxy::throttler const):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::activityState):
* Source/WebKit/WebProcess/WebProcess.cpp:
(WebKit::WebProcess::initializeWebProcess):
(WebKit::WebProcess::processTypeDescription const):
* Source/WebKit/WebProcess/WebProcess.h:
* Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::processTypeDescription const):
(WebKit::WebProcess::additionalStateForDiagnosticReport const):
* Source/WTF/wtf/MemoryPressureHandler.cpp:
(WTF::MemoryPressureHandler::singleton):
(WTF::memoryPressureHandlerIfExists):
(WTF::MemoryPressureHandler::processStateDescription):
* Source/WTF/wtf/MemoryPressureHandler.h:
* Source/WebCore/page/MemoryRelease.cpp:
(WebCore::logMemoryStatistics):
* Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::logProcessPoolState):
(WebKit::WebProcessPool::platformInitialize):
* Source/WebKit/UIProcess/ProcessAssertion.cpp:
(WebKit::processAssertionTypeDescription):
* Source/WebKit/UIProcess/ProcessAssertion.h:
* Source/WebKit/UIProcess/ProcessThrottler.cpp:
(WebKit::activityNames):
(WebKit::operator<<):
* Source/WebKit/UIProcess/ProcessThrottler.h:
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::operator<<):
* Source/WebKit/UIProcess/WebProcessProxy.h:
(WebKit::WebProcessProxy::throttler const):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::activityState):
* Source/WebKit/WebProcess/WebProcess.cpp:
(WebKit::WebProcess::initializeWebProcess):
(WebKit::WebProcess::processTypeDescription const):
* Source/WebKit/WebProcess/WebProcess.h:
* Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::processTypeDescription const):
(WebKit::WebProcess::additionalStateForDiagnosticReport const):
* Source/WTF/wtf/MemoryPressureHandler.cpp:
(WTF::MemoryPressureHandler::singleton):
(WTF::memoryPressureHandlerIfExists):
(WTF::MemoryPressureHandler::processStateDescription):
* Source/WTF/wtf/MemoryPressureHandler.h:
* Source/WebCore/page/MemoryRelease.cpp:
(WebCore::logMemoryStatistics):
* Source/WebCore/platform/CountedUserActivity.h:
(WebCore::CountedUserActivity::CountedUserActivity):
* Source/WebCore/platform/Logging.h:
* Source/WebCore/platform/UserActivity.cpp:
(WebCore::UserActivity::Impl::Impl):
(WebCore::UserActivity::UserActivity):
* Source/WebCore/platform/UserActivity.h:
* Source/WebCore/platform/mac/UserActivityMac.mm:
(WebCore::UserActivity::Impl::Impl):
(WebCore::UserActivity::Impl::beginActivity):
(WebCore::UserActivity::Impl::endActivity):
* Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.cpp:
(WebCore::DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa):
* Source/WebKit/Shared/AuxiliaryProcess.cpp:
(WebKit::AuxiliaryProcess::AuxiliaryProcess):
* Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::logProcessPoolState):
(WebKit::WebProcessPool::platformInitialize):
* Source/WebKit/UIProcess/ProcessAssertion.cpp:
(WebKit::processAssertionTypeDescription):
* Source/WebKit/UIProcess/ProcessAssertion.h:
* Source/WebKit/UIProcess/ProcessThrottler.cpp:
(WebKit::activityNames):
(WebKit::operator<<):
* Source/WebKit/UIProcess/ProcessThrottler.h:
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::operator<<):
* Source/WebKit/UIProcess/WebProcessProxy.h:
(WebKit::WebProcessProxy::throttler const):
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
* Source/WebKit/WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::activityState):
* Source/WebKit/WebProcess/WebProcess.cpp:
(WebKit::WebProcess::initializeWebProcess):
(WebKit::WebProcess::processTypeDescription const):
* Source/WebKit/WebProcess/WebProcess.h:
* Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::processTypeDescription const):
(WebKit::WebProcess::additionalStateForDiagnosticReport const):

https://github.com/WebKit/WebKit/commit/e7d7304484632b6bd45655739197176a307f41cd

Misc iOS, tvOS & watchOS macOS Linux Windows
โœ… ๐Ÿงช style โœ… ๐Ÿ›  ios โœ… ๐Ÿ›  mac โœ… ๐Ÿ›  wpe โœ… ๐Ÿ›  ๐Ÿงช win
โœ… ๐Ÿงช bindings โœ… ๐Ÿ›  ios-sim โณ ๐Ÿ›  mac-debug โœ… ๐Ÿ›  gtk โœ… ๐Ÿ›  wincairo
โœ… ๐Ÿงช webkitperl โœ… ๐Ÿงช ios-wk2 โœ… ๐Ÿ›  mac-AS-debug โœ… ๐Ÿงช gtk-wk2
โœ… ๐Ÿงช api-ios โœ… ๐Ÿงช api-mac โœ… ๐Ÿงช api-gtk
โŒ ๐Ÿ›  ๐Ÿงช jsc โœ… ๐Ÿ›  tv โณ ๐Ÿงช mac-wk1 โœ… ๐Ÿ›  jsc-armv7
โœ… ๐Ÿ›  tv-sim โœ… ๐Ÿงช mac-wk2 โœ… ๐Ÿงช jsc-armv7-tests
โœ… ๐Ÿ›  watch โœ… ๐Ÿงช mac-AS-debug-wk2 โœ… ๐Ÿ›  jsc-mips
โœ… ๐Ÿ›  watch-sim โœ… ๐Ÿงช mac-wk2-stress โŒ ๐Ÿงช jsc-mips-tests

bnham avatar Sep 15 '22 20:09 bnham

This looks super useful! Do you think it'd be reasonable to also log NSActivity state in UserActivity::Impl::beginActivity()/UserActivity::Impl::endActivity()?

salinas-miguel avatar Sep 19 '22 17:09 salinas-miguel

There was a new PR upload but it seems only some of the feedback was addressed?

cdumez avatar Oct 04 '22 14:10 cdumez

Committed 255239@main (501a16433dc7): https://commits.webkit.org/255239@main

Reviewed commits have been landed. Closing PR #4400 and removing active labels.

webkit-commit-queue avatar Oct 06 '22 20:10 webkit-commit-queue