Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc

Issue 796963002: Instrument some of the exit paths likely to suffer hangs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@end_session_instrument
Patch Set: Add instrumentation for browser exit, plus now actually compiles Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h" 5 #include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h"
6 6
7 #include <dwmapi.h> 7 #include <dwmapi.h>
8 8
9 #include "base/process/process_handle.h"
9 #include "chrome/browser/lifetime/application_lifetime.h" 10 #include "chrome/browser/lifetime/application_lifetime.h"
10 #include "chrome/browser/themes/theme_service.h" 11 #include "chrome/browser/themes/theme_service.h"
11 #include "chrome/browser/themes/theme_service_factory.h" 12 #include "chrome/browser/themes/theme_service_factory.h"
12 #include "chrome/browser/ui/views/frame/browser_frame.h" 13 #include "chrome/browser/ui/views/frame/browser_frame.h"
13 #include "chrome/browser/ui/views/frame/browser_frame_common_win.h" 14 #include "chrome/browser/ui/views/frame/browser_frame_common_win.h"
14 #include "chrome/browser/ui/views/frame/browser_view.h" 15 #include "chrome/browser/ui/views/frame/browser_view.h"
15 #include "chrome/browser/ui/views/frame/browser_window_property_manager_win.h" 16 #include "chrome/browser/ui/views/frame/browser_window_property_manager_win.h"
16 #include "chrome/browser/ui/views/frame/system_menu_insertion_delegate_win.h" 17 #include "chrome/browser/ui/views/frame/system_menu_insertion_delegate_win.h"
17 #include "chrome/browser/ui/views/tabs/tab_strip.h" 18 #include "chrome/browser/ui/views/tabs/tab_strip.h"
18 #include "chrome/browser/ui/views/theme_image_mapper.h" 19 #include "chrome/browser/ui/views/theme_image_mapper.h"
20 #include "chrome/common/chrome_constants.h"
21 #include "components/browser_watcher/exit_funnel_win.h"
19 #include "ui/base/theme_provider.h" 22 #include "ui/base/theme_provider.h"
20 #include "ui/gfx/win/dpi.h" 23 #include "ui/gfx/win/dpi.h"
21 #include "ui/views/controls/menu/native_menu_win.h" 24 #include "ui/views/controls/menu/native_menu_win.h"
22 25
23 #pragma comment(lib, "dwmapi.lib") 26 #pragma comment(lib, "dwmapi.lib")
24 27
25 namespace { 28 namespace {
26 29
27 const int kClientEdgeThickness = 3; 30 const int kClientEdgeThickness = 3;
28 // We need to offset the DWMFrame into the toolbar so that the blackness 31 // We need to offset the DWMFrame into the toolbar so that the blackness
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 ui::ScaleFactor scale_factor) const override { 66 ui::ScaleFactor scale_factor) const override {
64 return delegate_->GetRawData(id, scale_factor); 67 return delegate_->GetRawData(id, scale_factor);
65 } 68 }
66 69
67 private: 70 private:
68 ui::ThemeProvider* delegate_; 71 ui::ThemeProvider* delegate_;
69 72
70 DISALLOW_COPY_AND_ASSIGN(DesktopThemeProvider); 73 DISALLOW_COPY_AND_ASSIGN(DesktopThemeProvider);
71 }; 74 };
72 75
76 // See http://crbug.com/412384.
77 void TraceSessionEnding(LPARAM lparam) {
78 browser_watcher::ExitFunnel funnel;
79 if (!funnel.Init(chrome::kBrowserExitCodesRegistryPath,
80 base::GetCurrentProcessHandle())) {
81 return;
82 }
83
84 // This exit path is the prime suspect for most our unclean shutdowns.
85 // Trace all the possible options to WM_ENDSESSION. This may result in
86 // multiple events for a single shutdown, but that's fine.
87 funnel.RecordEvent(L"WM_ENDSESSION");
88
89 if (lparam & ENDSESSION_CLOSEAPP)
90 funnel.RecordEvent(L"ES_CloseApp");
91 if (lparam & ENDSESSION_CRITICAL)
92 funnel.RecordEvent(L"ES_Critical");
93 if (lparam & ENDSESSION_LOGOFF)
94 funnel.RecordEvent(L"ES_Logoff");
95 const LPARAM kKnownBits =
96 ENDSESSION_CLOSEAPP | ENDSESSION_CRITICAL | ENDSESSION_LOGOFF;
97 if (lparam & ~kKnownBits)
98 funnel.RecordEvent(L"ES_Other");
99 }
100
73 } // namespace 101 } // namespace
74 102
75 //////////////////////////////////////////////////////////////////////////////// 103 ////////////////////////////////////////////////////////////////////////////////
76 // BrowserDesktopWindowTreeHostWin, public: 104 // BrowserDesktopWindowTreeHostWin, public:
77 105
78 BrowserDesktopWindowTreeHostWin::BrowserDesktopWindowTreeHostWin( 106 BrowserDesktopWindowTreeHostWin::BrowserDesktopWindowTreeHostWin(
79 views::internal::NativeWidgetDelegate* native_widget_delegate, 107 views::internal::NativeWidgetDelegate* native_widget_delegate,
80 views::DesktopNativeWidgetAura* desktop_native_widget_aura, 108 views::DesktopNativeWidgetAura* desktop_native_widget_aura,
81 BrowserView* browser_view, 109 BrowserView* browser_view,
82 BrowserFrame* browser_frame) 110 BrowserFrame* browser_frame)
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 bool BrowserDesktopWindowTreeHostWin::PreHandleMSG(UINT message, 203 bool BrowserDesktopWindowTreeHostWin::PreHandleMSG(UINT message,
176 WPARAM w_param, 204 WPARAM w_param,
177 LPARAM l_param, 205 LPARAM l_param,
178 LRESULT* result) { 206 LRESULT* result) {
179 switch (message) { 207 switch (message) {
180 case WM_ACTIVATE: 208 case WM_ACTIVATE:
181 if (LOWORD(w_param) != WA_INACTIVE) 209 if (LOWORD(w_param) != WA_INACTIVE)
182 minimize_button_metrics_.OnHWNDActivated(); 210 minimize_button_metrics_.OnHWNDActivated();
183 return false; 211 return false;
184 case WM_ENDSESSION: 212 case WM_ENDSESSION:
213 TraceSessionEnding(l_param);
185 chrome::SessionEnding(); 214 chrome::SessionEnding();
186 return true; 215 return true;
187 case WM_INITMENUPOPUP: 216 case WM_INITMENUPOPUP:
188 GetSystemMenu()->UpdateStates(); 217 GetSystemMenu()->UpdateStates();
189 return true; 218 return true;
190 } 219 }
191 return DesktopWindowTreeHostWin::PreHandleMSG( 220 return DesktopWindowTreeHostWin::PreHandleMSG(
192 message, w_param, l_param, result); 221 message, w_param, l_param, result);
193 } 222 }
194 223
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost( 355 BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost(
327 views::internal::NativeWidgetDelegate* native_widget_delegate, 356 views::internal::NativeWidgetDelegate* native_widget_delegate,
328 views::DesktopNativeWidgetAura* desktop_native_widget_aura, 357 views::DesktopNativeWidgetAura* desktop_native_widget_aura,
329 BrowserView* browser_view, 358 BrowserView* browser_view,
330 BrowserFrame* browser_frame) { 359 BrowserFrame* browser_frame) {
331 return new BrowserDesktopWindowTreeHostWin(native_widget_delegate, 360 return new BrowserDesktopWindowTreeHostWin(native_widget_delegate,
332 desktop_native_widget_aura, 361 desktop_native_widget_aura,
333 browser_view, 362 browser_view,
334 browser_frame); 363 browser_frame);
335 } 364 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698