Commit ed63e54f authored by Gabriel Charette's avatar Gabriel Charette Committed by Commit Bot

[Slow Reports] Fix ScopedBlockingCall for waitable_event_mac.mm

This is a follow-up to https://chromium-review.googlesource.com/c/1305891

Missed that Mac had its own impl.
Example problematic trace because of this http://crash/18c6999290e01f89

Made all impls match waitable_event_win.cc
(also ignoring the ScopedEventWaitActivity when idle)

R=fdoray@chromium.org

Bug: 899897
Change-Id: Ib5aa1cec487f80a6f1d603658279666ee0d1de60
Reviewed-on: https://chromium-review.googlesource.com/c/1336073Reviewed-by: default avatarFrançois Doray <fdoray@chromium.org>
Commit-Queue: Gabriel Charette <gab@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608511}
parent e72ce2d8
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "base/mac/mac_util.h" #include "base/mac/mac_util.h"
#include "base/mac/mach_logging.h" #include "base/mac/mach_logging.h"
#include "base/mac/scoped_dispatch_object.h" #include "base/mac/scoped_dispatch_object.h"
#include "base/optional.h"
#include "base/posix/eintr_wrapper.h" #include "base/posix/eintr_wrapper.h"
#include "base/threading/scoped_blocking_call.h" #include "base/threading/scoped_blocking_call.h"
#include "base/threading/thread_restrictions.h" #include "base/threading/thread_restrictions.h"
...@@ -111,10 +112,16 @@ bool WaitableEvent::TimedWait(const TimeDelta& wait_delta) { ...@@ -111,10 +112,16 @@ bool WaitableEvent::TimedWait(const TimeDelta& wait_delta) {
} }
bool WaitableEvent::TimedWaitUntil(const TimeTicks& end_time) { bool WaitableEvent::TimedWaitUntil(const TimeTicks& end_time) {
internal::ScopedBlockingCallWithBaseSyncPrimitives scoped_blocking_call( // Record the event that this thread is blocking upon (for hang diagnosis) and
BlockingType::MAY_BLOCK); // consider blocked for scheduling purposes. Ignore this for non-blocking
// Record the event that this thread is blocking upon (for hang diagnosis). // WaitableEvents.
debug::ScopedEventWaitActivity event_activity(this); Optional<debug::ScopedEventWaitActivity> event_activity;
Optional<internal::ScopedBlockingCallWithBaseSyncPrimitives>
scoped_blocking_call;
if (waiting_is_blocking_) {
event_activity.emplace(this);
scoped_blocking_call.emplace(BlockingType::MAY_BLOCK);
}
mach_msg_empty_rcv_t msg{}; mach_msg_empty_rcv_t msg{};
msg.header.msgh_local_port = receive_right_->Name(); msg.header.msgh_local_port = receive_right_->Name();
......
...@@ -163,13 +163,16 @@ bool WaitableEvent::TimedWait(const TimeDelta& wait_delta) { ...@@ -163,13 +163,16 @@ bool WaitableEvent::TimedWait(const TimeDelta& wait_delta) {
} }
bool WaitableEvent::TimedWaitUntil(const TimeTicks& end_time) { bool WaitableEvent::TimedWaitUntil(const TimeTicks& end_time) {
// Record the event that this thread is blocking upon (for hang diagnosis) and
// consider it blocked for scheduling purposes. Ignore this for non-blocking
// WaitableEvents.
Optional<debug::ScopedEventWaitActivity> event_activity;
Optional<internal::ScopedBlockingCallWithBaseSyncPrimitives> Optional<internal::ScopedBlockingCallWithBaseSyncPrimitives>
scoped_blocking_call; scoped_blocking_call;
if (waiting_is_blocking_) if (waiting_is_blocking_) {
event_activity.emplace(this);
scoped_blocking_call.emplace(BlockingType::MAY_BLOCK); scoped_blocking_call.emplace(BlockingType::MAY_BLOCK);
}
// Record the event that this thread is blocking upon (for hang diagnosis).
debug::ScopedEventWaitActivity event_activity(this);
const bool finite_time = !end_time.is_max(); const bool finite_time = !end_time.is_max();
......
...@@ -55,7 +55,7 @@ bool WaitableEvent::IsSignaled() { ...@@ -55,7 +55,7 @@ bool WaitableEvent::IsSignaled() {
void WaitableEvent::Wait() { void WaitableEvent::Wait() {
// Record the event that this thread is blocking upon (for hang diagnosis) and // Record the event that this thread is blocking upon (for hang diagnosis) and
// consider blocked for scheduling purposes. Ignore this for non-blocking // consider it blocked for scheduling purposes. Ignore this for non-blocking
// WaitableEvents. // WaitableEvents.
Optional<debug::ScopedEventWaitActivity> event_activity; Optional<debug::ScopedEventWaitActivity> event_activity;
Optional<internal::ScopedBlockingCallWithBaseSyncPrimitives> Optional<internal::ScopedBlockingCallWithBaseSyncPrimitives>
...@@ -113,7 +113,7 @@ bool WaitableEvent::TimedWait(const TimeDelta& wait_delta) { ...@@ -113,7 +113,7 @@ bool WaitableEvent::TimedWait(const TimeDelta& wait_delta) {
return IsSignaled(); return IsSignaled();
// Record the event that this thread is blocking upon (for hang diagnosis) and // Record the event that this thread is blocking upon (for hang diagnosis) and
// consider blocked for scheduling purposes. Ignore this for non-blocking // consider it blocked for scheduling purposes. Ignore this for non-blocking
// WaitableEvents. // WaitableEvents.
Optional<debug::ScopedEventWaitActivity> event_activity; Optional<debug::ScopedEventWaitActivity> event_activity;
Optional<internal::ScopedBlockingCallWithBaseSyncPrimitives> Optional<internal::ScopedBlockingCallWithBaseSyncPrimitives>
...@@ -134,7 +134,7 @@ bool WaitableEvent::TimedWaitUntil(const TimeTicks& end_time) { ...@@ -134,7 +134,7 @@ bool WaitableEvent::TimedWaitUntil(const TimeTicks& end_time) {
return IsSignaled(); return IsSignaled();
// Record the event that this thread is blocking upon (for hang diagnosis) and // Record the event that this thread is blocking upon (for hang diagnosis) and
// consider blocked for scheduling purposes. Ignore this for non-blocking // consider it blocked for scheduling purposes. Ignore this for non-blocking
// WaitableEvents. // WaitableEvents.
Optional<debug::ScopedEventWaitActivity> event_activity; Optional<debug::ScopedEventWaitActivity> event_activity;
Optional<internal::ScopedBlockingCallWithBaseSyncPrimitives> Optional<internal::ScopedBlockingCallWithBaseSyncPrimitives>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment