123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // Copyright 2015 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include <stddef.h>
- #include <iterator>
- #include "base/memory/ref_counted.h"
- #include "base/pending_task.h"
- #include "base/strings/string_piece.h"
- #include "base/trace_event/heap_profiler.h"
- #include "base/trace_event/heap_profiler_allocation_context.h"
- #include "base/trace_event/heap_profiler_allocation_context_tracker.h"
- #include "base/trace_event/memory_dump_manager.h"
- #include "base/trace_event/trace_event.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace base {
- namespace trace_event {
- const char kThreadName[] = "TestThread";
- // Asserts that the fixed-size array |expected_backtrace| matches the backtrace
- // in |AllocationContextTracker::GetContextSnapshot|.
- template <size_t N>
- void AssertBacktraceEquals(const StackFrame(&expected_backtrace)[N]) {
- AllocationContext ctx;
- ASSERT_TRUE(AllocationContextTracker::GetInstanceForCurrentThread()
- ->GetContextSnapshot(&ctx));
- auto* actual = std::begin(ctx.backtrace.frames);
- auto* actual_bottom = actual + ctx.backtrace.frame_count;
- auto expected = std::begin(expected_backtrace);
- auto expected_bottom = std::end(expected_backtrace);
- // Note that this requires the pointers to be equal, this is not doing a deep
- // string comparison.
- for (; actual != actual_bottom && expected != expected_bottom;
- actual++, expected++)
- ASSERT_EQ(*expected, *actual);
- // Ensure that the height of the stacks is the same.
- ASSERT_EQ(actual, actual_bottom);
- ASSERT_EQ(expected, expected_bottom);
- }
- void AssertBacktraceContainsOnlyThreadName() {
- StackFrame t = StackFrame::FromThreadName(kThreadName);
- AllocationContext ctx;
- ASSERT_TRUE(AllocationContextTracker::GetInstanceForCurrentThread()
- ->GetContextSnapshot(&ctx));
- ASSERT_GE(ctx.backtrace.frame_count, 1u);
- ASSERT_EQ(t, ctx.backtrace.frames[0]);
- }
- class AllocationContextTrackerTest : public testing::Test {
- public:
- void SetUp() override {
- AllocationContextTracker::SetCaptureMode(
- AllocationContextTracker::CaptureMode::NATIVE_STACK);
- AllocationContextTracker::SetCurrentThreadName(kThreadName);
- }
- void TearDown() override {
- AllocationContextTracker::SetCaptureMode(
- AllocationContextTracker::CaptureMode::DISABLED);
- }
- };
- TEST_F(AllocationContextTrackerTest, StackContainsThreadName) {
- AssertBacktraceContainsOnlyThreadName();
- }
- TEST_F(AllocationContextTrackerTest, IgnoreAllocationTest) {
- HEAP_PROFILER_SCOPED_IGNORE;
- AllocationContext ctx;
- ASSERT_FALSE(AllocationContextTracker::GetInstanceForCurrentThread()
- ->GetContextSnapshot(&ctx));
- }
- } // namespace trace_event
- } // namespace base
|