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

Side by Side Diff: base/allocator/partition_allocator/partition_alloc.cc

Issue 2771033006: PartitionDumpStats(): reduce stack consumption for 'light' reporting. (Closed)
Patch Set: undo ps#2 Created 3 years, 9 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
« no previous file with comments | « no previous file | no next file » | 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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/allocator/partition_allocator/partition_alloc.h" 5 #include "base/allocator/partition_allocator/partition_alloc.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include "base/allocator/partition_allocator/oom.h" 9 #include "base/allocator/partition_allocator/oom.h"
10 #include "base/allocator/partition_allocator/spin_lock.h" 10 #include "base/allocator/partition_allocator/spin_lock.h"
(...skipping 1378 matching lines...) Expand 10 before | Expand all | Expand 10 after
1389 1389
1390 stats.total_resident_bytes += direct_mapped_allocations_total_size; 1390 stats.total_resident_bytes += direct_mapped_allocations_total_size;
1391 stats.total_active_bytes += direct_mapped_allocations_total_size; 1391 stats.total_active_bytes += direct_mapped_allocations_total_size;
1392 dumper->PartitionDumpTotals(partition_name, &stats); 1392 dumper->PartitionDumpTotals(partition_name, &stats);
1393 } 1393 }
1394 1394
1395 void PartitionDumpStats(PartitionRoot* partition, 1395 void PartitionDumpStats(PartitionRoot* partition,
1396 const char* partition_name, 1396 const char* partition_name,
1397 bool is_light_dump, 1397 bool is_light_dump,
1398 PartitionStatsDumper* dumper) { 1398 PartitionStatsDumper* dumper) {
1399 static const size_t kMaxReportableBuckets = 4096 / sizeof(void*);
1400 PartitionBucketMemoryStats memory_stats[kMaxReportableBuckets];
1401 const size_t partitionNumBuckets = partition->num_buckets;
1402 DCHECK(partitionNumBuckets <= kMaxReportableBuckets);
1403 1399
1404 for (size_t i = 0; i < partitionNumBuckets; ++i)
1405 PartitionDumpBucketStats(&memory_stats[i], &partition->buckets()[i]);
1406
1407 // PartitionsDumpBucketStats is called after collecting stats because it
1408 // can use PartitionAlloc to allocate and this can affect the statistics.
1409 PartitionMemoryStats stats = {0}; 1400 PartitionMemoryStats stats = {0};
1410 stats.total_mmapped_bytes = partition->total_size_of_super_pages; 1401 stats.total_mmapped_bytes = partition->total_size_of_super_pages;
1411 stats.total_committed_bytes = partition->total_size_of_committed_pages; 1402 stats.total_committed_bytes = partition->total_size_of_committed_pages;
1412 DCHECK(!partition->total_size_of_direct_mapped_pages); 1403 DCHECK(!partition->total_size_of_direct_mapped_pages);
1404
1405 static const size_t kMaxReportableBuckets = 4096 / sizeof(void*);
1406 std::unique_ptr<PartitionBucketMemoryStats[]> memory_stats;
1407 if (!is_light_dump)
1408 memory_stats = std::unique_ptr<PartitionBucketMemoryStats[]>(
1409 new PartitionBucketMemoryStats[kMaxReportableBuckets]);
1410
1411 const size_t partitionNumBuckets = partition->num_buckets;
1412 DCHECK(partitionNumBuckets <= kMaxReportableBuckets);
1413
1413 for (size_t i = 0; i < partitionNumBuckets; ++i) { 1414 for (size_t i = 0; i < partitionNumBuckets; ++i) {
1414 if (memory_stats[i].is_valid) { 1415 PartitionBucketMemoryStats bucket_stats = {0};
1415 stats.total_resident_bytes += memory_stats[i].resident_bytes; 1416 PartitionDumpBucketStats(&bucket_stats, &partition->buckets()[i]);
1416 stats.total_active_bytes += memory_stats[i].active_bytes; 1417 if (bucket_stats.is_valid) {
1417 stats.total_decommittable_bytes += memory_stats[i].decommittable_bytes; 1418 stats.total_resident_bytes += bucket_stats.resident_bytes;
1418 stats.total_discardable_bytes += memory_stats[i].discardable_bytes; 1419 stats.total_active_bytes += bucket_stats.active_bytes;
1419 if (!is_light_dump) 1420 stats.total_decommittable_bytes += bucket_stats.decommittable_bytes;
1421 stats.total_discardable_bytes += bucket_stats.discardable_bytes;
1422 }
1423 if (!is_light_dump) {
1424 if (bucket_stats.is_valid)
1425 memory_stats[i] = bucket_stats;
1426 else
1427 memory_stats[i].is_valid = false;
1428 }
1429 }
1430 if (!is_light_dump) {
1431 // PartitionsDumpBucketStats is called after collecting stats because it
1432 // can use PartitionAlloc to allocate and this can affect the statistics.
1433 for (size_t i = 0; i < partitionNumBuckets; ++i) {
1434 if (memory_stats[i].is_valid)
1420 dumper->PartitionsDumpBucketStats(partition_name, &memory_stats[i]); 1435 dumper->PartitionsDumpBucketStats(partition_name, &memory_stats[i]);
1421 } 1436 }
1422 } 1437 }
1423 dumper->PartitionDumpTotals(partition_name, &stats); 1438 dumper->PartitionDumpTotals(partition_name, &stats);
1424 } 1439 }
1425 1440
1426 } // namespace base 1441 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698