Commit e6904ac0 authored by siggi's avatar siggi Committed by Commit bot

Process WM_ENDSESSION in the traybar icon window.

BUG=441960

Review URL: https://codereview.chromium.org/888693003

Cr-Commit-Position: refs/heads/master@{#313934}
parent ca697c4c
......@@ -11,9 +11,11 @@
#include "base/threading/non_thread_safe.h"
#include "base/threading/thread.h"
#include "base/win/wrapped_window_proc.h"
#include "chrome/browser/lifetime/application_lifetime.h"
#include "chrome/browser/ui/views/status_icons/status_icon_win.h"
#include "chrome/browser/ui/views/status_icons/status_tray_state_changer_win.h"
#include "chrome/common/chrome_constants.h"
#include "components/browser_watcher/exit_funnel_win.h"
#include "ui/gfx/screen.h"
#include "ui/gfx/win/hwnd_util.h"
......@@ -26,6 +28,32 @@ const UINT kBaseIconId = 2;
UINT ReservedIconId(StatusTray::StatusIconType type) {
return kBaseIconId + static_cast<UINT>(type);
}
// See http://crbug.com/412384.
void TraceSessionEnding(LPARAM lparam) {
browser_watcher::ExitFunnel funnel;
if (!funnel.Init(chrome::kBrowserExitCodesRegistryPath,
base::GetCurrentProcessHandle())) {
return;
}
// This exit path is the prime suspect for most our unclean shutdowns.
// Trace all the possible options to WM_ENDSESSION. This may result in
// multiple events for a single shutdown, but that's fine.
funnel.RecordEvent(L"TraybarEndSession");
if (lparam & ENDSESSION_CLOSEAPP)
funnel.RecordEvent(L"ES_CloseApp");
if (lparam & ENDSESSION_CRITICAL)
funnel.RecordEvent(L"ES_Critical");
if (lparam & ENDSESSION_LOGOFF)
funnel.RecordEvent(L"ES_Logoff");
const LPARAM kKnownBits =
ENDSESSION_CLOSEAPP | ENDSESSION_CRITICAL | ENDSESSION_LOGOFF;
if (lparam & ~kKnownBits)
funnel.RecordEvent(L"ES_Other");
}
} // namespace
// Default implementation for StatusTrayStateChanger that communicates to
......@@ -198,6 +226,12 @@ LRESULT CALLBACK StatusTrayWin::WndProc(HWND hwnd,
win_icon->HandleClickEvent(cursor_pos, lparam == WM_LBUTTONDOWN);
return TRUE;
}
} else if (message == WM_ENDSESSION) {
// If Chrome is in background-only mode, this is the only notification
// it gets that Windows is exiting. Make sure we shutdown in an orderly
// fashion.
TraceSessionEnding(lparam);
chrome::SessionEnding();
}
return ::DefWindowProc(hwnd, message, wparam, lparam);
}
......
......@@ -36179,74 +36179,12 @@ Therefore, the affected-histogram name has to have at least one dot in it.
</summary>
</histogram>
<histogram name="Stability.ExitFunnel.BackgroundOff" units="milliseconds">
<histogram name="Stability.ExitFunnel" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.BackgroundOn" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.BrowserExit" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.EndSession" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.ES_CloseApp" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.ES_Critical" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.ES_Logoff" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.ES_Other" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.KillProcess" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.LastWindowClose" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.SessionEnding" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.TraybarExit" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.WatcherLogoff" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
</histogram>
<histogram name="Stability.ExitFunnel.WM_ENDSESSION" units="milliseconds">
<owner>siggi@chromium.org</owner>
<summary>Temporary instrumentation. See http://crbug.com/412384.</summary>
<summary>
Temporary instrumentation to record the Windows browser's exit path. See
http://crbug.com/412384.
</summary>
</histogram>
<histogram name="Stars.Goog_Related" units="percent">
......@@ -59957,6 +59895,25 @@ To add a new entry, add it with any value and run test to compute valid value.
<affected-histogram name="Media.EME.Widevine"/>
</histogram_suffixes>
<histogram_suffixes name="ExitFunnels" separator=".">
<suffix name="BackgroundOff"/>
<suffix name="BackgroundOn"/>
<suffix name="BrowserExit"/>
<suffix name="EndSession"/>
<suffix name="ES_CloseApp"/>
<suffix name="ES_Critical"/>
<suffix name="ES_Logoff"/>
<suffix name="ES_Other"/>
<suffix name="KillProcess"/>
<suffix name="LastWindowClose"/>
<suffix name="SessionEnding"/>
<suffix name="TraybarEndSession"/>
<suffix name="TraybarExit"/>
<suffix name="WatcherLogoff"/>
<suffix name="WM_ENDSESSION"/>
<affected-histogram name="Stability.ExitFunnel"/>
</histogram_suffixes>
<histogram_suffixes name="ExternalExtensionEvent" separator="">
<suffix name="NonWebstore"
label="sideloaded extensions that don't update from the webstore"/>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment