Index: remoting/protocol/message_reader.cc |
diff --git a/remoting/protocol/message_reader.cc b/remoting/protocol/message_reader.cc |
index 6e3d5369bf2ca690b8e4d4ce740b176dbf30a4a9..5eae163a74ff5f7be277f97b9f3c76d3e2db8e53 100644 |
--- a/remoting/protocol/message_reader.cc |
+++ b/remoting/protocol/message_reader.cc |
@@ -90,6 +90,11 @@ void MessageReader::HandleReadResult(int result) { |
void MessageReader::OnDataReceived(net::IOBuffer* data, int data_size) { |
DCHECK(CalledOnValidThread()); |
+ |
+ base::TimeTicks now = base::TimeTicks::Now(); |
+ |
+ if (message_decoder_.is_buffer_empty()) |
+ last_message_started_time_ = now; |
message_decoder_.AddData(data, data_size); |
// Get list of all new messages first, and then call the callback |
@@ -99,16 +104,19 @@ void MessageReader::OnDataReceived(net::IOBuffer* data, int data_size) { |
if (!buffer) |
break; |
pending_messages_++; |
+ base::TimeDelta read_duration = now - last_message_started_time_; |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, |
- base::Bind(&MessageReader::RunCallback, |
- weak_factory_.GetWeakPtr(), |
- base::Passed(make_scoped_ptr(buffer)))); |
+ base::Bind(&MessageReader::RunCallback, weak_factory_.GetWeakPtr(), |
+ base::Passed(make_scoped_ptr(buffer)), read_duration)); |
+ last_message_started_time_ = now; |
} |
} |
-void MessageReader::RunCallback(scoped_ptr<CompoundBuffer> message) { |
- if (!message_received_callback_.is_null()){ |
+void MessageReader::RunCallback(scoped_ptr<CompoundBuffer> message, |
+ base::TimeDelta read_duration) { |
+ last_message_read_duration_ = read_duration; |
+ if (!message_received_callback_.is_null()) { |
message_received_callback_.Run( |
message.Pass(), |
base::Bind(&MessageReader::OnMessageDone, weak_factory_.GetWeakPtr())); |