Index: trunk/src/mojo/system/raw_channel_win.cc |
=================================================================== |
--- trunk/src/mojo/system/raw_channel_win.cc (revision 288091) |
+++ trunk/src/mojo/system/raw_channel_win.cc (working copy) |
@@ -9,7 +9,6 @@ |
#include "base/auto_reset.h" |
#include "base/bind.h" |
#include "base/compiler_specific.h" |
-#include "base/debug/alias.h" |
#include "base/lazy_instance.h" |
#include "base/location.h" |
#include "base/logging.h" |
@@ -89,30 +88,6 @@ |
// - there is no pending write. |
class RawChannelIOHandler : public base::MessageLoopForIO::IOHandler { |
public: |
- // TODO(yzshen): This is for debugging http://crbug.com/385795. |
- // This code should be removed once the issue is fixed or nothing is |
- // revealed by it. (No later than Aug 1, 2014.) |
- struct WriteStats { |
- WriteStats() |
- : write_no_lock_call(0), |
- schedule_write_no_lock_call(0), |
- os_write_call(0), |
- os_write_pending(0), |
- os_write_failure(0), |
- task_posted_by_schedule_write(0), |
- write_completion(0), |
- write_completion_failure(0) {} |
- |
- uint32_t write_no_lock_call; |
- uint32_t schedule_write_no_lock_call; |
- uint32_t os_write_call; |
- uint32_t os_write_pending; |
- uint32_t os_write_failure; |
- uint32_t task_posted_by_schedule_write; |
- uint32_t write_completion; |
- uint32_t write_completion_failure; |
- }; |
- |
RawChannelIOHandler(RawChannelWin* owner, |
embedder::ScopedPlatformHandle handle); |
@@ -130,7 +105,6 @@ |
base::MessageLoopForIO::IOContext* write_context_no_lock(); |
// Instructs the object to wait for an |OnIOCompleted()| notification. |
void OnPendingWriteStartedNoLock(); |
- WriteStats* write_stats_no_lock(); |
// |base::MessageLoopForIO::IOHandler| implementation: |
// Must be called on the I/O thread. It could be called before or after |
@@ -182,8 +156,6 @@ |
bool pending_write_; |
base::MessageLoopForIO::IOContext write_context_; |
- WriteStats write_stats_; |
- |
DISALLOW_COPY_AND_ASSIGN(RawChannelIOHandler); |
}; |
@@ -227,74 +199,55 @@ |
} |
RawChannelWin::RawChannelIOHandler::~RawChannelIOHandler() { |
- CHECK(ShouldSelfDestruct()); |
- |
- VLOG(4) << "write_no_lock_call: " << write_stats_.write_no_lock_call << "\n" |
- << "schedule_write_no_lock_call: " |
- << write_stats_.schedule_write_no_lock_call << "\n" |
- << "os_write_call: " << write_stats_.os_write_call << "\n" |
- << "os_write_pending: " << write_stats_.os_write_pending << "\n" |
- << "os_write_failure: " << write_stats_.os_write_failure << "\n" |
- << "task_posted_by_schedule_write: " |
- << write_stats_.task_posted_by_schedule_write << "\n" |
- << "write_completion: " << write_stats_.write_completion << "\n" |
- << "write_completion_failure: " |
- << write_stats_.write_completion_failure << "\n"; |
+ DCHECK(ShouldSelfDestruct()); |
} |
bool RawChannelWin::RawChannelIOHandler::pending_read() const { |
- CHECK(owner_); |
- CHECK_EQ(base::MessageLoop::current(), owner_->message_loop_for_io()); |
+ DCHECK(owner_); |
+ DCHECK_EQ(base::MessageLoop::current(), owner_->message_loop_for_io()); |
return pending_read_; |
} |
base::MessageLoopForIO::IOContext* |
RawChannelWin::RawChannelIOHandler::read_context() { |
- CHECK(owner_); |
- CHECK_EQ(base::MessageLoop::current(), owner_->message_loop_for_io()); |
+ DCHECK(owner_); |
+ DCHECK_EQ(base::MessageLoop::current(), owner_->message_loop_for_io()); |
return &read_context_; |
} |
void RawChannelWin::RawChannelIOHandler::OnPendingReadStarted() { |
- CHECK(owner_); |
- CHECK_EQ(base::MessageLoop::current(), owner_->message_loop_for_io()); |
- CHECK(!pending_read_); |
+ DCHECK(owner_); |
+ DCHECK_EQ(base::MessageLoop::current(), owner_->message_loop_for_io()); |
+ DCHECK(!pending_read_); |
pending_read_ = true; |
} |
bool RawChannelWin::RawChannelIOHandler::pending_write_no_lock() const { |
- CHECK(owner_); |
+ DCHECK(owner_); |
owner_->write_lock().AssertAcquired(); |
return pending_write_; |
} |
base::MessageLoopForIO::IOContext* |
RawChannelWin::RawChannelIOHandler::write_context_no_lock() { |
- CHECK(owner_); |
+ DCHECK(owner_); |
owner_->write_lock().AssertAcquired(); |
return &write_context_; |
} |
void RawChannelWin::RawChannelIOHandler::OnPendingWriteStartedNoLock() { |
- CHECK(owner_); |
+ DCHECK(owner_); |
owner_->write_lock().AssertAcquired(); |
- CHECK(!pending_write_); |
+ DCHECK(!pending_write_); |
pending_write_ = true; |
} |
-RawChannelWin::RawChannelIOHandler::WriteStats* |
-RawChannelWin::RawChannelIOHandler::write_stats_no_lock() { |
- CHECK(owner_); |
- owner_->write_lock().AssertAcquired(); |
- return &write_stats_; |
-} |
- |
void RawChannelWin::RawChannelIOHandler::OnIOCompleted( |
base::MessageLoopForIO::IOContext* context, |
DWORD bytes_transferred, |
DWORD error) { |
- CHECK(!owner_ || |
- base::MessageLoop::current() == owner_->message_loop_for_io()); |
+ DCHECK(!owner_ || |
+ base::MessageLoop::current() == owner_->message_loop_for_io()); |
{ |
// Suppress self-destruction inside |OnReadCompleted()|, etc. (in case they |
@@ -316,8 +269,8 @@ |
void RawChannelWin::RawChannelIOHandler::DetachFromOwnerNoLock( |
scoped_ptr<ReadBuffer> read_buffer, |
scoped_ptr<WriteBuffer> write_buffer) { |
- CHECK(owner_); |
- CHECK_EQ(base::MessageLoop::current(), owner_->message_loop_for_io()); |
+ DCHECK(owner_); |
+ DCHECK_EQ(base::MessageLoop::current(), owner_->message_loop_for_io()); |
owner_->write_lock().AssertAcquired(); |
// If read/write is pending, we have to retain the corresponding buffer. |
@@ -341,9 +294,9 @@ |
void RawChannelWin::RawChannelIOHandler::OnReadCompleted(DWORD bytes_read, |
DWORD error) { |
- CHECK(!owner_ || |
- base::MessageLoop::current() == owner_->message_loop_for_io()); |
- CHECK(suppress_self_destruct_); |
+ DCHECK(!owner_ || |
+ base::MessageLoop::current() == owner_->message_loop_for_io()); |
+ DCHECK(suppress_self_destruct_); |
CHECK(pending_read_); |
pending_read_ = false; |
@@ -351,33 +304,24 @@ |
return; |
if (error != ERROR_SUCCESS) { |
- CHECK_EQ(bytes_read, 0u); |
+ DCHECK_EQ(bytes_read, 0u); |
LOG_IF(ERROR, error != ERROR_BROKEN_PIPE) |
<< "ReadFile: " << logging::SystemErrorCodeToString(error); |
owner_->OnReadCompleted(false, 0); |
} else { |
- CHECK_GT(bytes_read, 0u); |
+ DCHECK_GT(bytes_read, 0u); |
owner_->OnReadCompleted(true, bytes_read); |
} |
} |
void RawChannelWin::RawChannelIOHandler::OnWriteCompleted(DWORD bytes_written, |
DWORD error) { |
- CHECK(!owner_ || |
- base::MessageLoop::current() == owner_->message_loop_for_io()); |
- CHECK(suppress_self_destruct_); |
+ DCHECK(!owner_ || |
+ base::MessageLoop::current() == owner_->message_loop_for_io()); |
+ DCHECK(suppress_self_destruct_); |
- WriteStats stack_copy; |
- base::debug::Alias(&stack_copy); |
- |
if (!owner_) { |
// No lock needed. |
- |
- write_stats_.write_completion++; |
- if (error != ERROR_SUCCESS) |
- write_stats_.write_completion_failure++; |
- stack_copy = write_stats_; |
- |
CHECK(pending_write_); |
pending_write_ = false; |
return; |
@@ -385,12 +329,6 @@ |
{ |
base::AutoLock locker(owner_->write_lock()); |
- |
- write_stats_.write_completion++; |
- if (error != ERROR_SUCCESS) |
- write_stats_.write_completion_failure++; |
- stack_copy = write_stats_; |
- |
CHECK(pending_write_); |
pending_write_ = false; |
} |
@@ -408,11 +346,11 @@ |
io_handler_(NULL), |
skip_completion_port_on_success_( |
g_vista_or_higher_functions.Get().is_vista_or_higher()) { |
- CHECK(handle_.is_valid()); |
+ DCHECK(handle_.is_valid()); |
} |
RawChannelWin::~RawChannelWin() { |
- CHECK(!io_handler_); |
+ DCHECK(!io_handler_); |
} |
size_t RawChannelWin::GetSerializedPlatformHandleSize() const { |
@@ -421,9 +359,9 @@ |
} |
RawChannel::IOResult RawChannelWin::Read(size_t* bytes_read) { |
- CHECK_EQ(base::MessageLoop::current(), message_loop_for_io()); |
- CHECK(io_handler_); |
- CHECK(!io_handler_->pending_read()); |
+ DCHECK_EQ(base::MessageLoop::current(), message_loop_for_io()); |
+ DCHECK(io_handler_); |
+ DCHECK(!io_handler_->pending_read()); |
char* buffer = NULL; |
size_t bytes_to_read = 0; |
@@ -436,7 +374,7 @@ |
&bytes_read_dword, |
&io_handler_->read_context()->overlapped); |
if (!result) { |
- CHECK_EQ(bytes_read_dword, 0u); |
+ DCHECK_EQ(bytes_read_dword, 0u); |
DWORD error = GetLastError(); |
if (error != ERROR_IO_PENDING) { |
LOG_IF(ERROR, error != ERROR_BROKEN_PIPE) |
@@ -464,14 +402,14 @@ |
} |
RawChannel::IOResult RawChannelWin::ScheduleRead() { |
- CHECK_EQ(base::MessageLoop::current(), message_loop_for_io()); |
- CHECK(io_handler_); |
- CHECK(!io_handler_->pending_read()); |
+ DCHECK_EQ(base::MessageLoop::current(), message_loop_for_io()); |
+ DCHECK(io_handler_); |
+ DCHECK(!io_handler_->pending_read()); |
size_t bytes_read = 0; |
IOResult io_result = Read(&bytes_read); |
if (io_result == IO_SUCCEEDED) { |
- CHECK(skip_completion_port_on_success_); |
+ DCHECK(skip_completion_port_on_success_); |
// We have finished reading successfully. Queue a notification manually. |
io_handler_->OnPendingReadStarted(); |
@@ -503,16 +441,9 @@ |
size_t* bytes_written) { |
write_lock().AssertAcquired(); |
- RawChannelIOHandler::WriteStats stack_copy( |
- *io_handler_->write_stats_no_lock()); |
- base::debug::Alias(&stack_copy); |
+ DCHECK(io_handler_); |
+ DCHECK(!io_handler_->pending_write_no_lock()); |
- io_handler_->write_stats_no_lock()->write_no_lock_call++; |
- stack_copy.write_no_lock_call++; |
- |
- CHECK(io_handler_); |
- CHECK(!io_handler_->pending_write_no_lock()); |
- |
if (write_buffer_no_lock()->HavePlatformHandlesToSend()) { |
// TODO(vtl): Implement. |
NOTIMPLEMENTED(); |
@@ -520,11 +451,8 @@ |
std::vector<WriteBuffer::Buffer> buffers; |
write_buffer_no_lock()->GetBuffers(&buffers); |
- CHECK(!buffers.empty()); |
+ DCHECK(!buffers.empty()); |
- io_handler_->write_stats_no_lock()->os_write_call++; |
- stack_copy.os_write_call++; |
- |
// TODO(yzshen): Handle multi-segment writes more efficiently. |
DWORD bytes_written_dword = 0; |
BOOL result = WriteFile(io_handler_->handle(), |
@@ -532,18 +460,9 @@ |
static_cast<DWORD>(buffers[0].size), |
&bytes_written_dword, |
&io_handler_->write_context_no_lock()->overlapped); |
- |
- if (!result) { |
- if (GetLastError() == ERROR_IO_PENDING) { |
- io_handler_->write_stats_no_lock()->os_write_pending++; |
- stack_copy.os_write_pending++; |
- } else { |
- io_handler_->write_stats_no_lock()->os_write_failure++; |
- stack_copy.os_write_failure++; |
- |
- PLOG(ERROR) << "WriteFile"; |
- return IO_FAILED; |
- } |
+ if (!result && GetLastError() != ERROR_IO_PENDING) { |
+ PLOG(ERROR) << "WriteFile"; |
+ return IO_FAILED; |
} |
if (result && skip_completion_port_on_success_) { |
@@ -568,29 +487,18 @@ |
RawChannel::IOResult RawChannelWin::ScheduleWriteNoLock() { |
write_lock().AssertAcquired(); |
- RawChannelIOHandler::WriteStats stack_copy( |
- *io_handler_->write_stats_no_lock()); |
- base::debug::Alias(&stack_copy); |
+ DCHECK(io_handler_); |
+ DCHECK(!io_handler_->pending_write_no_lock()); |
- io_handler_->write_stats_no_lock()->schedule_write_no_lock_call++; |
- stack_copy.schedule_write_no_lock_call++; |
- |
- CHECK(io_handler_); |
- CHECK(!io_handler_->pending_write_no_lock()); |
- |
// TODO(vtl): Do something with |platform_handles_written|. |
size_t platform_handles_written = 0; |
size_t bytes_written = 0; |
IOResult io_result = WriteNoLock(&platform_handles_written, &bytes_written); |
if (io_result == IO_SUCCEEDED) { |
- CHECK(skip_completion_port_on_success_); |
+ DCHECK(skip_completion_port_on_success_); |
// We have finished writing successfully. Queue a notification manually. |
io_handler_->OnPendingWriteStartedNoLock(); |
- |
- io_handler_->write_stats_no_lock()->task_posted_by_schedule_write++; |
- stack_copy.task_posted_by_schedule_write++; |
- |
// |io_handler_| won't go away before that task is run, so it is safe to use |
// |base::Unretained()|. |
message_loop_for_io()->PostTask( |
@@ -607,16 +515,16 @@ |
} |
bool RawChannelWin::OnInit() { |
- CHECK_EQ(base::MessageLoop::current(), message_loop_for_io()); |
+ DCHECK_EQ(base::MessageLoop::current(), message_loop_for_io()); |
- CHECK(handle_.is_valid()); |
+ DCHECK(handle_.is_valid()); |
if (skip_completion_port_on_success_ && |
!g_vista_or_higher_functions.Get().SetFileCompletionNotificationModes( |
handle_.get().handle, FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)) { |
return false; |
} |
- CHECK(!io_handler_); |
+ DCHECK(!io_handler_); |
io_handler_ = new RawChannelIOHandler(this, handle_.Pass()); |
return true; |
@@ -624,8 +532,8 @@ |
void RawChannelWin::OnShutdownNoLock(scoped_ptr<ReadBuffer> read_buffer, |
scoped_ptr<WriteBuffer> write_buffer) { |
- CHECK_EQ(base::MessageLoop::current(), message_loop_for_io()); |
- CHECK(io_handler_); |
+ DCHECK_EQ(base::MessageLoop::current(), message_loop_for_io()); |
+ DCHECK(io_handler_); |
write_lock().AssertAcquired(); |