diff options
author | Abseil Team <absl-team@google.com> | 2018-04-18T12·56-0700 |
---|---|---|
committer | Jon Cohen <cohenjon@google.com> | 2018-04-19T14·19-0400 |
commit | 5b535401665cc6aa96d54a5c9b0901153d97210f (patch) | |
tree | 8d45863656540c8ec81eb7d2742c9191c33ca935 /absl/synchronization/internal | |
parent | a7e522daf1ec9cda69b356472f662142dd0c1215 (diff) |
- ed0ba496fe01eb8edfa86beade8a37768e7c12ef Updates the API for Exception Safety testing to use build... by Abseil Team <absl-team@google.com>
- c4b7a4e517c9404932c45f2f9f92eb7dc694e45d Internal change by Abseil Team <absl-team@google.com> - 76c78ed9385f65d881511645446e0bb8ababf6ec Add missing ABSL_PREDICT_FALSE to one of FixedArray::at()... by Abseil Team <absl-team@google.com> - 1204fb1c46f007dd9dfb7d9abf3e96c58835d193 Internal change. by Greg Falcon <gfalcon@google.com> - f1f47c98a026bc5e425ae83ff4a2eb391bbd3d9b Add internal-only functionality to examine the stack, to ... by Derek Mauro <dmauro@google.com> - 30d63097cd268d912f917526f6511005580465c4 fix typo by Abseil Team <absl-team@google.com> - 942d7efa6cf54cd248ca57dcaf3c245188b52a76 Remove unnecessary semicolons from comment examples. by Abseil Team <absl-team@google.com> - 7db0669cf23a06d934d3ed8c76aee4e4e23b7e04 Remove malloc_hook and malloc_extension from our internal... by Greg Falcon <gfalcon@google.com> - 0190f1063d101b1ded355019df2e1d325931f6c7 Make the maximum length of a string view equal difference... by Abseil Team <absl-team@google.com> - c8ae37cbce29449b02115a0ebd435ddc3d7ab062 Add namespace qualification. by Shaindel Schwartz <shaindel@google.com> - ff70afe2e6e3dd39f51ce9829e3e1f18231bf4d7 Fix internal/direct_mmap.h for non-linux builds. by Greg Falcon <gfalcon@google.com> GitOrigin-RevId: ed0ba496fe01eb8edfa86beade8a37768e7c12ef Change-Id: I7595ee3480d1d6724fd3797c15ba9d9be0d17e62
Diffstat (limited to 'absl/synchronization/internal')
-rw-r--r-- | absl/synchronization/internal/per_thread_sem.cc | 7 | ||||
-rw-r--r-- | absl/synchronization/internal/per_thread_sem_test.cc | 74 | ||||
-rw-r--r-- | absl/synchronization/internal/waiter.cc | 3 |
3 files changed, 0 insertions, 84 deletions
diff --git a/absl/synchronization/internal/per_thread_sem.cc b/absl/synchronization/internal/per_thread_sem.cc index af87222816d5..caa2baf64bd3 100644 --- a/absl/synchronization/internal/per_thread_sem.cc +++ b/absl/synchronization/internal/per_thread_sem.cc @@ -21,7 +21,6 @@ #include <atomic> #include "absl/base/attributes.h" -#include "absl/base/internal/malloc_extension.h" #include "absl/base/internal/thread_identity.h" #include "absl/synchronization/internal/waiter.h" @@ -90,12 +89,6 @@ ABSL_ATTRIBUTE_WEAK bool AbslInternalPerThreadSemWait( if (identity->blocked_count_ptr != nullptr) { identity->blocked_count_ptr->fetch_sub(1, std::memory_order_relaxed); } - - if (identity->is_idle.load(std::memory_order_relaxed)) { - // We became idle during the wait; become non-idle again so that - // performance of deallocations done from now on does not suffer. - absl::base_internal::MallocExtension::instance()->MarkThreadBusy(); - } identity->is_idle.store(false, std::memory_order_relaxed); identity->wait_start.store(0, std::memory_order_relaxed); return !timeout; diff --git a/absl/synchronization/internal/per_thread_sem_test.cc b/absl/synchronization/internal/per_thread_sem_test.cc index 61296cfca502..2b52ea76ab0e 100644 --- a/absl/synchronization/internal/per_thread_sem_test.cc +++ b/absl/synchronization/internal/per_thread_sem_test.cc @@ -24,7 +24,6 @@ #include "gtest/gtest.h" #include "absl/base/internal/cycleclock.h" -#include "absl/base/internal/malloc_extension.h" #include "absl/base/internal/thread_identity.h" #include "absl/strings/str_cat.h" #include "absl/time/clock.h" @@ -167,79 +166,6 @@ TEST_F(PerThreadSemTest, Timeouts) { EXPECT_TRUE(Wait(negative_timeout)); } -// Test that idle threads properly register themselves as such with malloc. -TEST_F(PerThreadSemTest, Idle) { - // We can't use gmock because it might use synch calls. So we do it - // by hand, messily. I don't bother hitting every one of the - // MallocExtension calls because most of them won't get made - // anyway--if they do we can add them. - class MockMallocExtension : public base_internal::MallocExtension { - public: - MockMallocExtension(base_internal::MallocExtension *real, - base_internal::ThreadIdentity *id, - std::atomic<int> *idles, std::atomic<int> *busies) - : real_(real), id_(id), idles_(idles), busies_(busies) {} - void MarkThreadIdle() override { - if (base_internal::CurrentThreadIdentityIfPresent() != id_) { - return; - } - idles_->fetch_add(1, std::memory_order_relaxed); - } - - void MarkThreadBusy() override { - if (base_internal::CurrentThreadIdentityIfPresent() != id_) { - return; - } - busies_->fetch_add(1, std::memory_order_relaxed); - } - size_t GetAllocatedSize(const void* p) override { - return real_->GetAllocatedSize(p); - } - - private: - MallocExtension *real_; - base_internal::ThreadIdentity *id_; - std::atomic<int>* idles_; - std::atomic<int>* busies_; - }; - - base_internal::ThreadIdentity *id = GetOrCreateCurrentThreadIdentity(); - std::atomic<int> idles(0); - std::atomic<int> busies(0); - base_internal::MallocExtension *old = - base_internal::MallocExtension::instance(); - MockMallocExtension mock(old, id, &idles, &busies); - base_internal::MallocExtension::Register(&mock); - std::atomic<int> sync(0); - - std::thread t([id, &idles, &sync]() { - // Wait for the main thread to begin the wait process - while (0 == sync.load(std::memory_order_relaxed)) { - SleepFor(absl::Milliseconds(1)); - } - // Wait for main thread to become idle, then wake it - // pretend time is passing--enough of these should cause an idling. - for (int i = 0; i < 100; ++i) { - Tick(id); - } - while (0 == idles.load(std::memory_order_relaxed)) { - // Keep ticking, just in case. - Tick(id); - SleepFor(absl::Milliseconds(1)); - } - Post(id); - }); - - idles.store(0, std::memory_order_relaxed); // In case we slept earlier. - sync.store(1, std::memory_order_relaxed); - Wait(KernelTimeout::Never()); - - // t will wake us once we become idle. - EXPECT_LT(0, busies.load(std::memory_order_relaxed)); - t.join(); - base_internal::MallocExtension::Register(old); -} - } // namespace } // namespace synchronization_internal diff --git a/absl/synchronization/internal/waiter.cc b/absl/synchronization/internal/waiter.cc index db1b54f6d039..768c52085cd3 100644 --- a/absl/synchronization/internal/waiter.cc +++ b/absl/synchronization/internal/waiter.cc @@ -40,8 +40,6 @@ #include <atomic> #include <cassert> #include <cstdint> - -#include "absl/base/internal/malloc_extension.h" #include "absl/base/internal/raw_logging.h" #include "absl/base/internal/thread_identity.h" #include "absl/base/optimization.h" @@ -59,7 +57,6 @@ static void MaybeBecomeIdle() { const int wait_start = identity->wait_start.load(std::memory_order_relaxed); if (!is_idle && ticker - wait_start > Waiter::kIdlePeriods) { identity->is_idle.store(true, std::memory_order_relaxed); - base_internal::MallocExtension::instance()->MarkThreadIdle(); } } |