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

Side by Side Diff: base/process_util_win.cc

Issue 75031: Support for showing memory usage of 64-bit IE in a 32-bit Chromium process.... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 11 years, 8 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
« no previous file with comments | « no previous file | chrome/browser/memory_details.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "base/process_util.h" 5 #include "base/process_util.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <winternl.h> 8 #include <winternl.h>
9 #include <psapi.h> 9 #include <psapi.h>
10 10
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 } 434 }
435 return 0; 435 return 0;
436 } 436 }
437 437
438 void ProcessMetrics::GetCommittedKBytes(CommittedKBytes* usage) const { 438 void ProcessMetrics::GetCommittedKBytes(CommittedKBytes* usage) const {
439 MEMORY_BASIC_INFORMATION mbi = {0}; 439 MEMORY_BASIC_INFORMATION mbi = {0};
440 size_t committed_private = 0; 440 size_t committed_private = 0;
441 size_t committed_mapped = 0; 441 size_t committed_mapped = 0;
442 size_t committed_image = 0; 442 size_t committed_image = 0;
443 void* base_address = NULL; 443 void* base_address = NULL;
444 while (VirtualQueryEx(process_, base_address, &mbi, 444 while (VirtualQueryEx(process_, base_address, &mbi, sizeof(mbi)) ==
445 sizeof(MEMORY_BASIC_INFORMATION)) == 445 sizeof(mbi)) {
446 sizeof(MEMORY_BASIC_INFORMATION)) { 446 if (mbi.State == MEM_COMMIT) {
447 if (mbi.State == MEM_COMMIT) { 447 if (mbi.Type == MEM_PRIVATE) {
448 if (mbi.Type == MEM_PRIVATE) { 448 committed_private += mbi.RegionSize;
449 committed_private += mbi.RegionSize; 449 } else if (mbi.Type == MEM_MAPPED) {
450 } else if (mbi.Type == MEM_MAPPED) { 450 committed_mapped += mbi.RegionSize;
451 committed_mapped += mbi.RegionSize; 451 } else if (mbi.Type == MEM_IMAGE) {
452 } else if (mbi.Type == MEM_IMAGE) { 452 committed_image += mbi.RegionSize;
453 committed_image += mbi.RegionSize; 453 } else {
454 } else { 454 NOTREACHED();
455 NOTREACHED();
456 }
457 } 455 }
458 base_address = (static_cast<BYTE*>(mbi.BaseAddress)) + mbi.RegionSize; 456 }
457 void* new_base = (static_cast<BYTE*>(mbi.BaseAddress)) + mbi.RegionSize;
458 // Avoid infinite loop by weird MEMORY_BASIC_INFORMATION.
459 // If we query 64bit processes in a 32bit process, VirtualQueryEx()
460 // returns such data.
461 if (new_base <= base_address) {
462 usage->image = 0;
463 usage->mapped = 0;
464 usage->priv = 0;
465 return;
466 }
467 base_address = new_base;
459 } 468 }
460 usage->image = committed_image / 1024; 469 usage->image = committed_image / 1024;
461 usage->mapped = committed_mapped / 1024; 470 usage->mapped = committed_mapped / 1024;
462 usage->priv = committed_private / 1024; 471 usage->priv = committed_private / 1024;
463 } 472 }
464 473
465 bool ProcessMetrics::GetWorkingSetKBytes(WorkingSetKBytes* ws_usage) const { 474 bool ProcessMetrics::GetWorkingSetKBytes(WorkingSetKBytes* ws_usage) const {
466 size_t ws_private = 0; 475 size_t ws_private = 0;
467 size_t ws_shareable = 0; 476 size_t ws_shareable = 0;
468 size_t ws_shared = 0; 477 size_t ws_shared = 0;
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 void EnableTerminationOnHeapCorruption() { 658 void EnableTerminationOnHeapCorruption() {
650 // Ignore the result code. Supported on XP SP3 and Vista. 659 // Ignore the result code. Supported on XP SP3 and Vista.
651 HeapSetInformation(NULL, HeapEnableTerminationOnCorruption, NULL, 0); 660 HeapSetInformation(NULL, HeapEnableTerminationOnCorruption, NULL, 0);
652 } 661 }
653 662
654 void RaiseProcessToHighPriority() { 663 void RaiseProcessToHighPriority() {
655 SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); 664 SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
656 } 665 }
657 666
658 } // namespace base 667 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/memory_details.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698