| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 } | 513 } |
| 514 return 0; | 514 return 0; |
| 515 } | 515 } |
| 516 | 516 |
| 517 void ProcessMetrics::GetCommittedKBytes(CommittedKBytes* usage) const { | 517 void ProcessMetrics::GetCommittedKBytes(CommittedKBytes* usage) const { |
| 518 MEMORY_BASIC_INFORMATION mbi = {0}; | 518 MEMORY_BASIC_INFORMATION mbi = {0}; |
| 519 size_t committed_private = 0; | 519 size_t committed_private = 0; |
| 520 size_t committed_mapped = 0; | 520 size_t committed_mapped = 0; |
| 521 size_t committed_image = 0; | 521 size_t committed_image = 0; |
| 522 void* base_address = NULL; | 522 void* base_address = NULL; |
| 523 while (VirtualQueryEx(process_, base_address, &mbi, | 523 while (VirtualQueryEx(process_, base_address, &mbi, sizeof(mbi)) == |
| 524 sizeof(MEMORY_BASIC_INFORMATION)) == | 524 sizeof(mbi)) { |
| 525 sizeof(MEMORY_BASIC_INFORMATION)) { | 525 if (mbi.State == MEM_COMMIT) { |
| 526 if (mbi.State == MEM_COMMIT) { | 526 if (mbi.Type == MEM_PRIVATE) { |
| 527 if (mbi.Type == MEM_PRIVATE) { | 527 committed_private += mbi.RegionSize; |
| 528 committed_private += mbi.RegionSize; | 528 } else if (mbi.Type == MEM_MAPPED) { |
| 529 } else if (mbi.Type == MEM_MAPPED) { | 529 committed_mapped += mbi.RegionSize; |
| 530 committed_mapped += mbi.RegionSize; | 530 } else if (mbi.Type == MEM_IMAGE) { |
| 531 } else if (mbi.Type == MEM_IMAGE) { | 531 committed_image += mbi.RegionSize; |
| 532 committed_image += mbi.RegionSize; | 532 } else { |
| 533 } else { | 533 NOTREACHED(); |
| 534 NOTREACHED(); | |
| 535 } | |
| 536 } | 534 } |
| 537 base_address = (static_cast<BYTE*>(mbi.BaseAddress)) + mbi.RegionSize; | 535 } |
| 536 void* new_base = (static_cast<BYTE*>(mbi.BaseAddress)) + mbi.RegionSize; |
| 537 // Avoid infinite loop by weird MEMORY_BASIC_INFORMATION. |
| 538 // If we query 64bit processes in a 32bit process, VirtualQueryEx() |
| 539 // returns such data. |
| 540 if (new_base <= base_address) { |
| 541 usage->image = 0; |
| 542 usage->mapped = 0; |
| 543 usage->priv = 0; |
| 544 return; |
| 545 } |
| 546 base_address = new_base; |
| 538 } | 547 } |
| 539 usage->image = committed_image / 1024; | 548 usage->image = committed_image / 1024; |
| 540 usage->mapped = committed_mapped / 1024; | 549 usage->mapped = committed_mapped / 1024; |
| 541 usage->priv = committed_private / 1024; | 550 usage->priv = committed_private / 1024; |
| 542 } | 551 } |
| 543 | 552 |
| 544 bool ProcessMetrics::GetWorkingSetKBytes(WorkingSetKBytes* ws_usage) const { | 553 bool ProcessMetrics::GetWorkingSetKBytes(WorkingSetKBytes* ws_usage) const { |
| 545 size_t ws_private = 0; | 554 size_t ws_private = 0; |
| 546 size_t ws_shareable = 0; | 555 size_t ws_shareable = 0; |
| 547 size_t ws_shared = 0; | 556 size_t ws_shared = 0; |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 728 void EnableTerminationOnHeapCorruption() { | 737 void EnableTerminationOnHeapCorruption() { |
| 729 // Ignore the result code. Supported on XP SP3 and Vista. | 738 // Ignore the result code. Supported on XP SP3 and Vista. |
| 730 HeapSetInformation(NULL, HeapEnableTerminationOnCorruption, NULL, 0); | 739 HeapSetInformation(NULL, HeapEnableTerminationOnCorruption, NULL, 0); |
| 731 } | 740 } |
| 732 | 741 |
| 733 void RaiseProcessToHighPriority() { | 742 void RaiseProcessToHighPriority() { |
| 734 SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); | 743 SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS); |
| 735 } | 744 } |
| 736 | 745 |
| 737 } // namespace base | 746 } // namespace base |
| OLD | NEW |