зеркало из https://github.com/mozilla/gecko-dev.git
bad3183238
In short - if a user forcibly terminates the browser because it seems to be permanently hung, we currently do not get a change to record the hang. This is unfortunate, because these likely represent the most egregious hangs in terms of user frustration. This patch seeks to address that. If a hang exceeds 8192ms (the current definition of a "permahang" in existing BHR terms), then we decide to immediately persist it to disk, in case we never get a chance to return to the main thread and submit it. On the next start of the browser, we read the file from disk on a background thread, and just submit it using the normal mechanism. Regarding the handling of the file itself, I tried to do the simplest thing I could - as far as I can tell there is no standard simple serialization mechanism available directly to C++ in Gecko, so I just serialized it by hand. I didn't take any special care with endianness or anything as I can't think of a situation in which we really care at all about these files being transferable between architectures. I directly used PR_Write / PR_Read instead of doing something fancy like memory mapping the file, because I don't think performance is a critical concern here and it offers a simple protection against reading out of bounds. Differential Revision: https://phabricator.services.mozilla.com/D52566 --HG-- extra : moz-landing-system : lando |
||
---|---|---|
.. | ||
CompositorOptions.h | ||
CompositorSession.cpp | ||
CompositorSession.h | ||
CompositorWidgetVsyncObserver.cpp | ||
CompositorWidgetVsyncObserver.h | ||
CrossProcessPaint.cpp | ||
CrossProcessPaint.h | ||
D3DMessageUtils.cpp | ||
D3DMessageUtils.h | ||
GPUChild.cpp | ||
GPUChild.h | ||
GPUParent.cpp | ||
GPUParent.h | ||
GPUProcessHost.cpp | ||
GPUProcessHost.h | ||
GPUProcessImpl.cpp | ||
GPUProcessImpl.h | ||
GPUProcessListener.h | ||
GPUProcessManager.cpp | ||
GPUProcessManager.h | ||
GfxMessageUtils.h | ||
GraphicsMessages.ipdlh | ||
InProcessCompositorSession.cpp | ||
InProcessCompositorSession.h | ||
PGPU.ipdl | ||
PVsyncBridge.ipdl | ||
RemoteCompositorSession.cpp | ||
RemoteCompositorSession.h | ||
SharedDIB.cpp | ||
SharedDIB.h | ||
SharedDIBSurface.cpp | ||
SharedDIBSurface.h | ||
SharedDIBWin.cpp | ||
SharedDIBWin.h | ||
VsyncBridgeChild.cpp | ||
VsyncBridgeChild.h | ||
VsyncBridgeParent.cpp | ||
VsyncBridgeParent.h | ||
VsyncIOThreadHolder.cpp | ||
VsyncIOThreadHolder.h | ||
moz.build |