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

Unified Diff: base/debug/activity_tracker_unittest.cc

Issue 2221343002: Revert "Track thread activities in order to diagnose hangs." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/debug/activity_tracker.cc ('k') | base/debug/task_annotator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/debug/activity_tracker_unittest.cc
diff --git a/base/debug/activity_tracker_unittest.cc b/base/debug/activity_tracker_unittest.cc
deleted file mode 100644
index 8b4960163ed7f58060a629bf8625bb5c94f074bb..0000000000000000000000000000000000000000
--- a/base/debug/activity_tracker_unittest.cc
+++ /dev/null
@@ -1,298 +0,0 @@
-// Copyright 2016 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 "base/debug/activity_tracker.h"
-
-#include <memory>
-
-#include "base/bind.h"
-#include "base/files/file.h"
-#include "base/files/file_util.h"
-#include "base/files/memory_mapped_file.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/memory/ptr_util.h"
-#include "base/pending_task.h"
-#include "base/synchronization/condition_variable.h"
-#include "base/synchronization/lock.h"
-#include "base/synchronization/spin_wait.h"
-#include "base/threading/simple_thread.h"
-#include "base/time/time.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-namespace debug {
-
-namespace {
-
-class TestActivityTracker : public ThreadActivityTracker {
- public:
- TestActivityTracker(std::unique_ptr<char[]> memory, size_t mem_size)
- : ThreadActivityTracker(memset(memory.get(), 0, mem_size), mem_size),
- mem_segment_(std::move(memory)) {}
-
- ~TestActivityTracker() override {}
-
- private:
- std::unique_ptr<char[]> mem_segment_;
-};
-
-} // namespace
-
-
-class ActivityTrackerTest : public testing::Test {
- public:
- const int kMemorySize = 1 << 10; // 1MiB
- const int kStackSize = 1 << 10; // 1KiB
-
- using Activity = ThreadActivityTracker::Activity;
- using ActivityData = ThreadActivityTracker::ActivityData;
-
- ActivityTrackerTest() {}
-
- ~ActivityTrackerTest() override {
- GlobalActivityTracker* global_tracker = GlobalActivityTracker::Get();
- if (global_tracker) {
- global_tracker->ReleaseTrackerForCurrentThreadForTesting();
- delete global_tracker;
- }
- }
-
- std::unique_ptr<ThreadActivityTracker> CreateActivityTracker() {
- std::unique_ptr<char[]> memory(new char[kStackSize]);
- return WrapUnique(new TestActivityTracker(std::move(memory), kStackSize));
- }
-
- size_t GetGlobalActiveTrackerCount() {
- GlobalActivityTracker* global_tracker = GlobalActivityTracker::Get();
- if (!global_tracker)
- return 0;
- return global_tracker->thread_tracker_count_.load(
- std::memory_order_relaxed);
- }
-
- size_t GetGlobalInactiveTrackerCount() {
- GlobalActivityTracker* global_tracker = GlobalActivityTracker::Get();
- if (!global_tracker)
- return 0;
- return global_tracker->available_memories_count_.load(
- std::memory_order_relaxed);
- }
-
- static void DoNothing() {}
-};
-
-TEST_F(ActivityTrackerTest, PushPopTest) {
- std::unique_ptr<ThreadActivityTracker> tracker = CreateActivityTracker();
- ThreadActivityTracker::ActivitySnapshot snapshot;
-
- ASSERT_TRUE(tracker->Snapshot(&snapshot));
- ASSERT_EQ(0U, snapshot.activity_stack_depth);
- ASSERT_EQ(0U, snapshot.activity_stack.size());
-
- char origin1;
- tracker->PushActivity(&origin1, ThreadActivityTracker::ACT_TASK,
- ActivityData::ForTask(11));
- ASSERT_TRUE(tracker->Snapshot(&snapshot));
- ASSERT_EQ(1U, snapshot.activity_stack_depth);
- ASSERT_EQ(1U, snapshot.activity_stack.size());
- EXPECT_NE(0, snapshot.activity_stack[0].time_internal);
- EXPECT_EQ(ThreadActivityTracker::ACT_TASK,
- snapshot.activity_stack[0].activity_type);
- EXPECT_EQ(reinterpret_cast<uintptr_t>(&origin1),
- snapshot.activity_stack[0].origin_address);
- EXPECT_EQ(11U, snapshot.activity_stack[0].data.task.sequence_id);
-
- char origin2;
- char lock2;
- tracker->PushActivity(&origin2, ThreadActivityTracker::ACT_LOCK,
- ActivityData::ForLock(&lock2));
- ASSERT_TRUE(tracker->Snapshot(&snapshot));
- ASSERT_EQ(2U, snapshot.activity_stack_depth);
- ASSERT_EQ(2U, snapshot.activity_stack.size());
- EXPECT_LE(snapshot.activity_stack[0].time_internal,
- snapshot.activity_stack[1].time_internal);
- EXPECT_EQ(ThreadActivityTracker::ACT_LOCK,
- snapshot.activity_stack[1].activity_type);
- EXPECT_EQ(reinterpret_cast<uintptr_t>(&origin2),
- snapshot.activity_stack[1].origin_address);
- EXPECT_EQ(reinterpret_cast<uintptr_t>(&lock2),
- snapshot.activity_stack[1].data.lock.lock_address);
-
- tracker->PopActivity();
- ASSERT_TRUE(tracker->Snapshot(&snapshot));
- ASSERT_EQ(1U, snapshot.activity_stack_depth);
- ASSERT_EQ(1U, snapshot.activity_stack.size());
- EXPECT_EQ(ThreadActivityTracker::ACT_TASK,
- snapshot.activity_stack[0].activity_type);
- EXPECT_EQ(reinterpret_cast<uintptr_t>(&origin1),
- snapshot.activity_stack[0].origin_address);
- EXPECT_EQ(11U, snapshot.activity_stack[0].data.task.sequence_id);
-
- tracker->PopActivity();
- ASSERT_TRUE(tracker->Snapshot(&snapshot));
- ASSERT_EQ(0U, snapshot.activity_stack_depth);
- ASSERT_EQ(0U, snapshot.activity_stack.size());
-}
-
-TEST_F(ActivityTrackerTest, ScopedTaskTest) {
- GlobalActivityTracker::CreateWithLocalMemory(kMemorySize, 0, "", 3);
-
- ThreadActivityTracker* tracker =
- GlobalActivityTracker::Get()->GetOrCreateTrackerForCurrentThread();
- ThreadActivityTracker::ActivitySnapshot snapshot;
-
- ASSERT_TRUE(tracker->Snapshot(&snapshot));
- ASSERT_EQ(0U, snapshot.activity_stack_depth);
- ASSERT_EQ(0U, snapshot.activity_stack.size());
-
- {
- PendingTask task1(FROM_HERE, base::Bind(&DoNothing));
- ScopedTaskRunActivity activity1(task1);
-
- ASSERT_TRUE(tracker->Snapshot(&snapshot));
- ASSERT_EQ(1U, snapshot.activity_stack_depth);
- ASSERT_EQ(1U, snapshot.activity_stack.size());
- EXPECT_EQ(ThreadActivityTracker::ACT_TASK,
- snapshot.activity_stack[0].activity_type);
-
- {
- PendingTask task2(FROM_HERE, base::Bind(&DoNothing));
- ScopedTaskRunActivity activity2(task2);
-
- ASSERT_TRUE(tracker->Snapshot(&snapshot));
- ASSERT_EQ(2U, snapshot.activity_stack_depth);
- ASSERT_EQ(2U, snapshot.activity_stack.size());
- EXPECT_EQ(ThreadActivityTracker::ACT_TASK,
- snapshot.activity_stack[1].activity_type);
- }
-
- ASSERT_TRUE(tracker->Snapshot(&snapshot));
- ASSERT_EQ(1U, snapshot.activity_stack_depth);
- ASSERT_EQ(1U, snapshot.activity_stack.size());
- EXPECT_EQ(ThreadActivityTracker::ACT_TASK,
- snapshot.activity_stack[0].activity_type);
- }
-
- ASSERT_TRUE(tracker->Snapshot(&snapshot));
- ASSERT_EQ(0U, snapshot.activity_stack_depth);
- ASSERT_EQ(0U, snapshot.activity_stack.size());
-}
-
-TEST_F(ActivityTrackerTest, CreateWithFileTest) {
- const char temp_name[] = "CreateWithFileTest";
- ScopedTempDir temp_dir;
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
- FilePath temp_file = temp_dir.path().AppendASCII(temp_name);
- const size_t temp_size = 64 << 10; // 64 KiB
-
- // Create a global tracker on a new file.
- ASSERT_FALSE(PathExists(temp_file));
- GlobalActivityTracker::CreateWithFile(temp_file, temp_size, 0, "foo", 3);
- GlobalActivityTracker* global = GlobalActivityTracker::Get();
- EXPECT_EQ(std::string("foo"), global->allocator()->Name());
- global->ReleaseTrackerForCurrentThreadForTesting();
- delete global;
-
- // Create a global tracker over an existing file, replacing it. If the
- // replacement doesn't work, the name will remain as it was first created.
- ASSERT_TRUE(PathExists(temp_file));
- GlobalActivityTracker::CreateWithFile(temp_file, temp_size, 0, "bar", 3);
- global = GlobalActivityTracker::Get();
- EXPECT_EQ(std::string("bar"), global->allocator()->Name());
- global->ReleaseTrackerForCurrentThreadForTesting();
- delete global;
-}
-
-
-// GlobalActivityTracker tests below.
-
-class SimpleActivityThread : public SimpleThread {
- public:
- SimpleActivityThread(const std::string& name,
- const void* origin,
- ThreadActivityTracker::ActivityType activity,
- const ThreadActivityTracker::ActivityData& data)
- : SimpleThread(name, Options()),
- origin_(origin),
- activity_(activity),
- data_(data),
- exit_condition_(&lock_) {}
-
- ~SimpleActivityThread() override {}
-
- void Run() override {
- GlobalActivityTracker::Get()
- ->GetOrCreateTrackerForCurrentThread()
- ->PushActivity(origin_, activity_, data_);
-
- {
- AutoLock auto_lock(lock_);
- ready_ = true;
- while (!exit_)
- exit_condition_.Wait();
- }
-
- GlobalActivityTracker::Get()
- ->GetOrCreateTrackerForCurrentThread()
- ->PopActivity();
- }
-
- void Exit() {
- AutoLock auto_lock(lock_);
- exit_ = true;
- exit_condition_.Signal();
- }
-
- void WaitReady() {
- SPIN_FOR_1_SECOND_OR_UNTIL_TRUE(ready_);
- }
-
- private:
- const void* origin_;
- ThreadActivityTracker::ActivityType activity_;
- ThreadActivityTracker::ActivityData data_;
-
- bool ready_ = false;
- bool exit_ = false;
- Lock lock_;
- ConditionVariable exit_condition_;
-
- DISALLOW_COPY_AND_ASSIGN(SimpleActivityThread);
-};
-
-TEST_F(ActivityTrackerTest, ThreadDeathTest) {
- GlobalActivityTracker::CreateWithLocalMemory(kMemorySize, 0, "", 3);
- GlobalActivityTracker::Get()->GetOrCreateTrackerForCurrentThread();
- const size_t starting_active = GetGlobalActiveTrackerCount();
- const size_t starting_inactive = GetGlobalInactiveTrackerCount();
-
- SimpleActivityThread t1("t1", nullptr, ThreadActivityTracker::ACT_TASK,
- ThreadActivityTracker::ActivityData::ForTask(11));
- t1.Start();
- t1.WaitReady();
- EXPECT_EQ(starting_active + 1, GetGlobalActiveTrackerCount());
- EXPECT_EQ(starting_inactive, GetGlobalInactiveTrackerCount());
-
- t1.Exit();
- t1.Join();
- EXPECT_EQ(starting_active, GetGlobalActiveTrackerCount());
- EXPECT_EQ(starting_inactive + 1, GetGlobalInactiveTrackerCount());
-
- // Start another thread and ensure it re-uses the existing memory.
-
- SimpleActivityThread t2("t2", nullptr, ThreadActivityTracker::ACT_TASK,
- ThreadActivityTracker::ActivityData::ForTask(22));
- t2.Start();
- t2.WaitReady();
- EXPECT_EQ(starting_active + 1, GetGlobalActiveTrackerCount());
- EXPECT_EQ(starting_inactive, GetGlobalInactiveTrackerCount());
-
- t2.Exit();
- t2.Join();
- EXPECT_EQ(starting_active, GetGlobalActiveTrackerCount());
- EXPECT_EQ(starting_inactive + 1, GetGlobalInactiveTrackerCount());
-}
-
-} // namespace debug
-} // namespace base
« no previous file with comments | « base/debug/activity_tracker.cc ('k') | base/debug/task_annotator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698