OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "content/common/discardable_shared_memory_heap.h" | 5 #include "content/common/discardable_shared_memory_heap.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <cstdlib> | 9 #include <cstdlib> |
10 | 10 |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/callback_helpers.h" | 12 #include "base/callback_helpers.h" |
13 #include "base/memory/discardable_shared_memory.h" | 13 #include "base/memory/discardable_shared_memory.h" |
14 #include "base/memory/scoped_vector.h" | 14 #include "base/memory/scoped_vector.h" |
15 #include "base/process/process_metrics.h" | 15 #include "base/process/process_metrics.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
17 #include "testing/perf/perf_test.h" | 17 #include "testing/perf/perf_test.h" |
18 | 18 |
19 namespace content { | 19 namespace content { |
20 namespace { | 20 namespace { |
21 | 21 |
22 const int kTimeLimitMs = 2000; | 22 const int kTimeLimitMs = 2000; |
23 const int kTimeCheckInterval = 8192; | 23 const int kTimeCheckInterval = 8192; |
24 | 24 |
| 25 void NullTask() { |
| 26 } |
| 27 |
25 TEST(DiscardableSharedMemoryHeapTest, SearchFreeLists) { | 28 TEST(DiscardableSharedMemoryHeapTest, SearchFreeLists) { |
26 size_t block_size = base::GetPageSize(); | 29 size_t block_size = base::GetPageSize(); |
27 DiscardableSharedMemoryHeap heap(block_size); | 30 DiscardableSharedMemoryHeap heap(block_size); |
28 | 31 |
29 const size_t kBlocks = 4096; | 32 const size_t kBlocks = 4096; |
30 const size_t kSegments = 16; | 33 const size_t kSegments = 16; |
31 size_t segment_size = block_size * kBlocks; | 34 size_t segment_size = block_size * kBlocks; |
32 | 35 |
33 for (size_t i = 0; i < kSegments; ++i) { | 36 for (size_t i = 0; i < kSegments; ++i) { |
34 scoped_ptr<base::DiscardableSharedMemory> memory( | 37 scoped_ptr<base::DiscardableSharedMemory> memory( |
35 new base::DiscardableSharedMemory); | 38 new base::DiscardableSharedMemory); |
36 ASSERT_TRUE(memory->CreateAndMap(segment_size)); | 39 ASSERT_TRUE(memory->CreateAndMap(segment_size)); |
37 heap.MergeIntoFreeLists(heap.Grow(memory.Pass(), segment_size).Pass()); | 40 heap.MergeIntoFreeLists( |
| 41 heap.Grow(memory.Pass(), segment_size, base::Bind(NullTask)).Pass()); |
38 } | 42 } |
39 | 43 |
40 unsigned kSeed = 1; | 44 unsigned kSeed = 1; |
41 // Use kSeed as seed for random number generator. | 45 // Use kSeed as seed for random number generator. |
42 srand(kSeed); | 46 srand(kSeed); |
43 | 47 |
44 // Pre-compute random values. | 48 // Pre-compute random values. |
45 int random_span[kTimeCheckInterval]; | 49 int random_span[kTimeCheckInterval]; |
46 size_t random_blocks[kTimeCheckInterval]; | 50 size_t random_blocks[kTimeCheckInterval]; |
47 for (int i = 0; i < kTimeCheckInterval; ++i) { | 51 for (int i = 0; i < kTimeCheckInterval; ++i) { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 } | 88 } |
85 | 89 |
86 spans.clear(); | 90 spans.clear(); |
87 | 91 |
88 perf_test::PrintResult("search_free_list", "", "", | 92 perf_test::PrintResult("search_free_list", "", "", |
89 count / accumulator.InSecondsF(), "runs/s", true); | 93 count / accumulator.InSecondsF(), "runs/s", true); |
90 } | 94 } |
91 | 95 |
92 } // namespace | 96 } // namespace |
93 } // namespace content | 97 } // namespace content |
OLD | NEW |