OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "components/tracing/core/trace_ring_buffer.h" | 5 #include "components/tracing/core/trace_ring_buffer.h" |
6 | 6 |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 | 8 |
9 namespace tracing { | 9 namespace tracing { |
10 namespace v2 { | 10 namespace v2 { |
11 | 11 |
12 namespace { | 12 namespace { |
13 | 13 |
| 14 const size_t kChunkSize = TraceRingBuffer::Chunk::kSize; |
| 15 |
14 TEST(TraceRingBufferTest, BasicChunkWrapping) { | 16 TEST(TraceRingBufferTest, BasicChunkWrapping) { |
15 const uint32_t kNumChunks = 5; | 17 const uint32_t kNumChunks = 5; |
16 const size_t kBufferSize = kChunkSize * kNumChunks; | 18 const size_t kBufferSize = kChunkSize * kNumChunks; |
17 std::unique_ptr<uint8_t[]> storage(new uint8_t[kBufferSize]); | 19 std::unique_ptr<uint8_t[]> storage(new uint8_t[kBufferSize]); |
18 TraceRingBuffer ring_buffer(storage.get(), kBufferSize); | 20 TraceRingBuffer ring_buffer(storage.get(), kBufferSize); |
19 | 21 |
20 EXPECT_EQ(0u, ring_buffer.GetNumChunksTaken()); | 22 EXPECT_EQ(0u, ring_buffer.GetNumChunksTaken()); |
21 uint8_t* last_chunk_end = nullptr; | 23 uint8_t* last_chunk_end = nullptr; |
22 | 24 |
23 // Fill the buffer twice to test wrapping logic. | 25 // Fill the buffer twice to test wrapping logic. |
(...skipping 17 matching lines...) Expand all Loading... |
41 uint8_t* chunk_start = storage.get() + (chunk_idx * kChunkSize); | 43 uint8_t* chunk_start = storage.get() + (chunk_idx * kChunkSize); |
42 const uint32_t kPayloadSize = (chunk_idx + 1) * 8; | 44 const uint32_t kPayloadSize = (chunk_idx + 1) * 8; |
43 EXPECT_EQ(kPayloadSize, *reinterpret_cast<uint32_t*>(chunk_start)); | 45 EXPECT_EQ(kPayloadSize, *reinterpret_cast<uint32_t*>(chunk_start)); |
44 for (uint32_t i = 0; i < kPayloadSize; ++i) | 46 for (uint32_t i = 0; i < kPayloadSize; ++i) |
45 EXPECT_EQ(chunk_idx + 1, *(chunk_start + sizeof(uint32_t) + i)); | 47 EXPECT_EQ(chunk_idx + 1, *(chunk_start + sizeof(uint32_t) + i)); |
46 } | 48 } |
47 } | 49 } |
48 | 50 |
49 TEST(TraceRingBufferTest, ChunkBankrupcyDoesNotCrash) { | 51 TEST(TraceRingBufferTest, ChunkBankrupcyDoesNotCrash) { |
50 const size_t kNumChunks = 2; | 52 const size_t kNumChunks = 2; |
51 const size_t kBufferSize = kChunkSize * kNumChunks; | 53 const size_t kBufferSize = TraceRingBuffer::Chunk::kSize * kNumChunks; |
52 std::unique_ptr<uint8_t[]> storage(new uint8_t[kBufferSize]); | 54 std::unique_ptr<uint8_t[]> storage(new uint8_t[kBufferSize]); |
53 TraceRingBuffer ring_buffer(storage.get(), kBufferSize); | 55 TraceRingBuffer ring_buffer(storage.get(), kBufferSize); |
54 | 56 |
55 TraceRingBuffer::Chunk* chunk1 = ring_buffer.TakeChunk(1); | 57 TraceRingBuffer::Chunk* chunk1 = ring_buffer.TakeChunk(1); |
56 ASSERT_NE(nullptr, chunk1); | 58 ASSERT_NE(nullptr, chunk1); |
57 | 59 |
58 TraceRingBuffer::Chunk* chunk2 = ring_buffer.TakeChunk(1); | 60 TraceRingBuffer::Chunk* chunk2 = ring_buffer.TakeChunk(1); |
59 ASSERT_NE(nullptr, chunk2); | 61 ASSERT_NE(nullptr, chunk2); |
60 | 62 |
61 EXPECT_EQ(2u, ring_buffer.GetNumChunksTaken()); | 63 EXPECT_EQ(2u, ring_buffer.GetNumChunksTaken()); |
(...skipping 13 matching lines...) Expand all Loading... |
75 ring_buffer.ReturnChunk(chunk2); | 77 ring_buffer.ReturnChunk(chunk2); |
76 EXPECT_EQ(1u, ring_buffer.GetNumChunksTaken()); | 78 EXPECT_EQ(1u, ring_buffer.GetNumChunksTaken()); |
77 TraceRingBuffer::Chunk* chunk = ring_buffer.TakeChunk(1); | 79 TraceRingBuffer::Chunk* chunk = ring_buffer.TakeChunk(1); |
78 ASSERT_NE(nullptr, chunk); | 80 ASSERT_NE(nullptr, chunk); |
79 ASSERT_FALSE(ring_buffer.IsBankrupcyChunkForTesting(chunk)); | 81 ASSERT_FALSE(ring_buffer.IsBankrupcyChunkForTesting(chunk)); |
80 } | 82 } |
81 | 83 |
82 } // namespace | 84 } // namespace |
83 } // namespace v2 | 85 } // namespace v2 |
84 } // namespace tracing | 86 } // namespace tracing |
OLD | NEW |