| Index: webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc | 
| diff --git a/webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc b/webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc | 
| index 7f52a8717f3e1fd858a968a03c00f08af7698625..b164b7e04c0c2a105463ccbdd76ac841716e763c 100644 | 
| --- a/webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc | 
| +++ b/webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc | 
| @@ -22,10 +22,10 @@ | 
| #include <list> | 
|  | 
| #include "testing/gtest/include/gtest/gtest.h" | 
| +#include "webrtc/base/random.h" | 
| +#include "webrtc/modules/rtp_rtcp/source/byte_io.h" | 
| #include "webrtc/modules/rtp_rtcp/source/forward_error_correction.h" | 
| #include "webrtc/modules/rtp_rtcp/source/forward_error_correction_internal.h" | 
| - | 
| -#include "webrtc/modules/rtp_rtcp/source/byte_io.h" | 
| #include "webrtc/test/testsupport/fileutils.h" | 
|  | 
| // #define VERBOSE_OUTPUT | 
| @@ -40,30 +40,31 @@ using fec_private_tables::kPacketMaskBurstyTbl; | 
| void ReceivePackets( | 
| ForwardErrorCorrection::ReceivedPacketList* toDecodeList, | 
| ForwardErrorCorrection::ReceivedPacketList* receivedPacketList, | 
| -    uint32_t numPacketsToDecode, | 
| +    size_t numPacketsToDecode, | 
| float reorderRate, | 
| -    float duplicateRate) { | 
| +    float duplicateRate, | 
| +    Random* random) { | 
| assert(toDecodeList->empty()); | 
| assert(numPacketsToDecode <= receivedPacketList->size()); | 
|  | 
| ForwardErrorCorrection::ReceivedPacketList::iterator it; | 
| -  for (uint32_t i = 0; i < numPacketsToDecode; i++) { | 
| +  for (size_t i = 0; i < numPacketsToDecode; i++) { | 
| it = receivedPacketList->begin(); | 
| // Reorder packets. | 
| -    float randomVariable = static_cast<float>(rand()) / RAND_MAX; | 
| +    float randomVariable = random->Rand<float>(); | 
| while (randomVariable < reorderRate) { | 
| ++it; | 
| if (it == receivedPacketList->end()) { | 
| --it; | 
| break; | 
| } | 
| -      randomVariable = static_cast<float>(rand()) / RAND_MAX; | 
| +      randomVariable = random->Rand<float>(); | 
| } | 
| ForwardErrorCorrection::ReceivedPacket* receivedPacket = *it; | 
| toDecodeList->push_back(receivedPacket); | 
|  | 
| // Duplicate packets. | 
| -    randomVariable = static_cast<float>(rand()) / RAND_MAX; | 
| +    randomVariable = random->Rand<float>(); | 
| while (randomVariable < duplicateRate) { | 
| ForwardErrorCorrection::ReceivedPacket* duplicatePacket = | 
| new ForwardErrorCorrection::ReceivedPacket; | 
| @@ -74,7 +75,7 @@ void ReceivePackets( | 
| duplicatePacket->pkt->length = receivedPacket->pkt->length; | 
|  | 
| toDecodeList->push_back(duplicatePacket); | 
| -      randomVariable = static_cast<float>(rand()) / RAND_MAX; | 
| +      randomVariable = random->Rand<float>(); | 
| } | 
| receivedPacketList->erase(it); | 
| } | 
| @@ -125,7 +126,7 @@ TEST(FecTest, FecTest) { | 
| // Seed the random number generator, storing the seed to file in order to | 
| // reproduce past results. | 
| const unsigned int randomSeed = static_cast<unsigned int>(time(NULL)); | 
| -  srand(randomSeed); | 
| +  Random random(randomSeed); | 
| std::string filename = webrtc::test::OutputPath() + "randomSeedLog.txt"; | 
| FILE* randomSeedFile = fopen(filename.c_str(), "a"); | 
| fprintf(randomSeedFile, "%u\n", randomSeed); | 
| @@ -133,8 +134,8 @@ TEST(FecTest, FecTest) { | 
| randomSeedFile = NULL; | 
|  | 
| uint16_t seqNum = 0; | 
| -  uint32_t timeStamp = static_cast<uint32_t>(rand()); | 
| -  const uint32_t ssrc = static_cast<uint32_t>(rand()); | 
| +  uint32_t timeStamp = random.Rand<uint32_t>(); | 
| +  const uint32_t ssrc = random.Rand(1u, 0xfffffffe); | 
|  | 
| // Loop over the mask types: random and bursty. | 
| for (int mask_type_idx = 0; mask_type_idx < kNumFecMaskTypes; | 
| @@ -227,16 +228,15 @@ TEST(FecTest, FecTest) { | 
| for (uint32_t i = 0; i < numMediaPackets; ++i) { | 
| mediaPacket = new ForwardErrorCorrection::Packet; | 
| mediaPacketList.push_back(mediaPacket); | 
| -              mediaPacket->length = static_cast<size_t>( | 
| -                  (static_cast<float>(rand()) / RAND_MAX) * | 
| -                  (IP_PACKET_SIZE - 12 - 28 - | 
| -                   ForwardErrorCorrection::PacketOverhead())); | 
| -              if (mediaPacket->length < 12) { | 
| -                mediaPacket->length = 12; | 
| -              } | 
| +              const uint32_t kMinPacketSize = 12; | 
| +              const uint32_t kMaxPacketSize = static_cast<uint32_t>( | 
| +                  IP_PACKET_SIZE - 12 - 28 - | 
| +                  ForwardErrorCorrection::PacketOverhead()); | 
| +              mediaPacket->length = random.Rand(kMinPacketSize, kMaxPacketSize); | 
| + | 
| // Generate random values for the first 2 bytes. | 
| -              mediaPacket->data[0] = static_cast<uint8_t>(rand() % 256); | 
| -              mediaPacket->data[1] = static_cast<uint8_t>(rand() % 256); | 
| +              mediaPacket->data[0] = random.Rand<uint8_t>(); | 
| +              mediaPacket->data[1] = random.Rand<uint8_t>(); | 
|  | 
| // The first two bits are assumed to be 10 by the | 
| // FEC encoder. In fact the FEC decoder will set the | 
| @@ -261,7 +261,7 @@ TEST(FecTest, FecTest) { | 
| ByteWriter<uint32_t>::WriteBigEndian(&mediaPacket->data[8], ssrc); | 
| // Generate random values for payload | 
| for (size_t j = 12; j < mediaPacket->length; ++j) { | 
| -                mediaPacket->data[j] = static_cast<uint8_t>(rand() % 256); | 
| +                mediaPacket->data[j] = random.Rand<uint8_t>(); | 
| } | 
| seqNum++; | 
| } | 
| @@ -284,8 +284,7 @@ TEST(FecTest, FecTest) { | 
| while (mediaPacketListItem != mediaPacketList.end()) { | 
| mediaPacket = *mediaPacketListItem; | 
| // We want a value between 0 and 1. | 
| -              const float lossRandomVariable = | 
| -                  (static_cast<float>(rand()) / (RAND_MAX)); | 
| +              const float lossRandomVariable = random.Rand<float>(); | 
|  | 
| if (lossRandomVariable >= lossRate[lossRateIdx]) { | 
| mediaLossMask[mediaPacketIdx] = 1; | 
| @@ -310,8 +309,7 @@ TEST(FecTest, FecTest) { | 
| uint32_t fecPacketIdx = 0; | 
| while (fecPacketListItem != fecPacketList.end()) { | 
| fecPacket = *fecPacketListItem; | 
| -              const float lossRandomVariable = | 
| -                  (static_cast<float>(rand()) / (RAND_MAX)); | 
| +              const float lossRandomVariable = random.Rand<float>(); | 
| if (lossRandomVariable >= lossRate[lossRateIdx]) { | 
| fecLossMask[fecPacketIdx] = 1; | 
| receivedPacket = new ForwardErrorCorrection::ReceivedPacket; | 
| @@ -382,15 +380,11 @@ TEST(FecTest, FecTest) { | 
| // For error-checking frame completion. | 
| bool fecPacketReceived = false; | 
| while (!receivedPacketList.empty()) { | 
| -              uint32_t numPacketsToDecode = static_cast<uint32_t>( | 
| -                  (static_cast<float>(rand()) / RAND_MAX) * | 
| -                      receivedPacketList.size() + | 
| -                  0.5); | 
| -              if (numPacketsToDecode < 1) { | 
| -                numPacketsToDecode = 1; | 
| -              } | 
| +              size_t numPacketsToDecode = random.Rand( | 
| +                  1u, static_cast<uint32_t>(receivedPacketList.size())); | 
| ReceivePackets(&toDecodeList, &receivedPacketList, | 
| -                             numPacketsToDecode, reorderRate, duplicateRate); | 
| +                             numPacketsToDecode, reorderRate, duplicateRate, | 
| +                             &random); | 
|  | 
| if (fecPacketReceived == false) { | 
| ForwardErrorCorrection::ReceivedPacketList::iterator | 
|  |