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

Side by Side Diff: chrome/browser/chromeos/status/memory_menu_button.cc

Issue 7720012: Moves ownership of MenuItemView to MenuRunner as well as responbility (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unit test Created 9 years, 4 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/chromeos/status/memory_menu_button.h" 5 #include "chrome/browser/chromeos/status/memory_menu_button.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/process_util.h" // GetSystemMemoryInfo 8 #include "base/process_util.h" // GetSystemMemoryInfo
9 #include "base/stringprintf.h" 9 #include "base/stringprintf.h"
10 #include "base/threading/thread_restrictions.h" 10 #include "base/threading/thread_restrictions.h"
11 #include "chrome/browser/chromeos/status/status_area_host.h" 11 #include "chrome/browser/chromeos/status/status_area_host.h"
12 #include "chrome/browser/memory_purger.h" 12 #include "chrome/browser/memory_purger.h"
13 #include "chrome/common/render_messages.h" 13 #include "chrome/common/render_messages.h"
14 #include "content/browser/renderer_host/render_process_host.h" 14 #include "content/browser/renderer_host/render_process_host.h"
15 #include "content/common/notification_service.h" 15 #include "content/common/notification_service.h"
16 #include "grit/generated_resources.h" 16 #include "grit/generated_resources.h"
17 #include "ui/base/l10n/l10n_util.h" 17 #include "ui/base/l10n/l10n_util.h"
18 #include "views/controls/menu/menu_runner.h"
18 #include "views/widget/widget.h" 19 #include "views/widget/widget.h"
19 20
20 #if defined(USE_TCMALLOC) 21 #if defined(USE_TCMALLOC)
21 #include "third_party/tcmalloc/chromium/src/google/heap-profiler.h" 22 #include "third_party/tcmalloc/chromium/src/google/heap-profiler.h"
22 #endif 23 #endif
23 24
24 #if defined(USE_TCMALLOC) 25 #if defined(USE_TCMALLOC)
25 const char kProfileDumpFilePrefix[] = "/tmp/chrome_tcmalloc"; 26 const char kProfileDumpFilePrefix[] = "/tmp/chrome_tcmalloc";
26 #endif 27 #endif
27 28
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 int MemoryMenuButton::horizontal_padding() { 205 int MemoryMenuButton::horizontal_padding() {
205 return 3; 206 return 3;
206 } 207 }
207 208
208 // MemoryMenuButton, views::ViewMenuDelegate implementation: 209 // MemoryMenuButton, views::ViewMenuDelegate implementation:
209 210
210 void MemoryMenuButton::RunMenu(views::View* source, const gfx::Point& pt) { 211 void MemoryMenuButton::RunMenu(views::View* source, const gfx::Point& pt) {
211 // View passed in must be a views::MenuButton, i.e. the MemoryMenuButton. 212 // View passed in must be a views::MenuButton, i.e. the MemoryMenuButton.
212 DCHECK_EQ(source, this); 213 DCHECK_EQ(source, this);
213 214
214 EnsureMenu(); 215 views::MenuRunner menu_runner(CreateMenu());
215
216 gfx::Point screen_location; 216 gfx::Point screen_location;
217 views::View::ConvertPointToScreen(source, &screen_location); 217 views::View::ConvertPointToScreen(source, &screen_location);
218 gfx::Rect bounds(screen_location, source->size()); 218 gfx::Rect bounds(screen_location, source->size());
219 menu_->RunMenuAt( 219 if (menu_runner.RunMenuAt(
220 source->GetWidget()->GetTopLevelWidget(), 220 source->GetWidget()->GetTopLevelWidget(), this, bounds,
221 this, 221 views::MenuItemView::TOPRIGHT, views::MenuRunner::HAS_MNEMONICS) ==
222 bounds, 222 views::MenuRunner::MENU_DELETED)
223 views::MenuItemView::TOPRIGHT, 223 return;
224 true);
225 } 224 }
226 225
227 // MemoryMenuButton, views::View implementation: 226 views::MenuItemView* MemoryMenuButton::CreateMenu() {
228
229 void MemoryMenuButton::EnsureMenu() {
230 // Just rebuild the menu each time to ensure the labels are up-to-date. 227 // Just rebuild the menu each time to ensure the labels are up-to-date.
231 menu_.reset(new views::MenuItemView(this)); 228 views::MenuItemView* menu = new views::MenuItemView(this);
232 // Text for these items will be set by GetLabel(). 229 // Text for these items will be set by GetLabel().
233 menu_->AppendDelegateMenuItem(MEM_TOTAL_ITEM); 230 menu->AppendDelegateMenuItem(MEM_TOTAL_ITEM);
234 menu_->AppendDelegateMenuItem(MEM_FREE_ITEM); 231 menu->AppendDelegateMenuItem(MEM_FREE_ITEM);
235 menu_->AppendDelegateMenuItem(MEM_BUFFERS_ITEM); 232 menu->AppendDelegateMenuItem(MEM_BUFFERS_ITEM);
236 menu_->AppendDelegateMenuItem(MEM_CACHE_ITEM); 233 menu->AppendDelegateMenuItem(MEM_CACHE_ITEM);
237 menu_->AppendDelegateMenuItem(SHMEM_ITEM); 234 menu->AppendDelegateMenuItem(SHMEM_ITEM);
238 menu_->AppendSeparator(); 235 menu->AppendSeparator();
239 menu_->AppendDelegateMenuItem(PURGE_MEMORY_ITEM); 236 menu->AppendDelegateMenuItem(PURGE_MEMORY_ITEM);
240 #if defined(USE_TCMALLOC) 237 #if defined(USE_TCMALLOC)
241 menu_->AppendSeparator(); 238 menu->AppendSeparator();
242 menu_->AppendDelegateMenuItem(TOGGLE_PROFILING_ITEM); 239 menu->AppendDelegateMenuItem(TOGGLE_PROFILING_ITEM);
243 if (IsHeapProfilerRunning()) 240 if (IsHeapProfilerRunning())
244 menu_->AppendDelegateMenuItem(DUMP_PROFILING_ITEM); 241 menu->AppendDelegateMenuItem(DUMP_PROFILING_ITEM);
245 #endif 242 #endif
243 return menu;
246 } 244 }
247 245
248 ///////////////////////////////////////////////////////////////////////////// 246 /////////////////////////////////////////////////////////////////////////////
249 // NotificationObserver overrides. 247 // NotificationObserver overrides.
250 248
251 void MemoryMenuButton::Observe(int type, 249 void MemoryMenuButton::Observe(int type,
252 const NotificationSource& source, 250 const NotificationSource& source,
253 const NotificationDetails& details) { 251 const NotificationDetails& details) {
254 switch (type) { 252 switch (type) {
255 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: { 253 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: {
256 RenderProcessHost::RendererClosedDetails* process_details = 254 RenderProcessHost::RendererClosedDetails* process_details =
257 Details<RenderProcessHost::RendererClosedDetails>(details).ptr(); 255 Details<RenderProcessHost::RendererClosedDetails>(details).ptr();
258 if (process_details->status == 256 if (process_details->status ==
259 base::TERMINATION_STATUS_PROCESS_WAS_KILLED) { 257 base::TERMINATION_STATUS_PROCESS_WAS_KILLED) {
260 renderer_kills_++; 258 renderer_kills_++;
261 // A kill is a very interesting event, so repaint immediately. 259 // A kill is a very interesting event, so repaint immediately.
262 UpdateText(); 260 UpdateText();
263 } 261 }
264 break; 262 break;
265 } 263 }
266 default: 264 default:
267 NOTREACHED() << L"Received unexpected notification"; 265 NOTREACHED() << L"Received unexpected notification";
268 break; 266 break;
269 } 267 }
270 } 268 }
271 269
272 } // namespace chromeos 270 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698