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

Unified Diff: remoting/host/screen_recorder.cc

Issue 9720019: Use scoped_ptr<> to pass ownership in more places. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 8 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: remoting/host/screen_recorder.cc
diff --git a/remoting/host/screen_recorder.cc b/remoting/host/screen_recorder.cc
index e332f278c257d4e7acdebb1106b40648e91e1ccf..de17940767b7496e48c6c46957c37ff82b353e47 100644
--- a/remoting/host/screen_recorder.cc
+++ b/remoting/host/screen_recorder.cc
@@ -234,42 +234,30 @@ void ScreenRecorder::DoInvalidateFullScreen() {
// Network thread --------------------------------------------------------------
-void ScreenRecorder::DoSendVideoPacket(VideoPacket* packet) {
+void ScreenRecorder::DoSendVideoPacket(scoped_ptr<VideoPacket> packet) {
DCHECK(network_loop_->BelongsToCurrentThread());
- bool last = (packet->flags() & VideoPacket::LAST_PARTITION) != 0;
-
- if (network_stopped_ || connections_.empty()) {
- delete packet;
+ if (network_stopped_ || connections_.empty())
return;
- }
- for (ConnectionToClientList::const_iterator i = connections_.begin();
- i < connections_.end(); ++i) {
- base::Closure done_task;
-
- // Call FrameSentCallback() only for the last packet in the first
- // connection.
- if (last && i == connections_.begin()) {
- done_task = base::Bind(&ScreenRecorder::FrameSentCallback, this, packet);
- } else {
- // TODO(hclam): Fix this code since it causes multiple deletion if there's
- // more than one connection.
- done_task = base::Bind(&base::DeletePointer<VideoPacket>, packet);
- }
-
- (*i)->video_stub()->ProcessVideoPacket(packet, done_task);
- }
+ // TODO(sergeyu): Currently we send the data only to the first
+ // connection. Send it to all connections if necessary.
+ connections_.front()->video_stub()->ProcessVideoPacket(
+ packet.get(), base::Bind(
+ &ScreenRecorder::VideoPacketSentCallback, this,
+ base::Passed(packet.Pass())));
}
-void ScreenRecorder::FrameSentCallback(VideoPacket* packet) {
- delete packet;
-
+void ScreenRecorder::VideoPacketSentCallback(scoped_ptr<VideoPacket> packet) {
if (network_stopped_)
return;
- capture_loop_->PostTask(
- FROM_HERE, base::Bind(&ScreenRecorder::DoFinishOneRecording, this));
+ if ((packet->flags() & VideoPacket::LAST_PARTITION) != 0) {
+ // Post DoFinishOneRecording() if that was the last packet for the
+ // frame.
+ capture_loop_->PostTask(
+ FROM_HERE, base::Bind(&ScreenRecorder::DoFinishOneRecording, this));
+ }
}
void ScreenRecorder::DoStopOnNetworkThread(const base::Closure& done_task) {
@@ -297,11 +285,11 @@ void ScreenRecorder::DoEncode(
// Early out if there's nothing to encode.
if (!capture_data || capture_data->dirty_region().isEmpty()) {
// Send an empty video packet to keep network active.
- VideoPacket* packet = new VideoPacket();
+ scoped_ptr<VideoPacket> packet(new VideoPacket());
packet->set_flags(VideoPacket::LAST_PARTITION);
network_loop_->PostTask(
FROM_HERE, base::Bind(&ScreenRecorder::DoSendVideoPacket,
- this, packet));
+ this, base::Passed(packet.Pass())));
return;
}
@@ -322,7 +310,8 @@ void ScreenRecorder::DoStopOnEncodeThread(const base::Closure& done_task) {
capture_loop_->PostTask(FROM_HERE, done_task);
}
-void ScreenRecorder::EncodedDataAvailableCallback(VideoPacket* packet) {
+void ScreenRecorder::EncodedDataAvailableCallback(
+ scoped_ptr<VideoPacket> packet) {
DCHECK_EQ(encode_loop_, MessageLoop::current());
if (encoder_stopped_)
@@ -338,7 +327,8 @@ void ScreenRecorder::EncodedDataAvailableCallback(VideoPacket* packet) {
}
network_loop_->PostTask(
- FROM_HERE, base::Bind(&ScreenRecorder::DoSendVideoPacket, this, packet));
+ FROM_HERE, base::Bind(&ScreenRecorder::DoSendVideoPacket, this,
+ base::Passed(packet.Pass())));
}
} // namespace remoting

Powered by Google App Engine
This is Rietveld 408576698