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

Side by Side Diff: ipc/ipc_sync_message_filter.cc

Issue 1840053002: Add tracing events to track sync ipc blocker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: +SyncMessageFilter Created 4 years, 8 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 unified diff | Download patch
« ipc/ipc_sync_channel.h ('K') | « ipc/ipc_sync_channel.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ipc/ipc_sync_message_filter.h" 5 #include "ipc/ipc_sync_message_filter.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 if (io_task_runner_.get()) { 52 if (io_task_runner_.get()) {
53 io_task_runner_->PostTask( 53 io_task_runner_->PostTask(
54 FROM_HERE, 54 FROM_HERE,
55 base::Bind(&SyncMessageFilter::SendOnIOThread, this, message)); 55 base::Bind(&SyncMessageFilter::SendOnIOThread, this, message));
56 } else { 56 } else {
57 pending_messages_.push_back(message); 57 pending_messages_.push_back(message);
58 } 58 }
59 } 59 }
60 60
61 base::WaitableEvent* events[2] = { shutdown_event_, &done_event }; 61 base::WaitableEvent* events[2] = { shutdown_event_, &done_event };
62 base::WaitableEvent::WaitMany(events, 2); 62 if (base::WaitableEvent::WaitMany(events, 2) == 1) {
63 TRACE_EVENT_FLOW_END0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"),
64 "SyncMessageFilter::Send", &done_event);
65 }
63 66
64 { 67 {
65 base::AutoLock auto_lock(lock_); 68 base::AutoLock auto_lock(lock_);
66 delete pending_message.deserializer; 69 delete pending_message.deserializer;
67 pending_sync_messages_.erase(&pending_message); 70 pending_sync_messages_.erase(&pending_message);
68 } 71 }
69 72
70 return pending_message.send_result; 73 return pending_message.send_result;
71 } 74 }
72 75
(...skipping 23 matching lines...) Expand all
96 99
97 bool SyncMessageFilter::OnMessageReceived(const Message& message) { 100 bool SyncMessageFilter::OnMessageReceived(const Message& message) {
98 base::AutoLock auto_lock(lock_); 101 base::AutoLock auto_lock(lock_);
99 for (PendingSyncMessages::iterator iter = pending_sync_messages_.begin(); 102 for (PendingSyncMessages::iterator iter = pending_sync_messages_.begin();
100 iter != pending_sync_messages_.end(); ++iter) { 103 iter != pending_sync_messages_.end(); ++iter) {
101 if (SyncMessage::IsMessageReplyTo(message, (*iter)->id)) { 104 if (SyncMessage::IsMessageReplyTo(message, (*iter)->id)) {
102 if (!message.is_reply_error()) { 105 if (!message.is_reply_error()) {
103 (*iter)->send_result = 106 (*iter)->send_result =
104 (*iter)->deserializer->SerializeOutputParameters(message); 107 (*iter)->deserializer->SerializeOutputParameters(message);
105 } 108 }
109 TRACE_EVENT_FLOW_BEGIN0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"),
110 "SyncMessageFilter::OnMessageReceived",
111 (*iter)->done_event);
106 (*iter)->done_event->Signal(); 112 (*iter)->done_event->Signal();
107 return true; 113 return true;
108 } 114 }
109 } 115 }
110 116
111 return false; 117 return false;
112 } 118 }
113 119
114 SyncMessageFilter::SyncMessageFilter(base::WaitableEvent* shutdown_event, 120 SyncMessageFilter::SyncMessageFilter(base::WaitableEvent* shutdown_event,
115 bool is_channel_send_thread_safe) 121 bool is_channel_send_thread_safe)
(...skipping 19 matching lines...) Expand all
135 SignalAllEvents(); 141 SignalAllEvents();
136 } 142 }
137 143
138 delete message; 144 delete message;
139 } 145 }
140 146
141 void SyncMessageFilter::SignalAllEvents() { 147 void SyncMessageFilter::SignalAllEvents() {
142 lock_.AssertAcquired(); 148 lock_.AssertAcquired();
143 for (PendingSyncMessages::iterator iter = pending_sync_messages_.begin(); 149 for (PendingSyncMessages::iterator iter = pending_sync_messages_.begin();
144 iter != pending_sync_messages_.end(); ++iter) { 150 iter != pending_sync_messages_.end(); ++iter) {
151 TRACE_EVENT_FLOW_BEGIN0(TRACE_DISABLED_BY_DEFAULT("ipc.flow"),
152 "SyncMessageFilter::SignalAllEvents",
153 (*iter)->done_event);
145 (*iter)->done_event->Signal(); 154 (*iter)->done_event->Signal();
146 } 155 }
147 } 156 }
148 157
149 } // namespace IPC 158 } // namespace IPC
OLDNEW
« ipc/ipc_sync_channel.h ('K') | « ipc/ipc_sync_channel.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698