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

Side by Side Diff: media/cast/test/utility/udp_proxy.cc

Issue 229503002: Cast: Make castv2 mirroring performance test run again (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments addressed Created 6 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "media/cast/test/utility/udp_proxy.h" 5 #include "media/cast/test/utility/udp_proxy.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/linked_ptr.h" 8 #include "base/memory/linked_ptr.h"
9 #include "base/rand_util.h" 9 #include "base/rand_util.h"
10 #include "base/synchronization/waitable_event.h" 10 #include "base/synchronization/waitable_event.h"
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 public: 403 public:
404 UDPProxyImpl(const net::IPEndPoint& local_port, 404 UDPProxyImpl(const net::IPEndPoint& local_port,
405 const net::IPEndPoint& destination, 405 const net::IPEndPoint& destination,
406 scoped_ptr<PacketPipe> to_dest_pipe, 406 scoped_ptr<PacketPipe> to_dest_pipe,
407 scoped_ptr<PacketPipe> from_dest_pipe, 407 scoped_ptr<PacketPipe> from_dest_pipe,
408 net::NetLog* net_log) : 408 net::NetLog* net_log) :
409 local_port_(local_port), 409 local_port_(local_port),
410 destination_(destination), 410 destination_(destination),
411 proxy_thread_("media::cast::test::UdpProxy Thread"), 411 proxy_thread_("media::cast::test::UdpProxy Thread"),
412 to_dest_pipe_(to_dest_pipe.Pass()), 412 to_dest_pipe_(to_dest_pipe.Pass()),
413 from_dest_pipe_(to_dest_pipe.Pass()), 413 from_dest_pipe_(to_dest_pipe.Pass()) {
414 start_event_(false, false) {
415 proxy_thread_.StartWithOptions( 414 proxy_thread_.StartWithOptions(
416 base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); 415 base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
416 base::WaitableEvent start_event(false, false);
417 proxy_thread_.message_loop_proxy()->PostTask( 417 proxy_thread_.message_loop_proxy()->PostTask(
418 FROM_HERE, 418 FROM_HERE,
419 base::Bind(&UDPProxyImpl::Start, 419 base::Bind(&UDPProxyImpl::Start,
420 base::Unretained(this), 420 base::Unretained(this),
421 base::Unretained(&start_event),
421 net_log)); 422 net_log));
422 start_event_.Wait(); 423 start_event.Wait();
423 } 424 }
424 425
425 void Start(net::NetLog* net_log) { 426 virtual ~UDPProxyImpl() {
427 base::WaitableEvent stop_event(false, false);
428 proxy_thread_.message_loop_proxy()->PostTask(
429 FROM_HERE,
430 base::Bind(&UDPProxyImpl::Stop,
431 base::Unretained(this),
432 base::Unretained(&stop_event)));
433 stop_event.Wait();
434 proxy_thread_.Stop();
435 }
436
437 private:
438 void Start(base::WaitableEvent* start_event,
439 net::NetLog* net_log) {
426 socket_.reset(new net::UDPSocket(net::DatagramSocket::DEFAULT_BIND, 440 socket_.reset(new net::UDPSocket(net::DatagramSocket::DEFAULT_BIND,
427 net::RandIntCallback(), 441 net::RandIntCallback(),
428 net_log, 442 net_log,
429 net::NetLog::Source())); 443 net::NetLog::Source()));
430 BuildPipe(&to_dest_pipe_, new PacketSender(socket_.get(), &destination_)); 444 BuildPipe(&to_dest_pipe_, new PacketSender(socket_.get(), &destination_));
431 BuildPipe(&from_dest_pipe_, 445 BuildPipe(&from_dest_pipe_,
432 new PacketSender(socket_.get(), &return_address_)); 446 new PacketSender(socket_.get(), &return_address_));
433 to_dest_pipe_->InitOnIOThread(); 447 to_dest_pipe_->InitOnIOThread();
434 from_dest_pipe_->InitOnIOThread(); 448 from_dest_pipe_->InitOnIOThread();
435 449
436 VLOG(0) << "From:" << local_port_.ToString(); 450 VLOG(0) << "From:" << local_port_.ToString();
437 VLOG(0) << "To:" << destination_.ToString(); 451 VLOG(0) << "To:" << destination_.ToString();
438 452
439 CHECK_GE(socket_->Bind(local_port_), 0); 453 CHECK_GE(socket_->Bind(local_port_), 0);
440 454
441 start_event_.Signal(); 455 start_event->Signal();
442 PollRead(); 456 PollRead();
443 } 457 }
444 458
445 virtual ~UDPProxyImpl() { 459 void Stop(base::WaitableEvent* stop_event) {
446 proxy_thread_.Stop(); 460 to_dest_pipe_.reset(NULL);
461 from_dest_pipe_.reset(NULL);
462 socket_.reset(NULL);
463 stop_event->Signal();
447 } 464 }
448 465
449 void ProcessPacket(scoped_refptr<net::IOBuffer> recv_buf, 466 void ProcessPacket(scoped_refptr<net::IOBuffer> recv_buf,
450 int len) { 467 int len) {
451 DCHECK_NE(len, net::ERR_IO_PENDING); 468 DCHECK_NE(len, net::ERR_IO_PENDING);
452 VLOG(1) << "Got packet, len = " << len; 469 VLOG(1) << "Got packet, len = " << len;
453 if (len < 0) { 470 if (len < 0) {
454 LOG(WARNING) << "Socket read error: " << len; 471 LOG(WARNING) << "Socket read error: " << len;
455 return; 472 return;
456 } 473 }
(...skipping 24 matching lines...) Expand all
481 &recv_address_, 498 &recv_address_,
482 base::Bind(&UDPProxyImpl::ReadCallback, 499 base::Bind(&UDPProxyImpl::ReadCallback,
483 base::Unretained(this), 500 base::Unretained(this),
484 recv_buf)); 501 recv_buf));
485 if (len == net::ERR_IO_PENDING) 502 if (len == net::ERR_IO_PENDING)
486 break; 503 break;
487 ProcessPacket(recv_buf, len); 504 ProcessPacket(recv_buf, len);
488 } 505 }
489 } 506 }
490 507
491 private: 508
492 net::IPEndPoint local_port_; 509 net::IPEndPoint local_port_;
493 net::IPEndPoint destination_; 510 net::IPEndPoint destination_;
494 net::IPEndPoint recv_address_; 511 net::IPEndPoint recv_address_;
495 net::IPEndPoint return_address_; 512 net::IPEndPoint return_address_;
496 base::Thread proxy_thread_; 513 base::Thread proxy_thread_;
497 scoped_ptr<net::UDPSocket> socket_; 514 scoped_ptr<net::UDPSocket> socket_;
498 scoped_ptr<PacketPipe> to_dest_pipe_; 515 scoped_ptr<PacketPipe> to_dest_pipe_;
499 scoped_ptr<PacketPipe> from_dest_pipe_; 516 scoped_ptr<PacketPipe> from_dest_pipe_;
500 base::WaitableEvent start_event_;
501 scoped_ptr<transport::Packet> packet_; 517 scoped_ptr<transport::Packet> packet_;
502 }; 518 };
503 519
504 scoped_ptr<UDPProxy> UDPProxy::Create( 520 scoped_ptr<UDPProxy> UDPProxy::Create(
505 const net::IPEndPoint& local_port, 521 const net::IPEndPoint& local_port,
506 const net::IPEndPoint& destination, 522 const net::IPEndPoint& destination,
507 scoped_ptr<PacketPipe> to_dest_pipe, 523 scoped_ptr<PacketPipe> to_dest_pipe,
508 scoped_ptr<PacketPipe> from_dest_pipe, 524 scoped_ptr<PacketPipe> from_dest_pipe,
509 net::NetLog* net_log) { 525 net::NetLog* net_log) {
510 scoped_ptr<UDPProxy> ret(new UDPProxyImpl(local_port, 526 scoped_ptr<UDPProxy> ret(new UDPProxyImpl(local_port,
511 destination, 527 destination,
512 to_dest_pipe.Pass(), 528 to_dest_pipe.Pass(),
513 from_dest_pipe.Pass(), 529 from_dest_pipe.Pass(),
514 net_log)); 530 net_log));
515 return ret.Pass(); 531 return ret.Pass();
516 } 532 }
517 533
518 } // namespace test 534 } // namespace test
519 } // namespace cast 535 } // namespace cast
520 } // namespace media 536 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/test/utility/standalone_cast_environment.cc ('k') | media/cast/video_receiver/video_receiver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698